Repository navigation
v0.1.73
Routing/fallback — 3 of 62 confirmed findings (11-13 of 62)
Re-derived from current code by a fresh investigation fork. Bundled into one PR since all three are small and land in the same subsystem.
Unregistered target fell through to a generic, unclassified error
runChat/runStream silently fell back on a plain error when a resolved target's provider wasn't in the live registry — a real gap: a Postgres row with enabled=true can still fail to build into the in-memory Registry (e.g. a malformed Vertex config), logged only at startup/reload time. If every tier hit this, the client just got a generic 502 with nothing telling an operator the alias was silently broken. Now logged at the moment a real request hits the gap, naming the alias and provider.
Lazy-resolve race in the BERT model pool
modelpool.Pool.Scan's if !p.resolved.Load() { p.Resolve() } let several concurrent Scans against a never-Start()-ed pool each kick off their own independent Resolve — same shape as the already-fixed model-catalog cache finding. A Start()-ed pool is unaffected. Guarded with sync.Once, matching this codebase's existing lazy-start idiom.
Disabled vs. nonexistent provider gave the identical message
passthroughTarget filtered on enabled = true, so a disabled provider and a nonexistent one both got "not found" — misleading, not a leak (the key already had to know the name). Now distinguishes "is disabled" from "not found".
- Test:
TestRunChatLogsUnregisteredTarget,TestScanConcurrentLazyResolveDedupes(-raceclean),TestPassthroughDisabledProviderDistinctFromNotFound - Surgical-revert proof: each reverted genuinely — including a real self-caught false positive: the passthrough test's first version named its fixture provider
"passthrough-disabled-<ts>", and reverting the fix still passed because the provider's own name contained the word "disabled" the assertion was checking for. Renamed the fixture and added negative assertions before shipping.
Shipped via #149, chart bump #150.
★ Routing/fallback subsystem: every finding (Critical/Important/Minor) now fully closed.
Next up: Frontend's 2 uncatalogued Minor findings — the LAST subsystem in the full 62-finding campaign.
Full Changelog: v0.1.72...v0.1.73