From d8a2bb5c6ba8d3db73eff565242e6c7fbe63d181 Mon Sep 17 00:00:00 2001 From: tegwick Date: Wed, 22 Jul 2026 19:56:27 +0200 Subject: [PATCH] docs: work-record consolidation references and STATE-WP-0076 ready Align dashboard reference pages with intake-as-discovery and suggestions as legacy, frame work records as unit vs structure artefacts, and add the ready STATE-WP-0076 plan for DoC/DoR quality policies. Include generated work-record index and recent legacy-meter evidence captures. --- WORK-RECORDS.md | 260 +++ dashboard/observablehq.config.js | 6 +- dashboard/src/docs/capabilities.md | 11 +- dashboard/src/docs/contributions.md | 114 +- dashboard/src/docs/suggestions.md | 91 +- dashboard/src/docs/tasks.md | 7 +- dashboard/src/docs/work-records.md | 73 +- dashboard/src/docs/workstreams.md | 13 +- dashboard/src/docs/wsjf-triage.md | 9 + dashboard/src/reference.md | 6 +- dashboard/src/suggestions.md | 12 +- .../legacy-meter-weekly-review-20260719.json | 1755 +++++++++++++++++ .../legacy-meter-weekly-review-20260721.json | 1755 +++++++++++++++++ .../legacy-meter-weekly-review-20260722.json | 1716 ++++++++++++++++ ...6-definition-of-ready-and-comprehension.md | 226 +++ 15 files changed, 5951 insertions(+), 103 deletions(-) create mode 100644 WORK-RECORDS.md create mode 100644 docs/evidence/legacy-meter-weekly-review-20260719.json create mode 100644 docs/evidence/legacy-meter-weekly-review-20260721.json create mode 100644 docs/evidence/legacy-meter-weekly-review-20260722.json create mode 100644 workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md new file mode 100644 index 0000000..2a0c350 --- /dev/null +++ b/WORK-RECORDS.md @@ -0,0 +1,260 @@ +# Work Records — state-hub + +> Generated by `statehub fix-consistency` (CUST-WP-0061-T04, work-record +> stage 3). Do not edit by hand — edit the source file/block listed for +> each record and re-run fix-consistency to refresh this index. Archived +> workplans are omitted; closed decisions/intakes/engagements stay listed +> so recently-resolved work is still visible. [auto] + +| Kind | ID | Status | Lane | Source | +| --- | --- | --- | --- | --- | +| workplan | ADHOC-2026-06-04 | finished | — | workplans/ADHOC-2026-06-04.md | +| workplan | ADHOC-2026-07-01 | finished | — | workplans/ADHOC-2026-07-01.md | +| workplan | CUST-WP-0003 | finished | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| workplan | CUST-WP-0012 | finished | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| workplan | CUST-WP-0038 | backlog | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| workplan | CUST-WP-0042 | finished | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| workplan | STATE-WP-0043 | finished | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| workplan | STATE-WP-0044 | finished | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| workplan | STATE-WP-0045 | finished | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| workplan | STATE-WP-0046 | finished | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| workplan | STATE-WP-0047 | finished | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| workplan | STATE-WP-0048 | finished | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| workplan | STATE-WP-0049 | finished | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| workplan | STATE-WP-0050 | finished | — | workplans/STATE-WP-0050-railiance-fabric-graph-read-model-ingest.md | +| workplan | STATE-WP-0051 | finished | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| workplan | STATE-WP-0052 | finished | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| workplan | STATE-WP-0053 | finished | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| workplan | STATE-WP-0054 | finished | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| workplan | STATE-WP-0055 | finished | — | workplans/STATE-WP-0055-statehub-register-cli.md | +| workplan | STATE-WP-0056 | finished | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| workplan | STATE-WP-0057 | finished | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| workplan | STATE-WP-0058 | finished | — | workplans/STATE-WP-0058-agent-skill-hub-interaction.md | +| workplan | STATE-WP-0059 | finished | — | workplans/STATE-WP-0059-mcp-write-layer-reliability.md | +| workplan | STATE-WP-0060 | finished | — | workplans/STATE-WP-0060-fix-consistency-cross-flavor.md | +| workplan | STATE-WP-0062 | finished | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| workplan | STATE-WP-0063 | finished | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| workplan | STATE-WP-0064 | finished | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| workplan | STATE-WP-0065 | finished | — | workplans/STATE-WP-0065-repo-anchored-classification-spine.md | +| workplan | STATE-WP-0066 | finished | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| workplan | STATE-WP-0067 | finished | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| workplan | STATE-WP-0068 | finished | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| workplan | STATE-WP-0071 | finished | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| workplan | STATE-WP-0072 | finished | — | workplans/STATE-WP-0072-workstream-caller-remediation.md | +| workplan | STATE-WP-0073 | finished | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| workplan | STATE-WP-0074 | finished | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| workplan | STATE-WP-0075 | finished | — | workplans/STATE-WP-0075-workstream-route-410-stranglers.md | +| workplan | STATE-WP-0076 | ready | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | ADHOC-2026-06-04-T01 | done | — | workplans/ADHOC-2026-06-04.md | +| task | ADHOC-2026-07-01-T01 | done | — | workplans/ADHOC-2026-07-01.md | +| task | ADHOC-2026-07-01-T02 | done | — | workplans/ADHOC-2026-07-01.md | +| task | CUST-WP-0003-T01 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T02 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T03 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T04 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T05 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T06 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T07 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T08 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0003-T09 | done | — | workplans/CUST-WP-0003-whi-kpi-card.md | +| task | CUST-WP-0012-T01 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0012-T02 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0012-T03 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0012-T04 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0012-T05 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0012-T06 | done | — | workplans/CUST-WP-0012-multi-user-onboarding.md | +| task | CUST-WP-0038-T01 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T02 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T03 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T04 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T05 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T06 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T07 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0038-T08 | todo | — | workplans/CUST-WP-0038-state-hub-threephoenix-ha.md | +| task | CUST-WP-0042-T01 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T02 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T03 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T04 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T05 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T06 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T07 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | CUST-WP-0042-T08 | done | — | workplans/CUST-WP-0042-workplan-state-model-cleanup.md | +| task | STATE-WP-0043-T01 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T02 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T03 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T04 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T05 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T06 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T07 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0043-T08 | done | — | workplans/STATE-WP-0043-dashboard-ui-experience.md | +| task | STATE-WP-0044-T01 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0044-T02 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0044-T03 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0044-T04 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0044-T05 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0044-T06 | done | — | workplans/STATE-WP-0044-recently-on-scope-digest.md | +| task | STATE-WP-0045-T01 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T02 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T03 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T04 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T05 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T06 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T07 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0045-T08 | done | — | workplans/STATE-WP-0045-token-measurement-accuracy.md | +| task | STATE-WP-0046-T01 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0046-T02 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0046-T03 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0046-T04 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0046-T05 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0046-T06 | done | — | workplans/STATE-WP-0046-workplan-id-normalization.md | +| task | STATE-WP-0047-T01 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T02 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T03 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T04 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T05 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T06 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0047-T07 | done | — | workplans/STATE-WP-0047-lifecycle-assertions-and-renormalization.md | +| task | STATE-WP-0048-T01 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T02 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T03 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T04 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T05 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T06 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0048-T07 | done | — | workplans/STATE-WP-0048-ui-state-change-reconciliation.md | +| task | STATE-WP-0049-T01 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T02 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T03 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T04 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T05 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T06 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0049-T07 | done | — | workplans/STATE-WP-0049-workplan-execution-queue.md | +| task | STATE-WP-0050-T01 | done | — | workplans/STATE-WP-0050-railiance-fabric-graph-read-model-ingest.md | +| task | STATE-WP-0050-T02 | done | — | workplans/STATE-WP-0050-railiance-fabric-graph-read-model-ingest.md | +| task | STATE-WP-0050-T03 | done | — | workplans/STATE-WP-0050-railiance-fabric-graph-read-model-ingest.md | +| task | STATE-WP-0050-T04 | done | — | workplans/STATE-WP-0050-railiance-fabric-graph-read-model-ingest.md | +| task | STATE-WP-0051-T01 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0051-T02 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0051-T03 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0051-T04 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0051-T05 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0051-T06 | done | — | workplans/STATE-WP-0051-financial-fabric-read-model-adaptation.md | +| task | STATE-WP-0052-T01 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T02 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T03 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T04 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T05 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T06 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T07 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T08 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T09 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0052-T10 | done | — | workplans/STATE-WP-0052-task-state-canon-adaptation.md | +| task | STATE-WP-0053-T01 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0053-T02 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0053-T03 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0053-T04 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0053-T05 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0053-T06 | done | — | workplans/STATE-WP-0053-wsjf-triage-review-page.md | +| task | STATE-WP-0054-T01 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T02 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T03 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T04 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T05 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T06 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T07 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0054-T08 | done | — | workplans/STATE-WP-0054-workplan-terminology-transition-legacy-meter.md | +| task | STATE-WP-0055-T01 | done | — | workplans/STATE-WP-0055-statehub-register-cli.md | +| task | STATE-WP-0056-T01 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T02 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T03 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T04 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T05 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T06 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T07 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0056-T08 | done | — | workplans/STATE-WP-0056-dashboard-loading-robustness.md | +| task | STATE-WP-0057-T01 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0057-T02 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0057-T03 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0057-T04 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0057-T05 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0057-T06 | done | — | workplans/STATE-WP-0057-overview-workstream-stage-counts.md | +| task | STATE-WP-0058-T01 | done | — | workplans/STATE-WP-0058-agent-skill-hub-interaction.md | +| task | STATE-WP-0058-T02 | done | — | workplans/STATE-WP-0058-agent-skill-hub-interaction.md | +| task | STATE-WP-0058-T03 | done | — | workplans/STATE-WP-0058-agent-skill-hub-interaction.md | +| task | STATE-WP-0059-T01 | done | — | workplans/STATE-WP-0059-mcp-write-layer-reliability.md | +| task | STATE-WP-0059-T02 | done | — | workplans/STATE-WP-0059-mcp-write-layer-reliability.md | +| task | STATE-WP-0059-T03 | done | — | workplans/STATE-WP-0059-mcp-write-layer-reliability.md | +| task | STATE-WP-0060-T01 | done | — | workplans/STATE-WP-0060-fix-consistency-cross-flavor.md | +| task | STATE-WP-0060-T02 | done | — | workplans/STATE-WP-0060-fix-consistency-cross-flavor.md | +| task | STATE-WP-0060-T03 | done | — | workplans/STATE-WP-0060-fix-consistency-cross-flavor.md | +| task | STATE-WP-0062-T01 | done | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| task | STATE-WP-0062-T02 | done | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| task | STATE-WP-0062-T03 | done | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| task | STATE-WP-0062-T04 | done | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| task | STATE-WP-0062-T05 | done | — | workplans/STATE-WP-0062-service-catalog-two-dimensions.md | +| task | STATE-WP-0063-T01 | done | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| task | STATE-WP-0063-T02 | done | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| task | STATE-WP-0063-T03 | done | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| task | STATE-WP-0063-T04 | done | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| task | STATE-WP-0063-T05 | done | — | workplans/STATE-WP-0063-weekend-automation-repair.md | +| task | STATE-WP-0064-T01 | done | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| task | STATE-WP-0064-T02 | done | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| task | STATE-WP-0064-T03 | done | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| task | STATE-WP-0064-T04 | done | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| task | STATE-WP-0064-T05 | done | — | workplans/STATE-WP-0064-statehub-consistency-sync-railiance01.md | +| task | STATE-WP-0065-T01 | done | — | workplans/STATE-WP-0065-repo-anchored-classification-spine.md | +| task | STATE-WP-0065-T02 | done | — | workplans/STATE-WP-0065-repo-anchored-classification-spine.md | +| task | STATE-WP-0065-T03 | done | — | workplans/STATE-WP-0065-repo-anchored-classification-spine.md | +| task | STATE-WP-0065-T04 | done | — | workplans/STATE-WP-0065-repo-anchored-classification-spine.md | +| task | STATE-WP-0066-T01 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T02 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T03 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T04 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T05 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T06 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T07 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0066-T08 | done | — | workplans/STATE-WP-0066-state-summary-revision-cache.md | +| task | STATE-WP-0067-T01 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0067-T02 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0067-T03 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0067-T04 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0067-T05 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0067-T06 | done | — | workplans/STATE-WP-0067-attached-repo-agent-normalization.md | +| task | STATE-WP-0068-T01 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T02 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T03 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T04 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T05 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T06 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T07 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T08 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0068-T09 | done | — | workplans/STATE-WP-0068-offline-write-buffer-and-edge-relay.md | +| task | STATE-WP-0071-T01 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0071-T02 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0071-T03 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0071-T04 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0071-T05 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0071-T06 | done | — | workplans/STATE-WP-0071-railiance01-workstream-caller-deploy.md | +| task | STATE-WP-0072-T01 | done | — | workplans/STATE-WP-0072-workstream-caller-remediation.md | +| task | STATE-WP-0072-T02 | done | — | workplans/STATE-WP-0072-workstream-caller-remediation.md | +| task | STATE-WP-0072-T03 | done | — | workplans/STATE-WP-0072-workstream-caller-remediation.md | +| task | STATE-WP-0072-T04 | done | — | workplans/STATE-WP-0072-workstream-caller-remediation.md | +| task | STATE-WP-0073-T01 | done | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| task | STATE-WP-0073-T02 | done | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| task | STATE-WP-0073-T03 | done | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| task | STATE-WP-0073-T04 | done | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| task | STATE-WP-0073-T05 | cancel | — | workplans/STATE-WP-0073-legacy-meter-decline-and-remote-audit.md | +| task | STATE-WP-0074-T01 | done | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| task | STATE-WP-0074-T02 | done | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| task | STATE-WP-0074-T03 | done | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| task | STATE-WP-0074-T04 | done | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| task | STATE-WP-0074-T05 | done | — | workplans/STATE-WP-0074-hub-ecosystem-boundary-alignment.md | +| task | STATE-WP-0075-T01 | done | — | workplans/STATE-WP-0075-workstream-route-410-stranglers.md | +| task | STATE-WP-0075-T02 | done | — | workplans/STATE-WP-0075-workstream-route-410-stranglers.md | +| task | STATE-WP-0075-T03 | done | — | workplans/STATE-WP-0075-workstream-route-410-stranglers.md | +| task | STATE-WP-0075-T04 | done | — | workplans/STATE-WP-0075-workstream-route-410-stranglers.md | +| task | STATE-WP-0076-T01 | todo | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | STATE-WP-0076-T02 | todo | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | STATE-WP-0076-T03 | todo | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | STATE-WP-0076-T04 | todo | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | STATE-WP-0076-T05 | cancel | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | +| task | STATE-WP-0076-T06 | cancel | — | workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md | diff --git a/dashboard/observablehq.config.js b/dashboard/observablehq.config.js index 9fdcfb2..f46fc70 100644 --- a/dashboard/observablehq.config.js +++ b/dashboard/observablehq.config.js @@ -83,7 +83,7 @@ export default { { name: "Interventions", path: "/interventions" }, { name: "Tasks", path: "/tasks" }, { name: "UI Feedback", path: "/ui-feedback" }, - { name: "Suggestions", path: "/suggestions" }, + { name: "Suggestions (legacy)", path: "/suggestions" }, { name: "WSJF Triage", path: "/wsjf-triage" }, ], }, @@ -104,6 +104,7 @@ export default { { name: "Domains", path: "/docs/domains" }, { name: "Goals", path: "/docs/goals" }, { name: "Extension Points", path: "/docs/extensions" }, + { name: "Intakes", path: "/docs/intakes" }, { name: "Inter-Repo Communication", path: "/docs/inter-repo-communication" }, { name: "Interventions", path: "/docs/interventions" }, { name: "Live Data", path: "/docs/live-data" }, @@ -117,15 +118,16 @@ export default { { name: "SBOM", path: "/docs/sbom" }, { name: "SCOPE.md", path: "/docs/scope" }, { name: "Service Catalog", path: "/docs/services" }, + { name: "Suggestions (legacy)", path: "/docs/suggestions" }, { name: "Tasks", path: "/docs/tasks" }, { name: "TPSC", path: "/docs/tpsc" }, { name: "TPSC — GDPR Maturity", path: "/docs/gdpr-maturity" }, { name: "Technical Debt", path: "/docs/debt" }, { name: "Todo", path: "/docs/todo" }, + { name: "Work Records", path: "/docs/work-records" }, { name: "Workplan Health", path: "/docs/workstream-health-index" }, { name: "Workplan Lifecycle", path: "/docs/workstream-lifecycle" }, { name: "Workplans", path: "/docs/workstreams" }, - { name: "Suggestions", path: "/docs/suggestions" }, { name: "WSJF Triage", path: "/docs/wsjf-triage" }, ], }, diff --git a/dashboard/src/docs/capabilities.md b/dashboard/src/docs/capabilities.md index e4af82a..c0b89f1 100644 --- a/dashboard/src/docs/capabilities.md +++ b/dashboard/src/docs/capabilities.md @@ -227,8 +227,9 @@ and age in days. --- *Capability requests are a sanctioned write use case of the State Hub alongside -`resolve_decision`, `get_next_steps`, and the suggestion backlog writes -(`create_suggestion`, `vet_suggestion`, `decline_suggestion`, -`promote_suggestion_to_task`, `bump_suggestion_relevance`). They do not -originate in workplan files — -they are operational coordination.* +`resolve_decision`, `get_next_steps`, and intake capture (`create_intake`, +`route_intake`, `close_intake`; promotion via `statehub promote-intake`). The +legacy suggestion mutation tools (`create_suggestion`, `vet_suggestion`, …) +return HTTP 410. Capability requests do not originate in workplan files — +they are operational coordination. See [Work Records](/docs/work-records) and +[Intakes](/docs/intakes).* diff --git a/dashboard/src/docs/contributions.md b/dashboard/src/docs/contributions.md index 9736a74..bc537b3 100644 --- a/dashboard/src/docs/contributions.md +++ b/dashboard/src/docs/contributions.md @@ -4,10 +4,16 @@ title: Contributions — Reference # Contributions — Reference -Contributions track **outbound upstream work** — things the Custodian has -identified that belong in a repo it does not own or control. Each contribution -is a structured artifact filed locally in the repo's `contrib/` directory and -registered in the state hub so it is never lost. +Contributions track **outbound upstream work** — things identified for a +repository the fleet does not own or control. Each contribution is a +structured artifact filed locally under `contrib/` and registered in State Hub +so it is not lost. + +Contributions are **not** a work-record kind in the fleet registry +(`work-record-types_v0.1.md`). They are a separate hub entity and dashboard +surface used for third-party coordination. Work-record kinds cover internal +coordination (workplan, task, intake, decision, engagement, register-entry). +See [Work Records](/docs/work-records). --- @@ -15,22 +21,26 @@ registered in the state hub so it is never lost. | Type | Full name | Use when | |------|-----------|----------| -| `br` | Bug Report | You found a defect in an upstream tool or library | -| `fr` | Feature Request | You need functionality that upstream does not yet provide | -| `ep` | Extension Point | You identified a future enhancement opportunity in upstream code | -| `upr` | Upstream PR | You have written (or are writing) a patch for an upstream repo | +| `br` | Bug Report | Defect in an upstream tool or library | +| `fr` | Feature Request | Functionality upstream does not yet provide | +| `ep` | Extension Point | Future enhancement opportunity in upstream code | +| `upr` | Upstream PR | Patch written (or being written) for an upstream repo | --- -## Flow workstations +## Lifecycle (workstations) -``` +Contribution status is evaluated by the task-flow engine +(`flows/contribution.yaml`). The stored field is `status`; flow tooling may +call the same value a **workstation**. + +```text draft → submitted → acknowledged → accepted → merged ↘ ↘ rejected withdrawn ``` -| Workstation | Meaning | +| Status | Meaning | |--------|---------| | **draft** | Artifact written locally; not yet sent upstream | | **submitted** | Filed as a GitHub issue, PR, or email — awaiting upstream response | @@ -40,36 +50,42 @@ draft → submitted → acknowledged → accepted → merged | **rejected** | Upstream declined; record kept for future reference | | **withdrawn** | We decided not to pursue it | -Contribution movement is evaluated by the task-flow engine. The API asks -whether the target workstation is reachable from the current information -object; if not, it returns structured blocking assertions instead of a generic -"transition not allowed" message. `submitted_at` is stamped automatically when -the contribution reaches `submitted`; `resolved_at` is stamped when it reaches -`merged`, `rejected`, or `withdrawn`. +Reachability is assertion-based. For example, `rejected` is only enterable from +`submitted` or `acknowledged`; `merged` only from `accepted`. If a target is +not reachable, the API returns structured blocking assertions rather than a +generic “transition not allowed” message. + +Timestamps: `submitted_at` is stamped when status becomes `submitted`; +`resolved_at` is stamped when status becomes `merged`, `rejected`, or +`withdrawn` (and related terminal paths as implemented on the status patch). --- ## Relation to the Todo classification -Contributions map directly to the **Third-party** class in the inter-repo -communication taxonomy: +Contributions map to the **Third-party** class in the inter-repo communication +taxonomy: | Todo class | Mechanism | |------------|-----------| -| Internal | Workplan file + task in this repo's workplan | +| Internal | Workplan file + task in this repo | | Ecosystem | State hub task with `[repo:]` prefix | -| **Third-party** | **Contribution artifact in `contrib/` + state hub registration** | +| **Third-party** | **Contribution artifact in `contrib/` + hub registration** | -Contributions in `draft`, `submitted`, or `acknowledged` workstations appear as -open Third-party todos on the [Todo](/todo) page. +Open third-party items are contributions in `draft`, `submitted`, or +`acknowledged`. They appear on the [Todo](/todo) page until the upstream loop +closes (`merged`, `rejected`, or `withdrawn`). + +Intakes are **not** third-party contributions: an intake is internal capture of +a spark; a contribution is outbound work aimed at someone else’s repo. --- ## File layout -Each artifact lives in the current repo under `contrib/`: +Each artifact lives in the **current** repo under `contrib/`: -``` +```text contrib/ bug-reports/ br-YYYY-MM-DD------.md feature-requests/ fr-YYYY-MM-DD------.md @@ -77,8 +93,8 @@ contrib/ upstream-prs/ upr-YYYY-MM-DD------.md ``` -Templates live in `~/the-custodian/canon/standards/contrib-templates/`. -Convention details: `~/the-custodian/canon/standards/contribution-convention_v0.1.md`. +Templates: `~/the-custodian/canon/standards/contrib-templates/`. +Convention: `~/the-custodian/canon/standards/contribution-convention_v0.1.md`. --- @@ -86,38 +102,52 @@ Convention details: `~/the-custodian/canon/standards/contribution-convention_v0. **1. Write the artifact file** using the appropriate template. -**2. Register it in the state hub** via MCP: +**2. Register it in the state hub** (MCP): -``` +```text register_contribution( - type = "fr", - title = "Add sidebar TOC injection API", - target_org = "observablehq", - target_repo = "framework", - body_path = "contrib/feature-requests/fr-2026-02-26--observablehq--framework--toc.md", - related_workstream_id = "" + type = "fr", + title = "Add sidebar TOC injection API", + target_org = "observablehq", + target_repo = "framework", + body_path = "contrib/feature-requests/fr-2026-02-26--observablehq--framework--toc.md", + related_workplan_id = "" # preferred; related_workstream_id still accepted as alias ) ``` -**3. Close the loop** when you file it upstream: +REST: `POST /contributions/` with the same fields. -``` +**3. Close the loop** when filed upstream — advance via flow tooling or status +patch: + +```text advance_workstation(entity_type="contribution", entity_id="", target_workstation="submitted") ``` -**4. Keep updating** as upstream responds — `acknowledged`, `accepted`, `merged`. +```bash +curl -X PATCH "http://127.0.0.1:8000/contributions//status" \ + -H "Content-Type: application/json" \ + -d '{"status": "submitted"}' +``` + +**4. Keep updating** as upstream responds — `acknowledged`, `accepted`, +`merged` (or `rejected` / `withdrawn`). + +Optional links: `related_topic_id`, `related_workplan_id`, `repo_id` (managed +repo that owns the local artifact). --- ## Kanban board The Contributions page groups artifacts by status column. Only columns with at -least one entry are shown. The **⚠ follow-up banner** appears when any +least one entry are shown. The **follow-up banner** appears when any contribution has been in `submitted` or `acknowledged` for an extended period without further movement — a prompt to check in with upstream. +Data source: `GET /contributions/`. + --- -*Contributions are append-only. Rejected or withdrawn artifacts are retained as -institutional memory — they explain why certain approaches were tried and -dropped.* +*Contributions are retained after rejection or withdrawal — institutional +memory for why certain approaches were tried and dropped.* diff --git a/dashboard/src/docs/suggestions.md b/dashboard/src/docs/suggestions.md index a512418..d007176 100644 --- a/dashboard/src/docs/suggestions.md +++ b/dashboard/src/docs/suggestions.md @@ -1,9 +1,44 @@ -# Demand-Weighted Suggestion Backlog +--- +title: Suggestions (legacy) — Reference +--- -The `/suggestions` page shows persisted **gated needs** that are not yet real -tasks. Each unmet lookup increments `relevance`, which raises WSJF ranking. +# Suggestions (legacy) — Reference -## Stages +The **suggestion** entity is **read-only legacy**. It predates the fleet +**work-record** model. Gated needs, findings, and unvetted sparks are recorded +as **intake** work records (`kind: intake`), not as suggestions. + +| Use | Path | +|-----|------| +| **Current** | [Intakes](/docs/intakes) · `POST /intakes/` · MCP `create_intake` | +| **Canon** | `the-custodian/canon/standards/work-record-types_v0.1.md` | +| **Legacy table** | `GET /suggestions/` (historical rows may remain) | + +Umbrella: [Work Records](/docs/work-records). + +--- + +## What still exists + +| Surface | Behaviour today | +|---------|-----------------| +| `GET /suggestions/` | Lists historical suggestion rows (if any). Ranking query params still exist on the read path. | +| `GET /suggestions/{id}` | Read one historical row. | +| Mutation routes (`POST /suggestions/`, vet, decline, promote, bump-relevance) | **HTTP 410 Gone** — body points at `/intakes/` and the work-record standard | +| MCP `create_suggestion`, `vet_suggestion`, `decline_suggestion`, `promote_suggestion_to_task`, `bump_suggestion_relevance` | Call the retired mutation endpoints; they return 410 | +| Dashboard **Suggestions** page | Still polls `GET /suggestions/?rank=wsjf`; useful only for residual history | +| `GET /state/summary` → `ranked_suggestions` | Still computed from open suggestion rows; after migration the open set is typically empty | + +Records were not deleted at retirement. Open backlog at cut-over (2026-07-21, +CUST-WP-0061-T06) was re-authored as file-backed intakes (with +`origin: legacy-suggestion:`) and the hub suggestion rows were closed in +place so history remained inspectable. + +--- + +## Former stage model (historical) + +While mutations were live, stages were: | Stage | Meaning | |-------|---------| @@ -12,38 +47,34 @@ tasks. Each unmet lookup increments `relevance`, which raises WSJF ranking. | `promoted` | Became a real `Task` (`promoted_task_id` set) | | `declined` | Rejected; terminal | -## WSJF projection +WSJF ranking used `base_value`, `relevance`, `job_size`, and +`relevance_weight`. That ranking applied only to the suggestion table; it is +not the intake ranking model. -```text -cost_of_delay = base_value + (relevance_weight × relevance) -wsjf = cost_of_delay / job_size -``` +--- -`GET /suggestions?rank=wsjf` returns open suggestions/requirements ordered by -score. Promoted and declined entries are excluded unless -`include_terminal=true`. +## Mapping to intake -## Sanctioned writes +| Suggestion concept | Intake equivalent | +|--------------------|-------------------| +| Create gated need | `POST /intakes/` / `create_intake` | +| Vet | Move toward `vetted` / notes on the intake | +| Promote to task | `route_intake` then `statehub promote-intake … --to task` (or workplan / decision / engagement) | +| Decline | `close_intake(outcome="declined")` | +| Absorbed by existing work | `close_intake(outcome="absorbed")` | +| Domain-scoped row | Intake scoped by `topic_id` and/or `workplan_id` and/or `repo_id` | -MCP and REST: +Do not open new work through the suggestion API. -- `create_suggestion` / `POST /suggestions/` -- `vet_suggestion` / `POST /suggestions/{id}/vet` -- `decline_suggestion` / `POST /suggestions/{id}/decline` -- `promote_suggestion_to_task` / `POST /suggestions/{id}/promote` -- `bump_suggestion_relevance` / `POST /suggestions/{id}/bump-relevance` +--- -Relevance also bumps automatically when: +## Related pages -- `GET /state/next_steps` surfaces open suggestions -- A `CapabilityRequest` matches an open suggestion +- [Intakes](/docs/intakes) — current entity and lifecycle +- [Work Records](/docs/work-records) — kind registry +- [WSJF Triage](/docs/wsjf-triage) — daily advisory triage (workplan-oriented) -## Daily triage +--- -`GET /state/summary` includes `ranked_suggestions` for the activity-core -`daily_triage_digest` resolver. See [WSJF Triage](/docs/wsjf-triage). - -## Origin - -Motivated by ops-warden `WARDEN-WP-0012` gated routing scenarios. Example -backfill: `scripts/seed_wp0012_suggestions.py`. \ No newline at end of file +*Suggestion mutations are retired by design (CUST-WP-0061). Intake is a fresh +entity, not a rename of the suggestions table.* diff --git a/dashboard/src/docs/tasks.md b/dashboard/src/docs/tasks.md index d6f11f8..eeab1d2 100644 --- a/dashboard/src/docs/tasks.md +++ b/dashboard/src/docs/tasks.md @@ -8,12 +8,15 @@ The Tasks page shows all tasks across every workplan and domain, with live filtering, a workstation distribution chart, and a waiting-tasks highlight section. +A **task** is a work-record kind: the smallest executable unit. Tasks always +belong to a workplan. Umbrella: [Work Records](/docs/work-records). + --- ## Task workstations -Tasks still expose their current workstation through the `status` field for API -compatibility. +Tasks expose their current lifecycle position through the `status` field (flow +tooling may call that position a workstation). | Workstation | Meaning | |--------|---------| diff --git a/dashboard/src/docs/work-records.md b/dashboard/src/docs/work-records.md index 2c49188..11aaf47 100644 --- a/dashboard/src/docs/work-records.md +++ b/dashboard/src/docs/work-records.md @@ -4,10 +4,12 @@ title: Work Records — Reference # Work Records — Reference -A **work record** is any identified, lifecycle-bearing coordination artefact -indexed by State Hub. Workplans and tasks are work records; so are intakes, -decisions, engagements, and register entries. The term is the shared umbrella -for planning, execution, and coordination — not a separate product surface. +A **work record** is any identified, lifecycle-bearing **coordination artefact** +indexed by State Hub. The term is intentionally **generic**: the same +framework covers individual units of work or discovery, **collections and +plans**, and related artefacts (decisions, engagements, register entries). It +is a mode of organising coordination — not a single product page and not a +synonym for “task.” Fleet canon (normative): `the-custodian/canon/standards/work-record-types_v0.1.md` and the machine @@ -16,16 +18,36 @@ implements and exposes today. --- +## Units and structure + +Kinds share one spine and registry, but they play different **roles**: + +| Role | What it is | Kinds today | Everyday gloss | +|------|------------|-------------|----------------| +| **Unit** | A single coordination atom | `task`, `intake`, `decision`, `engagement`, many `register-entry` rows | work-item (task); find / spark (intake) | +| **Structure** | A collection or plan with relations | `workplan` | delivery plan over tasks (and dependencies between plans) | + +A **workplan is a work record** in the mechanical sense (id, status, hub index). +It is **not** a large task: it is **structure** over unit records. Calling both +“work records” means they use the same identity and reconciliation machinery, +not that they feel the same in day-to-day language. + +Generated views (for example a per-repo work-record index, or a future +“discovery map” over intakes) organise records **without** needing a new kind +until a real aggregate must be owned as its own artefact. + +--- + ## Kind registry (closed list) -| Kind | Id scheme (typical) | Meaning in State Hub today | -|------|---------------------|----------------------------| -| **workplan** | `{PREFIX}-WP-NNNN` | Structured, dependency-bearing body of work; file under `workplans/` (ADR-001) | -| **task** | `{WP-ID}-TNN` · `ADHOC-YYYY-MM-DD-TNN` | Smallest executable unit; lives in a workplan file | -| **intake** | `{PREFIX}-IN-NNNN` | Spark: idea, finding, directive, or request before it is a plan/task | -| **decision** | `{PREFIX}-DEC-YYYY-NNN` (file) · hub decision entity | Approval package / recorded choice | -| **engagement** | `{PREFIX}-ENG-YYYY-NNN` | Scheduled external interaction (file-backed; hub entity not yet first-class) | -| **register-entry** | `RISK-…`, `TD-…`, `CAP-…`, `CCR-…`, `ADR-…` | Risks, debt, capability requests, credential change requests, ADRs | +| Kind | Role | Id scheme (typical) | Meaning in State Hub today | +|------|------|---------------------|----------------------------| +| **workplan** | structure | `{PREFIX}-WP-NNNN` | Dependency-bearing plan; file under `workplans/` (ADR-001) | +| **task** | unit | `{WP-ID}-TNN` · `ADHOC-YYYY-MM-DD-TNN` | Smallest executable delivery unit; lives in a workplan file | +| **intake** | unit | `{PREFIX}-IN-NNNN` | Discovery spark: idea, finding, directive, or request | +| **decision** | unit | `{PREFIX}-DEC-YYYY-NNN` (file) · hub decision entity | Approval package / recorded choice | +| **engagement** | unit | `{PREFIX}-ENG-YYYY-NNN` | Scheduled external interaction (file-backed; hub entity not yet first-class) | +| **register-entry** | unit (mostly) | `RISK-…`, `TD-…`, `CAP-…`, `CCR-…`, `ADR-…` | Risks, debt, capability requests, credential change requests, ADRs | Unregistered id patterns are rejected by CI and `statehub fix-consistency` (sidetrack detector). New kinds are added only via the canon registry. @@ -36,6 +58,33 @@ artifacts). They remain a separate hub entity and dashboard surface — see --- +## Lifecycle vs quality (Definition-of-X) + +Two independent axes: + +| Axis | Answers | Examples | +|------|---------|----------| +| **Lifecycle** (`status`) | Where is this in process? | workplan `active` / `finished`; intake `routed`; task `progress` | +| **Definition assessment** | Did it pass a named quality policy when assessed? | DoC / DoR / DoD (and DoI / DoM for repos/services) | + +Assessments do **not** invent extra lifecycle states. Outcomes are: + +- **unassessed** — no Definition-of-X assessment recorded yet +- **`DoX-Ok`** (tiered policies may use `DoM-Ok-1`, …) — last assessment passed +- **`DoX-Failed`** — assessment ran and failed + +A workplan may be `status=finished` without **DoD-Ok**, or `status=ready` +without **DoR-Ok**. That is allowed: process can advance while quality debt +stays visible. Policies live under `policies/` (same pattern as Repository DoI +and Service DoM). **DoC** (intake) and **DoR** (task/workplan) are introduced +by workplan `STATE-WP-0076`. + +Discovery quality (intake) is **not** the same as implementation-readiness +(task/workplan). Outside or sparse-context signals should be comprehended +(DoC) before they are promoted into structured delivery work. + +--- + ## Conventional spine Every work record carries the same conceptual fields (kind-specific fields diff --git a/dashboard/src/docs/workstreams.md b/dashboard/src/docs/workstreams.md index fcd4382..22cdf26 100644 --- a/dashboard/src/docs/workstreams.md +++ b/dashboard/src/docs/workstreams.md @@ -4,11 +4,14 @@ title: Workplans — Reference # Workplans — Reference -A workplan is a bounded unit of work within a topic. It carries a stored -workstation label in the `status` field, an optional owner and due date, and -belongs to exactly one project domain. The Workplans page gives you a -filtered, visual overview of active work, derived blocked state, and the -dependency graph between workplans. +A **workplan** is a work-record kind: a bounded, dependency-bearing unit of +work within a topic. It carries a stored lifecycle label in the `status` +field, an optional owner and due date, and belongs to exactly one project +domain. The Workplans page gives you a filtered, visual overview of active +work, derived blocked state, and the dependency graph between workplans. + +Umbrella: [Work Records](/docs/work-records). Lifecycle detail: +[Workplan Lifecycle](/docs/workstream-lifecycle). The [Daily WSJF Triage](/wsjf-triage) page is a companion review surface for activity-core's daily recommendations. It links recommendation candidates back diff --git a/dashboard/src/docs/wsjf-triage.md b/dashboard/src/docs/wsjf-triage.md index ec714a4..20e5718 100644 --- a/dashboard/src/docs/wsjf-triage.md +++ b/dashboard/src/docs/wsjf-triage.md @@ -55,3 +55,12 @@ that keep surfacing as the next best piece of work. No write controls live on this page. It is intentionally a review page so the daily runner remains a focus surface, not an execution loop. + +## Suggestions vs intakes + +The triage page and some summary digests historically linked a ranked +**suggestion** backlog. That entity is retired for writes; open gated needs +are **intake** work records. `ranked_suggestions` on the state summary still +reads the legacy suggestion table (typically empty after migration). Live +intake backlog: `GET /intakes/` — see [Intakes](/docs/intakes) and +[Suggestions (legacy)](/docs/suggestions). diff --git a/dashboard/src/reference.md b/dashboard/src/reference.md index 25ec465..58fed65 100644 --- a/dashboard/src/reference.md +++ b/dashboard/src/reference.md @@ -21,22 +21,25 @@ convention used in the Custodian State Hub. | Page | What it covers | |------|---------------| | [Connecting to the Hub](/docs/connecting) | Local and remote connection setup, ops-bridge tunnels, MCP transports | -| [Contributions](/docs/contributions) | Contribution types, lifecycle, third-party todo workflow | +| [Contributions](/docs/contributions) | Outbound third-party BR/FR/EP/UPR artifacts, lifecycle, todo class (not a work-record kind) | | [Decision Health](/docs/decisions-kpi) | KPI formula, avg resolve time, open-age colour thresholds | | [Decisions](/docs/decisions) | Decision types, statuses, escalation rules, filter bar | | [Dependencies](/docs/dependencies) | Dependency edges, registration, cycle detection | | [Domains](/docs/domains) | Domain model, statuses, cards with repos | | [Extension Points](/docs/extensions) | EP types, statuses, priorities, registration | +| [Intakes](/docs/intakes) | Work-record kind for sparks; lifecycle, promotion, API/MCP | | [Inter-Repo Communication](/docs/inter-repo-communication) | Boundary rule, Internal/Ecosystem/Third-party taxonomy, routing workflows | | [Live Data](/docs/live-data) | Poll interval, live indicator states, offline recovery | | [Overview](/docs/overview) | State summary sections, workplan chart, blocking decisions, next steps | | [Progress Log](/docs/progress-log) | Event types, append-only policy, session protocol | | [Repos](/docs/repos) | Repo registry, SBOM coverage map, ingestion commands | | [SBOM](/docs/sbom) | Lockfile ingestion, licence report, copyleft detection | +| [Suggestions (legacy)](/docs/suggestions) | Retired gated-need table; pointer to intakes | | [Tasks](/docs/tasks) | Task statuses, priorities, filter bar, status distribution chart | | [Technical Debt](/docs/debt) | Debt types, severities, statuses, registration | | [Todo](/docs/todo) | Internal/Ecosystem/Third-party classification, data sources | | [Workplan Health](/docs/workstream-health-index) | WHI formula, six base metrics, per-domain breakdown | +| [Workplan Lifecycle](/docs/workstream-lifecycle) | Workplan stored states, health labels, flow operations | | [Workplans](/docs/workstreams) | Workplan statuses, dependency edges, WHI KPI card | | [WSJF Triage](/docs/wsjf-triage) | Daily triage reports, action vocabulary, advisory review workflow | @@ -46,6 +49,7 @@ convention used in the Custodian State Hub. | Topic | What it covers | |-------|---------------| +| [Work Records](/docs/work-records) | Umbrella term, kind registry, spine, lifecycles, legacy name map | | [State Hub](/docs/state-hub) | Why/how/what — Derived Data Store principle, orchestrator role, architecture diagram, design principles | | [TPSC](/docs/tpsc) | Third-Party Services Catalog — tpsc.yaml format, ingest, MCP tools | | [TPSC — GDPR Maturity](/docs/gdpr-maturity) | 7-level CNIL/IAPP scale, per-level guidance, key GDPR concepts | diff --git a/dashboard/src/suggestions.md b/dashboard/src/suggestions.md index 291385c..3da219f 100644 --- a/dashboard/src/suggestions.md +++ b/dashboard/src/suggestions.md @@ -1,5 +1,5 @@ --- -title: Suggestions +title: Suggestions (legacy) --- ```js @@ -30,7 +30,7 @@ const _ok = sugState.ok ?? false; const _ts = sugState.ts; ``` -# Demand-Weighted Suggestions +# Suggestions (legacy) ```js import {injectTocTop} from "./components/toc-sidebar.js"; @@ -46,8 +46,12 @@ injectTocTop("live-indicator", _liveEl); const _h1 = document.querySelector("#observablehq-main h1"); if (_h1) { _h1.style.position = "relative"; withDocHelp(_h1, "/docs/suggestions"); } -display(html`

