# 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). **DONE** — commits `4f122b6` (FINAL_report + glossary) + `1ca9a59` (arch + module-layout).
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. **DONE** — uncommitted in working tree at handoff time; rolled into the cycle-1 doc-sync batch with C2/C2.5/C3.
3. **Other 13 components + 8 helpers** — task-by-task reconciliation, batched ~3 components per session.
   - **Batch 1 (this session, 2026-05-19)**: C2 (VPR), C2.5 (Rerank), C3 (Matcher) — cycle-1 reality paragraphs + OpenCV pin relaxation (where applicable) + C3 xfeat Tier-2 follow-up note. Source of truth crossed: `runtime_root/airborne_bootstrap.py` (`_C*_STRATEGIES`, `AIRBORNE_REQUIRED_PRE_CONSTRUCTED_KEYS`, `C3_MATCHER_BUILD_FLAGS`), `runtime_root/vpr_factory.py`, per-component `config.py`.
   - **Remaining (10 components)**: C3.5 (AdHoP), C4 (Pose), C5 (StateEstimator), C6 (TileCache), C7 (Inference), C8 (FC adapter), C10 (Provisioning), C11 (TileManager), C12 (OperatorOrchestrator), C13 (FDR).
   - **Helpers (8 files)**: `imu_preintegrator`, `se3_utils`, `lightglue_runtime`, `wgs_converter`, `sha256_sidecar`, `engine_filename_schema`, `ransac_filter`, `descriptor_normaliser`.
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. **DONE** — 2026-05-19 session (autodev Step 13 phase 9 tests-doc-updates):
   - **`environment.md`** — added § Harness Implementation Layout (47-evaluator `runner/helpers/` inventory, `runner/reporting/` CSV+evidence bundler from AZ-445/446, `fixtures/{injectors,sitl_replay,sitl_replay_builder}` layout, `e2e/jetson/` Tier-2 entrypoint); added § Replay-Mode Skip Gating (`E2E_SITL_REPLAY_DIR` + `sitl_replay_ready` marker from AZ-594/595/598/599); replaced raw-compose Tier-1 + Tier-2 examples with `e2e/docker/run-tier1.sh` + `e2e/jetson/run-tier2.sh` selector-parity wrappers (AZ-444 AC-1); aligned OpenCV pin reference to the cycle-1 `>=4.11.0.86,<4.12` floor with leftover cross-reference; fixed stale `tests/fixtures/` and `tests/runner` paths to `e2e/fixtures/` and `e2e/runner`.
   - **`test-data.md`** — added rows for `sitl-replay-fixture-p01`, `sitl-replay-fixture-p02`, and `fc-proxy-schedule` (AZ-596/598/599); revised `cve-jpeg-fixture` row to reflect the relaxed cycle-1 OpenCV pin band with leftover cross-reference; added § Data Isolation paragraph for committed-fixture mode; fixed stale `tests/fixtures/` paths to `e2e/fixtures/`.
   - **`security-tests.md`** — NFT-SEC-04 pin assertion + Pass Criteria updated to the cycle-1 relaxed band with leftover cross-reference; replay condition documented.
   - **`ci_cd_pipeline.md`** (deployment doc — adjacent hygiene) — OpenCV pin-gate row revised to the relaxed band with replay condition.
   - **Unchanged** — `blackbox-tests.md`, `performance-tests.md`, `resilience-tests.md`, `resource-limit-tests.md`, `tier2-jetson-testing.md`, `traceability-matrix.md`. Step 12 (Test-Spec Sync) already aligned these with implementation; no further gaps found against the ~50 done test task specs (AZ-406-446, AZ-594-600, AZ-618-619). `tests/e2e/replay/test_derkachi_1min.py` path references in `resilience-tests.md` + `tier2-jetson-testing.md` verified — file exists at that path at repo root, distinct from the `e2e/tests/` blackbox harness.

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>/`. Per-batch session pattern proven this cycle: read `runtime_root/airborne_bootstrap.py` `_C*_STRATEGIES` + `AIRBORNE_REQUIRED_PRE_CONSTRUCTED_KEYS` rows for each slug, cross-check against component `config.py` defaults, then add (a) a "Cycle-1 operational reality" paragraph in § 1 of `description.md`, (b) an OpenCV pin row in § 5 if the component imports `cv2`, (c) a "Cycle-1 Tier-2 follow-up dependencies" subsection in § 7 only when a strategy exists in code but is parked from the airborne registry.
