Skip to content

Overlap the Implementation workflow’s checkout reads - #1238

Merged
taras merged 2 commits into
mainfrom
codex/1143-overlap-checkout-reads
Nov 11, 2026
Merged

taras merged 2 commits into
mainfrom
codex/1143-overlap-checkout-reads

Conversation

@taras

@taras taras commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Why

The Implementation fixture intermittently exceeds its 120-second deadline in CI (#1143). Its workflow repeatedly checks HEAD and tracked changes. The staged and unstaged reads were independent but ran in sequence.

What changes

Ticket.Checkout runs its existing staged and unstaged Git reads in two Markdown <Spawn> branches under <All>. It joins their JSON in authored order and returns the existing HEAD, clean flag, and change pages. Each branch has its own durable coroutine, so an unfinished REPL entry can replay either completion order.

What must stay true

  • The five fixture groups, assertions, real process paths, and deadlines are preserved.
  • Each Git read retains its contained observation and private index. Every existing role transition still checks fresh source.
  • Failure and cancellation join both branches.
  • The Markdown component works in hosts that load Markdown components.

How to verify it

  • The scheduling regression fails against the original serial component and passes with both reads active. The focused Deno suite checks checkout values, fresh reads, index purity, foreign-checkout refusal, joined cleanup, and exact filenames through JSON.
  • RGO6 runs the actual component in an unfinished REPL entry and reopens it with the read arrival order reversed. It fails against the first draft’s TypeScript helper, reproducing the reviewer’s divergence finding, and passes with separate durable identities and zero native reads on reopen.
  • The two REPL files pass on Deno, Node, and pinned Bun 1.4.0. The Bun run passed all 16 tests.
  • The attributed local Bun fixture fell from 103.4 to 91.7 seconds with the same 92 checkout checks, 184 staged and unstaged reads, and 690 process calls. Checkout time fell from 21.0 to 14.4 seconds. The uninstrumented Node fixture passed in 93.6 seconds.
  • Delivery, Artifact Return, Artifact Return Recovery, and Decision Resolution passed under Deno. Focused type, Git observation, formatting, and dead-code checks passed.

Risks and limitations

The first draft introduced loader and replay regressions. Independent Fable review identified both, and CI reproduced the loader failure across Deno, Node, and Bun. Commit a40e68b replaces that helper with the Markdown composition and adds the discriminating replay regression.

The original causal requirement remains open. In a matched, instrumented Linux pair on one worker, the original serial carrier passed in 93.1 seconds and this correction passed in 90.7 seconds. Both made the same 92 checkout checks and 690 process calls. Time inside checkout fell from 8.95 to 8.30 seconds, a 0.65-second reduction. The baseline did not time out, and this single fixed-order comparison is subject to cache and instrumentation effects. It does not establish the historical timeout’s cause or a reliable remedy. This PR remains a draft while the original acceptance and delivery gates are unresolved.

Scope confirmation

  • Every changed file supports this checkout optimization and its regression coverage.
  • Unrelated cleanup and formatting changes are excluded.
  • The description matches the current diff and focused results.

taras and others added 2 commits November 10, 2026 22:59
Ticket.Checkout asked for its staged and unstaged changes one after the
other, although each read owns its own containment and private index and
neither depends on the other. A local Ticket.CheckoutReads value component
now starts both through the existing GitQuery API inside one Effection
all(), and Ticket.Checkout returns the same {head, clean, staged, unstaged}
value from it.

The new Deno suite holds every read until both have entered, which the
serial component cannot satisfy, and proves exact HEAD, both tracked
comparisons, untracked exclusion, fresh reads, an unchanged index, the
foreign-checkout refusal, and that a failed or halted pair settles only
after its sibling's cleanup.

Refs #1143

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ticket.Checkout overlapped its staged and unstaged reads through a
TypeScript helper, which loader-free hosts such as the REPL cannot import,
and whose two durable reads shared one coroutine, so a reopened REPL entry
could diverge when they arrived in the other order. The component now runs
two <Git.Changes> inside <All>/<Spawn>: each read gets its own child
coroutine and record, and <All> joins their JSON in authored order.

RGO6 reopens an unfinished entry with the reads held in each order and
expects zero native reads; the checkout suite runs without a module loader
and round-trips a Markdown-hostile path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@taras
taras force-pushed the codex/1143-overlap-checkout-reads branch from a40e68b to 35dd4e8 Compare November 11, 2026 03:59
@taras
taras merged commit 4a61047 into main Nov 11, 2026
59 of 62 checks passed
@taras
taras deleted the codex/1143-overlap-checkout-reads branch November 11, 2026 03:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant