You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of roadmap #900. Follow-up from the v1.4.0 release dogfood in PR #959.
Problem
Code Mower validates an explicit source lane, destination lane, and exact handoff head, but the v1.4.0 recovery exposed three gaps in the execution boundary:
The default Codex builder sandbox could not write Git metadata, so fetch, checkout, commit, and guarded push failed even though the dedicated worktree was writable.
A source Devin session continued working after reporting that it had stood down, producing another local commit after the Codex takeover.
This repository's checked-in dogfood runner recognizes only Codex and Claude even though the v1.4.0 generated runner supports Devin labels and source prefixes.
An accepted handoff therefore does not yet prove that the previous writer is quiescent, that the replacement can perform its normal Git duties, or that checked-in and generated runner contracts agree.
Outcome
A builder takeover starts exactly one capable destination writer only after Code Mower proves the source writer is stopped, cancelled, or suspended at the accepted head. The checked-in dogfood runner and generated runner use one canonical lane contract.
Acceptance criteria
Under the default Codex builder posture, the dedicated checkout permits fetch, checkout, commit, and guarded push while preserving the checkout boundary and pre-push protection.
An explicit handoff identifies the source transport/session or local process and stops, cancels, or suspends it through the existing provider-neutral lifecycle before the destination writer starts.
If source-writer quiescence cannot be verified, the handoff fails closed with one owner action and does not start the destination writer.
Existing expected-head validation remains effective before launch and at push; source-side head movement invalidates the handoff.
Repeating the same handoff is idempotent and neither emits duplicate acceptance records nor starts duplicate writers.
The checked-in dogfood runner and generated runner derive allowed lanes, builder labels, and source branch prefixes from one canonical configuration. CI detects semantic drift.
A Devin-to-Codex fixture using a devin/ branch succeeds without local prefix patching.
Tests cover local-process and hosted-session quiescence, cancellation failure, stale heads, Codex Git writes, generated/checked-in parity, and no writes outside the dedicated checkout.
Boundaries
Reuse the handoff validation from #751 and the provider-neutral session lifecycle from #906. Do not introduce another session state machine, automatic paid retry, force push, or broad host process scan. Keep public evidence metadata-only and exclude prompts, transcripts, source, diffs, credentials, raw provider output, and private paths.
Delivery
One independently reviewable PR with one Code Mower builder, one independent exact-head merge-authority audit, focused and relevant regression tests, and the normal Code Mower gate.
Completion dependency and PR map
One planned OSS PR; planned Code Mower Codex builder and independent eligible Code Mower Claude review. This unit precedes #963 when handoff/provenance files overlap. Its quiescence and Git-capability guarantees must be consumed before automatic takeover in #977/#920; #949 consumes the unified lineage through #963. Reuse existing #751/#906 contracts and the independent evidence vocabulary in #976. Invalid request-key/prose inputs must not be described as a provider rule against completed-session operations. No automatic create/recovery allowance is added.
Part of stabilization epic #979 and roadmap #900.
Part of roadmap #900. Follow-up from the v1.4.0 release dogfood in PR #959.
Problem
Code Mower validates an explicit source lane, destination lane, and exact handoff head, but the v1.4.0 recovery exposed three gaps in the execution boundary:
An accepted handoff therefore does not yet prove that the previous writer is quiescent, that the replacement can perform its normal Git duties, or that checked-in and generated runner contracts agree.
Outcome
A builder takeover starts exactly one capable destination writer only after Code Mower proves the source writer is stopped, cancelled, or suspended at the accepted head. The checked-in dogfood runner and generated runner use one canonical lane contract.
Acceptance criteria
Boundaries
Reuse the handoff validation from #751 and the provider-neutral session lifecycle from #906. Do not introduce another session state machine, automatic paid retry, force push, or broad host process scan. Keep public evidence metadata-only and exclude prompts, transcripts, source, diffs, credentials, raw provider output, and private paths.
Delivery
One independently reviewable PR with one Code Mower builder, one independent exact-head merge-authority audit, focused and relevant regression tests, and the normal Code Mower gate.
Completion dependency and PR map
One planned OSS PR; planned Code Mower Codex builder and independent eligible Code Mower Claude review. This unit precedes #963 when handoff/provenance files overlap. Its quiescence and Git-capability guarantees must be consumed before automatic takeover in #977/#920; #949 consumes the unified lineage through #963. Reuse existing #751/#906 contracts and the independent evidence vocabulary in #976. Invalid request-key/prose inputs must not be described as a provider rule against completed-session operations. No automatic create/recovery allowance is added.