Centralize planning bootstrap command authority - #179
Merged
Conversation
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.
Summary
This change removes split authority for constructing the first managed planning command.
Before a feature candidate exists, lifecycle status cannot authorize creation. Generated instructions therefore had to construct
planning-writethemselves, which allowed embedded and detached workspace behavior to diverge. On PowerShell, the same path also failed to preserve the full native-process result: piped Markdown could gain a BOM or CRLF line endings, and a rejected helper could still appear successful because$LASTEXITCODEwas not propagated.flow bootstrapis now the canonical read-only boundary for this transition. It validates explicit creation intent and returns one prescription bound to the current worktree, runtime helper, source-plan path and digest, feature, artifact, and shell. Generated guidance uses that prescription and resolves it again from the destination returned byworkspace-cut.PowerShell transport is normalized at bootstrap, admission, and mutation ingress. The rendered envelope propagates helper failure status, and admission rejects envelopes that omit or displace that propagation.
Preserved invariants
Conformance
The deterministic harness exports Boatstack into temporary synthetic repositories, obtains the command from
flow bootstrap, replays Cursor, Claude, Codex, and Gemini hook payloads, executes the admitted command in real shells, and verifies exact artifact bytes and failure status.Required conformance uses no provider APIs, API keys, installed host applications, network access, or logged-in sessions.
Test Plan
go build ./...go vet ./...go test ./... -count=1 -timeout=12mpython3 -m unittest discover -s .github/tests -p "test_*.py" -vpython3 .github/scripts/release_notes.py validate --repo .python3 .github/scripts/release_notes.py preflight --repo . --base-branch mainRelease note:
release-notes/2026-08-10-bootstrap-command-authority.md