sbom-nexus/docs/evidence/SBOM-WP-0002-T02-repository-projection-rehearsal-2026-08-22.md
tegwick e83c875150 docs: close production deployment and import gates
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a028f0-a42f-7582-89a8-ebaad7343834
2026-08-22 18:24:44 +02:00

57 lines
2 KiB
Markdown

# SBOM-WP-0002-T02 repository projection rehearsal — 2026-08-22
## Result
The projection-only synchronization path is implemented and rehearsed against
an isolated SBOM Nexus database. It does not scan repositories, invoke an
ingest route, or create snapshots.
## Source and selection
The current Repo Manager compatibility projection was read from State Hub's
`GET /repos/` boundary using explicit host id `bnt-lap001`:
| Measure | Result |
| --- | ---: |
| Source repositories | 120 |
| Active | 116 |
| Inactive | 4 |
| Selected checkout path | 120 |
The dry-run used an intentionally unreachable target URL and still completed,
proving that dry-run does not contact or mutate the Nexus target.
## Apply rehearsal
An ephemeral SQLite-backed Nexus on `127.0.0.1:18010` received the projection:
- 120 upserts;
- 120 exact active/path matches on read-back;
- zero missing, mismatched, or extra target repositories;
- zero SBOM ingest calls and zero snapshots.
The bounded catch-up query with `limit=3` returned exactly three of 116 active,
never-attempted repositories, ordered deterministically by slug:
`activity-core`, `adaptive-pricing`, and `agent-harness`. The response reported
`selected_count=3`, `never_count=116`, `stale_count=116`, and
`total_count=116`.
Production apply remains gated on the dark PostgreSQL runtime in
`SBOM-WP-0002-T01`.
## Production result
After T01 became healthy, the same path synchronized all 120 projections into
the private PostgreSQL-backed runtime: 120 matched, with zero missing,
mismatched, or extra rows. The snapshot count remained zero. The bounded query
again selected exactly three of 116 active repositories. Full production and
history-import evidence is recorded in
`SBOM-WP-0002-T03-production-history-import-2026-08-22.md`.
## Verification
- `uv run ruff check src tests scripts`: pass
- `uv run pytest -q`: 15 passed, 1 conditional PostgreSQL skip
- projection dry-run: 120 would-upsert, target not contacted
- projection apply/read-back: 120/120 matched
- bounded catch-up: 3/3 selected in deterministic order