CUST-WP-0050: drop T03, re-home T04-T10 to STATE-WP-0065, add T11

Per 2026-06-22 review: T03 dropped (registering unregistered repos under the
old model = legacy to clean up). Implementation re-homed to state-hub-local
STATE-WP-0065; T04/T05/T10 merged into one spine migration (P1). CUST-WP-0050
stays the coordination driver. T11 (post-cutover inventory) replaces T03.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 11:52:55 +02:00
parent 9456b3812e
commit 4099179374

View File

@@ -208,164 +208,117 @@ agents-vs-infotech primary-domain choice, keeping both kaizen-agentic and
llm-connect as `agents` primary (`infotech` secondary). All 11 files flipped to
`classified_by: human` and re-validated clean against T01. Task **done**.
### T03 - Classify the full Gitea inventory
### T03 - Classify the full Gitea inventory — DROPPED
```task
id: CUST-WP-0050-T03
status: todo
status: cancel
priority: high
state_hub_task_id: "81489716-61ef-4207-ab8a-5877843281de"
```
Produce proposed `.repo-classification.yaml` for every active repo in the Gitea
`coulomb` org (~70), prioritising the 57 already-registered and the ~18
unregistered repos. Deliver as per-repo PRs for owner/human review. Maintain an
explicit **exclusion list** (forks, `lando_worsch/python-snake`, archived
`test_domain_v2`) recorded in this workplan.
**Dropped 2026-06-22.** T03 conflated *authoring classification files* with
*registering repos*. Doing a ~70-repo PR storm before the vocabulary and schema
are proven is premature and high-blast-radius, and registering the ~18
unregistered repos now would land them in the **old** domain model — creating
legacy only to clean it up. Classifying + registering the remaining inventory is
deferred to **T11**, executed **under the new model after cutover**. The 11
custodian fixtures (T02) plus T01 are sufficient to build and prove the redesign.
Done when every non-excluded active repo has a committed, validated classification
file (or is on the recorded exclusion list).
### Phase 34 — RE-HOMED to STATE-WP-0065 (state-hub)
### Phase 3 — State Hub redesign (executed in /home/worsch/state-hub)
Per this plan's repo boundary and the 2026-06-22 decision, the implementation of
the State Hub redesign now lives in a **state-hub-local workplan**:
`state-hub/workplans/STATE-WP-0065-repo-anchored-classification-spine.md`
(workstream `8dc7d106-11e2-41df-b512-89ed69d2a65f`). CUST-WP-0050 remains the
**coordination driver** (canon standard, decisions D1/D1a, ADR-005). The original
implementation tasks below are **cancelled here** (re-homed, not abandoned); the
efficient regrouping merges the three spine-rewriting tasks into one migration:
### T04 - Redesign schema: replace domains, add classification
| Was (CUST-WP-0050) | Now (STATE-WP-0065) |
| --- | --- |
| T04 schema + T05 data migration + T10 re-anchor/rename | **P1** single Alembic spine migration |
| T04/T10 API + validation surface | **P2** API / MCP / validation |
| T06 auto-registration | **P3** auto-registration tooling |
| T07 reclassify existing | folded into **P3** (lazy, as committed files appear) |
| T08 surfaces + T09 cutover | **P4** surfaces & cutover |
```task
id: CUST-WP-0050-T04
status: todo
status: cancel
priority: high
state_hub_task_id: "b61f6267-c2b2-4325-95fa-30ee899ce7d1"
```
Replace the `domains` table contents with the 14 fixed market domains and add
classification storage to `managed_repos`: `category`, primary `domain_id`,
`secondary_domains[]`, `capability_tags[]`, `business_stake[]`,
`business_mechanics[]`, plus provenance (`classified_at`, `classified_by`,
`standard_version`). Enforce the allowed-values from T01 at the API boundary.
Make `repo_id` the **required** workplan anchor, derive market-domain from the
repo's classification, and demote/retire the `topic`/`domain` spine (see D1 and
T10). Provide an Alembic migration and updated SQLAlchemy models + Pydantic
schemas.
Done when the schema/model/API accept and validate the full classification and
reject invalid values, with a forward migration and a tested downgrade path.
### T05 - Migration mapping + data migration
Re-homed → STATE-WP-0065 P1 (schema: domains→14 market domains + classification on `managed_repos`).
```task
id: CUST-WP-0050-T05
status: todo
status: cancel
priority: high
state_hub_task_id: "171fa385-4d78-41ea-b749-ac3f9082fe47"
```
Define and apply the mapping from the old 14 domains/topics to the new model
(guided by standard §15 Migration Notes), re-pointing existing topics,
workstreams, goals, decisions, progress events, and charter `topic_id`
references with **no orphaned workstreams**. Resolve the 2026-06-21 discrepancies:
reconcile `markitect-project``markitect-main`, retire phantom
`railiance-bootstrap`/`railiance-hosts` (or relink), collapse the
`vergabe_teilnahme` duplicate, and decide `personhood`'s disposition (charter-only
vs retire).
Done when a dry-run migration report is reviewed and the applied migration leaves
zero orphaned coordination records; the discrepancy list is resolved or explicitly
deferred with reasons.
### T06 - Auto-registration tooling
Re-homed → STATE-WP-0065 P1 (data migration + discrepancy resolution, same window as schema).
```task
id: CUST-WP-0050-T06
status: todo
status: cancel
priority: high
state_hub_task_id: "6ae14007-d6d2-4395-814e-ace91486a953"
```
Build an idempotent `register-from-classification` capability (Make target +
script + MCP tool) that, given a repo (local path or Gitea API), reads
`.repo-classification.yaml`, validates against T01, and upserts the
`managed_repo` with full classification. Support a **bulk** run over the Gitea
inventory and reclassification of existing rows. Reuse the k3s/Gitea access path
documented during the 2026-06-21 review (Gitea runs in k3s on coulombcore;
reach it via `kubectl port-forward svc/gitea-http`).
Done when one command registers/reclassifies every repo with a valid file and
emits a report of registered / updated / skipped / invalid.
### T07 - Reclassify existing registrations
Re-homed → STATE-WP-0065 P3 (`register-from-classification` bulk/idempotent tooling).
```task
id: CUST-WP-0050-T07
status: todo
status: cancel
priority: medium
state_hub_task_id: "6411bf3f-9de2-4bcd-9ffe-6209cda6ba93"
```
Run T06 against the classification files for the 57 previously-registered repos,
reconciling each to the new taxonomy and retiring phantom/duplicate records.
Done when all previously-registered repos reflect their new classification and
the managed-repo set matches the (non-excluded) Gitea inventory.
### Phase 4 — Consuming surfaces & cutover
### T08 - Update dashboard, consistency checker, MCP/REST, docs
Re-homed → STATE-WP-0065 P3 (lazy reclassification of existing registrations as committed files appear).
```task
id: CUST-WP-0050-T08
status: todo
status: cancel
priority: medium
state_hub_task_id: "09951aec-2960-4c50-b73d-4e2e7bd285c9"
```
Update the dashboard to navigate by category/domain/capability/business-stake;
add a consistency rule flagging registered repos lacking a valid
`.repo-classification.yaml`; expose list/filter-by-classification in MCP/REST; and
update orientation docs (`SCOPE.md`, `README.md`, `.claude/rules/*`) that
reference the old "domains".
Done when the dashboard renders the new taxonomy, the consistency checker has a
classification rule, and docs no longer assume the old domain model.
### T09 - Cutover, verification, retire old model
Re-homed → STATE-WP-0065 P4 (dashboard, consistency rule, MCP/REST filters, docs).
```task
id: CUST-WP-0050-T09
status: todo
status: cancel
priority: medium
state_hub_task_id: "babbb80a-c52d-4ec2-b217-2f6196a2e5f3"
```
Switch orientation/registration tooling to the new model end-to-end, archive the
old domain semantics, and run `make fix-consistency REPO=the-custodian`.
Done when an end-to-end pass (classify → auto-register → dashboard view) is
verified and the old ad-hoc domain model is retired.
### T10 - Re-anchor to repos + rename workstream → workplan
Re-homed → STATE-WP-0065 P4 (cutover, verification, retire old model).
```task
id: CUST-WP-0050-T10
status: todo
status: cancel
priority: high
state_hub_task_id: "bee16416-a67f-4155-93d7-09f278daa04f"
```
Re-homed → STATE-WP-0065 P1 (re-anchor `repo_id` required + `workstream → workplan` rename, merged into the spine migration).
Two coupled changes to the coordination spine, executed in `/home/worsch/state-hub`:
### Phase 4 (custodian) — Post-cutover inventory
1. **Re-anchor:** make `repo_id` the required anchor for a workplan, derive
market-domain from the repo's classification, and remove the
`topic`/`domain` parent spine (or demote `topic` to an optional cross-repo
tag). Promote `RepoGoal` to the goal primitive; reduce `DomainGoal` to a thin
rollup. Cross-repo workplans anchor to a **project repo** per ADR-005.
2. **Rename:** rename `workstream → workplan` across the DB table, SQLAlchemy
models, Pydantic schemas, REST routes, and MCP tools/resources, so the Hub
vocabulary matches the repo `workplans/` files and current usage. Provide
migration + compatibility/redirect notes for existing tool callers.
### T11 - Classify & register remaining Gitea inventory (post-cutover)
Sequence with T04/T05 (same migration window where practical). Done when a
workplan is anchored to a repo with no required topic, market-domain resolves
from classification, and the API/MCP surface uses "workplan" with green tests.
```task
id: CUST-WP-0050-T11
status: todo
priority: medium
```
Replaces dropped T03. **After** STATE-WP-0065 cutover proves the new model,
author `.repo-classification.yaml` for the remaining active Gitea repos (the ~18
unregistered + any not yet migrated) and bulk-register them via the
STATE-WP-0065 P3 tooling — **under the new model**, no legacy detour. Maintain an
explicit **exclusion list** (fork `tegwick/the-custodian`,
`lando_worsch/python-snake`, archived `test_domain_v2`, inactive repos).
Done when every non-excluded active Gitea repo has a committed, validated
classification file and a `managed_repo` row under the new taxonomy (or is on the
recorded exclusion list).
## Open Questions / Decisions