the-custodian/docs/repo-classification-sector-migration-baseline-2026-08-23.md
codex ff334f1a40
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
feat: automate classification convergence
2026-08-23 13:05:47 +02:00

119 lines
5.5 KiB
Markdown

# Repo classification sector migration baseline — 2026-08-23
## Result
The live State Hub registry contains 121 repositories, of which 117 are active.
Thirty-eight active records have a domain association but no projected
`category`; they are not complete Repo Classification Standard projections.
The gap has two distinct causes:
- 14 local checkouts do not contain `.repo-classification.yaml`;
- 24 local checkouts contain the file, but the live registry still projects a
null category.
Those paths require different fixes. The first requires a repo-owner
classification decision. The second requires validation and normal
Repo Manager/State Hub reconciliation; it must not be repaired by directly
editing registry rows.
## Migration rule
The older labels `custodian`, `railiance`, `markitect`, `coulomb_social`,
`personhood`, `foerster_capabilities`, and `netkingdom` identify projects,
estates, or bodies of canon. They are not sector-domain aliases.
Keep those names in project titles, topic identity, architecture, provenance,
and historical records. For `repo_classification.domain`, apply the current
standard's user/customer question and select one allowed sector. Useful review
seeds are:
| Legacy identity | Likely sector starting point | Review constraint |
| --- | --- | --- |
| Custodian | `infotech` | Add `agents` only where agent infrastructure is materially served. |
| Railiance | `infotech` | Use `industrials` only for repos whose intended users are actually in rail/industrial operations. |
| Markitect | `infotech` | Use `agents` as primary only for agent-native products, not merely AI-assisted tooling. |
| Coulomb.social | `communication` | Add other sectors only when a concrete product audience warrants them. |
| Personhood | `agents` or `government` | Rights/governance scope is ambiguous and requires owner review. |
| Foerster Capabilities | `agents` | Preserve the named research project separately from market metadata. |
| NetKingdom | `infotech` | Identity, tenancy, and access control are platform capabilities, not a market alias. |
This table is a triage aid, not an automatic rewrite map.
## Missing source files (14)
`agent-harness`, `binect-chrome`, `binect-js`, `binky-control`, `clay-borg`,
`direkt-vermittlung-de`, `polycode-sim`, `railiance-telemetry`,
`ralph-workplan`, `rein-aharness`, `rein-openweights`, `tele-mcp`,
`testdrive-jsui`, and `timeline-svg`.
## Source file present but registry category null (24)
`config-atlas`, `disaster-control`, `glas-harness`, `ground-game`,
`kings-guard`, `ops-mason`, `policy-nexus`, `prj-canon-federation`,
`prj-forgejo-org-refactor`, `prj-state-hub-retirement`, `qonto-assistant`,
`rail-knative`, `rapp-openbao`, `rapp-policy-nexus`, `rapp-postgres`,
`rapp-qonto`, `rapp-sbom-nexus`, `resource-control`, `risk-nexus`,
`sand-boxer`, `secrets-engine`, `tenant-engine`, `test-driver`, and
`zone-engine`.
## Reproduction
Run `make classification-status`. The command reads active repository records
from `GET /repos/`, compares every registered `local_path` with its
`.repo-classification.yaml`, validates present source files against the canon,
and reports owner-source gaps separately from projection gaps. Use
`make classification-check` as the eventual fail-closed convergence gate.
The initial observed counts were:
```text
registered: 121
active: 117
active with null category: 38
missing source file: 14
source file present but unprojected: 24
```
Acceptance is zero unexplained null category projections among active repos.
A governed archived/decommissioned record or an explicit classification
exclusion is not unexplained.
## Implementation checkpoint
The same query after API reconciliation reports:
```text
registered: 121
active: 117
active with projected classification: 103
active with null category: 14
missing source file: 14
source file present but unprojected: 0
```
All 24 present source files were validated and projected through State Hub's
REST API. Twenty-one completed through the existing registration utility.
`rail-knative`, `rapp-qonto`, and `rapp-sbom-nexus` initially exposed a utility
defect because classification PATCHes also sent Git identity metadata; their
multi-root fingerprints exceeded the single-SHA database field. State Hub
revision `57c3e08` separates those concerns, supports primary-domain updates,
and uses the same single-root fingerprint projection as token attribution. The
three live repros subsequently completed without invalid results.
The initial remaining null set exactly equalled the 14 missing-source
repositories above. Each owner received a State Hub handoff requiring human
review, local validation, a committed `.repo-classification.yaml`, and revision
evidence. `rein-aharness` subsequently delivered revision `81f9279`; validation,
digest verification, and API projection passed. The current checkpoint is
104/117 classified, 13 missing-source/null-category repos, and zero present
source files left unprojected. This is governed pending work rather than an
unexplained projection failure.
The first automated convergence run additionally found `inter-hub` still
marked active with a projected classification even though its registered
checkout had been removed. Custodian retirement evidence already records Core
Hub as the sole production surface from 2026-07-08. The supported State Hub
archive transition corrected the stale row while preserving its history. The
current active denominator is therefore 116: 103 classified, 13
missing-source/null-category, zero present-but-unprojected, and zero invalid
source records.