Skip to content

fix(server): load V2 replay fixtures on Windows - #10451

Closed
CouchRiv wants to merge 429 commits into
pingdotgg:t3code/codex-turn-mappingfrom
CouchRiv:fix/v2-replay-file-urls
Closed

CouchRiv wants to merge 429 commits into
pingdotgg:t3code/codex-turn-mappingfrom
CouchRiv:fix/v2-replay-file-urls

Conversation

@CouchRiv

@CouchRiv CouchRiv commented Sep 7, 2026 •

Copy link
Copy Markdown

What Changed

Use Effect's Path.fromFileUrl in the five V2 replay fixture readers.

Why

On Windows, decoding URL.pathname leaves a slash before the drive letter. Replay suites fail with ENOENT while trying to read C:\C:\..., before reaching the orchestrator.

Converting the file URL through the platform path service lets the existing replay, contract and recovery tests load their transcripts. This targets the V2 branch in #2829.

Rebased and revalidated on V2 89459e38 on Windows: fixture loading fails with ENOENT before the change; afterwards the five suites pass 89 tests with one live-recording test skipped. queued_cancelled_while_active/codex fails at a replay gate (release_replay_gate:turn/completed) independently of this change. Server typecheck and targeted lint/format checks pass.

Checklist

  • This PR is small and focused
  • I explained what changed and why

Implemented with GPT-6 via Codex desktop; rebased and revalidated with Claude Opus 5 in Claude Code.

@cursor

cursor Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 7, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Would Approve

Macroscope's review found this PR approvable — The change is limited to five replay test readers and uses the platform-aware path service to convert fixture URLs, fixing Windows path handling without affecting product runtime behavior. No defaults, schemas, production infrastructure, or static-analysis configuration are changed.

Not approved because:

  • Monthly spending limit reached (workspace setting). Approvability relies on correctness review in order to determine eligibility

Review your spending limits in Billing settings. You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch 3 times, most recently from efd9994 to 6102d00 Compare September 8, 2026 06:23
@CouchRiv
CouchRiv force-pushed the fix/v2-replay-file-urls branch from 4ab11ec to 9ae9c27 Compare September 8, 2026 18:13
@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch from 8187b17 to ada72ce Compare September 9, 2026 06:39
juliusmarminge and others added 20 commits September 10, 2026 12:14
A renderer performance trace showed the minimap strips as a standing
source of main-thread frame work: each strip transitioned
background-color (paint) and width (layout), and both fire constantly —
scrolling or streaming flips a band of in-view states at once, and the
hover fisheye animates several widths at a time — so any interaction
kept a 60fps style/layout/paint pipeline running.

The strip now animates only compositor-friendly properties: width tiers
are scale-x on a fixed-width box, and the in-view highlight is a bright
overlay faded with opacity. The scroll handler also skips no-op
data-in-view attribute writes, which previously re-dirtied style state
for every strip on every scroll tick.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Follow-ups from the main merge:

- Migration numbering: main's 035_ProjectionThreadTitleRegeneration is
  released and keeps its id; this branch's unreleased v2 migrations shift
  to 036-044 instead (a released migration can never be renumbered).
- thread.metadata.update accepts regenerateTitle: true arms an in-flight
  titleRegeneration marker on the thread payload (requestId + startedAt),
  a landing title or explicit false clears it. The marker projects onto
  thread shells and through the client-runtime shell model, so the
  sidebar's Regenerating state works unchanged.
- New ThreadTitleRegenerationService worker reacts to armed markers on
  the live domain-event stream (so ws, MCP, and mobile dispatches all
  behave the same): builds a newest-first conversation digest from the
  v2 projection (8k-char budget, retained attachments — ported from the
  v1 reactor), generates via TextGeneration, and lands the title with a
  follow-up metadata update. Failures clear the marker and log.
- The server advertises threadTitleRegeneration again, and the client
  updateThreadMetadata dispatches regenerateTitle-only updates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The turn item materialized when a queued run is promoted was emitted
