Modular AirStack 1/9: wiring observability, module manifest, reusable module CI - #388
Open
andrewjong wants to merge 7 commits into
Open
Modular AirStack 1/9: wiring observability, module manifest, reusable module CI#388andrewjong wants to merge 7 commits into
andrewjong wants to merge 7 commits into
Conversation
…contract tests - common/module_schema/module.schema.json: thin-manifest schema per RFC #379 §2 (deps/identity/tests only — wiring deliberately absent), draft-07 subset with x-airstack-* annotations for semver-range/path-safety/existence checks - tools/validate_module.py: stdlib+PyYAML generic schema walker (no jsonschema dep); JSON verdict on stdout, exit 0/1; dir mode adds cross-file checks - tests/fixtures/modules/hello_module: minimal valid module (manifest + buildable ament_python package) for overlay/build phases - tests/meta/test_module_manifest_contract.py: 24 unit-mark contract tests - .agents/skills/create-module: by-hand module authoring skill (scaffolding CLI lands in a later phase) RFC: #379 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ollisions Back-to-back 'airstack up --dry-run' calls within one second landed in the same .airstack/runs/<ts>/ dir, making test_effective_config_dump_written flaky. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- tests/wiring_snapshot.py: stdlib-only capture/render/diff (ros2 node list + topic info --verbose parser, deterministic mermaid grouped by namespace, wiring.md with canonical-JSON trailer, graph differ; JSON verdict CLI) - tests/system/test_wiring_snapshot.py (new 'wiring' mark): batched per-robot graph capture via one docker exec per 40-topic chunk, node-set settle poll, golden drift gate at tests/goldens/wiring/ (bootstrap: pass + instruction when golden absent) - mark/module registrations in pytest.ini, harness/collection.py, harness/run_meta.py; 7 unit contract tests Per RFC #379 §4.4 — the wiring picture is snapshotted from the running system; goldens move into stacks/<name>/wiring.md at P5. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- .github/workflows/module-system-tests.yml: first on:workflow_call workflow — a module repo's entire CI calls this (checkout trunk @ airstack_ref, checkout module w/ submodules, validate manifest, airstack module add/sync, image pull/retag/build fallback, airstack test -m "<marks>", run_meta honesty gate, artifacts). workflow_dispatch path for trunk-side smoke tests against any module repo. First-party (castacks) callers only; external modules wait for the deferred dispatch test bench. - docs/development/module_ci.md: caller snippet, inputs/secrets, RFC §5 mark guidance per module category, cost ladder, canary cron snippet - orchestrator README: how to add an asm_ module repo to the runner poll list Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- exclude _CREATED_BY_BARE_DDS_APP_ phantom participants (bare-DDS apps: sim bridges, uXRCE agents) from the normalized graph - source-sha provenance falls back to reading .git/HEAD directly (tests container has no git binary) - bless tests/goldens/wiring/full_default.isaacsim.1robot.md, captured from a live isaacsim bring-up @ 5c6c4a4 (83 nodes) and verified drift-clean against a second independent bring-up Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Test Metrics —
|
This was referenced Aug 22, 2026
Merged
.env VERSION conflict resolved in favor of this branch's bump; the CHANGELOG [0.19.0] promotion merges through untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> # Conflicts: # .env
Contributor
Test Metrics —
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack 1/9 · base:
developLays the observability and contract foundations for Modular AirStack (RFC #379) before any behavior changes: you can't safely restructure a launch graph you can't diff.
What's inside
tests/wiring_snapshot.py, stdlib-only): captures the running ROS graph (nodes, pub/sub edges, types, QoS) via batchedros2 topic info --verbose, renders mermaid, and diffs against a committed golden. Newwiringsystem-test mark + drift check; first golden captured from the then-currentAUTONOMY_ROLE=fulltopology.module.yamlmanifest schema (common/module_schema/module.schema.json) +tools/validate_module.py+ ahello_modulefixture and unit-mark contract tests. Manifests carry identity/deps/assets/hooks only — never wiring..github/workflows/module-system-tests.yml, firstworkflow_callworkflow in the repo): external module repos run trunk's own harness against a pinned trunk ref on the ephemeral GPU runners; same-repo/org callers only.Validation
wiringmark green on Isaac Sim (snapshot + drift check); goldens stable across repeated bring-ups after excluding timing-dependent sim render-pipeline nodes.🤖 Generated with Claude Code