fix(server): attribute usage-limit auto-resume to T3 Code#29838
Closes / Refs: Closes https://github.com/pingdotgg/t3code/issues/29746
What's fixed: Automatic usage-limit recovery now attributes its continuation to T3 Code. A resumed child thread still creates a tracked follow-up and delivers its completed result to its parent. Existing stored messages keep their attribution.
Evidence: These recordings use a synthetic quota failure and the real reset scheduler with a free replay provider.
Before, the web client on main automatically resumes after reset and shows the continuation without attribution.
https://github.com/user-attachments/assets/a4a99e61-b116-418b-87e5-8411b8c249e3
After, the web client on this PR shows the reset-triggered continuation as "Sent by T3 Code" and the replay completes.
https://github.com/user-attachments/assets/03554a0c-0fff-4062-99fe-31c091d35c00
After, native Android on a POCO M3 Pro shows selecting "Resume at reset", the automatic continuation labeled "Sent by T3 Code", and the completed replay.
https://github.com/user-attachments/assets/05a2e563-519a-4550-a776-d79209401d35
After, the Linux desktop app's reset scheduler starts a replay turn, labels the continuation "Sent by T3 Code", and completes the turn.
https://github.com/user-attachments/assets/d632b080-55f2-4a44-b21c-8a4194450947
Delegated child recovery also passed on corex's isolated source server at 8b585884a7b8e388bcaa86a944373baaa965972a, on 2026-11-03 UTC. A free scripted ACP parent called the real scoped delegate_task MCP tool. Its child failed its first provider turn. With the server stopped, the existing error was given a synthetic usage_limit and future reset through EventSinkV2. After restart, the real scheduler armed and resumed the child. The child completed, the ordinary completion worker delivered its result, and the parent provider received and acknowledged it. The persisted follow-up task is delivered, with exactly one recovered-result message and one parent acknowledgement.
Corex server trace and runtime assertions for recovered-child delivery
Extracted fields from the isolated server's event log, projections and ACP process trace. parent and child below refer to the full thread IDs at the top. The initial failure and recovered completion each produced one consumed result transfer.
| 1 | head 8b585884a7b8e388bcaa86a944373baaa965972a |
| 2 | environment corex / isolated source server / local scripted ACP provider |
| 3 | parentThreadId mcp:0bb574d6-f3ea-4f11-be4c-7094a54a1dde |
| 4 | childThreadId thread:delegated-task:command%3Amcp%3A3c8260f9-3138-426a-a53d-90b618b37567%3Adelegate-task%3A4fd23071-fb06-46bd-af79-59031475e5e6 |
| 5 | original task and reset follow-up are distinct; resumed run.delegatedTaskId matches follow-up |
| 6 | fixture: initial ACP error, then usage_limit + resetAt written via EventSinkV2 with server stopped |
| 7 | resetAt 2026-11-03T02:59:07.691Z |
| 8 | 2026-11-03T02:58:32.691Z seq=105 turn-item.updated {"thread":"child","failure":{"class":"usage_limit","message":"Synthetic quota reset fixture. No real provider quota consumed.","code":"usageLimitExceeded","retryable":null,"resetAt":"2026-11-03T02:59:07.691Z"}} |
| 9 | 2026-11-03T02:58:46.717Z seq=108 thread.metadata-updated {"thread":"child","limitRecovery":{"requestId":"limit-arm:thread:delegated-task:command%3Amcp%3A3c8260f9-3138-426a-a53d-90b618b37567%3Adelegate-task%3A4fd23071-fb06-46bd-af79-59031475e5e6:run:thread:thread%3Adelegated-task%3Acommand%253Amcp%253A3c8260f9-3138-426a-a53d-90b618b37567%253Adelegate-task%253A4fd23071-fb06-46bd-af79-59031475e5e6:ordinal:1:1793674747691","runId":"run:thread:thread%3Adelegated-task%3Acommand%253Amcp%253A3c8260f9-3138-426a-a53d-90b618b37567%253Adelegate-task%253A4fd23071-fb06-46bd-af79-59031475e5e6:ordinal:1","resetAt":"2026-11-03T02:59:07.691Z","autoResume":true,"snooze":false}} |
| 10 | 2026-11-03T02:59:11.367Z seq=110 run.created {"thread":"child","ordinal":2,"status":"starting"} |
| 11 | 2026-11-03T02:59:11.367Z seq=114 message.updated {"thread":"child","text":"Continue where you left off.","createdBy":"agent","creationSource":"server"} |
| 12 | 2026-11-03T02:59:11.367Z seq=116 run.updated {"thread":"child","ordinal":2,"status":"starting","hasFreshDelegatedTaskId":true} |
| 13 | 2026-11-03T02:59:11.678Z seq=123 run.updated {"thread":"child","ordinal":2,"status":"running","hasFreshDelegatedTaskId":true} |
| 14 | 2026-11-03T02:59:11.785Z seq=134 run.updated {"thread":"child","ordinal":2,"status":"waiting","hasFreshDelegatedTaskId":true} |
| 15 | 2026-11-03T02:59:11.806Z seq=141 run.updated {"thread":"child","ordinal":2,"status":"completed","hasFreshDelegatedTaskId":true} |
| 16 | 2026-11-03T02:59:11.949Z seq=153 message.updated {"thread":"parent","text":"(Quota reset delivery child) [completed]:\nCHILD_RESULT_29746: recovered delegated child finished successfully.","createdBy":"agent","creationSource":"server"} |
| 17 | 2026-11-03T02:59:12.251Z seq=164 message.updated {"thread":"parent","text":"PARENT_ACK_29746: I received CHILD_RESULT_29746 from the recovered child.","createdBy":"agent","creationSource":"provider"} |
| 18 | 2026-11-03T02:59:12.341Z seq=178 subagent.updated {"thread":"parent","status":"completed","result":"CHILD_RESULT_29746: recovered delegated child finished successfully.","completionDelivery":{"state":"delivered","observedByRunId":null}} |
| 19 | 2026-11-03T02:59:12.246Z provider-process prompt received recovered result: true |
| 20 | ASSERT PASS: resumed child completed with a fresh parent-tracked task |
| 21 | ASSERT PASS: follow-up completionDelivery.state = delivered |
| 22 | ASSERT PASS: exactly 1 recovered-result server message in parent |
| 23 | ASSERT PASS: exactly 1 recovered-result prompt received by parent ACP process |
| 24 | ASSERT PASS: exactly 1 persisted PARENT_ACK_29746 response |
| 25 | ASSERT PASS: 2 consumed result transfers total: initial failure + recovered completion |
CI for this head passed. The prior focused Boat run at this head passed check:changed, including 169 tests in 6 files, plus all 15 scripts/check-changed.test.ts tests. No code changed for this additional runtime verification.
Not shown: real provider quota exhaustion, live vendor-specific buffering, or iOS rendering.
Base compatibility was checked on physical corex on 2026-11-04 against main 647bd148b3fbd7c8b57a10fd41ae6d5fc7b35cc1, which includes the wake's 9aa80a0dc412eeee80d12a53d077c2e1cd8939e7. PR head remains 8b585884a7b8e388bcaa86a944373baaa965972a. The clean temporary merge has commit 98074430b21ee2d8ef351e558ffaef59df3d6961 and tree cf4ffbc32d5ea9dbfe3586a15eadd5dc34fc7a27; its diff from main is exactly this PR's four-file patch. No branch update or production edit was needed.
The source review found the attribution worker, shared attribution helper and conversation contracts unchanged. The combined revision passed 65 selected tests covering quota recovery, delegated completion and follow-ups, restart recovery, settled-parent eligibility, bounded SQL history and reader transactions. This also covers main's new message-ID lookup used by startup recovery and settlement. The existing web, Android and Linux captures remain evidence for the unchanged attribution path at PR head; the runtime trace above remains evidence for child delivery at that head.
Startup interruption before provider acceptance still cancels an automatic continuation, as it did before this base move. Main's new held-queue retention applies to user-authored messages. Extending automatic continuations' restart policy is outside this attribution fix.
Latest-base compatibility test output
Environment: physical corex, isolated source integration checkout, all four test files unmodified from the temporary merge above.
| 1 | vp test run apps/server/src/orchestration-v2/DelegatedCompletionDelivery.test.ts apps/server/src/orchestration-v2/runtimeLayer.test.ts apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts apps/server/src/orchestration-v2/ProjectionStore.test.ts -t 'delegated completion|subagent follow-ups|delegated tasks across|usage-limit recovery|recovers .* work after restart|routes full projection reads|reads a fixed SQL turn-item window|does not freshly arm limit recovery' |
| 2 | Test Files 4 passed (4) |
| 3 | Tests 65 passed | 155 skipped (220) |
| 4 | Start at 03:26:34 |
| 5 | Duration 37.39s (transform 60%, import 23%, tests 13%, setup 4%) |
The earlier integration against main 059804dfdaba54bd6f997355c30e102dae20d3b4 also passed 65 focused tests. That run included delegated projection-index and recorded-follow-up recovery tests, plus two temporary restart-table rows comparing user/server and agent/server quota continuations. The user-authored row was held in the queue, and the agent-authored row, run attempt and root node were cancelled. The temporary fixture delta and its output are retained below so that check can be reproduced. The temporary checkout and fixtures were removed after verification.
| 1 | vp test run apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts -t 'recovers .* work after restart' |
| 2 | Test Files 1 passed (1) |
| 3 | Tests 8 passed | 12 skipped (20) |
| 1 | diff --git a/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts b/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts |
| 2 | index d300cf59ca3..9fef4036d59 100644 |
| 3 | --- a/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts |
| 4 | +++ b/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts |
| 5 | @@ -508,12 +508,15 @@ it.effect.each([ |
| 6 | "starting-other-request", |
| 7 | "starting-own-request", |
| 8 | "starting-scheduled", |
| 9 | + "starting-usage-limit-agent", |
| 10 | + "starting-usage-limit-user", |
| 11 | ] as const)("recovers $0 work after restart", (scenario) => { |
| 12 | const status = scenario.startsWith("starting") ? "starting" : scenario; |
| 13 | const terminalized = |
| 14 | status === "preparing" || |
| 15 | scenario === "starting-own-request" || |
| 16 | - scenario === "starting-scheduled"; |
| 17 | + scenario === "starting-scheduled" || |
| 18 | + scenario === "starting-usage-limit-agent"; |
| 19 | const threadId = ThreadId.make("thread_queued_restart"); |
| 20 | const runId = RunId.make("run_queued_restart"); |
| 21 | const attemptId = RunAttemptId.make("attempt_queued_restart"); |
| 22 | @@ -544,6 +547,9 @@ it.effect.each([ |
| 23 | startedAt: null, |
| 24 | activeAttemptId: attemptId, |
| 25 | userMessageId: MessageId.make("message_queued_restart"), |
| 26 | + ...(scenario.startsWith("starting-usage-limit") |
| 27 | + ? { usageLimitContinuationOfRunId: RunId.make("failed-quota-run") } |
| 28 | + : {}), |
| 29 | queuePosition: 1, |
| 30 | providerInstanceId: ProviderInstanceId.make("codex"), |
| 31 | ...(status === "preparing" |
| 32 | @@ -587,7 +593,8 @@ it.effect.each([ |
| 33 | ? [ |
| 34 | { |
| 35 | id: MessageId.make("message_queued_restart"), |
| 36 | - createdBy: "user", |
| 37 | + createdBy: scenario === "starting-usage-limit-agent" ? "agent" : "user", |
| 38 | + ...(scenario.startsWith("starting-usage-limit") ? { creationSource: "server" } : {}), |
| 39 | ...(scenario === "starting-scheduled" ? { scheduledTaskId: "scheduled-task" } : {}), |
| 40 | }, |
| 41 | ] |
Original verification output, recovered from fun's saved Boat job on 2026-11-04. These are the two runs already claimed above, not reruns.
- Revision:
8b585884a7b8e388bcaa86a944373baaa965972a. - Environment: Boat Linux, VM
bx_3mtx73ba, 8 CPUs, jobj_5cgykciumokc2x5mq4ye, stagetypecheck-package-29838, attempt 1. - Job started
2026-11-03T02:07:46.273Z, finished2026-11-03T02:17:35.689Z, statesucceeded, exit code0. - Changed-file base:
FLEET_SOURCE_BASE=65aaf972aef7de82721f52494ac224f803fd7be9, also printed in the command output below.
Original commands and passing output: 169 tests plus 15 script tests
The saved job command was bash -lc 'bash "$FLEET_INPUT_BUILDSCRIPT"'. Its original 297-byte input script was recovered and its SHA-256 verified as 25865e0d9615e6b8d11e05b35478afad4b6f9f86421726f5e64d4cd82e2a654a:
| 1 | set -euo pipefail |
| 2 | vp i --frozen-lockfile |
| 3 | vp run check:changed "$FLEET_SOURCE_BASE" |
| 4 | vp test run scripts/check-changed.test.ts |
| 5 | vp run dist:desktop:artifact --platform linux --target dir --arch x64 --output-dir out/package |
| 6 | mkdir -p out |
| 7 | tar -C out/package -czf out/linux-desktop.tar.gz linux-unpacked |
The saved worker log identifies the revision and input:
| 1 | == fleet job j_5cgykciumokc2x5mq4ye attempt 1, typecheck-package-29838, 8b585884a7b8e388bcaa86a944373baaa965972a, fleet cbc0536eab88, 8 cpus |
| 2 | == source: 985 commits on top of the template's copy of pingdotgg/t3code at dac8b11ddc25 |
| 3 | == input buildscript: sha256 25865e0d9615e6b8d11e05b35478afad4b6f9f86421726f5e64d4cd82e2a654a checked, 297 bytes at /tmp/fleet-job/j_5cgykciumokc2x5mq4ye/inputs/buildscript |
Output from vp run check:changed "$FLEET_SOURCE_BASE", with ANSI colour codes removed:
| 1 | $ node scripts/check-changed.ts 65aaf972aef7de82721f52494ac224f803fd7be9 ⊘ cache disabled |
| 2 | check:changed: 4 files since 65aaf972aef7 (65aaf972aef7de82721f52494ac224f803fd7be9) |
| 3 | |
| 4 | > vp format pass 0.9s |
| 5 | Checking formatting... |
| 6 | |
| 7 | All matched files use the correct format. |
| 8 | Finished in 635ms on 4 files using 8 threads. |
| 9 | |
| 10 | > vp lint pass 1.3s |
| 11 | Found 0 warnings and 0 errors. |
| 12 | Finished in 1.1s on 4 files with 200 rules using 8 threads. |
| 13 | |
| 14 | > vp knip 1/2 pass 19.7s |
| 15 | |
| 16 | > vp graphql (apps/server) pass 0.5s |
| 17 | ~/apps/server$ graphqlgen --check ⊘ cache disabled |
| 18 | |
| 19 | > vp knip 2/2 pass 29.3s |
| 20 | |
| 21 | > vp typecheck (3 packages) pass 15.7s |
| 22 | ~/scripts$ tsc --noEmit |
| 23 | ~/evals$ tsc --noEmit |
| 24 | |
| 25 | ~/apps/server$ tsc --noEmit |
| 26 | |
| 27 | |
| 28 | --- |
| 29 | vp run: 0/3 cache hit (0%), 3/3 successful. @t3tools/scripts#typecheck not cached because it modified its inputs. (Run `vp run --last-details` for full details) |
| 30 | |
| 31 | > vp test (6 files) pass 29.6s |
| 32 | |
| 33 | RUN v5.0.5 /tmp/fleet-job/j_5cgykciumokc2x5mq4ye/src |
| 34 | |
| 35 | ✓ t3 src/orchestration-v2/runtimeLayer.test.ts (112 tests) 2989ms |
| 36 | ✓ t3 src/orchestration-v2/DelegatedCompletionDelivery.test.ts (35 tests) 888ms |
| 37 | ✓ t3 src/orchestration-v2/Orchestrator.control-reads.test.ts (15 tests) 783ms |
| 38 | ✓ t3 src/provider/AgentContextBudget.test.ts (1 test) 59ms |
| 39 | ✓ t3 src/orchestration-v2/UsageLimitRecoveryWorker.test.ts (5 tests) 11ms |
| 40 | ✓ t3 src/orchestration-v2/Orchestrator.migration.test.ts (1 test) 2ms |
| 41 | |
| 42 | Test Files 6 passed (6) |
| 43 | Tests 169 passed (169) |
| 44 | Start at 02:12:44 |
| 45 | Duration 24.54s (transform 48%, import 28%, tests 20%, setup 4%) |
| 46 | |
| 47 | check:changed summary |
| 48 | pass format 0.9s |
| 49 | pass lint 1.3s |
| 50 | pass knip 1/2 19.7s |
| 51 | pass knip 2/2 29.3s |
| 52 | pass graphql (apps/server) 0.5s |
| 53 | pass typecheck (3 packages) 15.7s |
| 54 | pass test (6 files) 29.6s |
| 55 | CI also runs: full test suites, build |
| 56 | unused patch check skipped: no dependency files changed |
| 57 | pass not cached: files changed during the run |
Output from vp test run scripts/check-changed.test.ts, with ANSI colour codes removed:
| 1 | ✓ root scripts/check-changed.test.ts (15 tests) 1551ms |
| 2 | ✓ checks changed source paths through the Windows launcher 322ms |
| 3 | ✓ lints an Astro component and runs knip when only it changed 440ms |
| 4 | ✓ reports a failing install step with its output 314ms |
| 5 | ✓ reports a failing lint step with its output 301ms |
| 6 | |
| 7 | Test Files 1 passed (1) |
| 8 | Tests 15 passed (15) |
| 9 | Start at 02:13:12 |
| 10 | Duration 6.71s (transform 66%, tests 25%, setup 7%, import 3%) |
The full job finished successfully after both checks and the desktop package build. The original input and retained log agree with the pinned revision, job metadata and passing counts above.
The live ready check also reviewed main 8b44f42b14c8e273156474a924ccf29680dd7857. Since the integration check at 647bd148b3fbd7c8b57a10fd41ae6d5fc7b35cc1, main changed diff/file metadata, screen layout, status-row alignment and release versions. It did not change the quota worker, orchestration recovery, delegation or attribution helpers. The existing integration results and head recordings remain applicable; the PR still merges cleanly.
Implemented by Opus 5.5 in Claude Code; investigated, tested and reviewed by GPT-6.1 Sol in Codex through T3 Code.
Checks
Approvability
Verdict: Approved at a79834b
Macroscope's review found this PR approvable — Usage-limit auto-resume messages are attributed to T3 Code while preserving existing subagent follow-up handling. Existing recovery settings and eligibility safeguards remain unchanged.
No code changes detected at 8b58588. Prior analysis still applies.
You can add or adjust custom eligibility rules. Learn more.
Thread transfer impact
✅ Thread transfer remains within every enforced ceiling.
ℹ️ The exact PR base did not have a successful artifact. Baseline uses the latest successful
mainmeasurement shown below.
| Provider | Metric | Main baseline | This PR | Impact | PR ceiling | |
|---|---|---|---|---|---|---|
| Codex | Total thread wire | 5.0 KiB | 5.0 KiB | 0 B (0.0%) | 6.8 KiB | ✅ |
| Codex | Thread snapshot wire | 3.8 KiB | 3.8 KiB | 0 B (0.0%) | 4.9 KiB | ✅ |
| Codex | Live turn WebSocket wire | 1.3 KiB | 1.3 KiB | 0 B (0.0%) | 2.0 KiB | ✅ |
| Codex | Live turn WebSocket decoded | 21.6 KiB | 21.6 KiB | 0 B (0.0%) | 24.4 KiB | ✅ |
| Codex | Live turn messages | 2 | 2 | 0 (0.0%) | 8 | ✅ |
| Claude | Total thread wire | 5.0 KiB | 5.0 KiB | −18 B (−0.3%) | 6.8 KiB | ✅ |
| Claude | Thread snapshot wire | 3.8 KiB | 3.8 KiB | 0 B (0.0%) | 4.9 KiB | ✅ |
| Claude | Live turn WebSocket wire | 1.2 KiB | 1.2 KiB | −18 B (−1.4%) | 2.0 KiB | ✅ |
| Claude | Live turn WebSocket decoded | 21.9 KiB | 21.9 KiB | −41 B (−0.2%) | 24.4 KiB | ✅ |
| Claude | Live turn messages | 2 | 1 | −1 (−50.0%) | 8 | ✅ |
Baseline: e0f69e9 · PR result: 8b58588 · Source CI: success
Scenario and decoded snapshot size
10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
- Codex decoded thread snapshot: 108.5 KiB
- Claude decoded thread snapshot: 108.8 KiB
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.
No actionable comments were generated in the recent review.
Walkthrough
Usage-limit recovery messages are now attributed to the agent. The orchestrator also accepts these continuations as delegated subagent follow-ups. Tests cover message attribution and parent-task tracking.
Changes: Usage-Limit Follow-Ups
Layer / File(s) Summary Agent attribution
apps/server/src/orchestration-v2/UsageLimitRecoveryWorker.ts,apps/server/src/orchestration-v2/runtimeLayer.test.tsThe recovery worker creates continuation messages as agent messages. The runtime test checks the message text, creator, and creation source. Delegated follow-up tracking
apps/server/src/orchestration-v2/Orchestrator.ts,apps/server/src/orchestration-v2/DelegatedCompletionDelivery.test.tsUsage-limit continuations can qualify as subagent follow-ups. The test checks that a resumed child run has a delegated task ID and that its parent task references the child thread with no result. Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix · Severity of issue fixed: Low
Suggested reviewers:
juliusmarminge
Merge Risk: External image Minimal · up to a7983
No actionable merge-blocking risk was identified.
Pre-merge checks: Passed 4
Check name Status Explanation Title check Passed The title clearly and concisely identifies the main change: attributing usage-limit auto-resume messages to T3 Code. Linked Issues check Passed Issue [ #29746] requires usage-limit auto-resume messages to use T3 Code attribution and preserve child follow-up tracking.UsageLimitRecoveryWorker.tsnow setscreatedBy: "agent"with `creationSou…Out of Scope Changes check Passed The changes stay within issue [ #29746]. The production edits change usage-limit continuation attribution and preserve delegated child follow-up behavior. The added tests cover those behaviors. No unre…Description check Passed The description clearly explains the problem and change, links the related issue, documents scope limitations, and provides detailed verification results, recordings, test output, and known gaps. It u… Full details: Linked Issues check
Explanation
Issue [
#29746] requires usage-limit auto-resume messages to use T3 Code attribution and preserve child follow-up tracking.UsageLimitRecoveryWorker.tsnow setscreatedBy: "agent"withcreationSource: "server".runtimeLayer.test.tsverifies the stored continuation attribution.Orchestrator.tspermits usage-limit continuations as subagent follow-ups, andDelegatedCompletionDelivery.test.tsverifies parent tracking. No unmet coding requirement is evident.
Full details: Out of Scope Changes check
Explanation
The changes stay within issue [
#29746]. The production edits change usage-limit continuation attribution and preserve delegated child follow-up behavior. The added tests cover those behaviors. No unrelated production behavior or unrelated files are changed.
Full details: Description check
Explanation
The description clearly explains the problem and change, links the related issue, documents scope limitations, and provides detailed verification results, recordings, test output, and known gaps. It uses custom headings instead of the template headings and does not include an explicit maintainer approval comment, but the required information is otherwise substantially present.
Finishing Touches
Generate docstrings
- Commit to this branch
- Create a new PR
Generate unit tests (beta)
- Commit to this branch
- Create a new PR
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
External image Recent review info
-
External image Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: issue-watch/29746
- File: .coderabbit.config.ts
- Commit: a79834b
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
cf361f4c-88a2-40ef-9dd7-88d9868c6b1a
External image Commits
Reviewing files that changed from the base of the PR and between 30b9c4a956a6c595fda5c8b2c439a6aaebc861b0 and a79834b8e2039f2c05d1af90e0cb65b196ba0b13.
External image Files selected for processing: 4
apps/server/src/orchestration-v2/DelegatedCompletionDelivery.test.tsapps/server/src/orchestration-v2/Orchestrator.tsapps/server/src/orchestration-v2/UsageLimitRecoveryWorker.tsapps/server/src/orchestration-v2/runtimeLayer.test.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.
External image Recent review info
-
External image Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: issue-watch/29746
- File: .coderabbit.config.ts
- Commit: a79834b
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
cf361f4c-88a2-40ef-9dd7-88d9868c6b1a
External image Commits
Reviewing files that changed from the base of the PR and between 30b9c4a956a6c595fda5c8b2c439a6aaebc861b0 and a79834b8e2039f2c05d1af90e0cb65b196ba0b13.
External image Files selected for processing: 4
apps/server/src/orchestration-v2/DelegatedCompletionDelivery.test.tsapps/server/src/orchestration-v2/Orchestrator.tsapps/server/src/orchestration-v2/UsageLimitRecoveryWorker.tsapps/server/src/orchestration-v2/runtimeLayer.test.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.
[GPT-6.1 Sol][Codex] on behalf of shivam.
Verified head a79834b8e2039f2c05d1af90e0cb65b196ba0b13 against current main 30b9c4a956a6c595fda5c8b2c439a6aaebc861b0.
- The attribution regression fails before the fix: the persisted continuation has
createdBy: "user"instead of"agent". It passes on this head. The child recovery regression also confirms a fresh tracked follow-up for the parent. - Boat job
j_wim7vylna3oz56nivzsb, stagetypecheck-package-29746, attempt 1 on large VMbx_mue8eut4, exited 0. It ranvp run check:changed "$FLEET_SOURCE_BASE", including 169 tests across six files, and built the Linux desktop package from this head. - On physical corex, that packaged app used isolated state with a synthetic usage-limit failure. Its real reset scheduler persisted
Continue where you left off.asagent/server; the UI showed "Sent by T3 Code" and the free ACP replay turn completed. The replay script was converted to JavaScript because the host Node build cannot execute TypeScript. The desktop screenshot and recording are in the PR body. - All eight server CI shards, build/typecheck, lint and Macroscope correctness pass. Macroscope approved this head. The pre-publish review has no open findings; R1 was resolved by limiting the claim to tracked child follow-up creation.
CI remains blocked by the unrelated scripts/check-changed.test.ts:417 Astro lint assertion. It expects no --no-error-on-unmatched-pattern argument. The PR failure matches the failure on current main. A repeat run cannot fix that deterministic mismatch.
Unproven: actual provider quota exhaustion, live provider-specific buffering, native mobile rendering, and completion delivery after the recovered child run. The child regression proves tracking; existing completion-delivery tests cover deduplication separately.
Added 1 commit
- fix(server): usage-limit auto-resume is sent by T3 Code, not the user8b58588
[GPT-6.1 Sol][Codex] on behalf of shivam.
Rebased onto 65aaf972aef7de82721f52494ac224f803fd7be9 to pick up the main-branch Astro test fix. Current head is 8b585884a7b8e388bcaa86a944373baaa965972a. git range-diff reports the fix commit unchanged. CodeRabbit's prior review generated no actionable comments and there are no open review threads. Its Java ast-grep rule error does not apply to these TypeScript files.
Boat job j_5cgykciumokc2x5mq4ye, stage typecheck-package-29838, attempt 1 on large VM bx_3mtx73ba, finished with exit code 0 for this head. It ran:
vp run check:changed "$FLEET_SOURCE_BASE": format, lint, both knip passes, generated GraphQL, three package typechecks, and 169 tests across six files passed.vp test run scripts/check-changed.test.ts: all 15 tests passed, including the Astro case that failed in the previous CI run.vp run dist:desktop:artifact --platform linux --target dir --arch x64 --output-dir out/package: Linux desktop package built successfully.
The earlier job j_nkekx4vpfisseqn5hgdc was cancelled after I caught an incorrect build command. It is not a passing result.
R1 from the pre-publish review remains resolved: the child regression and PR claim cover fresh tracked follow-up creation, not delivery after that recovered child finishes. No behavior code changed during this rebase, so the source review carries over.
On physical corex, the packaged Linux app used isolated state and the free replay provider with a synthetic quota failure. The real scheduler reached the fixture reset at 2026-11-03T02:19:21.378Z; it stored the continuation at 02:19:25.124Z with createdBy: "agent", creationSource: "server", and text Continue where you left off.. The replay run completed at 02:19:30.591Z. I inspected the desktop screenshot and recording; the continuation displays "Sent by T3 Code". The PR body now holds this head's desktop evidence.
Unproven: actual provider quota exhaustion, live provider-specific buffering, native mobile rendering, and completion delivery after the recovered child run.
[GPT-6.1 Sol][Codex] on behalf of shivam.
Rebased onto 65aaf972aef7de82721f52494ac224f803fd7be9 to pick up the main-branch Astro test fix. Current head is 8b585884a7b8e388bcaa86a944373baaa965972a. git range-diff reports the fix commit unchanged. CodeRabbit's prior review generated no actionable comments and there are no open review threads. Its Java ast-grep rule error does not apply to these TypeScript files.
Boat job j_5cgykciumokc2x5mq4ye, stage typecheck-package-29838, attempt 1 on large VM bx_3mtx73ba, finished with exit code 0 for this head. It ran:
vp run check:changed "$FLEET_SOURCE_BASE": format, lint, both knip passes, generated GraphQL, three package typechecks, and 169 tests across six files passed.vp test run scripts/check-changed.test.ts: all 15 tests passed, including the Astro case that failed in the previous CI run.vp run dist:desktop:artifact --platform linux --target dir --arch x64 --output-dir out/package: Linux desktop package built successfully.
The earlier job j_nkekx4vpfisseqn5hgdc was cancelled after I caught an incorrect build command. It is not a passing result.
R1 from the pre-publish review remains resolved: the child regression and PR claim cover fresh tracked follow-up creation, not delivery after that recovered child finishes. No behavior code changed during this rebase, so the source review carries over.
On physical corex, the packaged Linux app used isolated state and the free replay provider with a synthetic quota failure. The real scheduler reached the fixture reset at 2026-11-03T02:19:21.378Z; it stored the continuation at 02:19:25.124Z with createdBy: "agent", creationSource: "server", and text Continue where you left off.. The replay run completed at 02:19:30.591Z. I inspected the desktop screenshot and recording; the continuation displays "Sent by T3 Code". The PR body now holds this head's desktop evidence.
Unproven: actual provider quota exhaustion, live provider-specific buffering, native mobile rendering, and completion delivery after the recovered child run.
Ready check passed for head 8b585884a7b8e388bcaa86a944373baaa965972a, base e1e520c93c997e07eebf135b12c89fad7fb35085. Every required CI check passes, the PR is open and mergeable, no review threads remain, and neither auto-merge nor a merge queue entry is enabled. The newer base commits change image refresh, project UI, checkpoint scanning and oversized goal handling; they leave recovery attribution and the follow-up guards unchanged. The desktop evidence remains applicable.
CI output: https://github.com/pingdotgg/t3code/actions/runs/41565248753
[GPT-6.1 Sol][Codex] on behalf of shivam.
Both missing-evidence findings are resolved. The PR body now contains main/head web recordings and a native Android recording plus screenshots.
Checked head 8b585884a7b8e388bcaa86a944373baaa965972a against main e1e520c93c997e07eebf135b12c89fad7fb35085 on physical corex. Web used Chromium through the T3 Browser panel and source dev servers. Native Android used the physical POCO M3 Pro 5G, Android 13, with Metro serving this head. vp run mobile:install android g6vcdmxgydjbrga6 installed the compatible cached native client, fingerprint 971743703b097b8870b39ff842d130f50b115eeb.
Each isolated backend started with a completed free replay turn. With the server stopped, a temporary script used EventSinkV2.write to persist a synthetic quota failure with a future reset. After restarting, selecting "Resume at reset" exercised the real scheduler and ACP replay adapter. No continuation message was manually inserted. On the PR, I selected that control on Android and observed the same automatic continuation in both clients.
| Observed UTC timestamp or field | Main | PR head |
|---|---|---|
| Reset deadline | 02:39:49.677 | 02:44:57.860 |
| Automatic message created | 02:39:51.188 | 02:45:01.661 |
createdBy / creationSource | user / server | agent / server |
| Recovered replay completed | 02:39:51.917 | 02:45:02.203 |
| Visible attribution | Missing in web | "Sent by T3 Code" in web and native Android |
The existing validation still covers this unchanged head: Boat job j_5cgykciumokc2x5mq4ye, stage typecheck-package-29838, attempt 1 on bx_3mtx73ba, succeeded with exit 0. vp run check:changed "$FLEET_SOURCE_BASE" passed, including 169 tests in 6 files; vp test run scripts/check-changed.test.ts passed all 15 tests. The packaged Linux desktop verification remains in the body. Current CI output.
Unproven: real provider quota exhaustion, provider-specific live buffering, iOS rendering, and result delivery after a recovered child finishes. The child regression proves creation of a fresh tracked follow-up task.