fix(server): attribute usage-limit auto-resume to T3 Code#29838

merged1
main
issue-watch/29746
opened7d agobySshivam
View on GitHubTwo-way sync enabledPR last imported 4d ago

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.

text
1head 8b585884a7b8e388bcaa86a944373baaa965972a
2environment corex / isolated source server / local scripted ACP provider
3parentThreadId mcp:0bb574d6-f3ea-4f11-be4c-7094a54a1dde
4childThreadId thread:delegated-task:command%3Amcp%3A3c8260f9-3138-426a-a53d-90b618b37567%3Adelegate-task%3A4fd23071-fb06-46bd-af79-59031475e5e6
5original task and reset follow-up are distinct; resumed run.delegatedTaskId matches follow-up
6fixture: initial ACP error, then usage_limit + resetAt written via EventSinkV2 with server stopped
7resetAt 2026-11-03T02:59:07.691Z
82026-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"}}
92026-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}}
102026-11-03T02:59:11.367Z seq=110 run.created {"thread":"child","ordinal":2,"status":"starting"}
112026-11-03T02:59:11.367Z seq=114 message.updated {"thread":"child","text":"Continue where you left off.","createdBy":"agent","creationSource":"server"}
122026-11-03T02:59:11.367Z seq=116 run.updated {"thread":"child","ordinal":2,"status":"starting","hasFreshDelegatedTaskId":true}
132026-11-03T02:59:11.678Z seq=123 run.updated {"thread":"child","ordinal":2,"status":"running","hasFreshDelegatedTaskId":true}
142026-11-03T02:59:11.785Z seq=134 run.updated {"thread":"child","ordinal":2,"status":"waiting","hasFreshDelegatedTaskId":true}
152026-11-03T02:59:11.806Z seq=141 run.updated {"thread":"child","ordinal":2,"status":"completed","hasFreshDelegatedTaskId":true}
162026-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"}
172026-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"}
182026-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}}
192026-11-03T02:59:12.246Z provider-process prompt received recovered result: true
20ASSERT PASS: resumed child completed with a fresh parent-tracked task
21ASSERT PASS: follow-up completionDelivery.state = delivered
22ASSERT PASS: exactly 1 recovered-result server message in parent
23ASSERT PASS: exactly 1 recovered-result prompt received by parent ACP process
24ASSERT PASS: exactly 1 persisted PARENT_ACK_29746 response
25ASSERT 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.

text
1vp 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'
2Test Files 4 passed (4)
3Tests 65 passed | 155 skipped (220)
4Start at 03:26:34
5Duration 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.

text
1vp test run apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts -t 'recovers .* work after restart'
2Test Files 1 passed (1)
3Tests 8 passed | 12 skipped (20)
diff
1diff --git a/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts b/apps/server/src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts
2index 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, job j_5cgykciumokc2x5mq4ye, stage typecheck-package-29838, attempt 1.
  • Job started 2026-11-03T02:07:46.273Z, finished 2026-11-03T02:17:35.689Z, state succeeded, exit code 0.
  • 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:

bash
1set -euo pipefail
2vp i --frozen-lockfile
3vp run check:changed "$FLEET_SOURCE_BASE"
4vp test run scripts/check-changed.test.ts
5vp run dist:desktop:artifact --platform linux --target dir --arch x64 --output-dir out/package
6mkdir -p out
7tar -C out/package -czf out/linux-desktop.tar.gz linux-unpacked

The saved worker log identifies the revision and input:

text
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:

text
1$ node scripts/check-changed.ts 65aaf972aef7de82721f52494ac224f803fd7be9 ⊘ cache disabled
2check:changed: 4 files since 65aaf972aef7 (65aaf972aef7de82721f52494ac224f803fd7be9)
3
4> vp format pass 0.9s
5Checking formatting...
6
7All matched files use the correct format.
8Finished in 635ms on 4 files using 8 threads.
9
10> vp lint pass 1.3s
11Found 0 warnings and 0 errors.
12Finished 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---
29vp 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
47check: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:

text
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

21 successful · 19 skipped
All checks passed
8b58588
Synced from GitHub

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.

Synced from GitHub

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 main measurement shown below.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire5.0 KiB5.0 KiB0 B (0.0%)6.8 KiB✅
CodexThread snapshot wire3.8 KiB3.8 KiB0 B (0.0%)4.9 KiB✅
CodexLive turn WebSocket wire1.3 KiB1.3 KiB0 B (0.0%)2.0 KiB✅
CodexLive turn WebSocket decoded21.6 KiB21.6 KiB0 B (0.0%)24.4 KiB✅
CodexLive turn messages220 (0.0%)8✅
ClaudeTotal thread wire5.0 KiB5.0 KiB−18 B (−0.3%)6.8 KiB✅
ClaudeThread snapshot wire3.8 KiB3.8 KiB0 B (0.0%)4.9 KiB✅
ClaudeLive turn WebSocket wire1.2 KiB1.2 KiB−18 B (−1.4%)2.0 KiB✅
ClaudeLive turn WebSocket decoded21.9 KiB21.9 KiB−41 B (−0.2%)24.4 KiB✅
ClaudeLive turn messages21−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.

Synced from GitHub

Review in Change Stack →

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.ts
The 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.ts
Usage-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 nameStatusExplanation
Title checkPassedThe title clearly and concisely identifies the main change: attributing usage-limit auto-resume messages to T3 Code.
Linked Issues checkPassedIssue [#29746] requires usage-limit auto-resume messages to use T3 Code attribution and preserve child follow-up tracking. UsageLimitRecoveryWorker.ts now sets createdBy: "agent" with `creationSou…
Out of Scope Changes checkPassedThe 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 checkPassedThe 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.ts now sets createdBy: "agent" with creationSource: "server". runtimeLayer.test.ts verifies the stored continuation attribution. Orchestrator.ts permits usage-limit continuations as subagent follow-ups, and DelegatedCompletionDelivery.test.ts verifies 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
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.ts
  • apps/server/src/orchestration-v2/Orchestrator.ts
  • apps/server/src/orchestration-v2/UsageLimitRecoveryWorker.ts
  • apps/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, stage typecheck-package-29746, attempt 1 on large VM bx_mue8eut4, exited 0. It ran vp 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. as agent/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 fieldMainPR head
Reset deadline02:39:49.67702:44:57.860
Automatic message created02:39:51.18802:45:01.661
createdBy / creationSourceuser / serveragent / server
Recovered replay completed02:39:51.91702:45:02.203
Visible attributionMissing 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.