STATE-WP-0069: schedule weekly legacy-meter review monitoring
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s
Build and Publish Container Image / build-and-push (push) Successful in 36s

Add legacy_meter_weekly_review state-hub resolver query, weekly activity
definition (Mon 08:30 Berlin), Railiance runtime projection, and progress
sink posting for STATE-WP-0069 retirement gating.
This commit is contained in:
tegwick 2026-07-08 20:55:06 +02:00
parent bad91099e8
commit efa361541b
8 changed files with 267 additions and 1 deletions

View file

@ -706,6 +706,68 @@ def test_daily_triage_digest_is_curated_scalar_json(monkeypatch) -> None:
assert digest["ranked_suggestions"][0]["origin_ref"] == "issue-core-ingestion-api-key"
def test_legacy_meter_weekly_review_summarises_candidates(monkeypatch) -> None:
payloads = {
"/legacy-meter/weekly-review": {
"generated_at": "2026-07-08T08:30:00+00:00",
"window_start": "2026-07-01T08:30:00+00:00",
"window_end": "2026-07-08T08:30:00+00:00",
"activity_core_handoff": {
"activity_id": "statehub-legacy-interface-review",
"scheduler_owner": "activity-core",
},
"interfaces": [
{
"interface": {
"interface_key": "rest_api:GET /workstreams/",
"interface_kind": "rest_api",
"replacement_ref": "GET /workplans/",
},
"window": {"calls": 2},
"retirement_candidate": False,
},
{
"interface": {
"interface_key": "mcp:create_workstream",
"interface_kind": "mcp_tool",
"replacement_ref": "create_workplan",
},
"window": {"calls": 0},
"retirement_candidate": True,
"retirement_reason": "no measured usage in review window",
},
],
"retirement_candidates": [
{
"interface": {
"interface_key": "mcp:create_workstream",
"interface_kind": "mcp_tool",
"replacement_ref": "create_workplan",
},
"window": {"calls": 0},
"retirement_candidate": True,
"retirement_reason": "no measured usage in review window",
}
],
}
}
def fake_get(url: str, **kwargs: Any) -> DummyResponse:
path = url.replace("http://state-hub.test", "")
return DummyResponse(payloads.get(path, {}))
monkeypatch.setenv("STATE_HUB_URL", "http://state-hub.test")
monkeypatch.setattr(httpx, "get", fake_get)
result = StateHubContextResolver().resolve("legacy_meter_weekly_review", None, {"days": 7})
assert result["kind"] == "legacy_meter_weekly_review"
assert result["interface_count"] == 2
assert result["retirement_candidate_count"] == 1
assert result["window_legacy_calls"] == 2
assert result["retirement_candidates"][0]["interface_key"] == "mcp:create_workstream"
def test_phase5_stabilization_check_passes(monkeypatch) -> None:
payloads = {
"/state/health": {"status": "ok", "db": "connected"},