diff --git a/docs/plans/2026-06-15-forced-subtag-mode-fix.md b/docs/plans/2026-06-15-forced-subtag-mode-fix.md index 654b1a0..07dc51f 100644 --- a/docs/plans/2026-06-15-forced-subtag-mode-fix.md +++ b/docs/plans/2026-06-15-forced-subtag-mode-fix.md @@ -95,3 +95,22 @@ BuildConsumer→SubtagAlarmConsumer, or a contract/IPC round-trip test if the en Branch off `main`. #2 is the clean confirmed fix; #1 is diagnose-then-fix. Net48 worker constraints apply (no init-only props/positional records). Do NOT increment `provider_switches` on an initial forced-mode set. + +--- + +## Resolution (2026-06-15) + +**#1 was NOT a bug — it was a grpcurl proto-mismatch artifact.** End-to-end instrumentation +proved: the gateway sends `forcedMode=Subtag`, the worker's `BuildConsumer` builds the +`SubtagAlarmConsumer`, and the worker `QueryActive` + gateway `ApplyReconcile`/`StreamAlarms` +all carry `degraded=true` / `source_provider=SUBTAG`. The original "degraded=false" observation +came from running grpcurl against the host checkout's proto (branch `feat/lazy-browse-children`), +which predates the feature and lacks the `degraded`/`source_provider` fields — grpcurl silently +dropped them. With the matching proto, every active alarm shows `degraded=true`. No code change. +Tasks 1/3/4 (worker diagnostics + #1 fix) were dropped; the temporary diagnostics were reverted. + +**#2 was a real defect — fixed.** Gateway now seeds `_providerMode`/gauge/feed from the configured +forced mode (`fix: gateway reflects configured forced provider mode`). Verified live: +`provider_mode=2`, first `ProviderStatus` = `Mode=Subtag, degraded=true, +reason="Forced subtag mode (configuration)"`. Auto mode unchanged → windev production (Auto) +unaffected; no redeploy required. Gateway tests: 163 passed.