diff --git a/docs/evidence/STATE-WP-0079-legacy-retirement-20260922.json b/docs/evidence/STATE-WP-0079-legacy-retirement-20260922.json new file mode 100644 index 0000000..75e22ce --- /dev/null +++ b/docs/evidence/STATE-WP-0079-legacy-retirement-20260922.json @@ -0,0 +1,772 @@ +{ + "captured_at": "2026-09-22T09:23:05.863095+00:00", + "workplan": "STATE-WP-0079", + "task": "STATE-WP-0079-T05", + "api_base": "http://127.0.0.1:8000", + "health": { + "status": "ok", + "db": "connected", + "instance_role": "primary", + "instance_label": "railiance01", + "schema": { + "status": "ok", + "applied": "d7e8f9a0b1c2", + "expected": "d7e8f9a0b1c2" + } + }, + "before_ref": "docs/evidence/legacy-meter-weekly-review-20260922.json (06:00Z capture; all three listed as retirement_candidate)", + "replacement_checks": { + "rest_api:POST /workstreams/": "POST /workplans/ in live OpenAPI; GET /workplans/ 200", + "rest_api:PATCH /workstreams/{workstream_id}": "PATCH /workplans/{workplan_id} in live OpenAPI", + "rest_api:GET /sbom/": "http://sbom-nexus.sbom-nexus.svc.cluster.local:8010/sbom/ returned 200 from the State Hub pod on railiance01 (node 92.205.62.239)" + }, + "retired_by": "founder, attended shell (PATCH /legacy-meter/interfaces/{id}) at 2026-09-22T09:22:56Z", + "retired_interfaces": [ + { + "id": "d0294dce-7913-4268-94c3-1b2502aefb0f", + "interface_key": "rest_api:GET /sbom/", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:06:38.703608Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.503646Z", + "created_at": "2026-08-22T17:06:38.703608Z", + "updated_at": "2026-09-22T09:22:56.498576Z" + }, + { + "id": "b1aae931-b51f-4a85-a723-865dd65f6132", + "interface_key": "rest_api:PATCH /workstreams/{workstream_id}", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T06:09:41.901035Z", + "replacement_ref": "/workplans/{workplan_id}", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.610064Z", + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-09-22T09:22:56.603117Z" + }, + { + "id": "ed6451c9-d2cc-4486-9afe-d3852782cabc", + "interface_key": "rest_api:POST /workstreams/", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T07:40:24.168535Z", + "replacement_ref": "/workplans/", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.716384Z", + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-09-22T09:22:56.710100Z" + } + ], + "days": 7, + "after": { + "generated_at": "2026-09-22T09:23:07.696016Z", + "window_start": "2026-09-15T09:23:07.613328Z", + "window_end": "2026-09-22T09:23:07.613328Z", + "cadence": "weekly", + "activity_core_handoff": { + "activity_id": "statehub-legacy-interface-review", + "cadence": "weekly", + "source_endpoint": "/legacy-meter/weekly-review", + "state_owner": "state-hub", + "scheduler_owner": "activity-core" + }, + "interfaces": [ + { + "interface": { + "id": "8051fb40-66c9-4dc4-a413-13e8573e04a3", + "interface_key": "event_subject:org.statehub.workstream.completed", + "interface_kind": "event_subject", + "legacy_since": "2026-06-04T06:09:42.198193Z", + "replacement_ref": "org.statehub.workplan.completed", + "owner_component": "state-hub.events", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:06.871333Z", + "created_at": "2026-06-04T06:09:42.198193Z", + "updated_at": "2026-08-31T08:55:06.756087Z" + }, + "all_time": { + "calls": 247, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 247 + }, + "users": { + "unknown": 247 + }, + "components": { + "state-hub.events": 247 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-13T13:22:00.748140Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "cd9342fd-27e7-4a46-a1be-d41499e106a3", + "interface_key": "rest_api:DELETE /workstreams/{workstream_id}", + "interface_kind": "rest_api", + "legacy_since": "2026-06-06T17:28:13.052813Z", + "replacement_ref": "/workplans/{workplan_id}", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:08.200322Z", + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-08-31T08:55:08.089714Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "unknown": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-06-06T17:28:13.047529Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "d0294dce-7913-4268-94c3-1b2502aefb0f", + "interface_key": "rest_api:GET /sbom/", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:06:38.703608Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.503646Z", + "created_at": "2026-08-22T17:06:38.703608Z", + "updated_at": "2026-09-22T09:22:56.498576Z" + }, + "all_time": { + "calls": 7, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 7 + }, + "users": { + "unknown": 7 + }, + "components": { + "unknown": 7 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-09-11T15:49:01.762688Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "2f77ac12-8c97-4974-a2f9-2996927982d1", + "interface_key": "rest_api:GET /sbom/report/licences/", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:06:41.978426Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: user-authorized retirement 2026-09-05; fresh seven-day gate passed, replacement_verified=true; direct SBOM Nexus endpoints returned HTTP 200 from the State Hub pod. Compatibility storage/routes retained for the final cutover.", + "retired_at": "2026-09-05T08:04:48.423727Z", + "created_at": "2026-08-22T17:06:41.978426Z", + "updated_at": "2026-09-05T08:04:48.418993Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "unknown": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-28T18:46:10.642164Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "b627edf5-3302-4366-ba2e-547d32f634b5", + "interface_key": "rest_api:GET /sbom/snapshots/", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:06:37.057774Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: user-authorized retirement 2026-09-05; fresh seven-day gate passed, replacement_verified=true; direct SBOM Nexus endpoints returned HTTP 200 from the State Hub pod. Compatibility storage/routes retained for the final cutover.", + "retired_at": "2026-09-05T08:04:48.506447Z", + "created_at": "2026-08-22T17:06:37.057774Z", + "updated_at": "2026-09-05T08:04:48.501706Z" + }, + "all_time": { + "calls": 7, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 7 + }, + "users": { + "unknown": 7 + }, + "components": { + "unknown": 7 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-28T18:46:10.694185Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "d03ee274-cd6f-4cd5-8f22-e4d298416299", + "interface_key": "rest_api:GET /sbom/snapshots/{snapshot_id}", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:23:45.969876Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:08.470106Z", + "created_at": "2026-08-22T17:23:45.969876Z", + "updated_at": "2026-08-31T08:55:08.456139Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "unknown": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-22T17:23:45.967492Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "a6cb291e-8312-42f8-8a66-fde369482881", + "interface_key": "rest_api:GET /sbom/{repo_slug}", + "interface_kind": "rest_api", + "legacy_since": "2026-08-22T17:23:45.089542Z", + "replacement_ref": "sbom-nexus:/sbom/", + "owner_component": "state-hub.sbom-compat", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:08.754914Z", + "created_at": "2026-08-22T17:23:45.089542Z", + "updated_at": "2026-08-31T08:55:08.750826Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "unknown": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-22T17:23:45.670511Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "cad13f19-ddb1-49b9-86d0-8789b7599f3a", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-08-29T10:01:31.546213Z", + "replacement_ref": "/tasks/?workplan_id=", + "owner_component": "state-hub.api", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-08-29T10:01:31.546213Z", + "updated_at": "2026-08-29T10:01:31.546213Z" + }, + "all_time": { + "calls": 31, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 31 + }, + "users": { + "unknown": 31 + }, + "components": { + "unknown": 31 + } + }, + "window": { + "calls": 8, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 8 + }, + "users": { + "unknown": 8 + }, + "components": { + "unknown": 8 + } + }, + "last_seen_at": "2026-09-20T20:37:06.949619Z", + "retirement_candidate": false, + "retirement_reason": "8 call(s) in review window" + }, + { + "interface": { + "id": "3e4a3d0b-08fa-45c3-91e2-4f514a914b97", + "interface_key": "rest_api:GET /workstreams/", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T00:26:14.533764Z", + "replacement_ref": "/workplans/", + "owner_component": "state-hub.api", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T00:26:14.533764Z", + "updated_at": "2026-06-04T00:26:14.533764Z" + }, + "all_time": { + "calls": 830269, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 830269 + }, + "users": { + "unknown": 830269 + }, + "components": { + "unknown": 830269 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-21T13:50:37.994459Z", + "retirement_candidate": false, + "retirement_reason": "quiet 31d of 60d required for 830269 all-time call(s)" + }, + { + "interface": { + "id": "e4c140ec-7479-46f9-b185-4b533f19d639", + "interface_key": "rest_api:GET /workstreams/workplan-index", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T05:20:58.321869Z", + "replacement_ref": "/workplans/index", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:08.939572Z", + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-08-31T08:55:08.933482Z" + }, + "all_time": { + "calls": 40, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 40 + }, + "users": { + "unknown": 40 + }, + "components": { + "unknown": 40 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-09-01T18:42:55.879795Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "3a00b19e-e7db-4403-98aa-a77c9ab61ecc", + "interface_key": "rest_api:GET /workstreams/{workstream_id}", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T00:25:59.014966Z", + "replacement_ref": "/workplans/{workplan_id}", + "owner_component": "state-hub.api", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T00:25:59.014966Z", + "updated_at": "2026-06-04T00:25:59.014966Z" + }, + "all_time": { + "calls": 3411477, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3411477 + }, + "users": { + "unknown": 3411477 + }, + "components": { + "unknown": 3411477 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-09-03T22:02:35.348363Z", + "retirement_candidate": false, + "retirement_reason": "quiet 18d of 60d required for 3411477 all-time call(s)" + }, + { + "interface": { + "id": "69e1a255-a8b9-4101-8a68-b1bed23abfda", + "interface_key": "rest_api:GET /workstreams/{workstream_id}/dependencies/", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T00:25:59.291135Z", + "replacement_ref": "/workplans/{workplan_id}/dependencies/", + "owner_component": "state-hub.api", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T00:25:59.291135Z", + "updated_at": "2026-06-04T00:25:59.291135Z" + }, + "all_time": { + "calls": 1643952, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1643952 + }, + "users": { + "unknown": 1643952 + }, + "components": { + "unknown": 1643952 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-21T13:50:30.082480Z", + "retirement_candidate": false, + "retirement_reason": "quiet 31d of 60d required for 1643952 all-time call(s)" + }, + { + "interface": { + "id": "b1aae931-b51f-4a85-a723-865dd65f6132", + "interface_key": "rest_api:PATCH /workstreams/{workstream_id}", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T06:09:41.901035Z", + "replacement_ref": "/workplans/{workplan_id}", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.610064Z", + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-09-22T09:22:56.603117Z" + }, + "all_time": { + "calls": 584, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 584 + }, + "users": { + "unknown": 584 + }, + "components": { + "unknown": 584 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-16T16:33:34.045078Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "ed6451c9-d2cc-4486-9afe-d3852782cabc", + "interface_key": "rest_api:POST /workstreams/", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T07:40:24.168535Z", + "replacement_ref": "/workplans/", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "STATE-WP-0079-T05: founder-authorized retirement 2026-09-22; seven-day gate passed, replacement verified.", + "retired_at": "2026-09-22T09:22:56.716384Z", + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-09-22T09:22:56.710100Z" + }, + "all_time": { + "calls": 811, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 811 + }, + "users": { + "unknown": 811 + }, + "components": { + "unknown": 811 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-08-16T01:03:41.093965Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "281fd706-b192-4194-8055-2d8733c115f9", + "interface_key": "rest_api:POST /workstreams/{workstream_id}/dependencies/", + "interface_kind": "rest_api", + "legacy_since": "2026-06-04T22:57:37.149207Z", + "replacement_ref": "/workplans/{workplan_id}/dependencies/", + "owner_component": "state-hub.api", + "status": "retired", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Retired by STATE-WP-0069 closeout", + "retired_at": "2026-08-31T08:55:09.130713Z", + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-08-31T08:55:09.123888Z" + }, + "all_time": { + "calls": 4975, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4975 + }, + "users": { + "unknown": 4975 + }, + "components": { + "unknown": 4975 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-07T20:31:35.389791Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + } + ], + "retirement_candidates": [] + } +} diff --git a/workplans/STATE-WP-0079-retirement-strangler.md b/workplans/STATE-WP-0079-retirement-strangler.md index bcf1f84..dcd9ff1 100644 --- a/workplans/STATE-WP-0079-retirement-strangler.md +++ b/workplans/STATE-WP-0079-retirement-strangler.md @@ -570,13 +570,15 @@ retirement candidates: `GET /sbom/` (quiet 10d, needs 7), `PATCH (quiet 37d, needs 30). Replacements verified the same day: `POST /workplans/` and `PATCH /workplans/{workplan_id}` in the live OpenAPI (`GET /workplans/` 200); SBOM Nexus `GET /sbom/` returned 200 from the State Hub pod on -railiance01. The founder approved retiring the three. The meter PATCH itself -was not run from the agent session: the harness blocked the production -write. It is still pending. Run it attended (`PATCH -/legacy-meter/interfaces/{id}` with `status: retired`, ids `d0294dce`, -`b1aae931`, `ed6451c9`) and store the receipt as -`docs/evidence/STATE-WP-0079-legacy-retirement-20260922.json`. Still held -after that: `GET /tasks/?workstream_id` (live, caller unattributed), and +railiance01. The founder approved retiring the three. The agent harness blocked the +production meter write, so the founder ran it from an attended shell at +2026-09-22T09:22:56Z. All three are now `retired`, making 11 retired and 4 +legacy in total. Receipt: +`docs/evidence/STATE-WP-0079-legacy-retirement-20260922.json`. Like the +2026-09-05 retirements, this changes the meter record only. The +`/workstreams/` POST and PATCH handlers already answer 410, and the +`GET /sbom/` compatibility handler stays in place until the final cutover. +Still held: `GET /tasks/?workstream_id` (live, caller unattributed), and `GET /workstreams/`, `GET /workstreams/{workstream_id}` and `GET /workstreams/{workstream_id}/dependencies/` (quiet since 2026-08-21 or 2026-09-03, not yet candidates).