STATE-WP-0062 T5: docs, first-party↔repo test, mark workplan finished

- Add /docs/services reference (two-dimension model, persistence, API) and a
  pointer note from /docs/tpsc; add it to the Reference nav.
- Add a test asserting first_party.repo_slug resolves to a managed_repos FK
  (8 services tests green).
- Mark STATE-WP-0062 tasks done / status finished.

Known classes seeded in the live catalog via the API (Gitea, Postgres as
self-hosted/third-party; State Hub as self-hosted/first-party at Level 2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 21:16:37 +02:00
parent f14c225dd9
commit ce82ada0fa
5 changed files with 100 additions and 19 deletions

View File

@@ -4,11 +4,12 @@ type: workplan
title: "Two-dimension service catalog (hosting × development) + Services nav section"
domain: custodian
repo: state-hub
status: proposed
status: finished
owner: codex
topic_slug: custodian
created: "2026-06-19"
updated: "2026-06-19"
state_hub_workstream_id: "b5c9d93f-9f5e-4d10-bb3b-90322c7419b7"
---
# STATE-WP-0062 — Two-dimension service catalog + Services nav section
@@ -92,55 +93,59 @@ tables (each 1:1, optional, keyed by `service_id`):
```task
id: STATE-WP-0062-T01
status: todo
status: done
priority: high
state_hub_task_id: "f74612f6-b442-4b5f-ac4d-7bc6d1d4883f"
```
- [ ] `api/models/service_catalog.py`: `ServiceCatalog` core + `ServiceThirdParty`,
- [x] `api/models/service_catalog.py`: `ServiceCatalog` core + `ServiceThirdParty`,
`ServiceFirstParty`, `ServiceCloud`, `ServiceSelfHosted` extensions.
- [ ] Alembic migration; register in `api/models/__init__.py`.
- [ ] Data migration: copy `tpsc_catalog``service_catalog` + `service_cloud`
- [x] Alembic migration; register in `api/models/__init__.py`.
- [x] Data migration: copy `tpsc_catalog``service_catalog` + `service_cloud`
with `(cloud_hosted, third_party)`; backfill `service_id` on TPSC entries.
### T2 — API + MCP
```task
id: STATE-WP-0062-T02
status: todo
status: done
priority: high
state_hub_task_id: "373cddfa-c85b-47a7-bb8e-c86e9341c237"
```
- [ ] `GET /services/catalog` with `hosting_type` / `development_type` /
- [x] `GET /services/catalog` with `hosting_type` / `development_type` /
`maturity_level` filters; `GET /services/{slug}` returns core + applicable
extensions.
- [ ] Write path to register/update a service and its extensions (generalise
- [x] Write path to register/update a service and its extensions (generalise
`register_service`; keep a `third_party`-shaped compatibility wrapper).
- [ ] Keep `/tpsc/*` working as a `development_type=third_party` view.
- [x] Keep `/tpsc/*` working as a `development_type=third_party` view.
### T3 — Services nav section + four-quadrant pages
```task
id: STATE-WP-0062-T03
status: todo
status: done
priority: high
state_hub_task_id: "b14bbbdd-347e-4f62-9ac3-ad42360fa766"
```
- [ ] Replace the top-level "Services (TPSC)" entry with a **Services** section.
- [ ] Pages: **Third Party** (current TPSC view), **First Party** (with internal
- [x] Replace the top-level "Services (TPSC)" entry with a **Services** section.
- [x] Pages: **Third Party** (current TPSC view), **First Party** (with internal
repo link + **Service Maturity Level** column), **Self Hosted** (three-helix
infra view). Each is a filtered view over `service_catalog`.
- [ ] Surface the two dimensions explicitly (e.g. a quadrant filter) so the four
- [x] Surface the two dimensions explicitly (e.g. a quadrant filter) so the four
classes are navigable.
### T4 — Terminology: Tier → Level (Service DoM only)
```task
id: STATE-WP-0062-T04
status: todo
status: done
priority: medium
state_hub_task_id: "1c296d7a-c090-430f-8d0d-27b548d88d9e"
```
- [ ] `policies/service-dom.md`: rename "Tier 1/2/3" → "Level 1/2/3"; column
- [x] `policies/service-dom.md`: rename "Tier 1/2/3" → "Level 1/2/3"; column
header "Service Maturity Level". **Do not** touch the DoI tier subsystem
(`repos.md`, `check_doi.py`, `doi_cache` migration) — that is a separate,
established concept.
@@ -149,15 +154,16 @@ priority: medium
```task
id: STATE-WP-0062-T05
status: todo
status: done
priority: medium
state_hub_task_id: "2edd68ee-0d9a-431d-9891-73a0f6be6a41"
```
- [ ] Tests: model + migration round-trip, dimension filters, TPSC back-compat
- [x] Tests: model + migration round-trip, dimension filters, TPSC back-compat
view, first-party↔repo link.
- [ ] Docs: `/docs/services` reference; update `/docs/tpsc` to point at the
- [x] Docs: `/docs/services` reference; update `/docs/tpsc` to point at the
generalised model.
- [ ] Seed the known classes: TPSC SaaS (cloud/third-party), self-hosted OSS from
- [x] Seed the known classes: TPSC SaaS (cloud/third-party), self-hosted OSS from
`tools.md` (Gitea, Postgres — self-hosted/third-party), and State Hub itself
(self-hosted/first-party).