Introduce flows/workplan.yaml and /flows/workplan/* routes alongside the legacy workstream flow. Dashboard, README, and MCP flow docs now prefer open_workplans with open_workstreams fallback until dual-key retirement.
5.2 KiB
Workplan Terminology Legacy Retirement Backlog
Date: 2026-07-08
Owner: STATE-WP-0069 (child of CUST-WP-0055)
Baseline: the-custodian/docs/evidence/workstream-terminology-baseline-20260708.json
This backlog ranks every metered legacy workstream interface still present in
State Hub. Removal requires legacy-meter evidence — zero measured calls in
the review window, replacement verified, no manual hold.
Authoritative interface matrix: docs/workplan-terminology-transition.md.
Retirement rule (unchanged)
- Registered in
legacy-meter - Replacement reference verified
- No manual hold
- Zero measured calls in the review window
Activity-core runs the weekly review; State Hub owns usage state and removal.
Scan allowlist (grep tooling)
Exclude these paths from non-compat prose counts (see
the-custodian/tools/scan_workstream_allowlist.yaml):
| Area | Paths |
|---|---|
| Compat REST | api/routers/workstreams.py, api/routers/workstream_dependencies.py |
| Legacy meter | api/routers/legacy_meter.py, api/services/legacy_meter.py, api/models/legacy_meter.py, migrations/ |
| MCP aliases | mcp_server/ |
| Transition docs | docs/workplan-terminology-transition.md, this file, docs/nats-event-subjects.md |
| Regression tests | tests/test_legacy_meter.py, tests/test_routers_core.py |
| CLI compat | custodian_cli.py, scripts/consistency_check.py |
Dashboard prose is not allowlisted — STATE-WP-0069 T02 drives it to zero
prose:workstream in dashboard/src/.
Ranked backlog
Risk order: REST > MCP > events > dashboard prose > internal identifiers.
| Phase | Legacy-meter key | Replacement | Risk | Owner task |
|---|---|---|---|---|
| 1 | rest_api:GET /workstreams/ |
GET /workplans/ |
REST | T04 |
| 1 | rest_api:POST /workstreams/ |
POST /workplans/ |
REST | T04 |
| 1 | rest_api:GET /workstreams/{workstream_id} |
GET /workplans/{workplan_id} |
REST | T04 |
| 1 | rest_api:PATCH /workstreams/{workstream_id} |
PATCH /workplans/{workplan_id} |
REST | T04 |
| 1 | rest_api:DELETE /workstreams/{workstream_id} |
DELETE /workplans/{workplan_id} |
REST | T04 |
| 1 | rest_api:GET /workstreams/workplan-index |
GET /workplans/index |
REST | T04 |
| 2 | rest_api:GET /workstreams/{workstream_id}/dependencies/ |
GET /workplans/{workplan_id}/dependencies/ |
REST | T04 |
| 2 | rest_api:POST /workstreams/{workstream_id}/dependencies/ |
POST /workplans/{workplan_id}/dependencies/ |
REST | T04 |
| 2 | rest_api:DELETE /workstreams/{workstream_id}/dependencies/{dep_id} |
DELETE /workplans/{workplan_id}/dependencies/{dep_id} |
REST | T04 |
| 2 | rest_api:PATCH /execution/workstreams/{workstream_id}/intent |
PATCH /execution/workplans/{workplan_id}/intent |
REST | T04 |
| 3 | mcp:create_workstream |
create_workplan |
MCP | T03 |
| 3 | mcp:update_workstream |
update_workplan |
MCP | T03 |
| 3 | mcp:update_workstream_status |
update_workplan_status |
MCP | T03 |
| 3 | mcp:list_workstreams |
list_workplans |
MCP | T03 |
| 3 | state://workstreams/{topic_slug} |
state://workplans/{topic_slug} (proposed) |
MCP resource | T03 |
| 4 | event_subject:org.statehub.workstream.completed |
org.statehub.workplan.completed |
Event | T05 |
| 5 | Dashboard nav label Workstreams |
Workplans (URL compat retained) |
Prose | T02 |
| 5 | dashboard/src/index.md user-facing copy |
workplan-first strings | Prose | T02 |
| 6 | open_workstreams summary cache key |
open_workplans |
Internal | T06 |
| 6 | flows/workstream.yaml entity id |
flows/workplan.yaml (custodian.workplan.v1) |
Internal | T06 (workplan flow shipped; workstream yaml retained) |
Query-param aliases (not separately metered today)
These accept workstream_id alongside workplan_id on preferred routes:
GET /tasks/—api/routers/tasks.pyGET /decisions/—api/routers/decisions.pyGET /token-events/—api/routers/token_events.py
Retire param aliases in T04 after route retirement; document callers via
weekly review component headers (X-StateHub-Component).
Grep budget by phase
Measured with:
python ~/the-custodian/tools/scan_workstream_terminology.py --repo state-hub --apply-allowlist --json
python ~/the-custodian/tools/scan_workstream_terminology.py --repo state-hub --check-prose-gate
| Phase | Target |
|---|---|
| After T02 | Zero prose:workstream in dashboard/src/ |
| After T03 | MCP tool docstrings and error messages workplan-first |
| After T04 | OpenAPI lists /workplans only; /workstreams returns 410 or unmounted |
| After T07 | Total repo hits reduced ≥50% from 2026-07-08 baseline |
Sequencing
T01 backlog (this document) ──► T02 dashboard prose
├─► T03 MCP deprecation warnings → alias removal
├─► T04 REST retirement (per-key zero usage)
├─► T05 stop dual-publish (after CUST-WP-0055 T03)
├─► T06 internal renames
└─► T07 closeout
Related workplans
STATE-WP-0054— compatibility layer and legacy-meter (finished)STATE-WP-0069— this retirement planCUST-WP-0055— fleet coordination; activity-core catalog alignment (T03)