Skip to content

v0.1.73

Choose a tag to compare

@rromenskyi rromenskyi released this 02 Oct 09:54
· 45 commits to main since this release
e532674

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 (-race clean), 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