with inputIntent "turn_start", but the deterministic replay driver (and
the recorded queued_turn fixtures) expect "queued_turn" — the mismatch
stalled replay before the queued run could start, leaving run 1 waiting
and run 2 queued forever in all five queued_turn fixtures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Effect service conventions: ThreadManagementThreadNotSendableError
carried an Archived/NoSteerableRun reason union and switched on
reason._tag inside the message getter. Modelled as two error classes
(ThreadManagementThreadArchivedError, ThreadManagementNoSteerableRunError);
both still map to the MCP thread_not_sendable failure code.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Prevent the title row from shifting when output is revealed
- Preserve panel and compact button sizing
- Schema.UnknownFromJsonString -> Schema.fromJsonString(Schema.Unknown)
- SchemaIssue.InvalidValue single-argument form in checkpointDiff
- McpServerClient requires protocolVersion

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Required for follow-up requests by the 2025-06-18 MCP HTTP transport
that effect beta.103 enforces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The thread-panel mapping change replaced the compact className on the
Run and Add controls with the isPanel conditional and dropped the
non-panel icon-compact classes that the responsive test asserts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ports the deleted v1 ProviderCommandReactor title coverage onto the v2
service: marker arming/clearing via thread.metadata.update, superseded
requestId no-ops, digest-driven regeneration, the "New thread" and
unchanged-title fallbacks, generation failure, and missing initial
messages, plus unit tests for formatThreadTitleContext.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hoist inline Schema compiles to module scope, drop unused
imports/vars, stabilize react-markdown component identities via a
module-scope factory, remove useless spreads, and use data-derived
keys for release-note bullets. No behavior changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The codex resume test was the only replay scenario without a
runtimePolicyOverride, so its checkpoint scope cwd fell back to
process.cwd() and baseline capture ran real git over the entire
checkout. Locally the capture short-circuits on checkpoint refs left
behind by earlier runs; on a fresh CI checkout it is a cold multi-second
capture that outlives the scenario wait budget, failing await_thread_idle
while the run is still mid-checkpoint. Point the fixture's turn/start
frames at the <workspace> placeholder and checkpoint a throwaway git
workspace like every other replay test.

Scenario waits are also wall-clock-bounded now: the iteration budget
counts event-loop turns, which burn at full speed while git/fixture IO
is in flight, so exhaustion additionally requires a 60s real-time
deadline to pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…r's scope (pingdotgg#5406)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge and others added 18 commits September 10, 2026 15:12
…gg#9897)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ingdotgg#8464)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…gg#9907)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…otgg#9905)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…gg#9928)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…dotgg#9920)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ngdotgg#10051)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
@CouchRiv
CouchRiv force-pushed the fix/v2-replay-file-urls branch from 9ae9c27 to bf7b635 Compare September 11, 2026 19:06
@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch 4 times, most recently from e03e376 to e39429e Compare September 12, 2026 08:17
@saphid

saphid commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Heads-up: this fix has grown stale/conflicted against t3code/codex-turn-mapping. I've adapted the same path.fromFileUrl conversion onto a fresh base in #11566, crediting this PR — it additionally deduplicates the five identical readers into a shared readProviderReplayTranscript and adds regression coverage for drive-letter, encoded-space, and UNC fixture URLs. Leaving this one untouched for the maintainers to close or keep as they prefer.

@CouchRiv

Copy link
Copy Markdown
Author

Thanks for carrying the fix forward in #11566 and crediting this PR. Closing this one in favor of that continuation to keep review focused in one place.

Drafted by Codex for CouchRiv.

@CouchRiv CouchRiv closed this Sep 13, 2026
juliusmarminge pushed a commit to saphid/t3code that referenced this pull request Sep 14, 2026
The five replay readers decoded URL.pathname directly, which leaves a
leading slash on drive letters (file:///C:/x -> /C:/x) and drops the host
on UNC URLs, so fixture loading fails on Windows before replay starts.

Route the file URL through the Path service (NodePath delegates to
url.fileURLToPath) via a shared readProviderReplayTranscript helper, and
cover drive-letter, encoded-space, UNC, and non-file-URL behavior in the
module's tests.

Adapted from pingdotgg#10451 by CouchRiv,
which had grown stale against the V2 base.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants