Skip to content

fix(kiro): fail over accounts when overage quota is exhausted - #7687

Merged
lidge-jun merged 2 commits into
lidge-jun:devfrom
martinbcg:codex/kiro-overage-account-failover
Oct 24, 2026
Merged

lidge-jun merged 2 commits into
lidge-jun:devfrom
martinbcg:codex/kiro-overage-account-failover

Conversation

@martinbcg

@martinbcg martinbcg commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Treat Kiro's exact OVERAGE_REQUEST_LIMIT_EXCEEDED reason on HTTP 400 or 429 as account quota exhaustion, using the existing monthly-quota recovery path. A pool with other eligible accounts could previously return an HTTP 400 to the client without attempting another account. The HTTP 429 variant rotated but retained only a short rate cooldown.
  • Reuse the existing credential-generation and login-identity checks, persisted exhaustion evidence, reset/expiry handling, request send budget, and account-paired bearer/profile/region rebinding. Ordinary invalid requests and unrelated error bodies keep their existing behavior.
  • Add regression coverage for the overage refusal, rejected lookalike/nested/oversized bodies, and buffered/streaming account rotation. Document both quota refusal reasons and the fact that an overage-enabled plan may still serve after the monthly gauge reaches 100%.

Reproduction

Store two usable Kiro OAuth accounts, select the first, and return this synthetic upstream body for its first generation request:

{
  "__type": "com.amazon.kiro.runtimeservice#ServiceQuotaExceededException",
  "reason": "OVERAGE_REQUEST_LIMIT_EXCEEDED",
  "message": "You have reached the limit for overages."
}

Before the fix, HTTP 400 returned to the caller without using the second account, and HTTP 429 failed to record persistent account exhaustion. With the fix, both response modes retry exactly once on the second account, carry that account's bearer/profile/region, update the active selection, and mark only the refused account exhausted. The regression was driven red before changing the classifier.

Verification

Runtime verification below was completed on a383e412ea2588223848d4e7ba74dbce2c2f5850, based on upstream dev at 0aeaf0cb6b0a7c2f117d8c75f8fa396cf2ea6e39. Current head 87d9bb9274706746ec99547abea98cd274890001 adds only the classifier docstring requested by CodeRabbit; its focused revalidation is recorded below.

  • With repository-pinned Bun 1.4.3, bun scripts/test.ts tests/providers/kiro/kiro-refusal.test.ts tests/server/server-kiro-refusal-e2e.test.ts tests/providers/kiro/kiro-refusal-failover.test.ts tests/providers/kiro/kiro-leased-responses.test.ts tests/providers/kiro/kiro-auth-context-continuation.test.ts tests/oauth/generic-oauth-refusal-composition.test.ts — 84 passed, 0 failed.
  • bun run typecheck — passed.
  • bun run privacy:scan — passed.
  • bun run structure:check — passed.
  • In docs-site/, bun install --frozen-lockfile and bun run build — passed; 593 pages built and 84,861 internal links checked.
  • git diff --check — passed before committing.
  • With repository-pinned Bun 1.4.3, bun run test:changed resolved upstream dev to 0aeaf0cb6b0a7c2f117d8c75f8fa396cf2ea6e39 — 34,418 passed, 43 skipped, 0 failed, across 1,547 files (310.1 seconds).

Full-suite scope exception (AGENTS.md, Commands): this change adds one exact reason to an existing bounded classifier, while the full repository has 2,607 test files. The focused tests exercise classification, actual Responses account rotation in both response modes, persisted account exclusion, paired credentials and routing metadata, leases, continuation, cancellation, and refusal recovery. The broader import-graph run also passed as recorded above. The complete 2,607-file suite was not run locally; upstream CI remains required before merge. No runtime changes outside the classifier, configuration changes, or production deployment are included.

CodeRabbit pre-merge follow-up (2026-10-24)

  • CodeRabbit found no actionable issue in the refusal handling or account rotation, but its docstring check reported 0% coverage for the touched classifier. Added JSDoc describing its account-refusal purpose and bounded JSON contract.
  • Current head 87d9bb9274706746ec99547abea98cd274890001 contains only that documentation follow-up. With repository-pinned Bun 1.4.3, bun scripts/test.ts tests/providers/kiro/kiro-refusal.test.ts tests/server/server-kiro-refusal-e2e.test.ts — 45 passed, 0 failed; bun run typecheck and git diff --check also passed.
  • The earlier 84-test focused run, 34,418-test import-graph run, privacy/structure checks, and site build passed on the runtime commit recorded above. They were not repeated for this comment-only follow-up.
  • Upstream executable CI on the prior head required maintainer approval. The current head needs its own successful required checks before merge; queued, awaiting-approval, cancelled, and older-head results are not claimed as passing. CodeRabbit now passes on the current head, including 100% docstring coverage, with no actionable findings. Required executable workflows still await maintainer approval.

Readiness was reattested after the gate processed the docstring-only push and reset the checklist. The clean working tree and PR still match 87d9bb9274706746ec99547abea98cd274890001; the branch is 0 commits behind current dev. The recorded current-head 45-test run and typecheck apply unchanged, and the full-suite scope exception remains documented above.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults. The runtime diff only extends an exact top-level reason allowlist after the existing body-size and HTTP-status guards; existing credential and evidence fences are reused. All regression credentials and upstream I/O are synthetic.

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • Required local validation passed; commands, results, and any full-suite exception are documented.

  • I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

Summary by CodeRabbit

  • Bug Fixes

    • Kiro account rotation now treats OVERAGE_REQUEST_LIMIT_EXCEEDED, like MONTHLY_REQUEST_COUNT, as monthly quota exhaustion when returned with HTTP 400 or 429.
    • Accounts receiving either refusal are excluded until the observed quota reset or the evidence expires, allowing rotation to another available account. Plans that allow overage may continue serving requests after the monthly gauge reaches 100%.
  • Documentation

    • Clarified the recognized Kiro quota-refusal codes and their effect on account rotation.