Ranked by WSJF = (base_value + relevance_weight × relevance) / job_size. Gated needs accrue relevance when unmet.

`); -display(html`

Daily WSJF triage consumes this backlog in its digest.

`); +display(html`

Read-only legacy. New gated needs are intake work records + (GET /intakes/, MCP create_intake) — see + Intakes and Suggestions reference. + This page lists historical GET /suggestions/ rows only; mutations return HTTP 410.

`); +display(html`

Former ranking: WSJF = (base_value + relevance_weight × relevance) / job_size. + Daily WSJF triage is workplan-oriented advisory review.

`); ``` ```js diff --git a/docs/evidence/legacy-meter-weekly-review-20260719.json b/docs/evidence/legacy-meter-weekly-review-20260719.json new file mode 100644 index 0000000..1909ed9 --- /dev/null +++ b/docs/evidence/legacy-meter-weekly-review-20260719.json @@ -0,0 +1,1755 @@ +{ + "captured_at": "2026-07-19T14:00:06.091484+00:00", + "api_base": "http://127.0.0.1:8000", + "workplan": "STATE-WP-0070", + "retired_interfaces": [], + "weekly_review": { + "generated_at": "2026-07-19T14:00:06.084800Z", + "window_start": "2026-07-19T06:00:05.487277Z", + "window_end": "2026-07-19T14:00:05.487277Z", + "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-07-08T21:38:52.773601Z", + "created_at": "2026-06-04T06:09:42.198193Z", + "updated_at": "2026-07-08T21:38:52.761243Z" + }, + "all_time": { + "calls": 255, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255 + }, + "users": { + "unknown": 255 + }, + "components": { + "state-hub.events": 255 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.839383Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "be3cdcf8-250b-4bf0-801f-02ffd5f57e00", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T19:32:21.628513Z", + "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-07-08T19:32:21.628513Z", + "updated_at": "2026-07-08T19:32:21.628513Z" + }, + "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-07-18T16:00:45.856882Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ], + "retirement_candidates": [ + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "be3cdcf8-250b-4bf0-801f-02ffd5f57e00", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T19:32:21.628513Z", + "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-07-08T19:32:21.628513Z", + "updated_at": "2026-07-08T19:32:21.628513Z" + }, + "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-07-18T16:00:45.856882Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ] + }, + "hours": 8 +} diff --git a/docs/evidence/legacy-meter-weekly-review-20260721.json b/docs/evidence/legacy-meter-weekly-review-20260721.json new file mode 100644 index 0000000..0ccc74c --- /dev/null +++ b/docs/evidence/legacy-meter-weekly-review-20260721.json @@ -0,0 +1,1755 @@ +{ + "captured_at": "2026-07-20T22:00:04.665800+00:00", + "api_base": "http://127.0.0.1:8000", + "workplan": "STATE-WP-0070", + "retired_interfaces": [], + "weekly_review": { + "generated_at": "2026-07-20T22:00:04.659438Z", + "window_start": "2026-07-20T14:00:04.586631Z", + "window_end": "2026-07-20T22:00:04.586631Z", + "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-07-08T21:38:52.773601Z", + "created_at": "2026-06-04T06:09:42.198193Z", + "updated_at": "2026-07-08T21:38:52.761243Z" + }, + "all_time": { + "calls": 255, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255 + }, + "users": { + "unknown": 255 + }, + "components": { + "state-hub.events": 255 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.839383Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "be3cdcf8-250b-4bf0-801f-02ffd5f57e00", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T19:32:21.628513Z", + "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-07-08T19:32:21.628513Z", + "updated_at": "2026-07-08T19:32:21.628513Z" + }, + "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-07-18T16:00:45.856882Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ], + "retirement_candidates": [ + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "be3cdcf8-250b-4bf0-801f-02ffd5f57e00", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T19:32:21.628513Z", + "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-07-08T19:32:21.628513Z", + "updated_at": "2026-07-08T19:32:21.628513Z" + }, + "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-07-18T16:00:45.856882Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ] + }, + "hours": 8 +} diff --git a/docs/evidence/legacy-meter-weekly-review-20260722.json b/docs/evidence/legacy-meter-weekly-review-20260722.json new file mode 100644 index 0000000..fdf1951 --- /dev/null +++ b/docs/evidence/legacy-meter-weekly-review-20260722.json @@ -0,0 +1,1716 @@ +{ + "captured_at": "2026-07-22T14:00:03.546399+00:00", + "api_base": "http://127.0.0.1:8000", + "workplan": "STATE-WP-0070", + "retired_interfaces": [], + "weekly_review": { + "generated_at": "2026-07-22T14:00:03.540281Z", + "window_start": "2026-07-22T06:00:03.489476Z", + "window_end": "2026-07-22T14:00:03.489476Z", + "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-07-08T21:38:52.773601Z", + "created_at": "2026-06-04T06:09:42.198193Z", + "updated_at": "2026-07-08T21:38:52.761243Z" + }, + "all_time": { + "calls": 255, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255 + }, + "users": { + "unknown": 255 + }, + "components": { + "state-hub.events": 255 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.839383Z", + "retirement_candidate": false, + "retirement_reason": "already retired" + }, + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "be3cdcf8-250b-4bf0-801f-02ffd5f57e00", + "interface_key": "rest_api:GET /tasks/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T19:32:21.628513Z", + "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-07-08T19:32:21.628513Z", + "updated_at": "2026-07-08T19:32:21.628513Z" + }, + "all_time": { + "calls": 587, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 587 + }, + "users": { + "unknown": 587 + }, + "components": { + "unknown": 587 + } + }, + "window": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "last_seen_at": "2026-07-22T13:21:12.171828Z", + "retirement_candidate": false, + "retirement_reason": "3 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ], + "retirement_candidates": [ + { + "interface": { + "id": "63ed90e3-42b4-431a-94db-e1254a52f9e2", + "interface_key": "mcp:create_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.205900Z", + "replacement_ref": "create_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.205900Z", + "updated_at": "2026-07-10T13:19:44.205900Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:43.378546Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "b6a5fe44-fb85-4ef7-a273-78d09da777af", + "interface_key": "mcp:list_workstreams", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:26.075491Z", + "replacement_ref": "list_workplans", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-07-10T13:19:26.075491Z", + "updated_at": "2026-07-10T13:19:26.075491Z" + }, + "all_time": { + "calls": 2, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 2 + }, + "users": { + "unknown": 2 + }, + "components": { + "state-hub.mcp": 2 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:42.374940Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "53c3372b-307d-4d6a-8ea4-bc36cacdcaf2", + "interface_key": "mcp:update_workstream", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.255216Z", + "replacement_ref": "update_workplan", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.255216Z", + "updated_at": "2026-07-10T13:19:44.255216Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "bed4d08a-3471-48f5-9f0e-f9d550383a26", + "interface_key": "mcp:update_workstream_status", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.303612Z", + "replacement_ref": "update_workplan_status", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.303612Z", + "updated_at": "2026-07-10T13:19:44.303612Z" + }, + "all_time": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": null, + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "46900dc2-0893-405b-ba59-80f31fb6ebb1", + "interface_key": "state://workstreams/{topic_slug}", + "interface_kind": "mcp_tool", + "legacy_since": "2026-07-10T13:19:44.344493Z", + "replacement_ref": "state://workplans/{topic_slug}", + "owner_component": "state-hub.mcp", + "status": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": "Registered by STATE-WP-0070 T03 \u2014 zero-window streak starts at registration", + "retired_at": null, + "created_at": "2026-07-10T13:19:44.344493Z", + "updated_at": "2026-07-10T13:19:44.344493Z" + }, + "all_time": { + "calls": 1, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 1 + }, + "users": { + "unknown": 1 + }, + "components": { + "state-hub.mcp": 1 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T13:20:34.491811Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-06T17:28:13.052813Z", + "updated_at": "2026-06-06T17:28:13.052813Z" + }, + "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": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "a4e0948c-cd4a-461e-8ae2-7fd7b51d04a7", + "interface_key": "rest_api:GET /decisions/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T23:07:53.093223Z", + "replacement_ref": "/decisions/?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-07-09T23:07:53.093223Z", + "updated_at": "2026-07-09T23:07:53.093223Z" + }, + "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-07-09T23:07:53.083299Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "70a9346e-e0ee-42ac-874f-f160580b54dd", + "interface_key": "rest_api:GET /progress/?workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-13T22:04:03.911449Z", + "replacement_ref": "/progress/?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-07-13T22:04:03.911449Z", + "updated_at": "2026-07-13T22:04:03.911449Z" + }, + "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-07-13T22:04:03.904998Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage 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": 144084, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 144084 + }, + "users": { + "unknown": 144084 + }, + "components": { + "unknown": 144084 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:39.652776Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T05:20:58.321869Z", + "updated_at": "2026-06-04T05:20:58.321869Z" + }, + "all_time": { + "calls": 30, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 30 + }, + "users": { + "unknown": 30 + }, + "components": { + "unknown": 30 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-03T05:20:34.534439Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 511405, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 511405 + }, + "users": { + "unknown": 511405 + }, + "components": { + "unknown": 511405 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:20.781103Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": 255865, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 255865 + }, + "users": { + "unknown": 255865 + }, + "components": { + "unknown": 255865 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T21:14:12.747005Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T06:09:41.901035Z", + "updated_at": "2026-06-04T06:09:41.901035Z" + }, + "all_time": { + "calls": 571, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 571 + }, + "users": { + "unknown": 571 + }, + "components": { + "unknown": 571 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:49:12.335710Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4aea9591-970b-4918-ac4a-4da95a0a1a8c", + "interface_key": "rest_api:POST /decisions/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-09T22:56:35.473130Z", + "replacement_ref": "POST /decisions/ with 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-07-09T22:56:35.473130Z", + "updated_at": "2026-07-09T22:56:35.473130Z" + }, + "all_time": { + "calls": 3, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 3 + }, + "users": { + "unknown": 3 + }, + "components": { + "unknown": 3 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-09T22:57:05.912456Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "4a70583c-1e41-4ec1-99a9-728856a7d79c", + "interface_key": "rest_api:POST /progress/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T23:35:09.148333Z", + "replacement_ref": "POST /progress/ with 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-07-08T23:35:09.148333Z", + "updated_at": "2026-07-08T23:35:09.148333Z" + }, + "all_time": { + "calls": 14, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 14 + }, + "users": { + "unknown": 14 + }, + "components": { + "unknown": 14 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-10T08:34:42.959724Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "interface": { + "id": "6df4e443-7bf1-461a-923b-a6eb52fe7b07", + "interface_key": "rest_api:POST /tasks/ workstream_id", + "interface_kind": "rest_api", + "legacy_since": "2026-07-08T22:38:29.405720Z", + "replacement_ref": "POST /tasks/ with 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-07-08T22:38:29.405720Z", + "updated_at": "2026-07-08T22:38:29.405720Z" + }, + "all_time": { + "calls": 5, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 5 + }, + "users": { + "unknown": 5 + }, + "components": { + "state-hub.fix-consistency": 5 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T22:38:29.976918Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T07:40:24.168535Z", + "updated_at": "2026-06-04T07:40:24.168535Z" + }, + "all_time": { + "calls": 824, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 824 + }, + "users": { + "unknown": 824 + }, + "components": { + "unknown": 824 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-08T20:38:05.903144Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + }, + { + "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": "legacy", + "replacement_verified": true, + "manual_hold": false, + "hold_reason": null, + "notes": null, + "retired_at": null, + "created_at": "2026-06-04T22:57:37.149207Z", + "updated_at": "2026-06-04T22:57:37.149207Z" + }, + "all_time": { + "calls": 4971, + "tenant_count": 1, + "user_count": 1, + "component_count": 1, + "tenants": { + "unknown": 4971 + }, + "users": { + "unknown": 4971 + }, + "components": { + "unknown": 4971 + } + }, + "window": { + "calls": 0, + "tenant_count": 0, + "user_count": 0, + "component_count": 0, + "tenants": {}, + "users": {}, + "components": {} + }, + "last_seen_at": "2026-07-01T22:09:24.229011Z", + "retirement_candidate": true, + "retirement_reason": "no measured usage in review window" + } + ] + }, + "hours": 8 +} diff --git a/workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md b/workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md new file mode 100644 index 0000000..a982fbd --- /dev/null +++ b/workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md @@ -0,0 +1,226 @@ +--- +id: STATE-WP-0076 +type: workplan +title: "Definition of Ready (DoR) and Definition of Comprehension (DoC) quality gates" +domain: infotech +repo: state-hub +status: ready +owner: grok +topic_slug: infotech +created: "2026-07-22" +updated: "2026-07-22" +reviewed_at: "2026-07-22" +reviewed_by: "grok" +reviewed_against_commit: "HEAD" +context_paths: + - "policies/" + - "dashboard/src/docs/work-records.md" + - "dashboard/src/docs/intakes.md" + - "dashboard/src/docs/workstream-lifecycle.md" + - "dashboard/src/policy/" + - "docs/work-record-quality-gates.md" + - "workplans/STATE-WP-0076-definition-of-ready-and-comprehension.md" +state_hub_workstream_id: "72d64a42-bb87-4842-839d-3d4ed783ff2d" +--- + +# STATE-WP-0076 — DoR and DoC quality gates + +## Goal + +Ship the next slice of the work-record quality model that pays off soon: + +1. **Policies** in the existing DoI / DoM / DoD family: **DoC** (intake) and **DoR** + (task + workplan sections). +2. **Dashboard** edit/view surfaces like the other policies. +3. **Docs** that fix terminology: work-record as generic coordination artefact + (units *and* structure), lifecycle **≠** definition assessment, badge spelling + `DoX-Ok` / `DoX-Failed` / unassessed. + +No badge engine, no hard API blocks, no new kinds, no value-chain typing. + +## Where we are (context) + +| Already true | Gap this plan closes | +|--------------|----------------------| +| Work-record kinds + spine (canon) | DoC/DoR not written as hub policies | +| Intake = discovery; promote → delivery | No transparent “comprehended enough?” checklist | +| Workplan `ready` / `finished` lifecycle | No separate DoR/DoD assessment language; status ≠ quality | +| DoI, DoM, DoD as `policies/*.md` + UI | DoC/DoR missing from that family | +| Reference docs for kinds/lifecycle | Need unit-vs-structure + quality-vs-state framing | + +Prior session also left doc updates for suggestions→intake and work-records +pages; this plan assumes those land or already landed in the same branch. + +## Non-goals + +- Freeform badge product or badge persistence API +- Soft/hard enforcement hooks (convention only until policies are used) +- Renaming kinds (`intake`→find, `task`→item) +- DiscoveryMap / mon-pro-sal / enforced exp→…→evo chains +- Contribution retirement +- Full DoD rewrite (link only; optional one-line title note) + +## Design constraints (fixed for this plan) + +1. **Lifecycle state ≠ definition badge.** + `status=finished` may lack `DoD-Ok`; `status=ready` may lack `DoR-Ok`. That + is intentional (fluid progress + quality metrics later). + +2. **Badge family is closed and named after policies.** + Outcomes: **unassessed** | **`DoC-Ok` / `DoR-Ok` / `DoD-Ok`** | **`DoC-Failed` / + `DoR-Failed` / `DoD-Failed`**. Tiered policies (DoI/DoM) may use `DoM-Ok-1` + etc. Assessment is manual/convention in this plan; storage can be prose or + frontmatter later. + +3. **Policies declare `applies_to` kinds** and may have **per-kind sections** + (e.g. DoR for task vs workplan). Workplan is a **structure** record; task is + a **unit** work-item — do not call workplans “work-items” in policy text. + +4. **DoC** applies only to **`intake`**. It justifies treating discovery as + understood enough to route/promote — not implementation design. + +5. **DoR** applies to **`task`** and **`workplan`**. It justifies + implementation-readiness. Workplan lifecycle `ready` remains a process claim; + DoR is the checklist behind a `DoR-Ok` assessment. + +6. **Outside-originated** = extra **sections** in DoC/DoR (origin/boundary + fields), not a new kind. + +7. **Enforcement = convention + docs.** No promote-intake/API blocking in this + plan. + +--- + +## Task: Quality model + work-record roles in docs + +```task +id: STATE-WP-0076-T01 +status: todo +priority: high +state_hub_task_id: "53aac055-97a7-405b-bb9b-48427de4296a" +``` + +Short design/reference write-up only (no product build): + +- Update `dashboard/src/docs/work-records.md`: work-record as **generic** mode + for units *and* structure (plans/collections); unit vs structure table; quality + badges vs lifecycle; link to policies when they exist. +- Add `docs/work-record-quality-gates.md`: Definition family (DoI/DoM/DoC/DoR/DoD), + badge spelling, applies_to matrix, outside profile pointer, explicit non-goals. +- One cross-link from intakes + workplan lifecycle docs. + +**Done when:** an agent can explain unit vs structure and DoR-Ok vs `status=ready` +from the docs alone. + +--- + +## Task: Author DoC policy + +```task +id: STATE-WP-0076-T02 +status: todo +priority: high +state_hub_task_id: "2498bd9f-e773-4dad-a2e3-9c32b5585d73" +``` + +Create `policies/intake-doc.md` (Definition of Comprehension). + +- `applies_to: intake` +- Core checklist (signal, why it matters, unknowns, provisional ownership or + “unknown”, next action) +- Outside-originated section +- Explicit: DoC ≠ DoR; assessment outcomes DoC-Ok / DoC-Failed / unassessed +- Loadable as `GET /policy/intake-doc` + +**Done when:** policy file exists and is readable via the policy API. + +--- + +## Task: Author DoR policy + +```task +id: STATE-WP-0076-T03 +status: todo +priority: high +state_hub_task_id: "a1e7ab93-c0b9-423c-84d8-1e9dcff9ebc7" +``` + +Create `policies/work-item-dor.md` (Definition of Ready) — filename keeps +“work-item” as the delivery-side gate name; body uses **task** and **workplan** +sections (not “workplan is a work-item”). + +- Per-kind sections: task, workplan +- Outside-originated section +- Link to `workstream-dod.md` as exit companion (DoD-Ok separate from finished) +- Assessment outcomes DoR-Ok / DoR-Failed / unassessed +- Loadable as `GET /policy/work-item-dor` + +**Done when:** policy file exists and is readable via the policy API. + +--- + +## Task: Dashboard policy pages + nav + +```task +id: STATE-WP-0076-T04 +status: todo +priority: high +state_hub_task_id: "d4aa3c53-3aa0-492f-b721-1c4e7e75bcb6" +``` + +Mirror DoI/DoM/DoD: + +- `dashboard/src/policy/intake-doc.md`, `dashboard/src/policy/work-item-dor.md` +- Policies entries in `observablehq.config.js` +- Links from work-records reference (+ quality-gates doc) + +**Done when:** Policies menu shows DoC and DoR; edit/view works against the API. + +--- + +## Cancelled / deferred tasks + +Soft enforcement and DoD family-index tasks were dropped from scope after +review (policy + docs first). + +```task +id: STATE-WP-0076-T05 +status: cancel +priority: medium +state_hub_task_id: "80f612f4-4a8a-4e2c-9cbb-08dfb27264af" +``` + +Soft enforcement hooks — deferred until DoC/DoR text is in use. + +```task +id: STATE-WP-0076-T06 +status: cancel +priority: low +state_hub_task_id: "fb6b81a0-208e-4a33-af33-776867411b7d" +``` + +Standalone DoD naming / family index task — folded into T01 quality-gates doc. + +## Deferred (not in this plan) + +| Idea | Why defer | +|------|-----------| +| Soft warnings on promote / ready without assessment | Needs lived policy text first | +| Badge fields in DB/frontmatter + “finished ∧ ¬DoD-Ok” KPI | Mid-term metric; convention first | +| DoD body rewrite + filename migration | Low urgency; link from DoR is enough | +| Optional type tags (dev/sec/ops, exp/def/try/sol) | No gate dependency | + +## Acceptance criteria + +- [ ] Docs: generic work-record (unit + structure), lifecycle ≠ DoX badge +- [ ] `policies/intake-doc.md` and `policies/work-item-dor.md` live and API-served +- [ ] Outside-originated sections present in both +- [ ] Dashboard Policies nav includes both +- [ ] No new kinds, no badge engine, no hard enforcement + +## References + +- `the-custodian/canon/standards/work-record-types_v0.1.md` +- `policies/repo-doi.md`, `policies/service-dom.md`, `policies/workstream-dod.md` +- `dashboard/src/docs/work-records.md`, `intakes.md`, `workstream-lifecycle.md` +- `api/routers/policy.py`