state-hub/workplans/STATE-WP-0075-workstream-route-410-stranglers.md
tegwick 2943251c03
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 4s
chore(workplans): register STATE-WP-0075 hub IDs from fix-consistency
2026-07-10 13:33:37 +02:00

99 lines
No EOL
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: STATE-WP-0075
type: workplan
title: "Workstream REST route 410 stranglers"
domain: infotech
repo: state-hub
status: finished
owner: codex
topic_slug: custodian
planning_priority: high
planning_order: 75
created: "2026-07-10"
updated: "2026-07-10"
state_hub_workstream_id: "b3f4f2cd-f6f4-4518-bc66-6b9f4be9349d"
---
# STATE-WP-0075 — Workstream REST route 410 stranglers
**Parent:** `STATE-WP-0070` T02 (phase-2 legacy retirement).
**Handoff from:** `STATE-WP-0073` T04 (meter-cleared REST key retirement).
**Baseline evidence:** `docs/evidence/legacy-meter-weekly-review-20260710.json`
— phase-1 `/workstreams/*` keys at 0 calls (retirement candidates; ~2/7
consecutive 8h zero windows at capture time). Operator approved early 410 rollout
after caller remediation (`STATE-WP-0072`) drove hot-key counts to zero.
## Goal
Convert remaining phase-1 and phase-2 `/workstreams` REST aliases to **410 Gone**
stranglers that still meter final legacy usage, matching the existing
`DELETE /workstreams/{id}` and `GET /workstreams/workplan-index` pattern.
Preferred `/workplans/*` routes remain the only functional surface.
## Task: Shared retire_legacy_route helper
```task
id: STATE-WP-0075-T01
status: done
priority: high
state_hub_task_id: "a8908d16-3966-4819-a9f9-96697ec8b6a3"
```
1. Add `retire_legacy_route()` to `api/services/legacy_compat.py` — meter usage,
set deprecation headers, raise `HTTPException(410)`.
2. Refactor existing 410 routes (`workplan-index`, `DELETE`) to use the helper.
Done when all 410 stranglers share one code path for metering and headers.
## Task: Phase-1 workstream CRUD stranglers
```task
id: STATE-WP-0075-T02
status: done
priority: high
state_hub_task_id: "f62b7f22-0f84-4a4b-83d7-5df6d9d93c47"
```
Return **410 Gone** on:
- `GET /workstreams/`
- `POST /workstreams/`
- `GET /workstreams/{workstream_id}`
- `PATCH /workstreams/{workstream_id}`
Keep `/workplans/*` handlers unchanged.
## Task: Phase-2 dependency and execution stranglers
```task
id: STATE-WP-0075-T03
status: done
priority: high
state_hub_task_id: "5bf41f1a-a8d9-4514-b0c7-5db84050bd3f"
```
Return **410 Gone** on:
- `POST/GET/DELETE /workstreams/{workstream_id}/dependencies/…`
- `PATCH /execution/workstreams/{workstream_id}/intent`
## Task: Tests, backlog, and parent handoff
```task
id: STATE-WP-0075-T04
status: done
priority: high
state_hub_task_id: "19ebaaa8-5720-4773-a9c6-02f4e1c88e0d"
```
1. Update `tests/test_legacy_meter.py` and `tests/test_routers_core.py` for 410
expectations on all retired keys.
2. Mark phase 12 REST keys retired in
`docs/workplan-terminology-legacy-retirement-backlog.md`.
3. Run `pytest tests/test_legacy_meter.py tests/test_routers_core.py`.
4. Register via `statehub fix-consistency --repo state-hub`.
5. Hand off completion to `STATE-WP-0070` T02 and close `STATE-WP-0073` T04.
Done when tests pass, workplan registered, and parent tasks reflect retirement.