fix: close three release-audit regressions from today's merge train - #2010
Merged
Conversation
1. Keep-alive re-arm (post-#1941): codex-rs parses at the EVENT level, so the comment-line keep-alive never re-armed its idle timer (110 RCA). The default is the typed response.heartbeat frame again; the grok surface — whose strict decoder dies on unknown variants but tolerates comments — opts into comment style via a new heartbeatStyle bridge option threaded from logCtx.surface. 2. WHAM-wins plan provenance (post-#1998): a JWT-derived plan could overwrite a live WHAM plan on the next token refresh or startup reconcile. plan writes now carry persisted provenance (planSource + planCredentialGeneration); a JWT write is refused while a WHAM observation exists for the same credential generation, and a token refresh (newer generation) legitimately reopens it. Steady-state refreshes stay write-free. 3. Unclassified chat-wire tier projection (post-#1965): removing the legacy chat serialize-collapse flipped no-config openai-chat providers from false to undefined, breaking require.serviceTier "unsupported" routing matches. An unclassified chat route whose final adapter will not forward any tier projects false again; chatServiceTier: true and Responses-wire unclassified keep the historical unknown.
Contributor
|
✅ Deterministic PR hygiene checks passed. |
2 tasks
lilinxiong
pushed a commit
to lilinxiong/opencodex
that referenced
this pull request
Aug 18, 2026
The audit record is terminal: blockers fixed via lidge-jun#2010, the 2.26.0 recommendation delivered via lidge-jun#2011; remaining gates are maintainer-owned and out of this unit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A release-readiness hard audit (grok-4.6 + gpt-5.6-sol workers, full local gates) of everything landed since v2.25.0 found three blocking regressions introduced by today's merges. This closes all three:
timeout(idle_timeout, stream.next())over an eventsource stream that parses at the EVENT level — the comment-line keep-alive fix(grok): switch to Responses backend and backfill required annotations #1941 introduced dispatches no event and never re-arms it (the 110_codex-stream-stability RCA had already proven this). Default returns to the typedresponse.heartbeatframe (ignored by codex-rs's catch-all); the grok surface — whose strict async-openai decoder dies on unknown variants but tolerates comments — opts into comment style via a newheartbeatStylebridge option threaded fromlogCtx.surface.planwrites now persist provenance (planSource+planCredentialGeneration); JWT writes are refused while a WHAM observation exists for the same credential generation, and a token refresh (newer generation) legitimately reopens the window. Steady-state refreshes remain write-free.legacyChatEligibilityflipped no-configopenai-chatproviders from a projectedfalsetoundefined, which brokerequire.serviceTier: "unsupported"routing matches for groq/ollama-class providers (defaultunknownEvidence.capability: "exclude"then drops them). An unclassified chat route whose final adapter will not forward any tier projectsfalseagain;chatServiceTier: trueand Responses-wire unclassified keep the historical unknown, preserving B1's three stated behavior changes.Verification
bun x tsc --noEmitcleanChecklist