repo-manager/docs/evidence/2026-10-04-freshness-coverage.md
tegwick e3940cdc26 Add read-only freshness coverage measurement and 2026-10-04 evidence
For STATE-WP-0094-T05: runner revision, active definition, per-repo Forge
commit, projection sync proxy, queued receipts and freshness window, with
explicit gaps and coverage holes. No writes to hub, cluster or Forge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 671493@bnt-lap001
Assistant-Session: 60d7b11f-78f9-4731-9367-918511b2762d
2026-10-04 12:46:01 +02:00

60 lines
4.2 KiB
Markdown

# Freshness coverage measurement — 2026-10-04
For STATE-WP-0094-T05 (freshness-coverage half). Raw data:
`docs/evidence/2026-10-04-freshness-coverage.json`, produced read-only by
`uv run python -m repo_manager.freshness --out <file>` at 2026-10-04T10:40Z.
Sources: State Hub REST (GET only) on the primary (`instance_role=primary`,
`railiance01`, schema `a0b1c2d3e4f5`); `git ls-remote` against Forge;
`kubectl get` (read-only); `statehub outbox status`. No workstation checkout
was read (ADR-002). There were no writes to the hub, cluster, Forge or any checkout.
## Required fields and what the sources supply
| T05 field | Result | Source / gap |
| --- | --- | --- |
| Exact runner revision | **No scheduled C-rule runner exists.** Engine source HEAD `a8184d5e14fb` (repo-manager, not deployed: no repo-manager Deployment in the cluster). Adapter image `state-hub:main-5dd3df9`; scheduler image `activity-core@sha256:75e240ac…` | kubectl, git |
| Active definition | **None active.** Only C-rule definition live in `activity-core/actcore-external-activity-definitions`: `state-hub-consistency-sweep.md` (id `7c4e9a12-…`, v1.1, `enabled: false`, `status: paused`, `*/15`), paused by RMGR-WP-0005-T11. It is also the legacy `--all --remote` sweep path, which ADR-002 excludes | kubectl |
| Per-repository source commit | 141/141 active repositories resolved a Forge HEAD | `git ls-remote` |
| Last successful receipt | **Gap.** The hub does not persist projection receipts or expected/derived commits; `rmgr sync` returns the receipt only to its caller. Proxy: newest `backing_synced_at` per repository snapshot. This proxy shows that a sync happened. It does not show that the projection equals Forge HEAD | hub snapshot |
| Failed / queued receipts | Queued: edge outbox 0 pending / 0 conflict. Failed: **gap.** No sync/projection kinds in the mutation meter (1305 entries). `/ops-runs/summary` is unavailable (`ACTIVITY_CORE_URL is not configured`) | statehub outbox, hub |
| Measured freshness window | See below. The window is observed, not an SLA, because no schedule drives it | hub snapshot |
## Coverage numbers (active repositories = 141 of 146)
- Projection sync timestamp present: 136; absent: 5
- Synced within 24 h: 35 (25 %); within 7 d: 120 (85 %); within 30 d: 124
- Age of last projection sync (hours): min 0.2, median 109.2, p90 292.1, max 949.4 (~39.5 d)
- Task dependency rows projected: 524. They were not reconciled by normal receiving; see the State Hub T05 note.
## Explicit coverage holes
Measured now:
1. `access-engine`: snapshot request timed out, so its freshness is unknown.
2. `clay-borg`, `pr-hall-of-helix`, `python-snake`: 0 projected workplans and no sync stamp.
3. `repo-seed`: 2 workplans, no `backing_synced_at`.
4. Older than 7 days (16): `railiance-forge`, `ralph-workplan`, `rapp-issue-core`,
`rapp-sbom-nexus`, `repo-scoping`, `shard-wiki`, `target-revenue`, `tele-mcp`,
`testdrive-jsui`, `timeline-svg` (all ~949 h); `tmux-amq` (940 h);
`whynot-design` (862 h); `rapp-canned-prompts` (625 h); `rein-openweights`,
`resource-control` (292 h); `railiance-enablement` (243 h).
5. All 141: projected commit is unknown, so Forge HEAD equality cannot be proven for any repository.
Historical registrar failures (kept as holes, not counted as covered):
6. RMGR-WP-0005-T11: legacy sweep paused because railiance01 checkouts targeted
the stale `gitea-remote` lineage. Nothing since has proved coverage for the repositories that sweep touched.
7. RMGR-WP-0005 rail-kubernetes (2026-08-22): wrapper reported `failed` before
file writeback. It was fixed in `c90f701`, but there is no later scheduled receipt.
8. RMGR-WP-0019-T03 (wait): Activity receiving refused three empty duplicate
projections; disposition is pending under STATE-WP-0095-T04 (decision `91b7c633-…`).
9. RMGR-WP-0014/0015: unknown aliases, same-parent UUID collisions and active
unbound invalid records still refuse before writes. Any repository that hits these is unsynchronised by design.
## Conclusion
No supported freshness schedule exists. The T05 freshness requirement is not met.
Freshness depends on ad hoc syncs (25 % of repositories within 24 h), and
receipts are not durable. Proposal: RMGR-WP-0020 (bounded Activity Core → Repo
Manager runner). It is not enabled.