@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between a383e41 and 87d9bb9.

Files selected for processing: 1
  • src/adapters/kiro-refusal.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

Walkthrough

Kiro classifies OVERAGE_REQUEST_LIMIT_EXCEEDED on HTTP 400 or 429 as monthly quota exhaustion. Tests cover classification and account rotation for buffered and streaming requests. Kiro documentation lists the refusal reasons and describes overage-enabled plans.

Changes: Kiro quota refusal handling

Layer / File(s) Summary
Classify overage-limit refusals
src/adapters/kiro-refusal.ts, tests/providers/kiro/kiro-refusal.test.ts
The classifier returns monthly_quota for the exact OVERAGE_REQUEST_LIMIT_EXCEEDED reason on HTTP 400 or 429. Tests check other statuses, unrelated or nested evidence, suffixed reasons, and oversized bodies.
Verify account rotation and document quota reasons
tests/server/server-kiro-refusal-e2e.test.ts, docs-site/src/content/docs/reference/adapters.md, docs-site/src/content/docs/reference/cli/providers-accounts.md, structure/providers/kiro.md
Buffered and streaming tests cover rotation after monthly and overage refusals. They verify that account B serves the response and becomes active. The documentation lists the exact refusal reasons; the CLI reference also notes that overage-enabled plans may continue serving at a monthly gauge of 100%.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant Kiro as Kiro upstream
  participant Classifier as classifyKiroRefusal
  participant Rotation as Account rotation
  participant AccountB as Account B
  Kiro->>Classifier: HTTP 400 or 429 with overage-limit reason
  Classifier->>Rotation: monthly_quota verdict
  Rotation->>Kiro: Retry using Account B credentials
  Kiro->>Rotation: Successful response
  Rotation->>AccountB: Set active account
Loading

Possibly related issues

Possibly related PRs

  • lidge-jun/opencodex#7625 — Both changes enable quota-related failover. This PR classifies Kiro refusals; PR #7625 changes combo hop and cooldown classification.
  • lidge-jun/opencodex#7558 — Both changes handle provider-specific HTTP 400 quota or credit refusals for account rotation. This PR addresses Kiro; PR #7558 addresses Command Code.

Suggested labels: bug, review-ready

Merge Risk: Minimal · up to 87d9b

The change is ready to merge after the outstanding required CI checks complete successfully.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title "fix(kiro): fail over accounts when overage quota is exhausted" matches the main change. The PR adds OVERAGE_REQUEST_LIMIT_EXCEEDED on HTTP 400 or 429 to the existing monthly_quota classific…
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 3 files.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title "fix(kiro): fail over accounts when overage quota is exhausted" matches the main change. The PR adds OVERAGE_REQUEST_LIMIT_EXCEEDED on HTTP 400 or 429 to the existing monthly_quota classification in src/adapters/kiro-refusal.ts, so an exhausted account is excluded and the request fails over to another account. The title is specific and concise, and it follows the conventional commit style. The raw summary does not show any unrelated file changes, and the docs and tests all support the same behavior change.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Oct 24, 2026
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

✅ READY

  • all PR quality gates passed; the review readiness checklist is complete.

Review readiness checklist

  • ✅ Required local validation passed; commands, results, and any full-suite exception are documented.
  • ✅ I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).
  • ✅ I resolved all correct Codex and CodeRabbit findings.
  • ✅ My PR is ready for review.

✅ 4/4 boxes ticked.

This pull request is already Ready for Review.
The review-ready label marks this PR as ready; review automation runs independently.
Maintainers notified: @lidge-jun @Ingwannu

@github-actions
github-actions Bot marked this pull request as draft October 24, 2026 15:28
@martinbcg
martinbcg marked this pull request as ready for review October 24, 2026 15:30
@lidge-jun

Copy link
Copy Markdown
Owner

Local CI-equivalent (macOS) at 87d9bb9

FAIL — owner-approved real-machine rule; full primary Bun batch/file coverage is complete. Raw nonzero exits remain failures; no retry is counted as recovery.

  • Host: juniui-Macmini.local; macOS 27.0 (26A5421a), arm64.
  • Exact fetched/tested head: 87d9bb9274706746ec99547abea98cd274890001. Pull head re-fetched immediately before posting: 87d9bb9274706746ec99547abea98cd274890001 (unchanged during verification).
  • Bun test runner / runtime pins: 1.4.3 / 1.4.4; installed runner revision 1.4.3+c6da4a4d3. The exact head’s composite-action resolver and installed-version assertions ran.
  • Failure comparison base: 26598df2c4c07d781e344ac6119953fed77ecb27; each failing test file is run once there with the same Bun/env. Only the same test and source assertion qualify as BASE-IDENTICAL.
  • OPENCODEX_TEST_TRUSTED_FIXTURE_DIR=/var/folders/2q/sdhzjp713hs8rb0b1gmjs44r0000gn/T/goat-threads-9Fo5iz/32833e82343f3c3e/ocx-round2-trusted-kipu2m_9; private 0700 directory, untrustedFixtureAncestor() returned null. GIT_DIR, GIT_INDEX_FILE, GIT_WORK_TREE are explicitly excluded.
  • One heavy suite at a time. Original 300s batch timeout, 60s test timeout, worker count 1, size <=12 and CI job deadlines retained. The batch selection/ordering/serial-boundary algorithm is the literal original script prefix; only script-directory references use the original absolute directory. The coordinator continues to later batches after failures without changing their disposition.
  • Workflow: ci.yml at tested head. Ubuntu jobs were already green per the owner and were not repeated here.
  • Evidence: /Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/evidence-7687-87d9bb9274; every exact command, ordered file array, env override, exit, count and full log is retained in results.json plus the four plan-*.json files. Fresh detached worktrees are removed after evidence/comment delivery; the user checkout is untouched.
macOS suite Batches executed / planned Files entered / selected Raw exit Pass / Fail / Skip
1/3 90/90 869/869 0 16879/0/104
2/3 85/85 869/869 0 17752/0/24
3/3 81/81 869/869 1 17732/1/40
1/1 254/254 2607/2607 0 52364/0/168

Every primary batch below uses this exact command with its ordered FILES array from the manifest:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 "${FILES[@]}"
BUN_TEST_FILE_SCOPE=all BUN_TEST_BATCH_SIZE=12 BUN_TEST_PARALLEL=1
BUN_TEST_BATCH_TIMEOUT_SECONDS=300 OCX_TEST_NO_QUEUE=1 OCX_TEST_FULL_SUITE=1
TEST_SHARD=1/3,2/3,3/3,1/1; fresh private transpiler cache for each scope

Failure classification:

  • INTRODUCED: tests/cli/cli-status-json.test.ts:132 — status version skew projection > projects proxy 1.2.3. Base exit 0, 61/0/0; command timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/cli/cli-status-json.test.ts.
  • BASE-IDENTICAL: desktop/scripts/verify-macos-runtime.sh:65 — Verify WidgetKit appex and desktop app. Base exit 1, 0/0/0; command app=desktop/src-tauri/target/release/bundle/macos/OpenCodex.app; executable="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$app/Contents/Info.plist")"; test -n "$executable"; test -x "$app/Contents/MacOS/$executable"; test -x "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget"; test -x "$app/Contents/MacOS/ocx"; bash desktop/scripts/verify-macos-runtime.sh "$app"; codesign -dv "$app/Contents/PlugIns/OpenCodexWidget.appex"; nm -a "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget" | grep -q "OpenCodexWidget0abC6BundleV" || { echo "::error::the widget bundle is not linked into the extension"; exit 1; }.
  • BASE-IDENTICAL: .github/workflows/ci.yml:1617 — Verify WidgetKit appex and desktop app: WidgetBundle symbol assertion. Base exit 1, 0/0/0; command app=desktop/src-tauri/target/release/bundle/macos/OpenCodex.app; codesign -dv "$app/Contents/PlugIns/OpenCodexWidget.appex"; nm -a "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget" | grep -q "OpenCodexWidget0abC6BundleV" || { echo "::error::the widget bundle is not linked into the extension"; exit 1; }.

Observed failing assertion: tests/cli/cli-status-json.test.ts:132 expected { exitCode: 0, stderr: "" }; received exitCode: null and a Bun 1.4.3 panic(main thread): Trap instruction crash report from the CLI child. The same head’s control batch 050 passed (302/0/0, exit0), and the required once-only base file run with Bun1.4.3 passed (61/0/0, exit0). Thus INTRODUCED is the requested comparison classification; a deterministic source regression is not established, and the original failure is retained.

Blocking items: 3of3-batch-017-of-81

Every primary batch: exit and pass/fail/skip
Shard Batch Files Exit Pass Fail Skip
1/3 1 12 0 209 0 0
1/3 2 12 0 228 0 0
1/3 3 12 0 241 0 0
1/3 4 8 0 211 0 0
1/3 5 1 0 1 0 0
1/3 6 12 0 114 0 0
1/3 7 12 0 308 0 0
1/3 8 8 0 150 0 0
1/3 9 1 0 40 0 0
1/3 10 12 0 290 0 0
1/3 11 12 0 255 0 0
1/3 12 12 0 217 0 0
1/3 13 12 0 403 0 0
1/3 14 12 0 183 0 0
1/3 15 12 0 234 0 0
1/3 16 12 0 262 0 0
1/3 17 5 0 61 0 0
1/3 18 1 0 8 0 0
1/3 19 12 0 391 0 2
1/3 20 12 0 191 0 29
1/3 21 12 0 139 0 4
1/3 22 12 0 165 0 0
1/3 23 12 0 119 0 1
1/3 24 12 0 59 0 0
1/3 25 12 0 245 0 0
1/3 26 12 0 254 0 3
1/3 27 12 0 88 0 0
1/3 28 12 0 270 0 0
1/3 29 12 0 541 0 2
1/3 30 6 0 64 0 0
1/3 31 1 0 81 0 23
1/3 32 12 0 148 0 2
1/3 33 12 0 267 0 0
1/3 34 12 0 399 0 0
1/3 35 12 0 192 0 0
1/3 36 12 0 241 0 1
1/3 37 12 0 214 0 0
1/3 38 12 0 207 0 0
1/3 39 12 0 119 0 0
1/3 40 12 0 212 0 0
1/3 41 12 0 84 0 0
1/3 42 12 0 234 0 0
1/3 43 12 0 183 0 0
1/3 44 12 0 250 0 1
1/3 45 12 0 154 0 0
1/3 46 12 0 184 0 0
1/3 47 12 0 160 0 0
1/3 48 1 0 18 0 0
1/3 49 12 0 190 0 0
1/3 50 12 0 252 0 0
1/3 51 12 0 130 0 0
1/3 52 12 0 223 0 0
1/3 53 12 0 330 0 0
1/3 54 12 0 234 0 0
1/3 55 12 0 415 0 0
1/3 56 12 0 191 0 0
1/3 57 12 0 148 0 0
1/3 58 12 0 482 0 0
1/3 59 12 0 175 0 0
1/3 60 12 0 205 0 0
1/3 61 12 0 330 0 0
1/3 62 12 0 165 0 0
1/3 63 12 0 252 0 0
1/3 64 12 0 476 0 0
1/3 65 12 0 253 0 0
1/3 66 8 0 76 0 0
1/3 67 1 0 26 0 0
1/3 68 8 0 127 0 0
1/3 69 1 0 34 0 0
1/3 70 12 0 362 0 0
1/3 71 12 0 109 0 0
1/3 72 12 0 104 0 0
1/3 73 12 0 406 0 1
1/3 74 12 0 281 0 0
1/3 75 2 0 12 0 0
1/3 76 1 0 55 0 0
1/3 77 12 0 178 0 0
1/3 78 7 0 84 0 2
1/3 79 1 0 46 0 0
1/3 80 1 0 4 0 0
1/3 81 1 0 5 0 0
1/3 82 3 0 53 0 0
1/3 83 1 0 1 0 0
1/3 84 8 0 99 0 2
1/3 85 1 0 26 0 0
1/3 86 12 0 178 0 0
1/3 87 12 0 409 0 0
1/3 88 12 0 119 0 0
1/3 89 12 0 344 0 31
1/3 90 1 0 2 0 0
2/3 1 12 0 178 0 0
2/3 2 12 0 287 0 0
2/3 3 12 0 227 0 0
2/3 4 12 0 214 0 0
2/3 5 12 0 222 0 0
2/3 6 10 0 136 0 0
2/3 7 1 0 9 0 0
2/3 8 12 0 152 0 0
2/3 9 6 0 62 0 0
2/3 10 1 0 51 0 0
2/3 11 12 0 164 0 0
2/3 12 12 0 229 0 1
2/3 13 12 0 344 0 0
2/3 14 12 0 310 0 0
2/3 15 12 0 410 0 0
2/3 16 12 0 319 0 0
2/3 17 12 0 139 0 1
2/3 18 12 0 320 0 0
2/3 19 12 0 180 0 2
2/3 20 12 0 113 0 1
2/3 21 8 0 86 0 1
2/3 22 1 0 15 0 0
2/3 23 12 0 168 0 0
2/3 24 12 0 565 0 0
2/3 25 12 0 511 0 2
2/3 26 12 0 258 0 1
2/3 27 4 0 131 0 0
2/3 28 1 0 17 0 0
2/3 29 12 0 265 0 0
2/3 30 12 0 472 0 0
2/3 31 12 0 394 0 1
2/3 32 12 0 356 0 0
2/3 33 12 0 332 0 0
2/3 34 9 0 122 0 1
2/3 35 1 0 14 0 0
2/3 36 12 0 291 0 0
2/3 37 12 0 188 0 0
2/3 38 12 0 288 0 1
2/3 39 12 0 203 0 0
2/3 40 12 0 83 0 0
2/3 41 12 0 259 0 4
2/3 42 12 0 127 0 0
2/3 43 12 0 217 0 0
2/3 44 12 0 134 0 0
2/3 45 12 0 341 0 0
2/3 46 12 0 273 0 0
2/3 47 12 0 195 0 0
2/3 48 12 0 242 0 0
2/3 49 12 0 113 0 0
2/3 50 12 0 337 0 0
2/3 51 12 0 208 0 1
2/3 52 12 0 231 0 0
2/3 53 12 0 356 0 0
2/3 54 12 0 242 0 0
2/3 55 12 0 343 0 0
2/3 56 12 0 385 0 0
2/3 57 12 0 187 0 0
2/3 58 12 0 183 0 0
2/3 59 12 0 152 0 0
2/3 60 12 0 227 0 0
2/3 61 12 0 231 0 0
2/3 62 12 0 378 0 1
2/3 63 12 0 153 0 0
2/3 64 12 0 354 0 0
2/3 65 12 0 257 0 0
2/3 66 12 0 138 0 0
2/3 67 12 0 198 0 0
2/3 68 12 0 257 0 0
2/3 69 12 0 256 0 0
2/3 70 12 0 302 0 1
2/3 71 12 0 168 0 0
2/3 72 4 0 87 0 0
2/3 73 1 0 8 0 0
2/3 74 12 0 266 0 0
2/3 75 6 0 75 0 0
2/3 76 1 0 1 0 0
2/3 77 1 0 1 0 0
2/3 78 1 0 3 0 0
2/3 79 1 0 2 0 0
2/3 80 12 0 261 0 0
2/3 81 12 0 182 0 0
2/3 82 12 0 234 0 0
2/3 83 12 0 95 0 0
2/3 84 12 0 129 0 0
2/3 85 8 0 139 0 5
3/3 1 12 0 271 0 0
3/3 2 12 0 353 0 0
3/3 3 12 0 214 0 0
3/3 4 12 0 333 0 0
3/3 5 12 0 343 0 0
3/3 6 12 0 367 0 0
3/3 7 12 0 309 0 0
3/3 8 12 0 286 0 0
3/3 9 12 0 216 0 10
3/3 10 12 0 197 0 0
3/3 11 12 0 333 0 0
3/3 12 12 0 282 0 0
3/3 13 12 0 165 0 0
3/3 14 12 0 288 0 2
3/3 15 12 0 381 0 1
3/3 16 12 0 426 0 0
3/3 17 12 1 362 1 0
3/3 18 12 0 246 0 1
3/3 19 12 0 234 0 2
3/3 20 12 0 221 0 0
3/3 21 12 0 225 0 0
3/3 22 12 0 205 0 1
3/3 23 12 0 321 0 0
3/3 24 12 0 191 0 1
3/3 25 12 0 250 0 11
3/3 26 12 0 235 0 0
3/3 27 12 0 293 0 0
3/3 28 12 0 280 0 0
3/3 29 12 0 238 0 1
3/3 30 5 0 80 0 0
3/3 31 1 0 17 0 0
3/3 32 12 0 159 0 1
3/3 33 1 0 8 0 0
3/3 34 1 0 24 0 0
3/3 35 12 0 196 0 0
3/3 36 12 0 170 0 0
3/3 37 12 0 71 0 0
3/3 38 12 0 139 0 0
3/3 39 12 0 103 0 0
3/3 40 12 0 121 0 0
3/3 41 12 0 223 0 0
3/3 42 12 0 227 0 0
3/3 43 12 0 211 0 0
3/3 44 12 0 170 0 0
3/3 45 12 0 283 0 0
3/3 46 12 0 319 0 0
3/3 47 12 0 230 0 0
3/3 48 12 0 292 0 0
3/3 49 12 0 207 0 0
3/3 50 12 0 223 0 0
3/3 51 12 0 268 0 0
3/3 52 12 0 175 0 0
3/3 53 12 0 232 0 0
3/3 54 12 0 183 0 0
3/3 55 12 0 270 0 0
3/3 56 12 0 221 0 0
3/3 57 12 0 189 0 0
3/3 58 12 0 277 0 0
3/3 59 12 0 235 0 0
3/3 60 12 0 343 0 0
3/3 61 12 0 259 0 0
3/3 62 12 0 568 0 0
3/3 63 12 0 169 0 0
3/3 64 12 0 199 0 0
3/3 65 12 0 212 0 0
3/3 66 12 0 203 0 0
3/3 67 12 0 192 0 1
3/3 68 12 0 268 0 0
3/3 69 12 0 187 0 0
3/3 70 11 0 205 0 0
3/3 71 1 0 61 0 0
3/3 72 9 0 86 0 0
3/3 73 1 0 4 0 0
3/3 74 1 0 212 0 0
3/3 75 3 0 100 0 0
3/3 76 1 0 1 0 0
3/3 77 12 0 184 0 0
3/3 78 12 0 186 0 2
3/3 79 12 0 138 0 0
3/3 80 12 0 231 0 0
3/3 81 6 0 136 0 6
1/1 1 12 0 156 0 0
1/1 2 12 0 292 0 0
1/1 3 12 0 181 0 0
1/1 4 12 0 329 0 0
1/1 5 12 0 281 0 0
1/1 6 12 0 221 0 0
1/1 7 12 0 306 0 0
1/1 8 12 0 184 0 0
1/1 9 12 0 331 0 0
1/1 10 12 0 298 0 0
1/1 11 12 0 288 0 0
1/1 12 12 0 283 0 0
1/1 13 12 0 337 0 0
1/1 14 7 0 128 0 0
1/1 15 1 0 1 0 0
1/1 16 12 0 243 0 0
1/1 17 12 0 148 0 0
1/1 18 12 0 272 0 0
1/1 19 8 0 122 0 0
1/1 20 1 0 9 0 0
1/1 21 12 0 328 0 0
1/1 22 12 0 304 0 0
1/1 23 12 0 144 0 0
1/1 24 10 0 156 0 0
1/1 25 1 0 40 0 0
1/1 26 12 0 201 0 7
1/1 27 2 0 49 0 0
1/1 28 1 0 51 0 0
1/1 29 12 0 181 0 3
1/1 30 12 0 282 0 0
1/1 31 12 0 217 0 0
1/1 32 12 0 147 0 0
1/1 33 12 0 281 0 0
1/1 34 12 0 236 0 0
1/1 35 12 0 376 0 0
1/1 36 12 0 174 0 1
1/1 37 12 0 201 0 0
1/1 38 12 0 332 0 0
1/1 39 12 0 360 0 0
1/1 40 12 0 391 0 0
1/1 41 12 0 261 0 0
1/1 42 12 0 171 0 2
1/1 43 12 0 355 0 1
1/1 44 12 0 294 0 0
1/1 45 12 0 365 0 0
1/1 46 12 0 367 0 0
1/1 47 12 0 200 0 0
1/1 48 12 0 452 0 0
1/1 49 12 0 230 0 0
1/1 50 12 0 302 0 0
1/1 51 1 0 3 0 0
1/1 52 1 0 8 0 0
1/1 53 12 0 431 0 0
1/1 54 12 0 235 0 3
1/1 55 12 0 164 0 1
1/1 56 12 0 206 0 29
1/1 57 12 0 212 0 0
1/1 58 12 0 232 0 0
1/1 59 12 0 198 0 6
1/1 60 12 0 182 0 2
1/1 61 12 0 144 0 0
1/1 62 12 0 323 0 0
1/1 63 12 0 64 0 0
1/1 64 12 0 199 0 1
1/1 65 12 0 169 0 0
1/1 66 12 0 48 0 3
1/1 67 11 0 178 0 0
1/1 68 1 0 15 0 0
1/1 69 12 0 228 0 0
1/1 70 12 0 171 0 0
1/1 71 12 0 219 0 0
1/1 72 12 0 231 0 0
1/1 73 12 0 556 0 1
1/1 74 12 0 196 0 0
1/1 75 12 0 605 0 6
1/1 76 12 0 325 0 10
1/1 77 12 0 198 0 0
1/1 78 12 0 179 0 0
1/1 79 12 0 210 0 1
1/1 80 1 0 17 0 0
1/1 81 12 0 207 0 0
1/1 82 12 0 144 0 0
1/1 83 12 0 354 0 0
1/1 84 12 0 282 0 0
1/1 85 12 0 636 0 1
1/1 86 12 0 320 0 0
1/1 87 12 0 480 0 1
1/1 88 12 0 246 0 1
1/1 89 4 0 44 0 0
1/1 90 1 0 81 0 23
1/1 91 12 0 201 0 1
1/1 92 12 0 261 0 2
1/1 93 12 0 219 0 0
1/1 94 12 0 287 0 0
1/1 95 7 0 79 0 0
1/1 96 1 0 17 0 0
1/1 97 12 0 302 0 0
1/1 98 12 0 507 0 0
1/1 99 12 0 119 0 2
1/1 100 12 0 218 0 0
1/1 101 5 0 58 0 0
1/1 102 1 0 14 0 0
1/1 103 1 0 24 0 0
1/1 104 12 0 200 0 0
1/1 105 12 0 247 0 1
1/1 106 12 0 223 0 0
1/1 107 12 0 306 0 0
1/1 108 12 0 200 0 0
1/1 109 12 0 129 0 0
1/1 110 12 0 204 0 0
1/1 111 12 0 130 0 0
1/1 112 12 0 203 0 1
1/1 113 12 0 109 0 0
1/1 114 12 0 180 0 0
1/1 115 12 0 210 0 0
1/1 116 12 0 128 0 0
1/1 117 12 0 167 0 0
1/1 118 12 0 142 0 0
1/1 119 12 0 56 0 0
1/1 120 12 0 105 0 0
1/1 121 12 0 268 0 0
1/1 122 12 0 218 0 4
1/1 123 12 0 166 0 0
1/1 124 12 0 170 0 0
1/1 125 12 0 184 0 0
1/1 126 12 0 233 0 0
1/1 127 12 0 237 0 0
1/1 128 12 0 205 0 0
1/1 129 12 0 145 0 1
1/1 130 12 0 249 0 0
1/1 131 12 0 140 0 0
1/1 132 12 0 176 0 0
1/1 133 12 0 210 0 0
1/1 134 12 0 273 0 0
1/1 135 12 0 301 0 0
1/1 136 12 0 221 0 0
1/1 137 12 0 220 0 0
1/1 138 5 0 69 0 0
1/1 139 1 0 18 0 0
1/1 140 12 0 198 0 0
1/1 141 12 0 377 0 0
1/1 142 12 0 148 0 0
1/1 143 12 0 285 0 0
1/1 144 12 0 240 0 0
1/1 145 12 0 211 0 0
1/1 146 12 0 194 0 0
1/1 147 12 0 203 0 0
1/1 148 12 0 189 0 0
1/1 149 12 0 253 0 0
1/1 150 12 0 192 0 0
1/1 151 12 0 243 0 0
1/1 152 12 0 223 0 1
1/1 153 12 0 271 0 0
1/1 154 12 0 286 0 0
1/1 155 12 0 237 0 0
1/1 156 12 0 278 0 0
1/1 157 12 0 172 0 0
1/1 158 12 0 538 0 0
1/1 159 12 0 167 0 0
1/1 160 12 0 313 0 0
1/1 161 12 0 197 0 0
1/1 162 12 0 196 0 0
1/1 163 12 0 232 0 0
1/1 164 12 0 160 0 0
1/1 165 12 0 167 0 0
1/1 166 12 0 201 0 0
1/1 167 12 0 547 0 0
1/1 168 12 0 488 0 0
1/1 169 12 0 281 0 0
1/1 170 12 0 201 0 0
1/1 171 12 0 192 0 0
1/1 172 12 0 212 0 0
1/1 173 12 0 179 0 0
1/1 174 12 0 93 0 0
1/1 175 12 0 378 0 0
1/1 176 12 0 220 0 0
1/1 177 12 0 243 0 0
1/1 178 12 0 141 0 0
1/1 179 12 0 174 0 0
1/1 180 12 0 323 0 0
1/1 181 12 0 146 0 0
1/1 182 12 0 300 0 0
1/1 183 12 0 258 0 0
1/1 184 12 0 477 0 0
1/1 185 12 0 294 0 0
1/1 186 12 0 360 0 0
1/1 187 12 0 247 0 1
1/1 188 12 0 565 0 0
1/1 189 12 0 226 0 0
1/1 190 12 0 227 0 0
1/1 191 12 0 237 0 0
1/1 192 12 0 201 0 0
1/1 193 2 0 102 0 0
1/1 194 1 0 26 0 0
1/1 195 12 0 278 0 0
1/1 196 12 0 106 0 0
1/1 197 2 0 68 0 0
1/1 198 1 0 34 0 0
1/1 199 12 0 214 0 0
1/1 200 12 0 337 0 0
1/1 201 12 0 105 0 0
1/1 202 12 0 185 0 0
1/1 203 12 0 123 0 0
1/1 204 12 0 201 0 0
1/1 205 12 0 274 0 0
1/1 206 12 0 177 0 0
1/1 207 12 0 129 0 0
1/1 208 12 0 228 0 1
1/1 209 12 0 399 0 1
1/1 210 12 0 209 0 0
1/1 211 12 0 387 0 0
1/1 212 12 0 278 0 0
1/1 213 12 0 189 0 1
1/1 214 1 0 55 0 0
1/1 215 12 0 176 0 0
1/1 216 12 0 90 0 0
1/1 217 12 0 217 0 0
1/1 218 12 0 313 0 0
1/1 219 4 0 32 0 0
1/1 220 1 0 61 0 0
1/1 221 6 0 49 0 0
1/1 222 1 0 8 0 0
1/1 223 12 0 289 0 2
1/1 224 5 0 72 0 0
1/1 225 1 0 46 0 0
1/1 226 4 0 48 0 0
1/1 227 1 0 5 0 0
1/1 228 5 0 63 0 0
1/1 229 1 0 4 0 0
1/1 230 1 0 212 0 0
1/1 231 8 0 147 0 0
1/1 232 1 0 1 0 0
1/1 233 1 0 1 0 0
1/1 234 1 0 1 0 0
1/1 235 1 0 1 0 0
1/1 236 1 0 3 0 0
1/1 237 1 0 2 0 0
1/1 238 12 0 168 0 0
1/1 239 12 0 222 0 0
1/1 240 8 0 154 0 2
1/1 241 1 0 26 0 0
1/1 242 12 0 129 0 2
1/1 243 12 0 222 0 0
1/1 244 12 0 105 0 0
1/1 245 12 0 419 0 0
1/1 246 12 0 281 0 0
1/1 247 12 0 146 0 0
1/1 248 12 0 132 0 0
1/1 249 12 0 132 0 0
1/1 250 12 0 217 0 0
1/1 251 12 0 190 0 0
1/1 252 12 0 219 0 6
1/1 253 12 0 303 0 34
1/1 254 3 0 27 0 2

