feat: automate classification convergence
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Python Tests / pytest (push) Successful in 21s

This commit is contained in:
codex 2026-08-23 13:05:47 +02:00
parent af68d438d6
commit ff334f1a40
8 changed files with 346 additions and 11 deletions

View file

@ -124,7 +124,7 @@ Process/database health, repository reads, and zero-restarter startup all pass.
```task
id: CUST-WP-0064-T03
status: progress
status: done
priority: high
state_hub_task_id: "6c645778-be59-57b1-bf44-d974a3a1e49f"
```
@ -143,8 +143,16 @@ It then projected the live oldest-three target set (`can-you-assist`,
The existing unpaused Temporal schedule was reconciled unchanged at limit 3
and operator-triggered: it froze exactly those targets, spawned zero tasks,
created three provenance-bearing terminal `no-manifest` snapshots, and moved
`never_count` 94 to 91. Keep this task open for sustainable projection as each
new oldest-N batch is exposed.
`never_count` 94 to 91.
**Done (2026-08-23):** after that controlled batch advanced, the next oldest
three (`citation-work`, `clay-borg`, and `config-atlas`) were selected with
matching `forgejo-archive-v1` references and full 40-character revisions. An
in-worker read-only report probe on deployed Activity Core digest
`sha256:9c611a394c117c8ccfe2fd813c0dda1943ea8a7444aa4bd4742d83712b2cf559`
returned `selected_count=3` and `controlled_source_count=3`. This proves
source-reference projection follows each newly exposed bounded batch rather
than the attended target set; T04 retains only the first unassisted fire.
## Prove real daily freshness improvement

View file

@ -141,6 +141,24 @@ unprojected. Project names and repository identities were not rewritten.
After the first owner delivery, the live projection is 104/117 classified with
13 active null-category records and again zero present-but-unprojected files.
**Repeatable convergence gate (2026-08-23):**
`tools/repo_classification_convergence.py` now derives those counts directly
from the State Hub registry, checks each active record's registered checkout,
validates every present source file against the canonical vocabulary, and
separates missing owner records, present-but-unprojected records, stale
projections without a source file, invalid sources, and duplicate active slugs.
`make classification-status` reports progress; `make classification-check`
fails closed until all active gaps are resolved.
Its first run exposed a stale active registry row hidden by the former
null-category-only check: retired `inter-hub` retained a projected category but
its registered checkout no longer exists. Existing Custodian retirement
evidence records Core Hub as the sole production surface since 2026-07-08, so
the supported State Hub archive endpoint corrected that row without altering
its historical classification. The active fleet is now 103/116 classified;
the same 13 owner-source gaps remain, with no projection or source-validity
failure.
## Indexing note
**Resolved (2026-08-23):** Repo Manager revisions `7a15f1d` and `7b9fdaa`