Repository navigation
✅ Wait for every Prompt before counting the whole chronology - #863
Merged
Merged
Conversation
The Slice D conversation-order row waited for the two turns that report a provider conversation, and then expected clearing the filter to restore three turn rows. A turn scripted `queued` is held before it produces anything, so it never reports a conversation and never satisfies that wait — while its row exists as soon as its Prompt is observed. The two facts are different, and only one of them was waited for. On this machine the scheduler always reached all three `<Spawn>` children first, so the row passed everywhere it was run. On the runner it did not: main CI run 36786555733 read two Prompt slots, `build · streaming` and `review · completed, recorded`, where the row expected three. The existing wait stays, because the ordering assertions need those two conversations. The new one says the queued Prompt has been observed, which is what counting all three under All actually depends on. Test-only: no REPL production behavior changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Repairs #862. Main is red at
f5f4f2d8(run36786555733),
and this is the whole of the failure: one test row, no product job.
Why
The Slice D conversation-order row waits for the two turns that report a
provider conversation, then expects clearing the filter to restore three turn
rows. A turn scripted
queuedis held before it produces anything: it neverreports a conversation, so it never contributes to that wait — but its row
exists as soon as its Prompt is observed. The row waited for one fact and
depended on the other.
What changes
Before:
test-deno (1/15)failed onmain, reading two Prompt slots(
build · streaming,review · completed, recorded) where the row expectedthree.
greenfailed with it.After:
what it proves no longer depends on which
<Spawn>the scheduler reachedfirst.
yield* until( session, "both started turns reporting their conversation", () => started(session) === 2, ); + yield* until(session, "all three Prompts being observed", () => observed(session) === 3);The existing wait stays: the ordering assertions need those two conversations.
The new wait is independent, and says the queued Prompt's slot exists.
What must stay true
actually reported conversations — this adds a precondition, it does not widen
what the row accepts.
comment.
How to verify it
The failing schedule is not reproducible on demand locally — every local run
observed all three spawns first, which is why the row passed through four
review rounds. What this change removes is the dependency on that order, rather
than a defect that can be made to appear at will.
I audited every other
toHaveLength(3)in the file: the rest are already gated,either by
observed(session) === 3or by waiting on all three coroutinesfinishing. This row was the only one.
Scope
Included
U1: conversations are ordered by their earliest turn, and selecting one changes only the filter.Intentionally unchanged
test-weights.json, dependencies anddeno.lock.Risks and limitations
test-weights.jsonis three slices stale and two REPL suites are unmeasured, which is separate
work.
Scope confirmation