fix(release): clear 12 base-reds of release/v3.8.51 (opencode retry, tool-map side channel, audio id, CI cache key, stale contracts) - #15112
Merged
diegosouzapw merged 6 commits intoSep 29, 2026
Conversation
…e refused shape Since #14156 the free-tier contract appends the resolved placeholder names to client tools on the first dispatch too, so the #14464 observed-tools retry could re-send a byte-identical body. Skip it when the merged body adds no new name, and align the two tests to the #14156 contract (client tools first and intact, required placeholders appended).
#15067 made the registry parser refuse unsafe ids, which surfaced as a misleading "No transcription provider found". Reject them up front with the precise message.
… too #12961 made postinstall.mjs import the helper; a change to it must invalidate the cached node_modules like every other postinstall helper.
…rtions - executor-default-base: cc_version follows the canonical constant (#14627 -> 2.1.280) - alibaba-provider-regions: qwen3.8-flash / deepseek-v4.1-flash leaves (#14273) - chatcore-codex-account-pool: key the 429 on the first account, since #14959 skips intra-retries for a Retry-After: 60 hint - token-refresh-race-comprehensive: mutex closure is now the raced const work (#15002)
Merged
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.
Clears the 12 unit reds of release PR #11442 (shards 5/8 and 6/8, CI run of 2026-09-29). Every red reproduced deterministically on the
origin/release/v3.8.51tip (9bbf6ef) before the fix.every postinstall helper imported by postinstall.mjs is in the cache keypostinstall.mjsimportbetterSqlitePrebuildTarget.mjs; thenpm-ci-retrycache key did not hash it (a stalenode_modulescould survive a helper change)hashFileskey in.github/actions/npm-ci-retry/action.ymlDefaultExecutor.execute does not produce duplicate anthropic-version header…2.1.258CLAUDE_CODE_CLIENT_BILLING_VERSION(the exact value stays pinned inclaude-codex-identity-version-sync.test.ts)tools declared by the client are never removed, even for a title promptOpencodeExecutor free-tier refusal retry…/retries once with observed names appended…opencodeFreeTierRetry.tsskips the retry when the merged body adds no name beyond the first dispatch; test aligned to #14156 (configuresbashso the retry adds something) + new regression testQwen Cloud Token Plan remains a flat-rate provider with chat models onlyqwen3.8-flashanddeepseek-v4.1-flashgemini:/antigravity: both namespace identities and sanitizer aliases survive chatCore extractionextractRequestToolIdentityMapkeep_toolNameMapnext to namespace identities; #12839'sextractRequestToolMetadata(the chatCore entry point) must consume both side channelsextractRequestToolMetadatadeletes_toolNameMapafter capturing the alias ledger it returns (the standalone extractor keeps #14751's behavior)gemini-responses-custom-roundtrip+ tool-name suites greenhandleAudioTranscription rejects invalid HuggingFace model paths400 Invalid model IDup front forhasUnsafeModelIdSyntaxidsmodel-id-path-injectiongreenchatCore retains exact quota resets from intermediate rotated Codex 429sRetry-After: 60hint; the test'scalls.length < 4counted those retriesFix A: getAccessToken invokes onPersist INSIDE the per-connection mutex closure/serialized refresh re-checks rotation inside the lane…const work = (async…)()raced byentry.promise, and added alogarg (prettier wraps the call)entry.promiseraceswork); whitespace-tolerantserializeRefresh(Gates:
typecheck:coreclean,check:open-sse-typecheckOK, ESLint clean on changed files,check-file-sizeOK (measured after commit).Not touched (outside this list):
opencode-geo-block-rotation(3) andopencode-transient-retry-delay(1) fail on the pure tip locally too but not in CI (environment);issue-11912passes in isolation.