feat(classification-spine): implement STATE-WP-0065 repo-anchored model

Replace the ad-hoc coordination-domain spine with the Repo Classification
Standard: 14 market domains, classification columns on managed_repos, and
workplans anchored by repo_id (topic_id optional).

- Add Alembic migration d8e9f0a1b2c3 with data backfill and workstream→workplan rename
- Add api/classification.py validation and register-from-classification tooling
- Expose workplan-first REST/MCP surface with legacy workstream aliases
- Add C-24 consistency rule and legacy domain frontmatter mapping
- Update dashboard repos page with category/capability/stake filters
- Update orientation docs; mark STATE-WP-0065 finished
This commit is contained in:
2026-06-22 13:52:13 +02:00
parent 279be4ffbd
commit 0949d4c0d8
84 changed files with 4494 additions and 1111 deletions

View File

@@ -1,8 +1,15 @@
## Architecture
<!-- TODO: Describe the key design decisions and component structure.
Key modules, data flows, external integrations, state machines, etc. -->
State Hub uses a **repo-anchored classification spine** (STATE-WP-0065):
- **Primary anchor:** `managed_repos` + committed `.repo-classification.yaml`
- **Market domain:** derived from classification (`domain` field) — 14 fixed values
- **Workplans:** table `workplans`, `repo_id` required, `topic_id` optional
- **Legacy:** `/workstreams/` REST routes and `workstream_*` MCP tools are aliases
Classification canon lives in `the-custodian/canon/standards/`.
Validation: `api/classification.py` · registration: `make register-from-classification`.
## Quick Reference
`~/state-hub/mcp_server/TOOLS.md` — MCP tool reference
`~/state-hub/mcp_server/TOOLS.md` — MCP tool reference

View File

@@ -1,5 +1,8 @@
**Purpose:** Standalone State Hub service repository extracted from the-custodian/state-hub. Owns the FastAPI API, MCP server, dashboard, migrations, consistency tooling, and operational docs.
**Domain:** custodian
**Classification:** tooling · infotech (see `.repo-classification.yaml`)
**Repo slug:** state-hub
**Topic ID:** cee7bedf-2b48-46ef-8601-006474f2ad7a
**Topic ID:** cee7bedf-2b48-46ef-8601-006474f2ad7a *(legacy optional tag)*
Coordination spine is **repo-anchored** — workplans bind to `repo_id`, market
domain is derived from classification, not from the old coordination-domain model.

View File

@@ -43,7 +43,7 @@ For each file with `status: ready`, `active`, or `blocked`, note pending
**Step 4 — Present brief**
1. **Active workstreams** for `custodian` — title, task counts, blocking decisions
1. **Active workplans** for this repo — title, task counts, blocking decisions
2. **Pending tasks** from `workplans/` + any `[repo:state-hub]` hub tasks
3. **Goal guidance** — if `goal_guidance` in summary:
- `needs_workplan`: surface as top action — *"Repo goal '{title}' has no workplan yet"*
@@ -51,12 +51,13 @@ For each file with `status: ready`, `active`, or `blocked`, note pending
4. **Suggested next action** — highest-priority open item
5. **SBOM status** — flag if `last_sbom_at` is unset for this repo
If no workstreams: follow First Session Protocol (`first-session.md`).
If no workplans: follow First Session Protocol (`first-session.md`).
**During work:** `record_decision()` · `add_progress_event()` · `resolve_decision()`
> State Hub is a *read model*. Bootstrap tools (`create_workstream`, `create_task`)
> State Hub is a *read model*. Bootstrap tools (`create_workplan`, `create_task`)
> are First Session Protocol only. Work structure belongs in repo files (ADR-001).
> Repo registration uses `.repo-classification.yaml` via `register_repo_from_classification`.
**Session close:**
With MCP tools: