-
Notifications
You must be signed in to change notification settings - Fork 857
[WRONG BRANCH] release: sync dev into preview for 2.28.0 #2187
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
124 commits
Select commit
Hold shift + click to select a range
8752441
fix(responses): stop requiring a ChatGPT credential for routed providers
lidge-jun 5904178
fix(responses): drop the retired prompt_cache_retention for gpt-5.6
lidge-jun f9c224b
fix(routing): resolve model-keyed lookups the way the runtime resolve…
lidge-jun 9b0c5a0
fix(codex): retain the K12 short-window quota end to end
lidge-jun 0bce951
fix(codex): gate account-native models by entitlement
lidge-jun 7cd270d
fix(xai): stream OAuth Grok through Responses
lidge-jun 5df624b
fix(subagents): keep a saved roster slot listed when its model is dis…
lidge-jun 06e1313
docs(devlog): plan the bug-PR backlog consolidation as one stack plus…
lidge-jun d527c12
docs(devlog): correct the stack premise — the absorbed bug PRs are di…
lidge-jun a83ee51
docs(devlog): record #2130 merged, so #2029 is superseded in fact
lidge-jun 92178ea
docs(devlog): adjudicate the late auditor FAIL verdict
lidge-jun ed6de17
docs(devlog): banner 010 so the shipped predicate cannot be reverted
lidge-jun f639a45
docs(devlog): log wp2 and wp3 shipped state
lidge-jun 8c8fe80
docs(devlog): log wp4 through wp6 and the campaign state
lidge-jun 06e0ac0
docs(devlog): log wp7 and close the absorb campaign
lidge-jun 0a720d1
docs(devlog): record CI state and the campaign end state
lidge-jun c253ce0
docs(devlog): log wp8 and wp9, including the one real stack layer
lidge-jun 4a04ff9
docs(devlog): log wp10 through wp12, including both security holds re…
lidge-jun df94a43
docs(devlog): close the campaign with the final PR state and both sco…
lidge-jun 095db44
fix(providers): identify opencode-free with the client User-Agent it …
lidge-jun 057e857
fix(anthropic): frame the opening turn so AgentRouter stops blocking …
lidge-jun a19140a
docs(devlog): record the residual bug-PR dispositions and the wp15 ou…
lidge-jun 9e38620
docs(devlog): record wp16 and the staticHeaders delivery bug it uncov…
lidge-jun 4b9814c
docs(devlog): record wp17 and plan wp18
lidge-jun 293494c
fix(quota): identify OpenCode Go by where it routes, not what it is n…
lidge-jun 772d375
fix(openai-chat): treat a non-string repeat as padding once that fiel…
lidge-jun 9a9c090
test(ws-upstream): hold the eager-relay marker to the win32 rule, not…
ntdatt812 7bfcec4
test(ws-upstream): prove the rewrite chain through handleResponses, n…
ntdatt812 31ee7a6
Merge pull request #2129 from ntdatt812/fix/ws-relay-eager-marker-win32
Ingwannu 8ff77e1
fix(responses): backfill missing ids on output items for strict decoders
lidge-jun 16345ab
fix(responses): bridge routed tool_search through the Responses passt…
lidge-jun 713dce9
fix(responses): give synthesized ids a namespace that cannot collide
lidge-jun 8b7b65c
fix(responses): keep tool-search item classification past output_item…
lidge-jun 1adcfde
fix(google): preserve and replay thought signatures across stream chunks
lidge-jun 647b98e
fix(chat): apply the Fast capability gate to the native passthrough
lidge-jun ef7efac
fix(chat): let decideTier own the absent-decision fallback too
lidge-jun a0635ea
fix(claude): gate the shell hook on an installed Claude Code CLI
lidge-jun b394b03
fix(claude): remove a CRLF hook block instead of reporting a false su…
lidge-jun d2493a1
fix(providers): allow a baseUrl override for Anthropic and Antigravity
lidge-jun f4ad139
fix(oauth): reject superseded login credential commits
lidge-jun d8e98d4
fix(subagents): keep a saved roster slot listed when its model is dis…
lidge-jun 75ad378
docs(devlog): plan the bug-PR backlog consolidation as one stack plus…
lidge-jun 2558902
docs(devlog): correct the stack premise — the absorbed bug PRs are di…
lidge-jun d1db92c
docs(devlog): record #2130 merged, so #2029 is superseded in fact
lidge-jun 899c03d
docs(devlog): adjudicate the late auditor FAIL verdict
lidge-jun a155fc9
docs(devlog): banner 010 so the shipped predicate cannot be reverted
lidge-jun 831cd1c
docs(devlog): log wp2 and wp3 shipped state
lidge-jun 8b4f1a6
docs(devlog): log wp4 through wp6 and the campaign state
lidge-jun 3c77c10
docs(devlog): log wp7 and close the absorb campaign
lidge-jun bb38c4d
docs(devlog): record CI state and the campaign end state
lidge-jun 5a77d63
docs(devlog): log wp8 and wp9, including the one real stack layer
lidge-jun ef91d14
docs(devlog): log wp10 through wp12, including both security holds re…
lidge-jun 2700b0e
docs(devlog): close the campaign with the final PR state and both sco…
lidge-jun 4e80632
docs(devlog): record the residual bug-PR dispositions and the wp15 ou…
lidge-jun 5e4ec14
fix(providers): identify opencode-free with the client User-Agent it …
lidge-jun 6ef9c08
docs(devlog): record wp16 and the staticHeaders delivery bug it uncov…
lidge-jun 06cdbc1
fix(anthropic): frame the opening turn so AgentRouter stops blocking …
lidge-jun 7e7954a
docs(devlog): record wp17 and plan wp18
lidge-jun 6a4efb8
test(anthropic): pin the AgentRouter framing across every user-conten…
lidge-jun 5445ce3
fix(quota): identify OpenCode Go by where it routes, not what it is n…
lidge-jun 64ba54e
fix(openai-chat): treat a non-string repeat as padding once that fiel…
lidge-jun 02a5648
fix(logs): persist shadow helper attribution
Ingwannu e4f0eec
fix(logs): sanitize the shadow helper marker at the logging layer
lidge-jun 6499919
docs(devlog): record wp18-wp20 and the six-layer stack end state
lidge-jun 70cebd4
fix(logs): sanitize at the addRequestLog ingress so both surfaces agree
lidge-jun 26a15ee
fix(responses): leave the compact wire format out of the id backfill
lidge-jun 930840c
Merge pull request #2134 from lidge-jun/codex/fix-subagent-roster-tru…
lidge-jun 114e9e5
Merge pull request #2160 from lidge-jun/codex/absorb-opencode-free-st…
lidge-jun 087c3c3
Merge pull request #2162 from lidge-jun/codex/absorb-agentrouter-lang…
lidge-jun 31750b0
Merge pull request #2164 from lidge-jun/codex/absorb-opencode-go-quot…
lidge-jun 41689b3
Merge pull request #2165 from lidge-jun/codex/absorb-openai-chat-padd…
lidge-jun d1f0c43
Merge remote-tracking branch 'origin/dev' into codex/absorb-shadow-he…
lidge-jun 5fbe655
Merge pull request #2166 from lidge-jun/codex/absorb-shadow-helper-at…
lidge-jun be12328
Merge pull request #2137 from lidge-jun/codex/fix-bearer-admission-2132
lidge-jun aa07bc3
Merge pull request #2146 from lidge-jun/codex/absorb-account-entitlem…
lidge-jun 81492fd
Merge pull request #2138 from lidge-jun/codex/consolidate-prompt-cach…
lidge-jun 3ad9c7b
Merge pull request #2140 from lidge-jun/codex/absorb-capability-evidence
lidge-jun 1cc35c5
Merge pull request #2141 from lidge-jun/codex/absorb-k12-short-window
lidge-jun 52a463d
Merge pull request #2142 from lidge-jun/codex/absorb-responses-id-bac…
lidge-jun 8c8a668
Merge pull request #2144 from lidge-jun/codex/absorb-claude-shell-hoo…
lidge-jun 83d5ffa
Merge pull request #2145 from lidge-jun/codex/absorb-tool-search-pass…
lidge-jun 7fc5084
Merge pull request #2147 from lidge-jun/codex/absorb-xai-oauth-streaming
lidge-jun bfbfa4e
Merge remote-tracking branch 'origin/dev' into codex/absorb-baseurl-o…
lidge-jun 86ed9ed
Merge pull request #2148 from lidge-jun/codex/absorb-baseurl-override
lidge-jun 17e8e91
Merge pull request #2149 from lidge-jun/codex/absorb-oauth-superseded…
lidge-jun 9a78015
Merge pull request #2150 from lidge-jun/codex/absorb-antigravity-thou…
lidge-jun a584890
Merge pull request #2151 from lidge-jun/codex/absorb-fastwire-native-…
lidge-jun e921346
fix(codex): stop the background main refresh from retracting a reauth…
ntdatt812 bbf2aad
fix(codex): keep the identity-change retry from upgrading a backgroun…
ntdatt812 e928ed7
fix(logs): record the configured shadow prefix, not the caller's mode…
lidge-jun b8710a7
fix(auth): key admission-bearer substitution on transport, not provid…
lidge-jun 00e333d
Merge pull request #2169 from lidge-jun/codex/fix-admission-bearer-tr…
lidge-jun c5fc969
Merge pull request #2167 from ntdatt812/fix/main-reauth-quarantine-ba…
lidge-jun 8cde997
fix(guards): close the core/Lab directory bypass and the release dry-…
lidge-jun 8aca338
Merge pull request #2171 from lidge-jun/codex/harden-core-lab-guard
lidge-jun 0637a35
docs(devlog): record the main..dev release-safety audit and its three…
lidge-jun b9dfc78
Merge pull request #2172 from lidge-jun/codex/devlog-audit
lidge-jun 8e2d42b
fix(responses): give tool_search_call and custom_tool_call their own …
lidge-jun bf5b35c
docs(devlog): record the release-safety audit of the main..dev range
lidge-jun 35ab42b
fix(devlog): unbreak privacy:scan on dev
lidge-jun 5bcc91d
Merge pull request #2175 from lidge-jun/codex/fix-privacy-scan-devlog
lidge-jun 9eb6647
Merge pull request #2170 from lidge-jun/codex/audit-shadow-marker-leak
lidge-jun b2878f8
Merge pull request #2173 from lidge-jun/codex/audit-tool-search-id
lidge-jun 12c14d5
Merge pull request #2174 from lidge-jun/codex/audit-record
lidge-jun 025dfcb
docs(devlog): close the release audit with the merged fixes and the v…
lidge-jun 4813181
Merge pull request #2176 from lidge-jun/codex/audit-closeout
lidge-jun fabc448
fix(devlog): stop the audit record from breaking its own privacy gate
lidge-jun 749ab22
Merge pull request #2177 from lidge-jun/codex/fix-audit-record-scan
lidge-jun 2e1c211
fix(ci): give the Windows leg the budgets and the crash retry it neve…
lidge-jun 491e106
feat(gui): show and filter intercepted helper requests in Logs
lidge-jun b954c93
fix(ci): key the Bun crash retry on the signature that is actually st…
lidge-jun 0bc42a5
docs(devlog): attach the #2157 Logs screenshots for the PR gate
lidge-jun 3723b3c
fix(gui): keep the intercepted-helper badge on one line
lidge-jun 85fbf9a
fix(openai-chat): heartbeat while buffering tool-call deltas
lidge-jun 9a93497
fix(responses): do not retain adapter heartbeats in the terminal guard
lidge-jun 2a8b81e
docs(openai-chat): stop attributing the heartbeat to #2156
lidge-jun d28213d
test(i18n): allow the intercepted-helper badge to stay English
lidge-jun 8f04c9a
fix(ci): give the Windows leg the budgets and the crash retry it neve…
lidge-jun 0776683
fix(ci): key the Bun crash retry on the signature that is actually st…
lidge-jun 3204d43
Merge pull request #2178 from lidge-jun/codex/fix-windows-ci-shards
lidge-jun 8f974f0
Merge pull request #2179 from lidge-jun/codex/logs-intercepted-helper…
lidge-jun 649912c
Merge pull request #2180 from lidge-jun/codex/openai-chat-tool-call-h…
lidge-jun 88c4f15
fix(ci): stop the Windows leg from truncating and mismeasuring its ow…
lidge-jun 96f288d
Merge pull request #2182 from lidge-jun/codex/windows-shard-truncatio…
lidge-jun File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
289 changes: 289 additions & 0 deletions
289
devlog/_plan/260820_bug_pr_backlog_consolidation/000_research_inventory.md
Large diffs are not rendered by default.
Oops, something went wrong.
70 changes: 70 additions & 0 deletions
70
...g/_plan/260820_bug_pr_backlog_consolidation/010_layer1_bearer_admission_2132.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| > **SUPERSEDED IN PART — read `000_research_inventory.md` amendments 1 and 2 first.** | ||
| > | ||
| > Two things in this document are wrong and were corrected after it was written: | ||
| > | ||
| > 1. **It is NOT a stack layer and does NOT root on #2134.** No dependency edge exists; | ||
| > the shipped PR (#2137) is based on `dev` as a sibling. | ||
| > 2. **The substitution predicate is NOT "native ChatGPT pool".** Pool-only would exclude | ||
| > `codexAccountMode: "direct"` and re-break #1686, whose Direct admission is only safe | ||
| > BECAUSE substitution still runs. The shipped predicate is | ||
| > `route.codexAccountMode !== undefined`, covering pool AND direct. Do not "correct" it back. | ||
|
|
||
|
|
||
| # 010 — Layer 1 (stack bottom): fix issue #2132, bearer admission must not force a ChatGPT credential | ||
|
|
||
| Work-phase: wp2. Branch: `codex/fix-bearer-admission-2132`. Base: `codex/fix-subagent-roster-truncation` (PR #2134). | ||
| Absorbs: nothing (no PR exists). Closes: #2132. | ||
|
|
||
| ## Why this is the stack bottom | ||
|
|
||
| It is the highest-scoring item in the backlog (96) and it shares `src/server/responses/core.ts` | ||
| with layer 2 (#2131). Layer 2 must be based on this, or the two edits to that file collide. | ||
|
|
||
| ## Defect | ||
|
|
||
| Reported in #2132: after v2.23.0, a key-auth provider (Cloudflare/etc.) returns 401 | ||
| `No usable Codex main credential` when `~/.codex/auth.json` holds no ChatGPT token. Bearer | ||
| admission sets `substituteMainCredential` unconditionally, so a route that needs no ChatGPT | ||
| identity is still gated on one. | ||
|
|
||
| ## P-phase re-verification required (stale check) | ||
|
|
||
| Before editing, confirm against the CURRENT tree — the lane read `dev`, not this branch: | ||
| 1. `rg -n "substituteMainCredential" src/` — enumerate every producer and consumer. | ||
| 2. Read `src/server/responses/core.ts`, `src/server/responses/compact.ts`, | ||
| `src/codex/auth-context.ts` and establish where the flag is set and where it is read. | ||
| 3. Reproduce the admission decision in a unit context with a key-auth provider and an | ||
| auth.json containing no ChatGPT token. If the current code does NOT reproduce, stop and | ||
| amend this doc rather than writing a fix for a defect that is not there. | ||
|
|
||
| ## Intended change | ||
|
|
||
| Make the substitution conditional on the resolved route actually requiring a native/ChatGPT | ||
| credential. A key-auth routed provider carries its own credential and must be admitted | ||
| without one. Exact call sites are fixed during the stale check above; the invariant is: | ||
| `substituteMainCredential` is set only when the route's credential source is the native | ||
| ChatGPT pool. | ||
|
|
||
| Out of scope: changing what happens once a native route legitimately lacks a credential, | ||
| and any change to the pool/account selection itself. | ||
|
|
||
| ## Test plan (must fail RED first) | ||
|
|
||
| New `tests/bearer-admission-key-auth.test.ts`: | ||
| 1. key-auth routed provider + auth.json with NO ChatGPT token -> request is admitted (no 401). | ||
| 2. native gpt route + no ChatGPT token -> still fails closed with the existing error. | ||
| 3. key-auth provider + ChatGPT token present -> unchanged behavior (no regression). | ||
|
|
||
| Drive the file against the unpatched tree first and record the failure output; a test that | ||
| passes before the fix does not prove anything. | ||
|
|
||
| ## Verification | ||
|
|
||
| `bun run typecheck`; `bun test --isolate` on the new file plus the existing responses/auth | ||
| suites; full `bun test --isolate tests` before marking review-ready; `bun run privacy:scan`. | ||
|
|
||
| ## Standalone thesis (DEV-STACK-03) | ||
|
|
||
| "A provider that carries its own key must not be gated on a ChatGPT credential." Builds and | ||
| passes its own tests at its own tip, independent of layer 2. | ||
|
|
43 changes: 43 additions & 0 deletions
43
...an/260820_bug_pr_backlog_consolidation/020_layer2_responses_id_backfill_2131.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| # 020 — Layer 2: absorb PR #2131, backfill missing Responses output ids | ||
|
|
||
| Work-phase: wp3. Branch: `codex/absorb-responses-id-backfill`. Base: `codex/fix-bearer-admission-2132` (layer 1). | ||
| Absorbs: **PR #2131 by @bet4it**. Closes: PR #2131 as superseded, with attribution. | ||
|
|
||
| ## Dependency edge (the only real one in this backlog) | ||
|
|
||
| #2131 adds `src/server/responses/responses-field-backfill.ts` and calls it from | ||
| `src/server/responses/core.ts` — the same file layer 1 edits. This is why it stacks rather | ||
| than sitting beside layer 1. | ||
|
|
||
| ## Defect | ||
|
|
||
| Strict decoders (grok-build) reject Responses output items that omit `id` on | ||
| `message` / `reasoning` / `function_call`. #1941 landed earlier but some relays still omit it. | ||
|
|
||
| ## Change to carry over | ||
|
|
||
| @bet4it's implementation, preserved in substance: synthesize stable `msg_ocx_N` / `rs_ocx_N` / | ||
| `fc_ocx_N` ids keyed on `output_index`, never overwriting an id that is already present. | ||
|
|
||
| ## Correction to apply on top (audit finding, lane: quality) | ||
|
|
||
| An invalid or missing `output_index` collapses to `0`, so two unindexed items can both become | ||
| `msg_ocx_0` — duplicate ids, which is the exact class of bug this fixes. Replace the | ||
| collapse-to-zero fallback with a monotonic per-response counter so synthesized ids are unique | ||
| even when `output_index` is absent or malformed. Add the regression test that pins it. | ||
|
|
||
| Docs: the locale files in #2131 are uneven (EN/FR rewritten, JA/KO/ZH/TR only first sentence). | ||
| Carry only the EN change in this layer; locale parity is not this layer's thesis. | ||
|
|
||
| ## Test plan (must fail RED first) | ||
|
|
||
| Carry @bet4it's tests (SSE `response.completed`, `output_item.done` via `output_index`, JSON | ||
| passthrough, preserve-existing-id, inherited `toString` type) and ADD: | ||
| - two items with missing `output_index` receive DISTINCT ids (fails on #2131 as written). | ||
|
|
||
| ## Verification | ||
|
|
||
| Same gate as layer 1, plus explicit confirmation that layer 2's branch contains layer 1's | ||
| commit (`git log --oneline <layer1>..<layer2>` shows only layer-2 commits) and that the PR | ||
| base ref names layer 1's branch. | ||
|
|
38 changes: 38 additions & 0 deletions
38
..._plan/260820_bug_pr_backlog_consolidation/030_sibling_prompt_cache_retention.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # 030 — Sibling A: consolidate prompt_cache_retention (issue #2092) | ||
|
|
||
| Work-phase: wp4. Branch: `codex/consolidate-prompt-cache-retention`. Base: **dev** (sibling, not a stack layer). | ||
| Absorbs: **PR #2102 by @lilinxiong** (base implementation). Supersedes: **#2099 by @yzxcj797**, **#2091 by @luvs01**. Closes #2092. | ||
|
|
||
| ## Why a sibling and not a layer | ||
|
|
||
| It touches only `src/adapters/openai-responses.ts`, which no other absorbed item touches. It has | ||
| no dependency on layers 1-2, so stacking it would impose a false merge order (DEV-STACK-01). | ||
|
|
||
| ## Chosen contract | ||
|
|
||
| @lilinxiong's #2102: strip `prompt_cache_retention` only when | ||
| `forward && isCanonicalOpenAiForwardProvider(provider)` AND the model is `gpt-5.6` or | ||
| `gpt-5.6-*`. This matches the issue's own correction — the reporter withdrew the "strip | ||
| everywhere" claim, and some non-5.6 deployments still honor the field. | ||
|
|
||
| Rejected: #2091's blanket strip for every forward provider and every model (it inverts the | ||
| existing gpt-5.5 preserve pin at tests/openai-responses-passthrough.test.ts:807). | ||
| Rejected: #2099's `startsWith("gpt-5.6")`, which also matches `gpt-5.60`, and its stray | ||
| package.json 2.24.2 -> 2.25.0 bump. | ||
|
|
||
| ## Carried from the superseded PRs | ||
|
|
||
| From @yzxcj797's #2099: the `Fixes #2092` issue link and the repro-shaped fixture | ||
| (`store:false`, streamed input array). From @luvs01's #2091: nothing — its key-auth preserve | ||
| case is already covered by #2102. | ||
|
|
||
| ## Tightening to apply | ||
|
|
||
| Replace the string-prefix family match with the catalog/native-slug predicate if one exists | ||
| in the current tree (`rg -n "isGpt56NativeSlug|NATIVE_OPENAI_MODELS" src/`); otherwise keep | ||
| the exact `gpt-5.6` / `gpt-5.6-*` match and pin `gpt-5.60` as a NON-match in tests. | ||
|
|
||
| ## Test plan (must fail RED first) | ||
|
|
||
| Carry #2102's tests; add `gpt-5.60` non-match; keep the gpt-5.5 preserve pin intact. | ||
|
|
31 changes: 31 additions & 0 deletions
31
devlog/_plan/260820_bug_pr_backlog_consolidation/040_sibling_routing_capability.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| # 040 — Sibling B: routing capability + lab behavior evidence | ||
|
|
||
| Work-phase: wp5. Branch: `codex/absorb-capability-evidence`. Base: **dev**. | ||
| Absorbs: **PR #2100 and PR #2077, both by @ntdatt812**. Closes both as superseded. | ||
|
|
||
| ## Why these two together, and why a sibling | ||
|
|
||
| #2100 touches `src/routing/capability.ts`; #2077 touches | ||
| `src/routing/compatibility/behavior.ts`. Disjoint files, one author, one thesis: *model-keyed | ||
| lookups must use the same resolution rules the runtime uses*. Neither depends on layers 1-2. | ||
|
|
||
| Note: #2077 is Lab-adjacent. Verify `tests/core-lab-boundary.test.ts` stays green — the file | ||
| already imports Lab types, so this must not newly puncture the boundary. | ||
|
|
||
| ## Defects | ||
|
|
||
| #2100: bare map lookups made `gpt-oss:120b` inherit the provider-wide 8k window instead of the | ||
| `gpt-oss` family's 131072, and `noVisionModels` was ignored. | ||
| #2077: `map[modelId]` missed family/case overrides, and `constructor` resolved to | ||
| `Object.prototype.constructor`, making `jcsStringify` throw and silently dropping Lab subjects. | ||
|
|
||
| ## Change | ||
|
|
||
| Route both through `modelRecordValue` / `isModelTextOnly` as @ntdatt812 wrote them. Prototype-id | ||
| safety (`constructor`, `toString`) is the load-bearing part; keep those tests verbatim. | ||
|
|
||
| ## Test plan | ||
|
|
||
| Carry both test files. Confirm the exact-own maps (`modelPreferHostedTools`, | ||
| `modelOpenRouterRouting`) still do NOT family-spread. | ||
|
|
25 changes: 25 additions & 0 deletions
25
devlog/_plan/260820_bug_pr_backlog_consolidation/050_sibling_k12_short_window.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| # 050 — Sibling C: K12 short-window quota (issue #2047) | ||
|
|
||
| Work-phase: wp6. Branch: `codex/absorb-k12-short-window`. Base: **dev**. | ||
| Absorbs: **PR #2056 by @Ingwannu**. Supersedes: **#2062 by @yzxcj797**. Closes #2047. | ||
|
|
||
| ## Chosen base | ||
|
|
||
| #2056 is a strict superset of #2062: `snapshotHasShort`, partial-snapshot preservation, | ||
| `updateAccountQuota` carry, and the parse -> cache -> DTO path #2047 actually requires. #2062 | ||
| drops short on a later weekly/monthly partial snapshot and carries a stray version bump. | ||
|
|
||
| ## Blocker to fix before this can land (raised by the maintainer on both PRs) | ||
|
|
||
| A short-only snapshot with `shortPercent: 0` scores `0` instead of `CODEX_UNKNOWN_USAGE_SCORE`, | ||
| so `pickLowestUsageAmong` prefers an account whose long windows are unverified. Fix: | ||
| include `shortPercent` in `computeCodexUsageScore` only when the plan's governing long window | ||
| is finite; otherwise return `CODEX_UNKNOWN_USAGE_SCORE`. Add the short-only regression. | ||
|
|
||
| This blocker is why #2056 is absorbed-and-corrected rather than simply approved. | ||
|
|
||
| ## Also close | ||
|
|
||
| **#2063 by @yzxcj797** — superseded by ALREADY-MERGED #2055 (`2648ffa87`), which classifies | ||
| `detail.code` with a stricter own-property lookup. Close with attribution; fold nothing. | ||
|
|
37 changes: 37 additions & 0 deletions
37
..._plan/260820_bug_pr_backlog_consolidation/060_supersede_and_close_operations.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| # 060 — Close-out: supersede operations and attribution | ||
|
|
||
| Work-phase: wp7. No code. GitHub state only. | ||
|
|
||
| ## Ordering rule | ||
|
|
||
| A PR is closed ONLY after its replacement exists and is pushed. Never close first. | ||
|
|
||
| ## Operations | ||
|
|
||
| | Close | Author | Replaced by | Carried over | | ||
| |---|---|---|---| | ||
| | #2131 | @bet4it | layer 2 (020) | full implementation + tests, plus unique-id correction | | ||
| | #2099 | @yzxcj797 | sibling A (030) | issue link, repro fixture | | ||
| | #2091 | @luvs01 | sibling A (030) | nothing; contract deliberately narrower | | ||
| | #2100 | @ntdatt812 | sibling B (040) | full implementation + tests | | ||
| | #2077 | @ntdatt812 | sibling B (040) | full implementation + tests | | ||
| | #2102 | @lilinxiong | sibling A (030) | full implementation + tests (base) | | ||
| | #2062 | @yzxcj797 | sibling C (050) | nothing; #2056 supersedes | | ||
| | #2063 | @yzxcj797 | merged #2055 | nothing | | ||
| | #2056 | @Ingwannu | sibling C (050) | full implementation + scorer correction | | ||
| | #2029 | @yzxcj797 | maintainer PR #2130 | nothing; #2130 is a superset | | ||
|
|
||
| ## Comment template | ||
|
|
||
| > Thanks for this, @<login> — closing as superseded by #<n>, which carries <what> from your | ||
| > patch. <What changed and why.> Your work is credited in that PR's description. | ||
|
|
||
| ## NOT closed, with reasons stated publicly | ||
|
|
||
| - **#2109 / #2110** (@drakonkat): unresolved security gap in the override gate; needs a human | ||
| security pass (AGENTS.md security boundary). | ||
| - **#2053** (@Ingwannu): C4 OAuth surface; MAINTAINERS.md mandates security review. | ||
| - **#2101, #2040**: large (20 and 14 files); each needs its own PABCD cycle. | ||
| - **#2115, #2082, #2027, #2067, #2054, #2032**: below the 60 threshold. | ||
| - **#2104, #2075, #2127**: #2075/#2054 CONFLICTING; #2127 is an active draft by its author. | ||
|
|
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Remove
--isolatefrom the Windows test command.Line 635 keeps
--isolatein the Windows command. This preserves the Bun file-boundary mode that the Windows workaround must disable. The retry only masks the resulting runtime crash and still permits repeated shard failures.Keep
tests --shard=${{ matrix.shard }}/4, but remove only--isolate.Proposed fix
Based on learnings:
bunfig.tomlconfigurestest.root = "tests", and the Windows Bun workaround must preserve the test filter and only remove--isolate.📝 Committable suggestion
🧰 Tools
🪛 zizmor (1.29.0)
[warning] 635-635: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
🤖 Prompt for AI Agents
Source: Learnings