STATE-WP-0070 T03: remove legacy workstream MCP aliases
Meter-gated removal (7 consecutive zero-usage windows reached). Deletes:
- MCP tools: create_workstream, list_workstreams, update_workstream,
update_workstream_status
- MCP resource: state://workstreams/{topic_slug}
- Dead helpers: _LEGACY_MCP_* maps, _legacy_mcp_deprecation,
_meter_legacy_mcp, _attach_legacy_deprecation, _update_workplan_legacy_impl
TOOLS.md keeps a retired→preferred migration map (per backlog). Removed the
now-dead STATEHUB_MCP_LEGACY_METER guard in conftest. Retargeted the
create_workplan error-skip test to the preferred tool; dropped alias-only tests.
Staged on branch state-wp-0070-legacy-retirement — do not merge until the 7th
documented zero-usage window is captured.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1acad4c02c
commit
ef62cb3872
5 changed files with 28 additions and 328 deletions
|
|
@ -27,22 +27,6 @@ def test_normalize_progress_body_prefers_workplan_id_only() -> None:
|
|||
assert "workstream_id" not in legacy_only
|
||||
|
||||
|
||||
def test_legacy_mcp_deprecation_payload_names_replacement() -> None:
|
||||
payload = server._legacy_mcp_deprecation(tool="create_workstream")
|
||||
assert payload["replacement"] == "create_workplan"
|
||||
assert payload["deprecated"] == "true"
|
||||
|
||||
|
||||
def test_attach_legacy_deprecation_preserves_success_payload() -> None:
|
||||
raw = server._attach_legacy_deprecation(
|
||||
"update_workstream_status",
|
||||
json.dumps({"id": "wp-1", "status": "active"}),
|
||||
)
|
||||
body = json.loads(raw)
|
||||
assert body["id"] == "wp-1"
|
||||
assert body["_deprecation"]["tool"] == "update_workstream_status"
|
||||
|
||||
|
||||
def _fake_get(path: str, params: dict | None = None):
|
||||
if path == "/topics":
|
||||
return [{"id": "topic-1", "domain_slug": "infotech", "title": "Infotech"}]
|
||||
|
|
@ -70,20 +54,6 @@ def _fake_get(path: str, params: dict | None = None):
|
|||
return []
|
||||
|
||||
|
||||
def test_legacy_workstreams_resource_includes_deprecation(monkeypatch) -> None:
|
||||
def fake_get(path: str, params: dict | None = None):
|
||||
if path == "/topics":
|
||||
return [{"id": "topic-1", "slug": "infotech", "domain_slug": "infotech"}]
|
||||
if path == "/workstreams":
|
||||
return [{"id": "wp-1", "title": "Demo", "slug": "demo-wp"}]
|
||||
return []
|
||||
|
||||
monkeypatch.setattr(server, "_get", fake_get)
|
||||
payload = json.loads(server.resource_workstreams("infotech"))
|
||||
assert payload["_deprecation"]["replacement"] == "state://workplans/{topic_slug}"
|
||||
assert payload["workplans"] == payload["workstreams"]
|
||||
|
||||
|
||||
def test_get_domain_summary_goal_guidance_is_workplan_first(monkeypatch) -> None:
|
||||
monkeypatch.setattr(server, "_get", lambda path, params=None: _fake_get(path, params))
|
||||
payload = json.loads(server.get_domain_summary("infotech"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue