AZ-899: create _docs/02_document/architecture_compliance_baseline.md seeded with 0 violations and the 2026-05-20 structural snapshot facts (15 inventory entries, 0 import cycles, 5 contract files). Documents the append-on-violation / mark-resolved-on-fix / snapshot-refresh protocol so cumulative reviews can emit Baseline Delta sections. Closes cycle-1 retro Top-3 #3 (third attempt). AZ-900: codify LESSONS 2026-05-26 [process] in .cursor/skills/autodev/flows/existing-code.md - Re-Entry After Completion now hosts a Previous-Cycle Retro Existence Gate that BLOCKS the cycle increment if no _docs/06_metrics/retro_*.md file dated within [cycle_start, cycle_end] exists. Skipped on state.cycle == 1. Presents Choose A (author retro) / B (stub + leftover) / C (abort). state.md - Session Boundaries gains a cross-reference bullet. AZ-901: fix e2e/runner/conftest.py:56 EVIDENCE_OUT default - host pytest now resolves <repo_root>/e2e-results/evidence/ instead of /e2e-results/evidence (container-only path; crashed on macOS / non- root Linux). Docker + Jetson harnesses unaffected (they pass --evidence-out explicitly). Verified locally: 24 SKIPPED, exit 0, evidence written. Closes leftover 2026-05-26_evidence_out_default_path.md. Co-authored-by: Cursor <cursoragent@cursor.com>
6.2 KiB
Architecture Compliance Baseline
Purpose. Single canonical document against which every cumulative-review report (per
.cursor/skills/code-review/SKILL.mdPhase 7 + the implement skill's Step 14.5 cumulative review) computes its## Baseline Delta— the count of carried-over, resolved, and newly-introduced architecture violations. Without this file, cumulative reviews log "baseline not found → no Baseline Delta section emitted" and structural regressions are visible only pairwise per batch instead of cumulatively.
Baseline established: 2026-05-26 (cycle-4 Step 10, batch 1, AZ-899)
Source-of-truth snapshot: _docs/06_metrics/structure_2026-05-20.md
Initial violation count: 0
Cycle of last refresh: 4
Source
The "0 violations" claim is grounded in the structural facts captured by the
cycle-1-close snapshot (_docs/06_metrics/structure_2026-05-20.md):
| Fact | Value |
|---|---|
| Inventory entries | 15 (14 production components C1–C13 + 1 cross-cutting helpers/runtime_root row) |
| Import cycles in component graph | 0 (verified across batches 88–92 cumulative reviews; no back-edges) |
| Contract files | 5 (fdr_record_schema.md, fdr_client_protocol.md, log_record_schema.md, the shared_satellite_provider_ingest/ placeholder, shared_flights_api/) |
_STRATEGY_REGISTRY composition seam |
runtime_root.airborne_bootstrap + runtime_root.operator_bootstrap (single composition root per binary, ADR-009) |
| Layering rule | Layer-3 → Layer-4 imports BANNED; AZ-507 cross-component contract surface enforced by tests/unit/test_az270_compose_root.test_ac6_only_compose_root_imports_concrete_strategies lint |
The architecture is documented in _docs/02_document/architecture.md (ADR-001
monolith, ADR-002 build-time exclusion, ADR-009 interface-first DI,
ADR-011 single-image live+replay). File ownership is documented in
_docs/02_document/module-layout.md.
Violations
None at baseline.
This section is the append target for every cumulative-review run that
detects an architecture finding (severity ≥ Medium, category =
Architecture). The append schema is documented under § Update Protocol
below.
Update Protocol
When a cumulative review finds a NEW architecture violation
The reviewing skill (typically .cursor/skills/code-review/SKILL.md Phase 7,
invoked from the implement skill's Step 14.5 cumulative review at every K=3
batches) MUST append a row to § Violations using this schema:
| Field | Example |
|---|---|
| Finding ID | arch-2026-06-15-1 (date + sequence within the day) |
| Batch range | batches 17–19 cycle 4 |
| Severity | High / Medium (Critical findings escalate immediately; Low findings stay in the per-batch report) |
| Subcategory | import-cycle / cross-component-import / parallel-pipeline / layer-violation / seam-bypass |
| File:line | src/gps_denied_onboard/components/c2_vpr/ultra_vpr.py:117 |
| One-line summary | c2_vpr imports c6_tile_cache directly, bypassing the consumer-side Protocol cut required by AZ-507 |
| Cumulative-review report | _docs/03_implementation/cumulative_review_batches_17-19_cycle4_report.md |
| Status | OPEN (newly introduced) |
The append happens IN THIS FILE, not in the cumulative-review report. The cumulative-review report references this file's row by Finding ID.
When a violation is resolved
Update the violating row in place: change Status: OPEN to
Status: RESOLVED in batch <N> cycle <M> via <commit-hash>. Do NOT delete
the row — the audit trail must show both the introduction and the
resolution.
When the structural snapshot is refreshed
Any cycle that materially changes structure — new component, new
cross-component edge, new contract file, new composition root — re-snapshots
to a fresh _docs/06_metrics/structure_<YYYY-MM-DD>.md (the cycle-end
retrospective triggers this when the diff is non-trivial). When that
happens:
- Update the
**Source-of-truth snapshot**header pointer at the top of this file to the new file. - Update the
Cycle of last refreshheader to the cycle that produced the new snapshot. - Update the § Source table values (component count, cycle count, contract count) to match the new snapshot.
- Do NOT clear § Violations — open findings carry across snapshots. Resolution status is per-finding, not per-snapshot.
The refresh script is the same one that produced structure_2026-05-20.md
(approach: count src/gps_denied_onboard/components/*/ directories +
src/gps_denied_onboard/runtime_root/ + helpers/; run the AZ-270
composition-root lint to detect cycles; enumerate
_docs/02_document/contracts/ subdirectories). If the script has been
extracted into tools/structure_snapshot.py between cycles, use it;
otherwise the manual approach is documented at the top of the source
snapshot file.
Baseline Delta — how cumulative-review reports consume this file
Every cumulative-review report MUST emit a ## Baseline Delta section with
three counts derived from this file:
- Carried-over: count of rows whose
Status: OPEN(orStatus: ACCEPTED-RISK) was unchanged at the start of this review's batch window. - Resolved: count of rows that transitioned from
OPENtoRESOLVED in batch ...during this review's batch window. - Newly-introduced: count of rows added during this review's batch window.
An empty Baseline Delta (0 new, 0 resolved, 0 carried-over) is still
emitted — its presence confirms the cumulative-review consulted the
baseline rather than silently skipping the section as in cycles 1–3.
References
- Cycle-3 retro § Top 3 Improvement Actions #3 —
_docs/06_metrics/retro_2026-05-26.md - Cycle-1 retro § Top 3 Improvement Actions #3 (original) —
_docs/06_metrics/retro_2026-05-20.md - Source snapshot —
_docs/06_metrics/structure_2026-05-20.md - Existing-code flow Step 2 —
.cursor/skills/autodev/flows/existing-code.md§ "Step 2 — Architecture Baseline Scan" - Implement skill Step 14.5 —
.cursor/skills/implement/SKILL.md§ "Cumulative Code Review (every K batches)" - Architecture doc —
_docs/02_document/architecture.md - Module-layout —
_docs/02_document/module-layout.md