Files
gps-denied-onboard/_docs/02_document/architecture_compliance_baseline.md
Oleksandr Bezdieniezhnykh aa8b9f2ee9 [AZ-899] [AZ-900] [AZ-901] Baseline doc + retro gate + EVIDENCE_OUT fix
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>
2026-05-26 17:18:54 +03:00

124 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Architecture Compliance Baseline
> **Purpose.** Single canonical document against which every cumulative-review
> report (per `.cursor/skills/code-review/SKILL.md` Phase 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 C1C13 + 1 cross-cutting `helpers/runtime_root` row) |
| Import cycles in component graph | 0 (verified across batches 8892 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 1719 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:
1. Update the `**Source-of-truth snapshot**` header pointer at the top of
this file to the new file.
2. Update the `Cycle of last refresh` header to the cycle that produced the
new snapshot.
3. Update the § Source table values (component count, cycle count, contract
count) to match the new snapshot.
4. 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` (or
`Status: ACCEPTED-RISK`) was unchanged at the start of this review's
batch window.
- **Resolved**: count of rows that transitioned from `OPEN` to
`RESOLVED 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 13.
## 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`