Repository navigation
land: pipelining - prepare batch K+1 on batch K's top while K publishes - #174
Merged
Merged
Conversation
…llbar-color and ::-webkit-scrollbar rules The reviewed list (profiles/not-applicable-native.ts) is accepted on ios and android with an info diagnostic (DRAGON_NOT_APPLICABLE_NATIVE) and nothing emitted; web still refuses it. querySupport answers not-applicable on native; the north-star accounting counts these declarations on their own and leaves them out of the denominator.
A native target that compiles only because every web refusal is not applicable on native is recorded as na-native, counted on its own; any other native-compiles-but-web-does-not result still throws.
…g colours, exact property windows in the sweep, resolved query A ::-webkit-scrollbar* rule is not applicable only when its block holds nothing refused or nested and only background-color, a plain-colour background, border-radius, border-color or color, with no transparent or alpha-0 colour; scrollbar-color only when auto or two visible colours. The sweep explains a later refusal only through a pseudo-element item. A resolved query of a listed property on a native target answers not-applicable.
…s stay refused on native (deferred to na-native-scrollbar) A resolved query validates its element before answering not-applicable; the sweep explains a web refusal only at an item's own span; docs/api.md notes the new SupportAnswer member.
…s to diagnostics/codes/na-native.ts (HOTSPOT-SPLIT registry)
….test.ts, with wide windows, generous waits and no upper time bounds
…ive cache, keyed by every command argument, the module assignment and the tool inputs; the -Onone case code is checked to be construction only
…proven top while K publishes; used only if all of K landed
… infrastructure errors fall back to the driver; the builder runs in its own process group, stopped by group, also by the supervisor
…ue order (v ? <int> : <int>); a forced rebuild replaces its cache entry
Commands: pnpm regen
…regens; per-branch, per-label groups so other label events never displace a queued regen
…no push CI, no review), so this push triggers them
NA-NATIVE: not applicable on native, a third verdict (cursor)
Commands: pnpm regen
regen-on-ci: branch regens first (master cache runs cancel and yield)
ad27c35 (only Proof guard); the tree is unchanged
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Commands: pnpm regen
Commands: pnpm regen
thejackshelton
added a commit
that referenced
this pull request
Oct 5, 2026
…e builder records its own CI run in flight, and stopping it cancels that run
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.
What changed: pipelined landing. While batch K publishes, a builder process prepares batch K+1 on K's proven top. Publishing is mostly CI and review waits; the builder's preparation covers admission, positions, regen, devices, the full test and the bisect. When K has landed, K+1 is usually proven already and starts publishing at once.
Design
prepareRoundinland-lib.ts. The admission, build, chain verification, top proof and bisect move out ofrunBatchesintoprepareRound. It publishes nothing. The driver's own round reports each result as it happens, exactly as before; a builder's round returns its results instead. The sequential path behaves as before; all 87 existingland.test.tstests pass unchanged.When the next round starts.
runBatchesstarts preparing the next round (NextRound.start) only when the current batch's top passed, so its whole chain is proven. It hands over three things:earlier, so a child of a K PR is admitted.Using it: only if all of K landed. Master then has exactly the tree the next batch was built on. Position 1's previous position is K's top, which is in master with master's tree, so every merge gate and the push check hold as for any position. The driver then:
verifyChainon the adopted chain itself;provedlist;Throwing it away otherwise. If K stopped part-way (a failed publish, a culprit, requeued PRs), or a stop is requested, the prepared round is discarded and its builder stopped. Nothing from it is reported: no labels, no comments, and no ejection. A merge conflict there could have come from a K PR that never landed. Its PRs are prepared again by the driver on the new master. A stop request is now read once and holds for the run (reading it removes STOP_FILE).
No master proof in the builder. A bisect in the builder that lands on position 1 does not prove master. Its base is K's proven top (
baseProven).The builder is
land.tswithLAND_ROLE=builder:LAND_WORKTREE_NEXT, default/tmp/dragon-land-next. It is reset at start, including a staleindex.lock.next-input.jsonand writesnext-output.jsonatomically in the run directory. The output is the round, or{ fatal }.[next]prefix, and to/tmp/land-next.log.How the driver handles the builder:
LAND_PIPELINE=0turns pipelining off. The worktree lists exclude both driver worktrees.Outside the spec: AGENTS.md step 7 now describes pipelining.
What passed
pnpm typecheckpassed.vitest run packages/parity/test/land.test.tspassed: 92 tests, 5 of them new, with a fake builder that runsprepareRoundwith the same fakes:serializePreparedandparsePreparedround-trip exactly and refuse malformed rounds.{ fatal }. It exited 0 both times.Review round 1 (precomputed review of db85440: 1 Medium, 2 Low)
runBatchesnow stops the builder immediately, before the proof of the tree master rests on. The builder's tests can no longer compete with that proof or starve its quiet rerun.fixedByscenario. In it, 'next cancel' comes after the failed publish and before the resting-tree proof, exactly once.builder.pid. A leader that has since become another process is left alone.What passed:
pnpm typecheckpassed.land.test.tspassed: 93 tests.🤖 Generated with Claude Code