Skip to content

Modular AirStack 3/9: reference stacks (wrap form), --stack dispatch, single-locus lint - #390

Open
andrewjong wants to merge 4 commits into
rfc/s2-module-cli-layersfrom
rfc/s3-stacks-wrap
Open

Modular AirStack 3/9: reference stacks (wrap form), --stack dispatch, single-locus lint#390
andrewjong wants to merge 4 commits into
rfc/s2-module-cli-layersfrom
rfc/s3-stacks-wrap

Conversation

@andrewjong

Copy link
Copy Markdown
Member

Stacked PR — merge the stack bottom-up with merge commits (squash-merging a lower PR orphans the commits every higher PR builds on). When the PR below merges, GitHub retargets this one to develop automatically. Each PR bumps VERSION (0.20.0-alpha.N), so check-version-increment passes at every level and each merge publishes images.

Stack 3/9 · base: rfc/s2-module-cli-layers

Stacks land: self-contained topology folders that make the launch graph a reviewable artifact. This PR introduces them in wrap form — graph-neutral by construction — so the flatten steps later in the stack can be gated on wiring equality.

What's inside

  • stacks/ reference folders (full_default, full_droan_cpu, full_macvo): pinned modules.repos, an XML entry launch file, compose stub, README, and a CI-observed wiring.md baseline each.
  • airstack up --stack <name> dispatch via AIRSTACK_STACK_DIR/AIRSTACK_STACK_ENTRY, coexisting with the (then-current) role path.
  • Single-locus wiring lint as a unit-mark contract test with a frozen, shrink-only allowlist of grandfathered files — error-on-new from day one. write-launch-file skill rewritten in the same change.
  • Reusable module CI gains the module lock --build step so tier-2 module Dockerfiles are actually built in CI.

Validation

  • Machine-proven graph identity: full_default vs the legacy full role — wiring diff identical: true on live Isaac bring-ups.
  • Legacy liveliness AND --stack full_default liveliness+wiring green in one session; takeoff/hover/land green on the stack path.

🤖 Generated with Claude Code

andrewjong and others added 4 commits August 22, 2026 04:02
…, single-locus lint

- stacks/{full_default,full_droan_cpu,full_macvo}: self-contained stack
  folders (modules.repos w/ airstack_compat, flat wrap-form stack.launch.xml,
  compose stub, README). full_macvo FIXES the broken
  local_macvo_obstacle_avoidance.launch.xml wiring in the stack file
  (correct local_-prefixed args, real perception/macvo/disparity topic,
  launch_macvo actually enabled) — collapses the local_* variant explosion
  into named stacks differing by include lines
- robot.launch.xml: stack_dir/stack_entry env-default args; stack group
  replaces role groups when AIRSTACK_STACK_DIR set; legacy role path
  byte-preserved. Compose: stacks/ volume + env passthrough in robot-base
- airstack up --stack <name>[:<entry>]: host-side validation, container-path
  exports, effective-config lines; AUTONOMY_ROLE deprecation warning
- single-locus launch lint (unit mark): no remaps outside stacks/*/launch/,
  frozen shrink-only allowlist (19 grandfathered files), description=
  required on stack args. write-launch-file skill rewritten same commit
  (canonical-default args, never remap in module files)
- wiring mark is stack-aware: --stack makes the golden stacks/<name>/wiring.md
- docs/development/stacks.md + nav; 8 new launch-intent contract tests

Unit suite: 294 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Captured from live isaacsim bring-ups @ d02a346:
- full_default: 83 nodes / 405 edges — diff vs the legacy AUTONOMY_ROLE=full
  golden is IDENTICAL (machine-proven wrap-form equivalence)
- full_droan_cpu: 84 nodes / 419 edges (CPU droan + live disparity_expansion)
- full_macvo: 84 nodes / 407 edges — first working MACVO topology: droan's
  disparity_expander subscribes /perception/macvo/disparity (the wiring the
  broken legacy variant never achieved)

These are the E2 flatten gates: the refactor must reproduce these graphs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gap found by the asm_macvo extraction: the workflow ran module add/sync (layer
plan only) but never 'module lock --build', so tier-2/3 Dockerfile.module /
overlay layers went unbuilt and untested in module CI. The build step runs
after trunk image-ensure (the chain builds FROM those bases); the zero-module
identity rule keeps it a no-op for dep-free modules.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Test Metrics — dd9d0ed08b973a637541cc3a875e517a597f13e6

No metrics report generated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant