From 54577cd847e5a47e19f7a3cec2bca99d6d79e824 Mon Sep 17 00:00:00 2001 From: tegwick Date: Fri, 10 Jul 2026 21:47:46 +0200 Subject: [PATCH] fix(legacy-meter): guard MCP alias metering off in tests Alias tests monkeypatch _get/_post but _meter_legacy_mcp uses _client() directly, so every pytest run recorded real usage and reset zero-window retirement streaks. STATEHUB_MCP_LEGACY_METER=off skips metering; set in tests/conftest.py. Verified meter counts flat across the alias suite. Co-Authored-By: Claude Fable 5 --- mcp_server/server.py | 2 ++ tests/conftest.py | 4 ++++ ...E-WP-0070-workplan-terminology-phase2-retirement.md | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/mcp_server/server.py b/mcp_server/server.py index 0324d3b..7043677 100644 --- a/mcp_server/server.py +++ b/mcp_server/server.py @@ -226,6 +226,8 @@ def _meter_legacy_mcp(*, tool: str | None = None, resource: str | None = None) - (`mcp:` / resource URI). Failures never surface to the caller — the meter gates retirement, it must not break the aliased call itself. """ + if os.environ.get("STATEHUB_MCP_LEGACY_METER", "on") == "off": + return if tool: key = f"mcp:{tool}" replacement = _LEGACY_MCP_TOOL_REPLACEMENTS[tool] diff --git a/tests/conftest.py b/tests/conftest.py index 5358d7a..12fd9fd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,6 +23,10 @@ from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_asyn # Make api/ importable when running pytest from state-hub/ sys.path.insert(0, str(Path(__file__).parent.parent)) +# Tests exercising legacy MCP aliases must not record real usage on the live +# legacy meter — that would reset zero-window retirement streaks every run. +os.environ.setdefault("STATEHUB_MCP_LEGACY_METER", "off") + _ASYNC_URL = os.getenv( "TEST_DATABASE_URL", "postgresql+asyncpg://custodian:changeme@127.0.0.1:5432/custodian_test", diff --git a/workplans/STATE-WP-0070-workplan-terminology-phase2-retirement.md b/workplans/STATE-WP-0070-workplan-terminology-phase2-retirement.md index 26d7b98..a6e32f5 100644 --- a/workplans/STATE-WP-0070-workplan-terminology-phase2-retirement.md +++ b/workplans/STATE-WP-0070-workplan-terminology-phase2-retirement.md @@ -119,6 +119,16 @@ zero-window streaks accrue from 2026-07-10. Note: `mcp:list_workstreams` shows 1 verification call in the 2026-07-10 window — streak counts from the next window. Removal remains gated on 7 consecutive zero windows. +Recheck 2026-07-10: pytest was recording real alias usage on the live meter +(tests monkeypatch `_get`/`_post` but the meter helper uses `_client()`), +which would reset streaks every run. Guarded with +`STATEHUB_MCP_LEGACY_METER=off`, set in `tests/conftest.py`; verified +before/after counts flat across the alias test suite. Stray counts from +verification + first test run (create=2, list=2, resource=1) clear at next +window rollover. **Deploy note:** the long-running dev-hub MCP process +(:8001) predates this change and must be restarted (`make mcp-http`) before +its zero windows are trustworthy — unmetered live usage would look like zero. + ## Task: Internal dual-key and param alias cleanup ```task