mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 10:21:13 +00:00
[autodev] Step 13 partial: system-level cycle-1 doc sync
Updates _docs/02_document/ to capture the highest-leverage cycle-1 deltas after 97 implementation batches: - FINAL_report.md: revise Decision 9 to reflect the actual opencv-python pin (>=4.11.0.86,<4.12; D-CROSS-CVE-1 deferred per leftover); new "Cycle 1 Implementation Status" section documents the _STRATEGY_REGISTRY + pre_constructed composition-root additions (AZ-591, AZ-618/AZ-619..AZ-624), AZ-332 + AZ-333 BLOCKED with parked Tier-2 follow-ups AZ-592 + AZ-593, AZ-589 + AZ-590 closed Won't-Fix, Step 11 Run Tests results (3343 passed / 88 skipped / 0 failed local; Docker harness rehab tracked by AZ-602), and the deferred-reconciliation list. - glossary.md: 5 new cycle-1 entries (_STRATEGY_REGISTRY, airborne_bootstrap, KltRansac as production-default Tier-1 VIO, pre_constructed kwarg, Tier-1 task / Tier-2 task capability classification). Status line notes the cycle-1 additions pending re-confirmation. - ripple_log_cycle1.md (new): explains why per-file enumeration is N/A for end-of-cycle-1 sync, lists the three doc-update levels and their effective scope, and records the recommended follow-up ordering for the deferred component / helper / contract / test passes. Step 13 deferred: architecture.md, module-layout.md, system-flows.md, 14 component description.md + tests.md, 8 helper docs, 18 contract subfolders, 7 test docs (~50+ files; ~80 product tasks + ~8 helper tasks + ~36 blackbox test tasks). Filed in FINAL_report.md and ripple_log_cycle1.md; resume in a fresh conversation per the 2026-05-18 LESSONS.md guidance. State: greenfield / Step 13 / in_progress / phase 5 (system-level-updates) / cycle 1. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -167,7 +167,7 @@ Both the inclusive reading (PARTIAL = covered) and the strict reading clear the
|
||||
| 6 | D-CROSS-LATENCY-1 hybrid (ADR-006): K=3 baseline auto-degrades to K=2 + Jacobian covariance under thermal throttle | Preserves AC-4.1 at +50 °C ambient at the cost of ~5–10 % accuracy | Static K=2 — wastes covariance precision in nominal conditions; static K=3 — blows the budget under throttle |
|
||||
| 7 | Spoof-promotion gate (ADR-008): re-promote only after ≥10 s `gps_health == STABLE_NON_SPOOFED` AND visual-consistency check passes | AC-NEW-2 / AC-NEW-8 floor; defends against attacker turning spoof off briefly | Time-only gate (≥30 s) — slower mission recovery, still fool-able by transient honest GPS during attack |
|
||||
| 8 | Interface-first components with constructor injection (ADR-009) | Multiple interchangeable strategies on the same interface (C1 has 3, C2 has 6+, C8 has 2) — selection via composition root only | Service-locator / global registry — couples runtime to import order, breaks tests, breaks build-time exclusion |
|
||||
| 9 | OpenCV pinned to ≥4.12.0 (Mode B Fact #112) | CVE-2025-53644 mitigation; IPPE flags for solvePnP D-C4-1=(b) | Older OpenCV — known CVE; newer beta — not pinned in JetPack 6.2 |
|
||||
| 9 | OpenCV pin **temporarily relaxed** to `>=4.11.0.86,<4.12` (was `>=4.12.0` per original Mode B Fact #112) | `gtsam==4.2.1` (only published wheel) is built against numpy 1.x ABI; `opencv-python>=4.12` requires numpy>=2; D-CROSS-CVE-1 follow-up tracked in `_docs/_process_leftovers/2026-05-11_d_cross_cve_1_opencv_pin_deferred.md` and replays the `>=4.12.0` pin once gtsam ships numpy-2 wheels (or an alternative SE(3) backend is adopted) | Keep numpy>=2 — `gtsam.Pose3` SEGFAULTs; force `opencv-python>=4.12` — uninstallable; drop gtsam — loses ADR-003 honest 6×6 covariance |
|
||||
| 10 | DISK + LightGlue replaces SuperPoint+SuperGlue for cross-domain matching (D-C3-1 = (a)) | License — SP+SG is Magic Leap noncommercial canonical; DISK+LightGlue is BSD-3-Clause | SuperPoint+SuperGlue — license incompatibility; XFeat — promising but unproven cross-domain |
|
||||
| 11 | AC-NEW-4 / AC-NEW-7 text relaxed 2026-05-09 to Monte-Carlo-over-current-data with stated 95 % CI | D-PROJ-3 multi-flight fixture acquisition is out of scope this cycle; literal "≥100 flights" wording cannot be met | Block planning on D-PROJ-3 — cycle would not close; relaxed wording is documented residual risk in R11 |
|
||||
|
||||
@@ -203,6 +203,55 @@ Both the inclusive reading (PARTIAL = covered) and the strict reading clear the
|
||||
| `diagrams/components.drawio` | Component-level diagram (visual companion to `components/`) |
|
||||
| `diagrams/flows/00_index.md` | Per-flow index pointing into `system-flows.md` |
|
||||
|
||||
## Cycle 1 Implementation Status
|
||||
|
||||
> Appended 2026-05-19 as part of greenfield Step 13 (Update Docs, task mode). Captures the as-built deltas from this planning report after 97 implementation batches + Step 11 Run Tests + Step 12 Test-Spec Sync. Sources: `_docs/03_implementation/implementation_completeness_cycle1_report.md`, `_docs/03_implementation/run_tests_step11_report.md`, `_docs/02_tasks/done/` (165 task specs), `_docs/_process_leftovers/2026-05-11_d_cross_cve_1_opencv_pin_deferred.md`.
|
||||
|
||||
### Composition-root architecture additions (not in the original Plan)
|
||||
|
||||
The Plan-era `architecture.md` § ADR-009 (interface-first, constructor injection) and module-layout.md's "Composition root is `runtime_root/`" rule remain correct, but cycle 1 added two cross-cutting Tier-1 mechanisms inside `runtime_root/` that the Plan did not anticipate. Both are operational prerequisites for `compose_root()` reaching takeoff:
|
||||
|
||||
- **`_STRATEGY_REGISTRY` + `register_strategy(...)` API (AZ-591)** — a module-level `dict[(component_slug, strategy_name)] → factory` populated per-binary. `runtime_root.airborne_bootstrap.register_airborne_strategies()` fills 7 airborne slots (`c1_vio`, `c2_vpr`, `c2_5_rerank`, `c3_matcher`, `c3_5_adhop`, `c4_pose`, `c5_state`) with `tier="airborne"`. Without this, `compose_root()` raises `StrategyNotLinkedError` on the first config-driven strategy lookup. The registry is the runtime-side complement to ADR-002 build-time exclusion: the build chooses which strategies are even available to register, the registry chooses which one this binary serves.
|
||||
- **`pre_constructed` kwarg + `build_pre_constructed(config)` (AZ-618 umbrella → subtasks AZ-619..AZ-624)** — `compose_root(config, pre_constructed=...)` now requires a 12-key dict of infrastructure objects (`c13_fdr`, `c6_descriptor_index`, `c6_tile_store`, `c7_inference`, `c3_lightglue_runtime`, `c3_feature_extractor`, `c282_ransac_filter`, `c5_wgs_converter`, `c5_se3_utils`, `c5_isam2_graph_handle`, `c5_imu_preintegrator`, `clock`). The airborne entrypoint builds these in 6 dependency-ordered phases (A=c13/clock → F=wire_main); GPU-touching builders gate on the corresponding `BUILD_*` env flag. Missing keys raise `AirborneBootstrapError` with the missing-key name; tests stub by passing the same `pre_constructed=...` kwarg.
|
||||
|
||||
These additions sit inside `runtime_root/`; no component crosses the import boundary AZ-507 enforces. Both still need to be folded into `architecture.md` (ADR-009 sibling notes) and `module-layout.md` § "Composition Root" — deferred to a follow-up `/document` task pass.
|
||||
|
||||
### BLOCKED tasks with parked Tier-2 follow-ups
|
||||
|
||||
Per the implement skill § 15 "PASS-with-BLOCKED" allowable terminal classification (see `implementation_completeness_cycle1_report.md`):
|
||||
|
||||
| Task | Status | Reason | Parked Tier-2 follow-up |
|
||||
|------|--------|--------|-------------------------|
|
||||
| AZ-332 — C1 OKVIS2 production-default `VioStrategy` | BLOCKED | Tier-2 prerequisites: CI build env + Jetson hardware + DBoW2 vocab artifact. Ships a Python facade + pybind11 binding skeleton; first `add_frame` raises until upstream `okvis::ThreadedSlam` wiring lands. | **AZ-592** (`_docs/02_tasks/backlog/`) |
|
||||
| AZ-333 — C1 VINS-Mono research-only `VioStrategy` | BLOCKED | Tier-2 prerequisites + upstream vendoring decision (HKUST + ROS-strip vs. community fork). Same skeleton-only state as AZ-332. | **AZ-593** (`_docs/02_tasks/backlog/`) |
|
||||
|
||||
**Operational consequence**: the production-default airborne `VioStrategy` for cycle-1 release is **`KltRansac`** (the engine-rule-mandatory simple baseline, AZ-334), NOT OKVIS2 as `architecture.md` ADR-001 nominally implies. ADR-001 / ADR-002 remain architecturally correct (the seam exists; the build-flag gating works); the production *default selection* shifts until Tier-2 lands. The `_STRATEGY_REGISTRY` still registers the OKVIS2 + VINS-Mono slots so the registry seam stays correct — selecting them via config raises `StrategyNotAvailableError` from `vio_factory.py` until their `BUILD_*` flag is ON.
|
||||
|
||||
**Closed Won't-Fix during this cycle**: AZ-589 + AZ-590 (the original remediation tasks for AZ-332 + AZ-333). Both targeted upstream APIs that don't exist in the actually-checked-in OKVIS2 submodule + a non-existent VINS-Mono submodule. The post-mortem details are in `implementation_completeness_cycle1_report.md` § "Verdict — Revised 2026-05-16".
|
||||
|
||||
### Run Tests (Step 11) results
|
||||
|
||||
| Surface | Result |
|
||||
|---------|--------|
|
||||
| Local Tier-1 pytest suite | **3343 passed / 88 skipped / 0 failed** (12 logical chunks; full details in `run_tests_step11_report.md`) |
|
||||
| Docker Tier-1 SUT Reality Gate | **NOT MET** — both harnesses (`scripts/run-tests.sh` + `e2e/docker/run-tier1.sh`) have pre-existing drift unrelated to Step 10 work (missing `ardupilot/*` + `inavflight/*` images on Docker Hub; broken Dockerfile entrypoints; unseeded tile-cache volume). Rehabilitation epic **AZ-602** owns this. |
|
||||
| Skip classification | 14 Tier-2-only (Jetson) — legitimate; 8 CUDA/GPU absent on macOS dev host — legitimate; 6 TensorRT-on-Tier-2-only — legitimate; 57 Docker-compose-dependent — borderline, becomes covered once any harness runs end-to-end; 3 console-scripts-not-on-PATH — env-conditional; remainder legitimate |
|
||||
|
||||
### Dependency pin drift since Plan
|
||||
|
||||
- **opencv-python**: relaxed from `>=4.12.0` to `>=4.11.0.86,<4.12` (D-CROSS-CVE-1 deferred per `_docs/_process_leftovers/2026-05-11_d_cross_cve_1_opencv_pin_deferred.md`; root cause is the gtsam==4.2.1 / numpy<2.0 ABI lock). See revised Decision 9 above. The original CVE-2025-53644 intent stands and will replay once gtsam ships numpy-2 wheels.
|
||||
|
||||
### Documentation reconciliation still owed (deferred to a follow-up `/document` task pass)
|
||||
|
||||
This Step-13 session updated the highest-leverage system-level deltas only. The following surfaces still carry Plan-era assertions that do not match cycle-1 as-built behaviour and should be refreshed in a follow-up session:
|
||||
|
||||
- `architecture.md` — add ADR-009 sibling notes for `_STRATEGY_REGISTRY` + `pre_constructed`; revise OpenCV mentions (§ Technology stack, § Risks); reflect KltRansac-as-production-default in § C1 ADR commentary.
|
||||
- `module-layout.md` — extend § "Composition Root" with `airborne_bootstrap` + `build_pre_constructed` ownership; AZ-618 / AZ-591 ownership rows in the runtime_root section.
|
||||
- `components/01_c1_vio/description.md` — note KltRansac is the operational default while AZ-592 / AZ-593 are parked.
|
||||
- `components/<NN>_<cN>/description.md` for the other 13 components — task-by-task reconciliation against the 80 product tasks in `done/`.
|
||||
- `common-helpers/*.md` — task-by-task reconciliation against the 8 helper tasks in `done/`.
|
||||
- `tests/*.md` — task-by-task reconciliation against the ~36 Blackbox Tests tasks in `done/` (some already touched by Step 12 Test-Spec Sync — see `tests/traceability-matrix.md` and `tests/resilience-tests.md` diffs).
|
||||
|
||||
## Quality Checklist Verification
|
||||
|
||||
All 8 checklist sections from `.cursor/skills/plan/steps/07_quality-checklist.md` pass for this cycle:
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
# Glossary
|
||||
|
||||
**Status**: confirmed-by-user
|
||||
**Date**: 2026-05-09
|
||||
**Status**: confirmed-by-user (Plan baseline 2026-05-09); cycle-1 additions appended 2026-05-19 pending re-confirmation
|
||||
**Date**: 2026-05-09 baseline · 2026-05-19 cycle-1 additions (marked with `(source: cycle 1 as-built …)` in their entry)
|
||||
**Scope**: project-specific terminology for the GPS-denied onboard pose-estimation system. Generic software / industry terms (REST, JSON, IMU, WGS84, etc.) are intentionally omitted.
|
||||
|
||||
Terms are alphabetical. Each entry: one-line definition + parenthetical source.
|
||||
|
||||
---
|
||||
|
||||
**`_STRATEGY_REGISTRY`** — Module-level dict in `runtime_root` mapping `(component_slug, strategy_name) → factory`, with `tier` and `depends_on` metadata. Populated per-binary by an `<role>_bootstrap.register_<role>_strategies()` call before `compose_root()` runs; `compose_root()` raises `StrategyNotLinkedError` if a config-selected strategy is absent. Runtime-side complement to ADR-002 build-time exclusion: the build decides which strategies *can* be registered, the registry decides which one this binary *does* register. Filled cycle-1 by AZ-591; public API is `register_strategy(component_slug, strategy_name, factory, *, tier, depends_on)`. (source: cycle 1 as-built; AZ-591 task spec)
|
||||
|
||||
**adti20** — Informal name for the production deployment camera, the **ADTi Surveyor Lite 20MP 20L V1** (APS-C ~23.6×15.7 mm, ~5472×3648 px, fixed downward, no gimbal). Pinned in `restrictions.md` §Cameras. (source: `restrictions.md`, user confirmation 2026-05-09)
|
||||
|
||||
**adti26** — Informal name for the camera that captured the 60 still-image test fixtures (`AD000001..AD000060.jpg`) under `_docs/00_problem/input_data/`. Distinct from the production-deployed `adti20`; calibration data must be sourced from public/factory references for these test images. (source: user confirmation 2026-05-09)
|
||||
@@ -18,6 +20,8 @@ Terms are alphabetical. Each entry: one-line definition + parenthetical source.
|
||||
|
||||
**AI camera** — Operator-controlled gimbal+zoom camera consumed by AI detection systems; out of scope for nav-pose, in scope for AC-7.x object localization only. (source: `restrictions.md` §Cameras)
|
||||
|
||||
**`airborne_bootstrap`** — Module under `runtime_root/` that performs the two pre-`compose_root()` setup steps for the airborne binary: `register_airborne_strategies()` populates `_STRATEGY_REGISTRY` with 7 component-strategy slots (c1_vio, c2_vpr, c2_5_rerank, c3_matcher, c3_5_adhop, c4_pose, c5_state), and `build_pre_constructed(config)` constructs the 12-key infrastructure dict (`pre_constructed`). The airborne entrypoint `runtime_root.main()` calls both before `compose_root(config, pre_constructed=...)`. Missing registry entry → `StrategyNotLinkedError`; missing `pre_constructed` key → `AirborneBootstrapError`. Operator binary uses the parallel `operator_bootstrap` module today only as a placeholder. (source: cycle 1 as-built; AZ-591 + AZ-618 umbrella → AZ-619..AZ-624 subtasks)
|
||||
|
||||
**Camera calibration artifact** — JSON file carrying camera intrinsics + distortion + body-to-camera extrinsics + acquisition method (`factory_sheet | checkerboard_refined | hybrid`). The only way camera-specific parameters enter the system; no hard-coded camera math anywhere. Test fixtures and production deployments load different artifacts on the same code path. (source: user directive 2026-05-09)
|
||||
|
||||
**Companion / Companion PC** — The onboard Jetson Orin Nano Super running the GPS-denied estimation pipeline. Synonyms used interchangeably across docs. (source: `restrictions.md` §Onboard Hardware)
|
||||
@@ -56,6 +60,8 @@ Terms are alphabetical. Each entry: one-line definition + parenthetical source.
|
||||
|
||||
**Jetson Orin Nano Super** — Pinned companion compute: 67 TOPS sparse INT8, 8 GB shared LPDDR5, 25 W TDP, JetPack/CUDA/TensorRT. (source: `restrictions.md`)
|
||||
|
||||
**`KltRansac`** — Engine-rule-mandatory simple-baseline `VioStrategy` (AZ-334). In cycle 1 this is the **production-default** airborne VIO selection because OKVIS2 (AZ-332) and VINS-Mono (AZ-333) are BLOCKED on Tier-2 prerequisites (CI build env + Jetson hardware + DBoW2 vocab; upstream vendoring decision). The `_STRATEGY_REGISTRY` still registers all three slots — config-selecting OKVIS2 / VINS-Mono raises `StrategyNotAvailableError` from `vio_factory.py` until their `BUILD_*` flag is ON and the Tier-2 follow-ups (AZ-592, AZ-593) land. ADR-001 / ADR-002 unchanged; only the production default selection shifts. (source: cycle 1 as-built; `implementation_completeness_cycle1_report.md`)
|
||||
|
||||
**Mid-flight bounded-delta GPS gate** — Third clause of Principle #11. Even when FC GPS health is "stable + non-spoofed for ≥ 10 s" and the visual/satellite consistency check has succeeded, the FC's reported position must be within ≤ 200 m (configurable) of the companion's last emitted `PoseEstimate` before the FC GPS is fused via `add_pose_anchor`. Catches "FC reports stable GPS but the value is wrong". (source: Principle #11 amended, ADR-010)
|
||||
|
||||
**Mid-flight tile generation** — Companion orthorectifies nav-camera frames into basemap-projected tiles in flight, deduplicates, stores locally in `satellite-provider`-compatible format. NO outbound upload while airborne — upload happens post-landing only. (source: AC-8.4, user directive 2026-05-09)
|
||||
@@ -70,6 +76,10 @@ Terms are alphabetical. Each entry: one-line definition + parenthetical source.
|
||||
|
||||
**Operator** — Pre-flight and post-flight human role: authors the flight route in the **Mission Planner UI** (`suite/ui`), classifies the operational area (active-conflict vs stable rear), drives C12 cache provisioning (which reads the `Flight` from the parent-suite `flights` REST service, downloads satellite tiles via the **Tile Manager** for the route bbox, and bakes the takeoff origin into the C10 Manifest), stages calibration onto the companion before takeoff, and after landing triggers the **Tile Manager** upload run. (source: `problem.md`, AC-3.4 / AC-6.2, ADR-010, user confirmation 2026-05-09 + 2026-05-11)
|
||||
|
||||
**`pre_constructed`** — Mandatory kwarg of `compose_root(config, pre_constructed=...)` carrying a 12-key dict of infrastructure objects (`c13_fdr`, `c6_descriptor_index`, `c6_tile_store`, `c7_inference`, `c3_lightglue_runtime`, `c3_feature_extractor`, `c282_ransac_filter`, `c5_wgs_converter`, `c5_se3_utils`, `c5_isam2_graph_handle`, `c5_imu_preintegrator`, `clock`). Built by `airborne_bootstrap.build_pre_constructed(config)` in 6 dependency-ordered phases (Phase A=c13/clock through Phase F=wire `main()`); GPU-touching builders gate on `BUILD_*` env flags. Tests stub by passing the same kwarg. Missing key → `AirborneBootstrapError`. (source: cycle 1 as-built; AZ-618 umbrella → AZ-619..AZ-624 subtasks)
|
||||
|
||||
**Tier-1 task / Tier-2 task** — Capability-readiness classification distinct from the `Tier-1 / Tier-2` test-environment split. A **Tier-1 task** is the cycle deliverable; passes the implement skill's cycle-end Completeness Gate without external hardware/CI prerequisites. A **Tier-2 task** is a follow-up gated on prerequisites that are not provisioned in this cycle (e.g., DBoW2 vocab artifact for OKVIS2; Jetson runner for VINS-Mono pybind11 binding). Tier-2 follow-ups are parked in `_docs/02_tasks/backlog/` with the Tier-1 task's BLOCKED handle naming them explicitly. The implement skill's "PASS-with-BLOCKED" terminal classification permits a Tier-1 task to ship in BLOCKED state if a Tier-2 follow-up is named in its Implementation Notes. (source: cycle 1 as-built; `implementation_completeness_cycle1_report.md`)
|
||||
|
||||
**Tile Manager** — Operator-side component (C11) that owns both directions of network I/O against `satellite-provider`: pre-flight download (F1) into the local C6 store via the `TileDownloader` interface, and post-landing upload (F10) from C6 to the parent-suite ingest endpoint via the `TileUploader` interface. Carries **no internal flight-state gating** (Batch 44 SRP refactor — the post-landing safety check lives in C12's `PostLandingUploadOrchestrator`, which reads the `flight_footer.clean_shutdown` field). Implemented as a separate binary / image so neither network path is loaded in the airborne companion (ADR-004 process-level isolation). Replaces the earlier "post-landing upload tool" naming after Plan-cycle scope expansion 2026-05-09. (source: user directive 2026-05-09; Batch 44 SRP refactor 2026-05-13)
|
||||
|
||||
**`satellite-provider`** — First-class architecture boundary: the suite's existing .NET 8 REST microservice at `/Users/obezdienie001/dev/azaion/suite/satellite-provider/`. Runs in Docker (`:5100`, OpenAPI at `/swagger`); downloads Google Maps tiles; stores them in PostgreSQL + filesystem (`./tiles/{zoomLevel}/{x}/{y}.jpg`). Read-only from the onboard runtime; receives post-landing tile uploads via a yet-to-be-designed ingest endpoint (parent-suite work, D-PROJ-2). Synonym in older docs: "Suite Sat Service" / "Azaion Suite Satellite Service". (source: parent-suite `satellite-provider/README.md`, user confirmation 2026-05-09)
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# Ripple Log — Cycle 1 (End-of-Cycle Documentation Sync)
|
||||
|
||||
> Produced as part of greenfield Step 13 (Update Docs, document skill Task mode).
|
||||
> Source: `_docs/_autodev_state.md` (`cycle: 1`).
|
||||
> Date: 2026-05-19.
|
||||
|
||||
## Why this ripple log is not a per-file enumeration
|
||||
|
||||
The document skill's Task Step 0.5 normally walks each touched source file and adds the downstream importers to the refresh set. The conventional output is a one-line-per-affected-doc list:
|
||||
|
||||
```
|
||||
- docs/components/02_ingestor.md — refreshed because src/ingestor/queue.py imports src/shared/serializer.py (changed by AZ-173)
|
||||
```
|
||||
|
||||
That mode assumes an **incremental** task batch — typically 1–5 specs against an established codebase where most code is unchanged. Cycle 1 of this greenfield is the inverse: 165 done task specs across 14 components + 8 helpers + 18 contract surfaces + 9 system-level test docs, landed across 97 implementation batches between 2026-05-09 and 2026-05-17. Every component owns code that did not exist when the Plan baseline docs were written, and every cross-cutting helper has at least one consumer in every component.
|
||||
|
||||
Computing the literal reverse-dependency set in this state produces "essentially every component imports essentially every helper, and every component is consumed by `runtime_root.compose_root`". The output would be ~30 doc rows all saying "refreshed because cycle 1 landed it". That is not actionable.
|
||||
|
||||
## What the refresh set actually is for cycle 1
|
||||
|
||||
The Task workflow's three update levels each have a different effective scope this cycle:
|
||||
|
||||
| Update level | Effective scope this cycle | Status after this session |
|
||||
|--------------|----------------------------|---------------------------|
|
||||
| Task Step 1 — Module docs (`_docs/02_document/modules/`) | **N/A** — this project's Plan chose component-level granularity; no `modules/` folder exists. | No action. |
|
||||
| Task Step 2 — Component docs (`components/<NN>_<cN>/{description,tests}.md` + `common-helpers/*.md` + `contracts/*/*.md` + `tests/*.md`) | All 14 product components, all 8 helpers, all 18 contract subfolders, all 9 system-level test docs. ~50+ files. | **DEFERRED** — to a follow-up `/document` task pass in a fresh session (see "Documentation reconciliation still owed" in `FINAL_report.md` § Cycle 1 Implementation Status). |
|
||||
| Task Step 3 — System-level docs (`architecture.md`, `system-flows.md`, `data_model.md`, `glossary.md`, `module-layout.md`, `FINAL_report.md`) | Real cross-cutting drift: `_STRATEGY_REGISTRY` + `pre_constructed` patterns (AZ-591, AZ-618), KltRansac-as-production-default (AZ-332/333 BLOCKED), opencv pin relaxation (D-CROSS-CVE-1 leftover). | **PARTIAL** — `FINAL_report.md` + `glossary.md` updated this session; `architecture.md` + `module-layout.md` + `system-flows.md` deferred. |
|
||||
| Task Step 4 — Problem-level docs (`_docs/00_problem/*`) | No cycle-1 task changed an AC, restriction, or input-data parameter that the problem-level docs encode. | No action; revisit only if the deferred Step 2 / Step 3 surfaces a contradiction. |
|
||||
|
||||
## Files actually changed this session
|
||||
|
||||
- `_docs/02_document/FINAL_report.md` — Decision 9 revised (OpenCV pin); new "Cycle 1 Implementation Status" section appended before Quality Checklist Verification, listing composition-root architecture additions (`_STRATEGY_REGISTRY`, `pre_constructed`), BLOCKED tasks AZ-332 + AZ-333 with parked Tier-2 follow-ups, Step 11 Run Tests results, dependency pin drift, and the deferred-doc list.
|
||||
- `_docs/02_document/glossary.md` — 5 new entries (alphabetical): `_STRATEGY_REGISTRY`, `airborne_bootstrap`, `KltRansac`, `pre_constructed`, `Tier-1 task / Tier-2 task`. Status line updated to note cycle-1 additions pending re-confirmation.
|
||||
- `_docs/02_document/ripple_log_cycle1.md` — this file (new).
|
||||
- `_docs/_autodev_state.md` — sub_step bump to `system-level-updates` with deferred-work note.
|
||||
|
||||
## Follow-up session — recommended ordering
|
||||
|
||||
1. **Architecture-level updates (continue Task Step 3)** — `architecture.md` ADR-009 sibling notes for `_STRATEGY_REGISTRY` + `pre_constructed`; OpenCV mentions in § Technology stack / § Risks; KltRansac-as-production-default note in § C1. `module-layout.md` § "Composition Root" extension for `airborne_bootstrap` + `build_pre_constructed`. `system-flows.md` only if any flow's wiring narrative drifted (likely F2 takeoff + F8 reboot — the only flows where `compose_root` is the visible actor).
|
||||
2. **C1 component refresh** — `components/01_c1_vio/description.md` should explicitly mark KltRansac as the cycle-1 production-default; reflect the Tier-2 status of OKVIS2 + VINS-Mono.
|
||||
3. **Other 13 components + 8 helpers** — task-by-task reconciliation, batched ~3 components per session.
|
||||
4. **`tests/*.md`** — pick up cycle-1 deltas; Step 12 (Test-Spec Sync) already touched `traceability-matrix.md` and `resilience-tests.md` in the uncommitted working tree; the remaining test-doc surfaces (`blackbox-tests.md`, `performance-tests.md`, `resource-limit-tests.md`, `security-tests.md`, `tier2-jetson-testing.md`, `environment.md`, `test-data.md`) should be checked against the ~36 done Blackbox Tests task specs.
|
||||
|
||||
The component-level pass (item 2 + 3) is the bulk of the work. Each component-batch session should re-read this ripple log + the relevant component description.md + the task specs in `_docs/02_tasks/done/AZ-*_<component>*.md` + the actual source in `src/gps_denied_onboard/components/<c>/`.
|
||||
Reference in New Issue
Block a user