From 1c1fea09a103472a85d695bab862aecbfce6d67b Mon Sep 17 00:00:00 2001 From: Andrew Jong Date: Fri, 11 Sep 2026 01:52:30 -0400 Subject: [PATCH] docs(modules): document sidecar services in compose fragments Follow-up to #426: the overlay absolutizes a fragment's build.context / build.dockerfile / env_file paths, so a module may declare a whole sidecar service (the raven module's RayFronts container is the first). The paragraph was written alongside #426 but did not land on its branch. Co-Authored-By: Claude Fable 5.1 --- .env | 2 +- docs/development/modules.md | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 070b957f6..92681941f 100644 --- a/.env +++ b/.env @@ -12,7 +12,7 @@ PROJECT_NAME="airstack" # If you've run ./airstack.sh setup, then this will auto-generate from the git commit hash every time a change is made # to a Dockerfile or docker-compose.yaml file. Otherwise this can also be set explicitly to make a release version. # auto-generated from git commit hash -VERSION="0.21.0-dev.14" +VERSION="0.21.0-dev.15" # Image-tag discriminator ONLY (appears in the image tag suffix, e.g. ..._robot-x86-64_dev). # No Dockerfile consumes it: "prebuilt" does NOT bake the built ros_ws into the image today — # a real prebuilt (workspace-baked) stage is future work. Keep "dev" (mounted code, built live). diff --git a/docs/development/modules.md b/docs/development/modules.md index 48acd919b..69543d4bd 100644 --- a/docs/development/modules.md +++ b/docs/development/modules.md @@ -124,10 +124,15 @@ Placement is driven by the manifest's `type` and `targets`: `sys.path.insert(0, os.environ.get("AIRSTACK_LAUNCH_SCRIPTS_DIR", "/isaac-sim/AirStack/simulation/isaac-sim/launch_scripts"))` instead of baking in the mount path. - **`compose:` fragments** (any type) — the fragment's `services:` are merged - into the generated file, with relative host paths rewritten to absolute - (compose resolves relative bind sources against different bases depending on - how files are merged; the generated file is machine-local and regenerated on - every sync, so absolute is the unambiguous choice). + into the generated file, with relative host paths rewritten to absolute: + bind-mount sources, `build.context` / `build.dockerfile`, and `env_file` + entries (compose resolves relative paths against different bases depending + on how files are merged; the generated file is machine-local and regenerated + on every sync, so absolute is the unambiguous choice). A fragment may + therefore declare a whole **sidecar service** with its own `build:` section + — a second container next to the robot, built on first `airstack up` — which + is how the `raven` module runs its GPU-heavy RayFronts mapper on the robot's + DDS domain without touching the robot image. - **`data`** — no overlay action yet (asset fetching lands with a later phase). Everything is idempotent: re-running `sync` converges, `module remove` (or