Skip to content

release/v1.28.28 — OpenAI-compatible gateways work; a re-keyed night can no longer vanish#474

Merged
MBombeck merged 2 commits into
mainfrom
release/v1.28.28
Jul 11, 2026
Merged

release/v1.28.28 — OpenAI-compatible gateways work; a re-keyed night can no longer vanish#474
MBombeck merged 2 commits into
mainfrom
release/v1.28.28

Conversation

@MBombeck

Copy link
Copy Markdown
Owner

Two work packages. (Deliberately no closing keyword — reporters confirm first.)

Gateway frictions from #470 — Local provider sends standard response_format with a per-endpoint self-healing dialect fallback (cache + one retry on a response_format rejection); tool-call JSON shim parsing (LiteLLM-fronted Claude); INSIGHTS_MAX_TOKENS (default 2500, clamped, unified across all six call sites) + distinct truncation 422; grounding-gate omission surfaced on the briefing card (briefingOmittedReason, additive); test button gains bad_request for 4xx; Local-provider form copy + provider docs name the gateways; env example + compose whitelist extended.

Natural-key rescue (sleep-vanish follow-up) — the second FULL unique index (type, measured_at, source, sleep_stage) silently killed re-keyed inserts whose old-format rows had just been swept (live incident: a full re-sync erased a user's Google sleep history). Planned creates now probe by natural key; any match — live or tombstoned — is updated in place with the fresh value + NEW externalId + deletedAt: null. Probe failure registers on the hard-fail ledger so the watermark holds. One full sync after updating heals affected histories.

Gate: typecheck, lint, 13484 unit tests, prettier, build, knip, openapi:check all green.

MBombeck added 2 commits July 11, 2026 10:36
…d night can no longer vanish

The Local provider speaks the standard JSON wire: response_format by default,
one self-healing fallback per endpoint when a server rejects it (dialect
cached per base URL) — LiteLLM, OpenRouter, vLLM, LM Studio and plain Ollama
all work from the same form, and the form + provider docs now say so. A
gateway that shims a Claude-family model behind a synthesized tool call is
parsed from the tool-call arguments instead of yielding silently empty
insights.

The insight token budget is configurable (INSIGHTS_MAX_TOKENS, default 2500,
clamped 500-8000) and unified across all six call sites; a reply cut off
mid-JSON returns a distinct truncation error instead of a generic parse
failure. A briefing withheld by the number-grounding check now says so on the
card instead of pretending nothing was generated. The provider test button
answers 4xx with a bad_request category instead of claiming the endpoint was
unreachable.

Sleep repair follow-up: measurements carries a second full unique index — the
natural key (type, measured_at, source, sleep_stage) — so a key-format
migration could tombstone the old rows while their re-keyed replacements
collided with that index and were silently dropped (live incident: a
full-history re-sync erased a user's sleep). Planned creates now run a
natural-key rescue probe: a match, live or tombstoned, is updated in place —
fresh value, the new externalId, deletedAt cleared. A rescue-probe failure
holds the watermark so nothing is lost past the overlap.
The dashboard is exactly the surface a user leaves open in a background tab
while editing its tile selection elsewhere; with focus refetch off, the stale
layout sat visible for up to the poll interval — a save appeared to do
nothing, then 'worked' minutes later. staleTime still bounds the refetch to
once a minute and the server side is SWR-cached, so a focus flick is a cheap
cache hit. Chart batch series stay on the poll (heavier payloads; the tile
selection itself lives on the snapshot query).
@MBombeck MBombeck merged commit 16f7869 into main Jul 11, 2026
13 checks passed
@MBombeck MBombeck deleted the release/v1.28.28 branch July 11, 2026 08:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant