Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
176 commits
Select commit Hold shift + click to select a range
fcd0b69
fix(responses): bridge routed tool search passthrough
Ingwannu Aug 18, 2026
108d8d0
fix(oauth): reject superseded login credential commits
Ingwannu Aug 18, 2026
d092e91
test(oauth): prove Kiro replacement admission recovers
Ingwannu Aug 18, 2026
b060249
fix(chat): apply the Fast capability gate to the native passthrough
olddonkey Aug 18, 2026
bdd114d
Merge remote-tracking branch 'upstream/dev' into codex/fastwire-nativ…
olddonkey Aug 18, 2026
08d01bb
feat(antigravity): live quota RPC and geoblock classification
yansigit Aug 18, 2026
4438760
fix(antigravity): harden quota interpretation and catalog fetch
yansigit Aug 18, 2026
a7aa31a
fix(antigravity): preserve usable quota when summary fails
yansigit Aug 18, 2026
ae764b3
feat(antigravity): Claude CCA wire fidelity
yansigit Aug 18, 2026
3cc9c2b
fix(google): retain CCA events and cap SSE frames correctly
yansigit Aug 18, 2026
3a379b8
fix(google): count raw SSE line bytes across UTF-8 chunk splits
yansigit Aug 19, 2026
bbe89ee
test(google): account for Claude continuation nudge
yansigit Aug 19, 2026
0c0d419
feat(antigravity): CCA host failover and non-retryable image POST
yansigit Aug 18, 2026
bc1704b
fix(antigravity): skip http hosts on CCA generateContent
yansigit Aug 18, 2026
3735e1e
fix(antigravity): remove oauth cooldown coupling
yansigit Aug 18, 2026
689c183
Drop Antigravity cooldown docs from host-failover slice.
yansigit Aug 18, 2026
60b6fca
fix(antigravity): preserve passthrough backpressure
yansigit Aug 18, 2026
9f074f5
fix(antigravity): harden peer failover request replay
yansigit Aug 18, 2026
7507812
docs(antigravity): scope CCA transport invariant
yansigit Aug 18, 2026
35e5421
test(google): cover exact SSE cap and terminal CCA
yansigit Aug 19, 2026
aeba15d
test(antigravity): assert quota RPC redirect policy
yansigit Aug 19, 2026
c077a6c
docs(antigravity): clarify peer failover contract
yansigit Aug 19, 2026
cc58ff5
feat(images): relay Codex image_gen to xAI Imagine with Grok OAuth
zhou-zhichao Aug 19, 2026
26315c3
fix(images): bound xAI relay timeout and reject empty edits
zhou-zhichao Aug 19, 2026
63944a1
feat(cursor): native SelectedImage vision for verified models (data: …
Aug 15, 2026
99a0511
fix(cursor): address CodeRabbit findings on native SelectedImage
Aug 15, 2026
4f1f464
fix(cursor): address second CodeRabbit pass on SelectedImage
yansigit Aug 15, 2026
03b4e06
fix(cursor): abort before image-count guard
yansigit Aug 15, 2026
65d055b
fix(cursor): validate small JPEGs before passthrough
yansigit Aug 15, 2026
7ccce10
docs(cursor): add glm-5.3 and French Vision section
yansigit Aug 15, 2026
b46ea51
fix(cursor): keep image-only history in external root replay
yansigit Aug 16, 2026
03973a2
fix(cursor): reuse prepared SelectedImage bytes
yansigit Aug 16, 2026
f42760b
fix(cursor): avoid duplicate prepared binding in live transport
yansigit Aug 17, 2026
c0d4b61
fix(cursor): address post-rebase CodeRabbit nits on SelectedImage
yansigit Aug 19, 2026
71e90bf
Merge commit '63bfd149dd04ffbe448f43004a17e371a514eb38' into codex/fa…
olddonkey Aug 19, 2026
01c823e
fix(chat): align native passthrough tier policy
olddonkey Aug 19, 2026
38cd79a
fix(claude): gate shell hook on CLI installation
lilinxiong Aug 19, 2026
813ee79
fix(claude): preserve shell hook cleanup failures
lilinxiong Aug 19, 2026
270d0de
docs(claude): clarify PATH-based hook cleanup
lilinxiong Aug 19, 2026
57bd7dc
fix: guide routed code mode edits
louis-tepe Aug 19, 2026
f42564b
Merge remote-tracking branch 'origin/dev' into codex/contextual-code-…
louis-tepe Aug 19, 2026
e012696
fix: parse nested helper declarations
louis-tepe Aug 19, 2026
46f07d5
Merge remote-tracking branch 'origin/dev' into paohupbypaoza
Aug 19, 2026
6da0fe7
Merge remote-tracking branch 'origin/dev' into paohupbypaoza
Aug 19, 2026
9fdc919
Merge remote-tracking branch 'origin/dev' into paohupbypaoza
Aug 19, 2026
0ce4935
fix(lab): read per-model overrides in the report the way the runtime …
ntdatt812 Aug 19, 2026
7d6d3a6
fix(lab): keep the two exact-own override maps exact
ntdatt812 Aug 19, 2026
5012d87
fix(routing): resolve capability evidence the way the resolver resolv…
ntdatt812 Aug 19, 2026
9b88f49
test(routing): cover the registry branch of the capability lookups
ntdatt812 Aug 19, 2026
c90692c
fix(routing): check noVisionModels before deriving the image modality
ntdatt812 Aug 19, 2026
5560270
feat(grok): inject per-model reasoning effort into Grok Build config
takltc Aug 15, 2026
e1eed54
docs(grok): correct Traditional Chinese ocx restart lifecycle
takltc Aug 15, 2026
9fe048d
fix(grok): preserve none and minimal effort tiers
takltc Aug 16, 2026
b827058
fix(grok): unify effort fallback and French guidance
takltc Aug 16, 2026
1b1f476
docs(grok): clarify French managed-config safety
takltc Aug 16, 2026
3af9904
docs(grok): document complete effort filtering
takltc Aug 16, 2026
416a2db
fix(grok): align examples with native context window
takltc Aug 17, 2026
5d2a97d
test(grok): pin ultra effort surface semantics
takltc Aug 19, 2026
6f9f75d
fix(providers): allow baseUrl override for anthropic with https enfor…
drakonkat Aug 19, 2026
2a20f1d
test(ws-upstream): hold the eager-relay marker to the win32 rule, not…
ntdatt812 Aug 19, 2026
ded12f5
fix(providers): allow baseUrl override for google-antigravity with ht…
drakonkat Aug 19, 2026
4d74d8d
fix(responses): backfill missing id on output items for strict decoders
bet4it Aug 19, 2026
a8b4753
docs(grok-build): describe Responses passthrough path consistently
bet4it Aug 19, 2026
ea43bc0
fix(subagents): keep a saved roster slot listed when its model is dis…
lidge-jun Aug 19, 2026
7bdbaea
docs(devlog): plan the bug-PR backlog consolidation as one stack plus…
lidge-jun Aug 19, 2026
26f8e56
Merge remote-tracking branch 'origin/dev' into paohupbypaoza
Aug 19, 2026
acb2e91
Merge origin/dev into paohupbypaoza (2.31 probe/fence)
Aug 19, 2026
401bf26
docs(devlog): correct the stack premise — the absorbed bug PRs are di…
lidge-jun Aug 19, 2026
39d0ef8
docs(devlog): record #2130 merged, so #2029 is superseded in fact
lidge-jun Aug 19, 2026
1b1807d
Merge PR #2134 subagent roster retention into paohupbypaoza
Aug 19, 2026
aa4d3fe
Merge PR #2131 responses output id backfill into paohupbypaoza
Aug 19, 2026
892e891
docs(devlog): adjudicate the late auditor FAIL verdict
lidge-jun Aug 19, 2026
ee4f347
Merge PR #2137 bearer admission for routed providers into paohupbypaoza
Aug 19, 2026
6e1bed7
docs(devlog): banner 010 so the shipped predicate cannot be reverted
lidge-jun Aug 19, 2026
9752471
Merge PR #2129 Windows eager-relay test into paohupbypaoza
Aug 19, 2026
a06f439
Merge PR #2100 routing capability evidence into paohupbypaoza
Aug 19, 2026
ea98112
Merge PR #1756 Grok per-model reasoning effort into paohupbypaoza
Aug 19, 2026
7378656
fix(responses): drop legacy cache retention for GPT-5.6
lilinxiong Aug 19, 2026
f820302
fix(responses): preserve key-auth cache retention
lilinxiong Aug 19, 2026
2f7b28d
fix(responses): scope retention stripping to ChatGPT
lilinxiong Aug 19, 2026
af3df3a
Merge PR #2109 Anthropic baseUrl override into paohupbypaoza
Aug 19, 2026
e4b5454
Merge PR #2110 Antigravity baseUrl override into paohupbypaoza
Aug 19, 2026
66a0aa2
Merge PR #2105 Claude shell hook gate into paohupbypaoza
Aug 19, 2026
73db760
Merge PR #2077 lab per-model override matching into paohupbypaoza
Aug 19, 2026
96f9f9d
docs(devlog): log wp2 and wp3 shipped state
lidge-jun Aug 19, 2026
3c57344
Merge origin/dev into paohupbypaoza (2.36 Windows ACL + version recon…
Aug 19, 2026
e308cc6
Merge fix/windows-mode-assertions POSIX-only mode pins
Aug 19, 2026
95c0144
Merge PR #2138 GPT-5.6 prompt_cache_retention strip into paohupbypaoza
Aug 19, 2026
b8b221c
Merge PR #2115 routed Code Mode apply_patch guidance into paohupbypaoza
Aug 19, 2026
7ec76df
Merge PR #1742 Cursor native SelectedImage vision into paohupbypaoza
Aug 19, 2026
d31950e
fix(responses): backfill missing ids on output items for strict decoders
lidge-jun Aug 19, 2026
75f9324
docs(devlog): log wp4 through wp6 and the campaign state
lidge-jun Aug 19, 2026
192b15d
Merge origin/dev into paohupbypaoza (2.39 #2139)
Aug 19, 2026
c77b254
Merge PR #2143 Windows Log Guard canonical path into paohupbypaoza
Aug 19, 2026
da57fbd
Merge PR #2141 K12 short-window quota into paohupbypaoza
Aug 19, 2026
243568a
fix(claude): gate the shell hook on an installed Claude Code CLI
lidge-jun Aug 19, 2026
519a371
Merge PR #2142 responses output id backfill (no duplicate ids) into p…
Aug 19, 2026
b6521d1
docs(devlog): log wp7 and close the absorb campaign
lidge-jun Aug 19, 2026
908c227
fix(xai): stream OAuth Grok through Responses
olddonkey Aug 19, 2026
5a1fc91
fix(xai): block service tier on OAuth gateway
olddonkey Aug 19, 2026
d7b62bc
docs(devlog): record CI state and the campaign end state
lidge-jun Aug 19, 2026
1ab1eea
Merge PR #2070 Antigravity Claude CCA wire fidelity and quota into pa…
Aug 19, 2026
6639987
Merge PR #2144 Claude shell hook PATH comments into paohupbypaoza
Aug 19, 2026
0223a96
Merge PR #2071 CCA host failover into paohupbypaoza
Aug 19, 2026
35a76ec
Merge PR #2053 reject superseded OAuth credential commits into paohup…
Aug 19, 2026
c168397
Merge PR #2075 Fast capability gate on native chat passthrough into p…
Aug 19, 2026
148b63e
Merge PR #2040 routed tool_search passthrough into paohupbypaoza
Aug 19, 2026
f22b036
Merge PR #2083 Codex image_gen xAI Imagine Grok OAuth into paohupbypaoza
Aug 19, 2026
e631f87
fix(responses): bridge routed tool_search through the Responses passt…
lidge-jun Aug 19, 2026
99ecd35
Merge PR #2143 follow-up composed start child output into paohupbypaoza
Aug 19, 2026
735f5d8
Merge PR #2068 Antigravity quota RPC redirect test into paohupbypaoza
Aug 19, 2026
7300dfe
Merge PR #2104 stream OAuth Grok through Responses into paohupbypaoza
Aug 19, 2026
96af6d2
Merge PR #2145 owner tool_search passthrough absorb (history replay +…
Aug 19, 2026
2097737
Merge PR #2143 WP13 start watchdog scaling into paohupbypaoza
Aug 19, 2026
36fc45c
docs(devlog): log wp8 and wp9, including the one real stack layer
lidge-jun Aug 19, 2026
c673fd0
Apply PR #2072 xAI API-key Priority Processing without GUI cost overlay
Aug 19, 2026
16c7906
Merge PR #2146 account-native entitlement gating into paohupbypaoza
Aug 19, 2026
aee0dd6
test: allow 2142 output id backfill on 2146 Daybreak compact fixture
Aug 19, 2026
466e629
docs(devlog): log wp10 through wp12, including both security holds re…
lidge-jun Aug 19, 2026
e2e94a0
docs(devlog): close the campaign with the final PR state and both sco…
lidge-jun Aug 19, 2026
5c07426
docs(devlog): record the residual bug-PR dispositions and the wp15 ou…
lidge-jun Aug 19, 2026
4890c1c
fix(providers): identify opencode-free with the client User-Agent it …
lidge-jun Aug 19, 2026
20b456e
docs(devlog): record wp16 and the staticHeaders delivery bug it uncov…
lidge-jun Aug 20, 2026
53a5f73
fix(anthropic): frame the opening turn so AgentRouter stops blocking …
lidge-jun Aug 20, 2026
8998895
fix(logs): persist shadow helper attribution
Ingwannu Aug 20, 2026
4ee6161
fix(quota): identify OpenCode Go by where it routes, not what it is n…
lidge-jun Aug 20, 2026
fc97a6d
fix(openai-chat): treat a non-string repeat as padding once that fiel…
lidge-jun Aug 20, 2026
b3ba5d1
Merge origin/dev (Windows 2.27.0 gate, log-guard link-aware) into pao…
Aug 20, 2026
8cedb35
Merge PR #2160 opencode-free User-Agent static headers into paohupbyp…
Aug 20, 2026
eb6bab1
Merge PR #2162 AgentRouter non-English language framing into paohupby…
Aug 20, 2026
f8be2b2
Merge PR #2163 persist shadow helper attribution into paohupbypaoza
Aug 20, 2026
c01363b
fix(logs): persist shadow helper attribution
Ingwannu Aug 20, 2026
0f2a85b
Merge PR #2164 OpenCode Go quota by destination into paohupbypaoza
Aug 20, 2026
7b82284
Merge PR #2165 openai-chat padding repeats into paohupbypaoza
Aug 20, 2026
70b9475
fix(logs): sanitize the shadow helper marker at the logging layer
lidge-jun Aug 20, 2026
6681753
Merge PR #2166 sanitize shadow helper marker into paohupbypaoza
Aug 20, 2026
16ea829
Apply PR #2150 thought signatures across stream chunks into paohupbyp…
Aug 20, 2026
7ac64af
Apply PR #2148 classify-first HTTPS gate for OAuth baseUrl overrides …
Aug 20, 2026
8219d0a
Merge origin/dev absorb stack plus follow-up fixes into paohupbypaoza
Aug 20, 2026
e91ad00
docs(devlog): record the backlog merge log, override adjudication, an…
lidge-jun Aug 20, 2026
fad4c1f
Merge PR #2168 backlog merge log into paohupbypaoza
Aug 20, 2026
9052eb2
Merge origin/dev #2167 reauth quarantine and #2169 bearer transport i…
Aug 20, 2026
ce219c2
Merge PR #2170 shadow log configured prefix into paohupbypaoza
Aug 20, 2026
b7fc041
Merge origin/dev #2171 core/Lab guard and #2172 audit log into paohup…
Aug 20, 2026
6c073d2
Merge origin/dev #2170-#2177 audit and tool_search id prefixes into p…
Aug 20, 2026
b36711a
Merge PR #2180 openai-chat tool-call heartbeat into paohupbypaoza
Aug 20, 2026
342cb74
Merge PR #2179 intercepted helper Logs filter into paohupbypaoza
Aug 20, 2026
4024902
docs(devlog): record the three-issue round, including the blocked ver…
lidge-jun Aug 20, 2026
757661f
Merge PR #2181 three-issue round record into paohupbypaoza
Aug 20, 2026
8774d94
Merge origin/dev #2178 Windows CI shards into paohupbypaoza
Aug 20, 2026
85ff640
Apply remaining unique #2072 xAI Fast tests and transport docs (skip …
Aug 20, 2026
cc1a473
Merge origin/dev #2182 Windows CI shard timeout and budgets into paoh…
Aug 20, 2026
178e976
Merge origin/dev #2192 v2.28.0 release record into paohupbypaoza
Aug 20, 2026
9e91c7d
Merge PR #2195 bound terminal guard delta retention into paohupbypaoza
Aug 20, 2026
851aa85
Merge PR #2198 antigravity freeform replay thought signatures into pa…
Aug 20, 2026
8bb958e
fix(responses): bind continuation to route owner
luvs01 Aug 20, 2026
e7c90aa
fix(google): repair tool-result adjacency
Ingwannu Aug 20, 2026
a0bb383
test(google): cover remote orphan images
Ingwannu Aug 20, 2026
4e9820f
test(responses): cover adapter owner mismatch
luvs01 Aug 20, 2026
7f76107
test(responses): fence terminal key rotation owner
luvs01 Aug 20, 2026
705b35a
fix(responses): deep-merge provider continuation state
luvs01 Aug 20, 2026
3704147
Merge origin/dev #2208 orphan-call bound and #2185 pool-policy docs i…
Aug 21, 2026
f89f798
fix(codex): preserve commented catalog assignments
luvs01 Aug 21, 2026
aba8305
Merge PR #2224 cursor EOF terminal budget overflow into paohupbypaoza
Aug 21, 2026
540e781
Merge PR #2223 web-search citation sanitize into paohupbypaoza
Aug 21, 2026
24e3a4c
Merge PR #2234 bound retained tool-search item IDs into paohupbypaoza
Aug 21, 2026
393a8cc
Merge PR #2214 bind continuation to final route into paohupbypaoza
Aug 21, 2026
c8156a5
Merge PR #2236 preserve commented catalog assignments into paohupbypaoza
Aug 21, 2026
a957396
Merge PR #2205 journaled injection ownership into paohupbypaoza
Aug 21, 2026
5413d29
Merge PR #2212 composer-2.5 tool continuation into paohupbypaoza
Aug 21, 2026
2c27b4e
Merge PR #2232 google validate candidate/content/part into paohupbypaoza
Aug 21, 2026
23b3f1c
Merge PR #2207 google tool-result adjacency into paohupbypaoza
Aug 21, 2026
a12118d
Merge origin/dev sidecar stack #2203-#2211 and Prime Agent #2219 into…
Aug 21, 2026
99a4c67
Merge PR #2235 honor PI_CODING_AGENT_DIR for the pi client into paohu…
Aug 21, 2026
c7387c5
Merge origin/dev web-search L6-L9 executors (#2238 #2242 #2243 #2245)…
Aug 21, 2026
9eb21a9
feat(agent-os): add Brain Universe dashboard and WebMCP gateway
Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# WebMCP stays local-first by default.
LOCAL_ONLY=true

# Optional production adapters. Leave empty for deterministic demo mode.
COMFYUI_BASE_URL=
H3_BASE_URL=

# Never commit real credentials. Keep them in the OS keyring or private .env.
318 changes: 44 additions & 274 deletions README.md

Large diffs are not rendered by default.

110 changes: 110 additions & 0 deletions devlog/_plan/260820_bug_pr_backlog_consolidation/090_merge_log.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# 090 — Merge log: the bug-PR backlog landing on dev

Unit: 260820_bug_pr_backlog_consolidation
Work-phases: wp21-wp25.
dev before: `31ee7a683`. dev after: `a584890f8`.

## The override that was not needed

All 19 PRs sat at CHANGES_REQUESTED from @Ingwannu with green CI, and the plan was to merge
with admin authority. Three independent read-only lanes read every blocking review first, and
the answer was the same in all three: **the objection was factually current, not stale.**

The recurring complaint was "this head is N commits behind dev". Measured, it was true
everywhere — 16 to 25 commits, and `dev` had itself advanced to `31ee7a683` while the reviews
were being written. A green check on a stale head validates an integration state that no longer
exists, which is a real merge-readiness defect rather than a formality to wave through.

So the resolution was to rebase all 19 branches onto current `dev`, not to override. Admin
authority can bypass a gate; it cannot make an untested integration state tested.

Two reviews named genuine code defects, and both were fixed rather than overridden:

- **#2166** — `addRequestLog` is exported and bypassed the sanitizer: the reviewer reproduced a
raw 111-character value in the `/api/logs` ring against a sanitized 37-character value on
disk. Fixed at the shared ingress so both surfaces read from one normalized entry, with the
direct-ingress regression the reviewer asked for.
- **#2162** — a prompt mutation writing into the outbound user turn needed its content-shape
boundaries pinned. Added: an already-framed turn stays single, image-only content keeps its
image block behind the preamble, assistant-only block content keeps its tail before the
synthesized `(continue)` turn.

One more objection dissolved on rebase: #2148 was carrying eight `devlog/_plan/` planning files
inherited from its branch point. The rebase removed them.

## What landed

19 PRs, merged bottom-up. Every merge commit verified present in `git log origin/dev`.

| PR | dev merge commit | Absorbed from |
|---|---|---|
| #2134 | `930840ca4` | maintainer fix |
| #2160 | `114e9e543` | #2067 @waw4303 |
| #2162 | `087c3c368` | #2082 @yzxcj797 |
| #2164 | `31750b094` | #2027 @yzxcj797 |
| #2165 | `41689b374` | #2155 @waw4303 |
| #2166 | `5fbe65570` | #2163 @Ingwannu |
| #2137 | `be12328bc` | issue #2132 |
| #2146 | `aa07bc308` | #2101 @Ingwannu |
| #2138 | `81492fd10` | #2102 @lilinxiong |
| #2140 | `3ad9c7bf4` | #2100 + #2077 @ntdatt812 |
| #2141 | `1cc35c560` | #2056 @Ingwannu |
| #2142 | `52a463dd6` | #2131 @bet4it |
| #2144 | `8c8a66816` | #2105 @lilinxiong |
| #2145 | `83d5ffa3c` | #2040 @Ingwannu |
| #2147 | `7fc50846b` | #2104 @olddonkey |
| #2148 | `86ed9ed83` | #2109 + #2110 @drakonkat |
| #2149 | `17e8e916b` | #2053 @Ingwannu |
| #2150 | `9a7801547` | #2127 @agentHits |
| #2151 | `a584890f8` | #2075 @olddonkey |

Verification that the rebased content is what actually landed: for each of the six PRs whose
merge recorded a pre-rebase SHA, `git diff --name-only origin/dev <branch> -- <that PR's own
src/ and tests/ files>` returns **0 differing files**. The merge took the branch content; only
the recorded SHA was the older one.

## Security surfaces, named rather than merged silently

`MAINTAINERS.md` reserves auth, credential handling, OAuth, workflows, and release automation
for explicit human review. Seven of the merged PRs touch that surface, and the user's merge
authorization is the human decision of record for each:

- **#2137 / #2146** — bearer admission and stored-credential substitution; entitlement-gated
model discovery sends the selected account's access token.
- **#2144** — decides whether the shell hook exposing `ANTHROPIC_AUTH_TOKEN` is installed.
- **#2145** — lowers third-party `function_call` output and restores it as a client-executed
private `tool_search_call`.
- **#2147** — OAuth 401 refresh and access-token replay.
- **#2148** — operator-selected destinations for Anthropic/Antigravity OAuth bearers. The
transport gate still rejects public cleartext HTTP; only explicitly opted-in local/private
relays may use it.
- **#2149** — OAuth credential commit ownership under the store lock.

## Issue closure

Every issue named by a merged PR is closed: #2133, #2132, #2092, #2047, #1950, #2097, #1886,
#2125, #2074, #1924, plus the superseded contributor PRs. Verified by `gh api` state, not by
assuming GitHub auto-closed them — these PRs targeted `dev`, not `main`, so auto-close does not
fire.

## Release readiness — not a release

At `a584890f8`:

- `bun run test` — 13716 pass / 10 skip / 0 fail across 866 files.
- `bun x tsc --noEmit` — exit 0.
- `bun run privacy:scan` — passed.
- `package.json` version line: **2.27.0** (unchanged by this campaign).

Changed surfaces: provider registry and transport headers, quota dispatch, routing capability
resolution, the Anthropic/OpenAI-chat/Google adapters, Responses core and compact, OAuth store
and credential commit, request logging and usage persistence, subagent roster management.

Not done, and deliberately: no `scripts/release.ts`, no npm publish, no tag, no change to
`main` or `preview`. Release execution needs its own authorization.

## Still open

**#2054** (@keepitmello) stays open by explicit instruction, carrying the wire-probe request.
**#2167** (@ntdatt812) arrived after this campaign and is untriaged.

Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# 110 — Three open bug issues: #2152, #2157, #2156

Unit: 260820_bug_pr_backlog_consolidation
Verification host: `ssh lidge:~/ci-wp3/opencodex`.

Three issues, three different shapes of answer. Two shipped fixes; one is honestly blocked.

## #2152 — Windows CI, three groups (PR #2178)

Three read-only lanes read the three groups. The shape PR #2178 already had was right, and two
of the issue's own premises turned out to be wrong — the fix follows the evidence:

- **Group 1** is not "the case budget is too small". `A-reduced` failed at 79,978 ms against a
150 s ceiling, so the outer budget was never the constraint. The real abort came from
`Fixture.request`'s unscaled 10 s `AbortSignal` firing from inside. And `E` does not start
`ocx` at all — it starts two lock helpers, and its holder released after a fixed 3 s wait
that a Windows contender's spawn can outlast.
- **Group 2** is not "an unprivileged Windows user cannot create symlinks". The runner can, so
`canSymlink` was true and the cases ran — then failed on Unix mode semantics that a Windows
directory cannot satisfy. Production already returns `windows_skip` for exactly that reason,
which is what makes the platform guard a correct skip rather than a masked failure.
- **Group 3** needed the crash retry the macOS leg already had.

### The defect I found in the fix

Group 3's retry grepped for `panic(thread`. This repository already worked that out and wrote
it down: `devlog/_fin/260731_pr_issue_triage_round/050_windows_ci_flake_rca.md:172` says not to
key on it, because Bun emits **both** `panic(thread 2852)` and `panic(main thread)` for the
same failure, and names `Internal assertion failure` as the stable fingerprint. Probed:

```
MATCH panic(thread 3960): Internal assertion failure
MISS panic(main thread): Internal assertion failure
MISS panic(main thread): PANIC: reached unreachable code
```

The retry would have failed the shard on roughly half the crashes it exists to absorb, while
looking correct.

Three copies of that signature list exist — macOS inline, the new Windows inline, and
`is_bun_runtime_crash` — and the workflow comment already said to keep them in sync with
nothing enforcing it. They had drifted. All three now match, and the contract test pins **the
sync itself**, not the literal text, so the same drift cannot recur. RED-proven: restoring the
bad signature fails it with `windows:Internal assertion failure:false`.

`hasShellCommandHead` was added because the existing exact-whole-line matcher rejected the
`| tee` the retry requires — that is why the Windows step assertion went red — while still
rejecting an echoed or commented-out copy.

**What no local run can prove:** whether 45 s suffices under real Windows contention, the actual
skip result on the runner, and `PIPESTATUS` under Git Bash. Those need a `workflow_dispatch`,
and a useful proof run must exercise the crash path — a green Windows run shows the suite runs,
not that the retry fires.

## #2157 — shadow-helper observability (PR #2179)

The dashboard half of the attribution field #2166 landed. Delivered.

## #2156 — muse-spark truncation: BLOCKED, deliberately

PR #2180 was opened claiming to fix this. An adversarial review found the attribution wrong, and
the source agrees:

- A stall abort emits `response.incomplete` / `upstream_stall_timeout` (`bridge.ts:1371-1396`),
after which the bridge has cancelled upstream, closed, and explicitly discards any late
adapter event (`bridge.ts:837-845`).
- The reporter's error is emitted only after `reader.read()` returns EOF with tool calls still
pending (`openai-chat.ts:1819-1827`), surfacing as `response.failed`.

Different path, different client frame. The heartbeat **cannot** produce the reported error.

What the heartbeat does fix is real and worth landing alone: tool-call deltas are buffered, the
bridge arms its watchdog on adapter activity rather than socket activity, so a large argument
payload was indistinguishable from a hung upstream. The `#2156` references were reworded to
"found while investigating", and the closing keyword removed.

**Second finding, fixed in the same PR.** Making the adapter emit one heartbeat per delta
exposed that `guardTerminalEventStream` retained every nonterminal event in `seen`, which feeds
both the continuation analysis and the rebuilt request. A large argument payload could grow it
without bound wherever `terminalContinuationGuard` is on. The empty-completion guard already
passes heartbeats through unretained; the terminal guard now matches it.

**Why blocked rather than fixed.** The adapter is reporting truthfully: that stream really did
end. What cannot be determined from here is why it ended for ocx and not for Pi direct.
`hadUsage: false` is suggestive — ocx does send `stream_options.include_usage` — but a provider
may simply ignore that flag, so it is not decisive either way.

Asked the reporter for the one thing that settles it: redacted raw SSE captures from a
Pi-direct success and an ocx failure for an equivalent request, through socket close, and
whether either carried `finish_reason`, `[DONE]`, or a usage-only final chunk. If ocx's
upstream closes without a terminal frame while Pi's does not, the difference is in what we send
or how we read it and it is ours. If both close identically and Pi is merely more tolerant, the
right answer is the buffered-mode fallback the reporter suggested — and that choice should rest
on their capture, not on a guess.

## Verification

At the branch tips, on `ssh lidge`:

- #2178: `bun test` 13719 pass / 15 skip / 0 fail; `tests/ci-workflows.test.ts` 132 pass / 0 fail.
- #2180: `bun test` 13722 pass / 15 skip / 0 fail; focused trio 112 pass / 0 fail.
- `bun x tsc --noEmit` exit 0 and `bun run privacy:scan` passed on both.

Loading
Loading