diff --git a/workplans/CUST-WP-0050-repo-classification-registration-redesign.md b/workplans/CUST-WP-0050-repo-classification-registration-redesign.md index a05275d..4c187b2 100644 --- a/workplans/CUST-WP-0050-repo-classification-registration-redesign.md +++ b/workplans/CUST-WP-0050-repo-classification-registration-redesign.md @@ -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 3–4 — 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