Setup, CLI smoke, and macOS-specific gates:

Step Exit Pass / Fail / Skip
identity 0 N/A
setup-test-runner 0 N/A
install-root 0 N/A
install-gui 0 N/A
build-gui 0 N/A
bounded-utilities 0 N/A
help-1of3 0 N/A
help-2of3 0 N/A
help-3of3 0 N/A
help-1of1 0 N/A
widget-setup-bun-runtime 0 N/A
widget-01 0 N/A
widget-setup-rust 0 N/A
widget-02 0 MenuBarCore: 123 passed/0 failed; NativeTray: 59 passing assertions (skip not reported)
widget-03 0 N/A
widget-04 0 N/A
widget-05 0 N/A
widget-06 0 N/A
widget-07 1 N/A
widget-post-probe-first-attempt 1 N/A
final-state 0 N/A
Exact setup, smoke and gate commands (same order as the table)

identity (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

git rev-parse HEAD; git merge-base HEAD 26598df2c4; bun --version; bun --revision; node --version; sw_vers; hostname; uname -m

setup-test-runner (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

node <<'NODE'
const pkg = require('./package.json');
const role = process.env.BUN_ROLE;
let key;
let version;
switch (role) {
  case 'runtime': key = 'dependencies.bun'; version = pkg.dependencies?.bun; break;
  case 'test-runner': key = 'testRunnerBun'; version = pkg.testRunnerBun; break;
  default:
    console.error(`::error::Unknown Bun role: ${role}`);
    process.exit(1);
}
if (typeof version !== 'string' || version !== version.trim() || !/^\d+\.\d+\.\d+$/.test(version)) {
  console.error(`::error::Missing or invalid package.json ${key} for Bun role ${role}`);
  process.exit(1);
}
require('node:fs').appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\n`);
console.log(`Using Bun ${version} from package.json ${key} (${role})`);
NODE

bun --version
test "$(bun --version)" = 1.4.3

install-root (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun install --frozen-lockfile

install-gui (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

cd gui && bun install --frozen-lockfile

build-gui (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

cd gui && bun run build

bounded-utilities (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

brew list coreutils >/dev/null 2>&1 || brew install coreutils
command -v timeout
timeout --version

help-1of3 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run src/cli/index.ts help

help-2of3 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run src/cli/index.ts help

help-3of3 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run src/cli/index.ts help

help-1of1 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run src/cli/index.ts help

widget-setup-bun-runtime (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

node <<'NODE'
const pkg = require('./package.json');
const role = process.env.BUN_ROLE;
let key;
let version;
switch (role) {
  case 'runtime': key = 'dependencies.bun'; version = pkg.dependencies?.bun; break;
  case 'test-runner': key = 'testRunnerBun'; version = pkg.testRunnerBun; break;
  default:
    console.error(`::error::Unknown Bun role: ${role}`);
    process.exit(1);
}
if (typeof version !== 'string' || version !== version.trim() || !/^\d+\.\d+\.\d+$/.test(version)) {
  console.error(`::error::Missing or invalid package.json ${key} for Bun role ${role}`);
  process.exit(1);
}
require('node:fs').appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\n`);
console.log(`Using Bun ${version} from package.json ${key} (${role})`);
NODE

bun --version
test "$(bun --version)" = 1.4.4

widget-01 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun install --frozen-lockfile
cd desktop
bun install --frozen-lockfile

widget-setup-rust (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

rustup toolchain install stable --profile minimal
rustc --version
cargo --version

widget-02 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run test:macos
swift run --package-path app NativeTrayTests

widget-03 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun run build:gui

widget-04 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bun desktop/scripts/prepare-sidecar.ts

widget-05 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

bash desktop/scripts/build-widget.sh

widget-06 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274/desktop), exit 0:

bunx tauri build --ci --bundles app --config '{"bundle":{"createUpdaterArtifacts":false,"macOS":{"signingIdentity":"-"}}}'

widget-07 (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 1:

app=desktop/src-tauri/target/release/bundle/macos/OpenCodex.app
# Tauri renames the main binary only when `mainBinaryName` is set, and this config
# does not set it, so the bundled executable keeps the Cargo bin name rather than
# the product name. Read the name the bundle itself declares instead of restating
# it here, so this check follows the config instead of drifting from it.
executable="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$app/Contents/Info.plist")"
test -n "$executable"
test -x "$app/Contents/MacOS/$executable"
test -x "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget"
test -x "$app/Contents/MacOS/ocx"
# Verify actual entitlements and execute the signed Bun sidecar as well as the seal.
bash desktop/scripts/verify-macos-runtime.sh "$app"
codesign -dv "$app/Contents/PlugIns/OpenCodexWidget.appex"
# The widget is only offered in the gallery when its bundle is actually linked in, and
# nothing else here would notice its absence: the appex builds, signs and registers
# exactly the same way with the WidgetBundle dropped by the linker.
nm -a "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget" \
  | grep -q "OpenCodexWidget0abC6BundleV" \
  || { echo "::error::the widget bundle is not linked into the extension"; exit 1; }

widget-post-probe-first-attempt (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 1:

app=desktop/src-tauri/target/release/bundle/macos/OpenCodex.app
codesign -dv "$app/Contents/PlugIns/OpenCodexWidget.appex"
# The widget is only offered in the gallery when its bundle is actually linked in, and
# nothing else here would notice its absence: the appex builds, signs and registers
# exactly the same way with the WidgetBundle dropped by the linker.
nm -a "$app/Contents/PlugIns/OpenCodexWidget.appex/Contents/MacOS/OpenCodexWidget" \
  | grep -q "OpenCodexWidget0abC6BundleV" \
  || { echo "::error::the widget bundle is not linked into the extension"; exit 1; }

final-state (/Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/pr-7687-87d9bb9274), exit 0:

git rev-parse HEAD; git status --porcelain

NOT RUN:

  • No selected Bun test file, primary batch or macOS CI run step was omitted. Commands after the failed packaged-keyring probe were executed separately as first attempts, retaining the failed probe; their results are in the table.
  • keyring (macOS) is not included in this head’s native-selected platform matrix.
  • remote-helper (macOS) is not selected by this head’s changed-path filter.
  • setup-action (macOS) is not selected by this head’s changed-path filter.
  • npm-global (macOS) is not selected by this head’s native/packaging filters.
  • Ubuntu/Windows legs are outside this platform report. No branch edits, push, approval or merge performed.

@lidge-jun

Copy link
Copy Markdown
Owner

Addendum: CLI child crash diagnostics at 87d9bb9

The original FAIL remains recorded. Diagnostic repetitions do not replace it.
Host: juniui-Macmini.local, macOS27.0/arm64; Bun1.4.3 (1.4.3+c6da4a4d3) for all nine sequential runs. Base 26598df2c4c07d781e344ac6119953fed77ecb27. Pull head re-fetched before posting: 87d9bb9274706746ec99547abea98cd274890001 (unchanged).

Run Exit Pass Fail Skip
HEAD-batch-017-run-1 0 363 0 0
HEAD-batch-017-run-2 0 363 0 0
HEAD-batch-017-run-3 0 363 0 0
BASE-batch-017-run-1 0 363 0 0
BASE-batch-017-run-2 0 363 0 0
BASE-batch-017-run-3 0 363 0 0
HEAD-status-alone-run-1 0 61 0 0
HEAD-status-alone-run-2 0 61 0 0
HEAD-status-alone-run-3 0 61 0 0

Exact original shard3/3 batch017 command, same ordered files for HEAD×3 and BASE×3:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/cli/cli-models-reasoning.test.ts tests/cli/cli-models-set.test.ts tests/cli/cli-provider-lifecycle-runtime.test.ts tests/cli/cli-provider-list-active.test.ts tests/cli/cli-provider-settings.test.ts tests/cli/cli-restart-handoff.test.ts tests/cli/cli-restart-health.test.ts tests/cli/cli-start-journal-order.test.ts tests/cli/cli-status-json.test.ts tests/cli/cli-system-settings-parity.test.ts tests/cli/cli-transport-honesty.test.ts tests/cli/cli-update-restart-admission.test.ts

HEAD file-alone×3:

timeout --signal=TERM --kill-after=15s 300s bun test --isolate --parallel=1 --timeout 60000 tests/cli/cli-status-json.test.ts

Original batch env preserved: TEST_SHARD=3/3, scope=all, batch-size12, parallel1, batch-timeout300s, test-timeout60000ms, OCX_TEST_NO_QUEUE=1, OCX_TEST_FULL_SUITE=1, original transpiler-cache path, private0700 OPENCODEX_TEST_TRUSTED_FIXTURE_DIR; Git environment variables excluded. Only checkout/workspace changes for base. Existing transpiler cache retained (already warm). No code changes.

Original failure (batch362 pass/1 fail, exit1; same head control batch050 passed302/0/0):

tests/cli/cli-status-json.test.ts:132
expect({ exitCode: result.exitCode, stderr: result.stderr }).toEqual({ exitCode: 0, stderr: "" });
Expected exitCode: 0, stderr: ""
Received exitCode: null, stderr: Bun v1.4.3 panic(main thread): Trap instruction

Failing assertion text in these nine runs: none.

Assessment: the original child crash is intermittent/non-reproducible in this sample: exact batch order passed3/3 at HEAD and3/3 on base, and HEAD alone passed3/3. Fixed batch order alone did not reproduce it. The precise cause, dependence on earlier suite state, and deterministic source regression remain unproven. The original comparison classification and overall FAIL remain unchanged.

All nine requested runs completed; NOT RUN: none of the requested diagnostic runs. Commands/env/full logs: /Volumes/CLIsu/ocx-macos-round2-20261025.qeaCas/diagnostic-7687-87d9bb9274.

@lidge-jun

Copy link
Copy Markdown
Owner

Integration evidence (owner decision decision:e6895606, approved): independent gpt-6.1-sol review PASS at 87d9bb9. Exact-head PR CI run 40102495440 succeeded (four Ubuntu test shards, gates, aggregate ci). Not Windows-sensitive. A real-machine macOS run on this head recorded one failure in tests/cli/cli-status-json.test.ts:132, a Bun 1.4.3 runtime trap in a CLI child unrelated to this diff; the same head's control batch and dev both passed that file.

Static merge simulation on current dev f0bf610 (this Mac): dev=f0bf610bee7be9eae595dc4b1334727462a9b1a2 base=0aeaf0cb6b0a7c2f117d8c75f8fa396cf2ea6e39 pr_files= 6 overlap=[]; merge clean; install exit=0; gui install exit=0; tsc exit=0; tsc doctor exit=0; structure:check exit=0; privacy:scan exit=0; layout+ratchet guards exit=0 52 pass 0 fail ;

Merged by the triage manager as maintainer integration (MAINTAINERS.md, dev only) with green exact-head PR CI, an independent review PASS, and the owner's approval of this bundle.

@lidge-jun
lidge-jun merged commit 5ab431b into lidge-jun:dev Oct 24, 2026
35 of 41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working review-ready

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants