Modular AirStack 8/9: full-stack audit — deletions, dep purge, simple-sim, BSD-3-Clause-Clear - #395
Open
andrewjong wants to merge 15 commits into
Open
Modular AirStack 8/9: full-stack audit — deletions, dep purge, simple-sim, BSD-3-Clause-Clear#395andrewjong wants to merge 15 commits into
andrewjong wants to merge 15 commits into
Conversation
…dened commands From the four-domain rot audit (fix-now tier, CLI/toolchain): - .airstack/README.md rewritten — it documented a containerized-compose CLI that never existed (rebuild-cli, Dockerfile.airstack-cli) - ONE fleet pipeline: bridge-router generation moved into generate_fleet_compose.py (resolve-aware, covers <alias>/<stack> external stacks); airstack up --fleet and fleet generate share it; --dry-run no longer writes files - set -e dead error paths fixed (connect/logs/config); rmi rewritten off positional docker-images parsing; ready --json emits pure JSON on stdout; ready gates built from the resolved robot NAME (non-robot_N fleets no longer 10-min false-timeout) - help arms regenerated from reality (up/test/module/ready/sync/rmi) + a help-truth contract test; lint wired to real checks; format unregistered - .airstack/modules/_lib.sh: the 4 duplicated shell primitives deduped (python/yaml check ×5, container identity ×3, env-value ×4, discovery ×2) - .airstack/runs/ pruned to newest 50 (969-dir backlog cleared) - module sync warns when plan-only regeneration drops lock --build image overrides (containers silently ran the base image without module layers — bit the macvo wiring gate); deprecation shims annotated 'remove in 0.21.0' Unit suite: 273 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s, orphan purge From the four-domain rot audit (fix-now tier, robot domain): - robot_name_map regex: robots >=9 no longer collapse onto another robot's namespace/domain (robot 12 -> robot_2 before; contract-tested now) - robot_interface_node honors its 'interface' plugin parameter (was hardcoded to MAVROSInterface, silently discarding the param) - wiring baselines: JSON trailers compacted (30,406 -> 1,935 committed lines), full_droan_cpu's hand-copied title fixed + title==stack asserted, golden-node wait added (settle proves the graph stopped growing, not that it is complete — MAC-VO's model load raced the capture); all five baselines re-blessed drift-clean on GPU - full_macvo modules.repos: real HTTPS pin replaces the phantom v0.1.0 SSH placeholder - 13 orphan files deleted (ROS1 leftovers, byte-identical config dups, the caller-less domain-bridge machinery, .vscode dup); exploration package repaired (ament_package order, format-3 manifest, real deps) with its invalid ROS1 launch deleted - stack READMEs/headers: bootstrap-instruction contradictions removed, set_remap wording corrected in 10 module launch headers + the lint docstring, Dockerfile diagnostic block deleted + lying stage comments fixed, robot-test runs the whole workspace, .bashrc identity resolution deduped, rviz MACVO ghosts removed GPU-gated: default + 4 stack wiring drift-clean; heterogeneous fleet flight-ready 111s. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ile purge From the four-domain rot audit (fix-now tier, GCS + simulation): - action_relay is fleet-aware: roster from FLEET_CONFIG_FILE (mounted config/ + tools/fleet), ROBOT_RELAY_MAP env override, legacy NUM_ROBOTS byte-identical fallback; gcs container gains the fleet env + mounts - multi-drone runs get distinct PX4 GPS homes (PegasusApp anchors world_gps_origin for >1 drone; single-drone byte-unchanged) — verified live: three distinct coordinates matching the fleet spawn offsets; the GCS map no longer stacks the fleet on one point - sshd actually starts (gcs/simple-sim/zed services ran 'ssh service restart'); isaac .bashrc no longer clobbers persisted shell history - deleted: the retired domain-100 sim_to_robot_bridge.yaml, the inert gcs/docker/.env (wrong values), superseded robot-commands.foxe v1, unused fastrtps profile, committed bash histories teaching a deleted package, ms-airsim's bypassed bridge launch, simple-sim's stale duplicate launch - fleet_spawn honors per-vehicle camera flags; ENU-origin constants cross-referenced in all four copies; AIRSIM_* knobs plumbed through compose; devcontainer/gcs unbroken; gcs docs rewritten against reality; user_TEMPLATE asset_root 4.5 -> 5.1; .gitignore footguns scoped Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eginner funnel From the four-domain rot audit (fix-now tier, docs/tests/skills): - repo-wide broken links 81 -> 4 (all intentional placeholders); nav 404s fixed and made unrepeatable by a nav-existence contract test - CHANGELOG [Unreleased]: five entries advertising extracted/deleted things removed; the campaign's actual user-visible changes written up (stacks-only dispatch, module/fleet/doctor CLI, removals, image slimming) - repo-root README.md created (there was none); docs/README architecture refreshed post-RFC - beginner funnel taught the new canon: key_concepts gains stacks/modules/fleets, the CLI reference regenerated from real registrations (~35 commands), tutorials_reference repaired - tests/README: wiring + tests/meta + --stack/--fleet documented, wrong defaults fixed; tests/meta/README added - skills: use-airstack-cli + run-system-tests refreshed; frontmatter added to the two headless skills; NEW extract-module skill distilled from the three completed extractions; catalog sentence fixed + pages regenerated Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sensors trio, TAK, standalone examples Owner rulings on the full-stack audit (2026-08-21), all referrers scrubbed: - px4_interface + vendored px4_msgs: deleted pending a clean uXRCE-DDS platform-module design (#387); MAVROS remains the interface. - waypoint_interface, attitude_controller(+_msgs): dead code, no launch path referenced them. - GUI set: rviz_behavior_tree_panel (with xdot_cpp submodule), rqt_behavior_tree_command, rqt_gcs, rqt_airstack_control_panel, orphaned desktop_bringup perspectives — Foxglove is the GCS surface. - Sensors trio camera_param_server / gimbal_stabilizer / sensor_interfaces: hardware-specific packages will return as modules out of trunk (lidar_point_cloud_filter kept). - WinTAK/TAK: ros2tak_tools, TAK docs/assets, gcs Dockerfile TAK deps (pytak/mqtt/gstreamer); can return as a module if needed. - isaac-sim standalone_examples (11MB, upstream copies) and stale robot/docker/wait_for_px4.py + custom_rosdep.yaml. - exploration_planner KEPT by ruling: future Tasks-Panel-selectable geometric frontier planner; intent noted in its package.xml. Unit suite: 273 passed, 7 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sim-gui; demote prebuilt to tag-only; drop WinTAK CLI Owner rulings 9-12 from the full-stack audit: - simple-sim (John Keller's kinematic single-robot sim mocking the MAVROS surface): airstack up --sim simple maps to compose profile 'simple' and drops 'desktop' (simple-robot IS the robot container); harness gains SIM_CONFIG[simplesim] with per-sim compose_profiles/ robot_pattern (isaac/airsim byte-identical); new simple_sim mark + 4-test smoke chain (containers, /clock, mock-MAVROS odometry, sentinel nodes — MAVROS itself deliberately absent under SIM_TYPE=simple); collection guard skips mismatched sim/mark pairs before any bring-up. simple-sim docs rewritten truthfully from code (old pages described nonexistent config surfaces). - isaac-sim-gui: documented as the USD/scene-editing path (GUI editor, off airstack_network, not for flying). - DOCKER_IMAGE_BUILD_MODE=prebuilt: documented as tag-discriminator only; real prebuilt stage tracked as follow-up. - WinTAK CLI plumbing removed (.airstack/modules/wintak.sh, --with-wintak, install block) — ROS/doc side went in the audit deletions commit. Unit suite: 274 passed, 6 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ps (-152MB) Audit ruling 14 (+7). Removed from Dockerfile.robot: libcgal-dev; pips lxml, pkgconfig, pygments, toml, six, psutil, pymavlink, tqdm, rich, pillow; ros-jazzy-foxglove-bridge (GCS owns the bridge) and its 8767-8787 port range from the robot compose service. KEPT deliberately: libglm-dev/libglfw3-dev/assimp/opengl — droan_gl uses them, and they are now DECLARED in its package.xml plus an explicit named apt block in the runtime stage (previously they rode in implicitly). matplotlib==3.8.4 and scipy kept (in-tree consumers). Validated: image builds; 44/44 packages colcon-build in-container. 6.06GB -> 5.91GB. Module layers must declare their own runtime deps — asm_macvo's missing rich/tqdm surfaced by this purge, fixed module-side. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ch/tqdm Trunk's dep purge removed rich/tqdm from the base robot image; MAC-VO imports both on its core runtime path (they had been riding on trunk). asm_macvo@06f3a8c8 declares them in its Dockerfile.module; composed layer rebuilt and import-verified (rich 15.0.0, tqdm 4.70.0, torch ok, numpy re-pinned 1.26.4). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rs + descriptions everywhere Owner ruling 13 from the full-stack audit: - Root LICENSE (and 4 stray per-package Apache LICENSE files) -> BSD 3-Clause Clear, Copyright (c) 2023-2026 Carnegie Mellon University, AirLab. - 38 package.xmls: license tag set, placeholder maintainers (todo/root/ uav/airlab/@todo.todo) -> Andrew Jong <ajong@andrew.cmu.edu>, all TODO descriptions replaced with real ones written from each package's source. airstack_msgs promoted to 1.0.0. - Vendored packages KEEP their upstream licenses: ETH mav_* (ASL 2.0; two ship upstream 'TBD' — left matching upstream), rqt-derived packages (BSD), 3d_waypoint_rviz2_plugin (Apache-2.0); submodules untouched (vdb_mapping*, rviz_polygon_selection_tool). - 29 campaign-era '# MIT License' python headers -> SPDX BSD-3-Clause-Clear; 23 skill frontmatters; docs license mentions; module fixtures. - New meta contract test_package_metadata_contract.py (unit): every non-submodule package.xml must have a real description, real maintainer, non-empty license (value not asserted — vendored differ). - asm_* module repos + airstack-modules-index relicensed in lockstep; asm_macvo re-pinned to f0d19213 (metadata-only, layer cache-hit). Unit suite: 400 passed, 7 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ce the Jazzy migration The mounted bashrc still sourced /opt/ros/humble/setup.bash (gone since the Jazzy migration), so the at-startup colcon build of the sim workspace failed on ament_cmake and no sim node ever launched. Source jazzy in the bashrc (guarding the not-yet-built install/setup.bash) and explicitly in the compose startup command so the launch chain does not depend on the interactive rc file. Caught by the new simple_sim smoke mark on adoption: 4/4 passed, sim publishes /clock ~25s after up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…_macvo past its stale-import fix The harness hardcoded AIRSTACK_STACK_ENTRY=stack, so a split stack (lite_offload_global has only onboard/offboard entries) dispatched to a nonexistent entry and stranded the launch after the dispatcher preamble — the wiring sentinel gate caught it (mavros/trajectory_control never appeared). --stack now parses the same <name>[:<entry>] syntax as airstack up; airstack_env carries stack (entry stripped, so goldens and doctor lookups keep keying on the folder) plus a new stack_entry. asm_macvo re-pinned to 269ffc0b: macvo_node imported the trunk-deleted sensor_interfaces srv it never used (camera params arrive via a plain CameraInfo subscription) and crashed at startup — the full_macvo wiring gate caught the missing node. Wiring gates all green: full_default, full_droan_cpu, full_macvo, lite_default (2 passed each), lite_offload_global:onboard (2 passed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-set removal Owner-ruled follow-up to the audit deletions: with the rqt/rviz behavior-tree GUIs and their perspectives gone, this rqt-derived viewer (bundled Python xdot renderer + py_console) had no remaining referrer repo-wide. behavior_tree_msgs' GraphVizXdot messages stay — they are framework messages, published regardless of any viewer. rqt_py_template (John Keller's) stays. Clean rebuilds after removal: robot 44/44, gcs 16/16; unit suite 397 passed, 7 skipped (metadata contract re-counts automatically). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Promote the 0.19 series (intent-flag launch workflow, airstack ready, resolved-config preflight, OSMO ephemeral CI runners, OptiTrack external-vision configurations, feature-notebook workflow) out of pre-release: VERSION 0.19.0-alpha.18 -> 0.19.0; CHANGELOG [Unreleased] promoted to [0.19.0] - 2026-08-22. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…nd 0.20.0-alpha.8 Conflict resolutions: CHANGELOG.md keeps this branch's truthful rewrite (the 0.19.0 release history is preserved in docs/release_notes/index.md, which replaces CHANGELOG one PR up the stack); .env keeps this branch's VERSION bump. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> # Conflicts: # .env # CHANGELOG.md
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 8/9 · base:
rfc/s7-catalog-role-removalFull-stack audit, executed against 14 owner rulings: delete what's dead, declare what's implicit, relicense, and make the sims honest.
What's inside
px4_interface+vendoredpx4_msgs(uXRCE-DDS redesign tracked in Design: native PX4 uXRCE-DDS interface as a platform-module capability #387),waypoint_interface,attitude_controller(+msgs), the RQT/RViz GUI set (incl.rqt_gcs,rqt_behavior_tree,xdot_cppsubmodule), sensors trio (camera_param_server/gimbal_stabilizer/sensor_interfaces), WinTAK/TAK integration, Isaacstandalone_examples.airstack up --sim simple+ asimple_simsmoke mark — which immediately caught that the sim had been dead since the Jazzy migration (bashrc sourced Humble); fixed.rich/tqdm— fixed module-side and re-pinned (the module-boundary model working as intended).airstack_msgs1.0.0.--stackaccepts<name>[:<entry>]so split stacks are testable.Validation
🤖 Generated with Claude Code