Skip to content

fix(server): overlapping status reads share one untracked listing - #864

Merged
yaacovcorcos merged 1 commit into
mainfrom
claude/untracked-followups-20261111
Nov 11, 2026
Merged

yaacovcorcos merged 1 commit into
mainfrom
claude/untracked-followups-20261111

Conversation

@yaacovcorcos

Copy link
Copy Markdown
Contributor

What Changed

Follow-ups to #861's untracked backoff and Codex kill deadline, which T3 has since merged as pingdotgg/t3code#34460 and #34461. All changes sit in the existing fork-marked blocks and .scient.test.ts files:

  • One listing for overlapping reads: a status read that arrives while the same git ls-files --others listing is running waits for it instead of starting another walk of the untracked tree. This uses an Effect Cache with zero time-to-live, so only an in-flight listing is shared, and a shared listing keeps running until the last read waiting on it leaves. Each read still builds its own temporary review index.
  • Original error kept: the branch-totals error keeps the listing's GitCommandError as cause, for a fresh failure and for the remembered one.
  • Codex test checks "ready": the app-server kill-deadline test checks that the stand-in printed ready before stopping it, so an early exit can no longer pass without testing the force-kill.
  • UPSTREAM.md: records that #34460 and #34461 are merged in T3 and links the two new T3 PRs.

Why

CodeRabbit raised these three points on the T3 PRs, and they were merged without being addressed. A status read restarted by a file change during a slow listing (up to the 30 s timeout) started another full walk of the tree before the backoff could apply. The same changes are offered upstream as pingdotgg/t3code#34574 (listing and cause) and #34575 (test). When they merge, the next alignment takes T3's version and drops these blocks.

Verification

  • New test share one listing between overlapping status reads (GitVcsDriverCore.scient.test.ts): it holds the first read's listing until the second read's last Git command before its own listing has returned.
    • On main: fails with 2 listings.
    • With this change: passes with 1 listing.
    • In the T3 worktree, the same test failed 3 of 3 runs on T3 main and passed 5 of 5 with the change.
  • Ready check: with the stand-in replaced by exit 0, the old test passes and the new one fails.
  • The cause change has no test of its own: status reports a totals failure as missing totals, so the cause shows only in the readBranchChangeTotals span.
  • Suites run: GitVcsDriverCore.scient.test.ts and CodexAdapterV2.scient.test.ts (86 tests), server typecheck, vp lint, vp fmt --check, seam check and provenance all pass on macOS.
  • Review: Codex (gpt-6.1-sol) reviewed all three changes and found nothing blocking. It noted the test's count of branch checks would need updating if the status read's command sequence changes.

Platforms: no platform-specific code. The shared listing behaves the same on macOS, Linux and Windows. The Codex test stays skipped on Windows, as before. Run on macOS only; CI covers Linux and Windows.

Documentation Impact

Documentation impact: Updated — UPSTREAM.md

UI Changes

None.

Made with Claude Opus 5.5 in Claude Code; reviewed by Codex (gpt-6.1-sol).

🤖 Generated with Claude Code

Follow-ups to the untracked backoff and Codex kill deadline, both now merged in T3: overlapping
reads share one running listing, the remembered failure keeps the listing error as its cause, and
the kill-deadline test waits for its stand-in's ready line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:M labels Nov 11, 2026
@yaacovcorcos
yaacovcorcos added this pull request to the merge queue Nov 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.5 KiB 5.5 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 4.2 KiB 4.2 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 22.3 KiB 22.3 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 1 1 0 (0.0%) 8 ✅
Claude Total thread wire 5.5 KiB 5.5 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 4.2 KiB 4.2 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.3 KiB 1.3 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 22.7 KiB 22.7 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 1 1 0 (0.0%) 8 ✅

Baseline: 9706640 · PR result: 9fefdd6 · 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.
Bounded compact HTTP snapshot with live cursor.

  • Codex decoded thread snapshot: 88.2 KiB
  • Claude decoded thread snapshot: 88.4 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Merged via the queue into main with commit e95317f Nov 11, 2026
57 checks passed
@yaacovcorcos
yaacovcorcos deleted the claude/untracked-followups-20261111 branch November 11, 2026 22:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant