This running log captures progress and decisions to help resume quickly.
-
Repo baseline prepared:
- Created
trunkempty baseline andlegacy-2025-08worktree + taglegacy-pre-arch-2025-08. - Home cleanup: established
alpha_wsas the canonical workspace.
- Created
-
Scaffolding:
- Added agents doc kit; seeded AGENTS; wired index + validation.
- Added
alpha_utils(msgs/srvs) andalpha_bringup(config manager + startup sequencer). - Added
alpha_lidar_airy(C++):reorder_node,mode_service_node(dry-run by default). - Added
alpha_mappingskeleton with provider interface header. - Added
alpha_observabilitySLO publisher (placeholder). - Added
alpha_mode_managerandalpha_orchestratorskeleton nodes. - Added
alpha_configsYAMLs per roadmap;deploy/skeleton. - CI: GitHub Actions for docs validation + ROS 2 Humble build.
-
Launch:
alpha_bringup/launch/startup.launch.pystarts config manager, sequencer, lidar nodes, mode manager, orchestrator.- Added time sync preflight gate and SLO publisher to launch.
- Added comms degrade manager to launch.
-
alpha_lidar_airy:
- Added Python package with two nodes:
mode_service_node: serves/alpha/ui/cmd/lidar_mode(dry-run or HTTP). Publishes/alpha/lidar/stateat 2 Hz.reorder_node: skeleton pass-through for now; subscribes to/alpha/lidar/*/points_raw, republishes to/alpha/lidar/*/points; logs angle table SHA if present.
- Updated
alpha_configs/lidar_airy.yamlto include HTTP endpoint stubs (http.endpoints.run/standby). - Added
alpha_configs/airy_vertical_angles.csvto repo and pointed config at it; reorder resolves relative to config dir. - Launch wiring already present; parameters
http_enabledandhttp_timeout_secsupported.
- Added Python package with two nodes:
-
alpha_mapping:
- Added minimal C++
nvbloxdummy node subscribing to/alpha/lidar/{front,rear}/pointsto scaffold provider wiring. - Added
mapping_nodethat readsmapping_provider.yaml, subscribes to configured LiDAR topics, and routes clouds to a dummy provider (implementsIMappingProvider). - Startup sequence now launches
alpha_mapping mapping_nodeafter LiDAR spin-up. - Added pluginlib-based provider loading; implemented placeholder
NvbloxProviderplugin and description.mapping_nodetriesalpha_mapping/NvbloxProviderthen falls back to Dummy. - Build targets:
alpha_mapping:nvblox,alpha_mapping:mapping_node,alpha_mapping:nvblox_provider.
- Added minimal C++
-
alpha_mode_manager:
- Upgraded Python node to read
alpha_configs/modes.yaml(base mode, overlays, exclusive list). - Added guard checks for entering
MAPPINGoverlay via/alpha/time_sync/preflight_gateand/alpha_calibration_tools/tf_ok(std_srvs/Trigger), controlled byenforce_guards. - Clears overlays on exclusive base modes (
FAILSAFE,DOCKING,RTH_TOPO). Publishes state every second and immediately on change. - Launch now passes
modes_configandenforce_guards.
- Upgraded Python node to read
-
Config validation:
- ConfigManager validates YAMLs against JSON Schemas when present (added schemas for
lidar_airy,network,modes). - Added schema for
mapping_provider.yaml. - Added schema for
failure_domains.yamlandtime_sync.yaml. - Added schema for
degrade_policies.yaml.
- ConfigManager validates YAMLs against JSON Schemas when present (added schemas for
- Confirm AIRY HTTP endpoints with device manual; then set
http_enabled:=truein launch. Updatehttp.endpoints.*if paths/methods differ. - Ensure LiDAR drivers publish
/alpha/lidar/*/points_raw(or update reorder inputs) and validate dims=96x900. - Implemented full row reorder + range gate in
reorder_node(row-block reorder by ascending vertical angle; out-of-range points set to NaN). Added topic parameters for raw inputs. - Implement NVBlox provider plugin and mapping launch wiring.
- Add SMACC2 integration for
alpha_mode_manager(replace skeleton) and recovery logic inalpha_orchestrator. - Expand CI with tests and lint; add config schema validations.
- Orchestrator:
- Reads
alpha_configs/failure_domains.yaml; subscribes to/alpha/healthand emitsDOMAIN_HEALTHevents on changes. - Handles
/alpha/orchestrator/cmdactionse_stop,resume,recover_perception. - Executes config-driven recovery lists (e.g.,
perception.recovery.vslam_lost); issues ModeSet toFAILSAFEwhen specified (dry-run by default), other actions reported via events. - Launch now passes
config_failure_domainsanddry_run. - Subscribes to
/alpha/comms/degrade_level; maps L0→OK, L1/L2→DEGRADED, L3→FAILED forcommsand publishes/alpha/healthsnapshots.
- Reads
- Config validation: added schema for
failure_domains.yaml. - Observability:
- Implemented
alpha_observability/slo_publisher: subscribes to/alpha/metrics/*_latency_ms, computes P95, publishesDiagnosticArrayto/alpha/observability/slo, and emitsSLO_BREACHevents against thresholds indegrade_policies.yaml. - Added
alpha_observability/latency_feedersfor placeholder latency metrics; configurable sources.
- Implemented
- Time Sync:
- Added
alpha_time_syncpreflight gate node exposing/alpha/time_sync/preflight_gateand/alpha/time_sync/status(skeleton,always_okparam).
- Added
- Comms/Degrade:
- Added
alpha_comms/degrade_manager: listens to SLO metrics, escalates/de-escalates through L0→L3, publishes/alpha/comms/degrade_level, emits events, and disables MAPPING overlay when level requires it (dry-run by default). - Publishes
/alpha/comms/budget_intent(DegradeBudget) withvideo_fps,video_bitrate,lidar_hz,mapping. Video budget applier publishes/alpha/video/target_*. LiDAR reorder subscribes and throttles output to target Hz.
- Added
Artifacts and decisions are linked from AGENTS docs where relevant.
- Recorder:
- Added
alpha_recorder/ring_recorder: manages rotating rosbag2 ring (--max-bag-duration), trims to retention window, serves/alpha/recorder/triggerto gather pre-window segments and capture post-window into a new bag dir underdata/triggers/. - Status on
/alpha/recorder/status.
- Added
- CI now builds/tests all packages and adds a
tf_okenforcement unit test (roadmap 10.6 — Calibration tools + TF preflight/CI). - Added
alpha_configs/extrinsics_current.yamlfor calibration (roadmap 7.13 — extrinsics_seed.yaml). - Integrated
video_controllerand wired into launch (roadmap 10.3 — Comms Manager + budgets + impairment harness in CI).
- Contracts & schemas:
- Enforced explicit recovery actions in
failure_domains.schema.json(arrays of typed objects:mode|limit_speed|switch). - Migrated
alpha_configs/failure_domains.yamlto the new contract; CI validator rejects legacy string lists.
- Enforced explicit recovery actions in
- LiDAR mode service:
- Added optional
verify_after_set(GETsetting_data.jsonto confirmOpM) and HTTPhttp_retries/http_backoff_msknobs. - On‑device test: Run/Standby applied; verification OK; legacy UI fallback used when configured endpoints didn’t match.
- Introduced optional
airy_httpconfig (disabled by default) with per‑device endpoints/timeouts; mode service prefers this when enabled.
- Added optional
- Docs:
INTEGRATION_SENSORS.md: added section on mode_service HTTP control, verification, retries.README.md: added concise snippet to enable HTTP mode toggling with verification.
- PR housekeeping:
- Merged: #12 (schema+config), #13 (mode_service verify/retry), #14 (
airy_httpsupport), #15 (remove unused param + docs). - Closed superseded PR #10 (docs-index stability) after policy PR merged.
- Merged: #12 (schema+config), #13 (mode_service verify/retry), #14 (
- Finalized CI split and caching:
- Core: build full workspace excluding
alpha_mapping; gate onpytest -m unitonly. - Non‑gating: mapping build on changes/nightly with artifacts; integration tests via
pytest -m integration. - Added apt retries, rosdep metadata cache, and ccache across all jobs.
- Enforced pytest markers; relaxed sensors enforcement to forbid only
--cmake-argsbefore--packages-select.
- Core: build full workspace excluding
- Fixed unit test flake by honoring YAML
range_mbounds inalpha_lidar_airyreorder node. - Policy: after 7 consecutive green mapping+integration runs (or 1 week), propose re‑gating.