feat(boatstack): post-publish prescriptions — the frontier extends to merged - #240
Merged
Merged
Conversation
… merged Under delivery.terminal "merged", the flow keeps prescribing past publish from the live PR observation: checks pending -> flow watch (agent), checks failing -> the existing delivery.record_change transition with the derivable --source-stage ci filled and the failure facts owed from check logs (agent), merge eligible -> the exact `gh pr merge <url> --squash` (agent, PRESCRIBE-ONLY). Review-required, changes-requested, closed, and unknown positions prescribe nothing and end at the operator frontier; a merged observation owes nobody anything. The published default is untouched. New published.* markers carry provenance; PrescribedCommand gains Program for the one honestly-foreign command, and canAutoDrive refuses any foreign-program command categorically — before the allowlist — so no future allowlist entry can make Boatstack run gh. The response contract renders the new agent steps through the existing delegation line. SKILL.md and workflow.md state the post-publish protocol. control-law: merged-terminal-prescribes-merge-never-executes-it control-law: turn-ends-only-at-the-operator-frontier Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
bigboateng
force-pushed
the
boatstack/post-publish-prescriptions
branch
from
July 28, 2026 16:55
11cb793 to
117dc43
Compare
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.
Fifth slice of the published → merged program (stacked on #239) — the one that retires the standing "watch CI and merge" prompt. With
delivery.terminal: merged,flow nextnow answers "what now?" all the way to the merge, and every answer is actor-typed.What changed
Prescriptions, derived from the live PR observation only (never from claims):
PR_CHECKS_PENDINGboatstack-helper flow watchPR_CHECKS_FAILINGrecord-change --source-stage ci(+ owed--message --classificationfrom the failing check logs; failing names ride along in the follow-up)PR_MERGE_ELIGIBLEgh pr merge <url> --squashPR_REVIEW_REQUIRED,PR_CHANGES_REQUESTED,PR_CLOSED,PR_UNKNOWNdelivery.record_changeregistry transition — no new machinery; corrections flow through record-change → gates →publish-pr --action updateas they already do for published-open slices.published.watch_checks/published.merge(provenance; never allowlistable), following theplanning.*pattern.PrescribedCommand.Programnames the one honestly-foreign command;CommandLine()renders it. Triple containment for the merge:canAutoDriverefusesProgram != ""categorically before consulting the allowlist; the transition is a marker;executePrescribedhas no executor. Boatstack cannot merge — the agent runsghunder the host's own permissions, only as rendered.classifyNextActor: the PUBLISHED branch is now phase+terminal dependent; fail-closed — the zero Terminal behaves aspublished, and every underivable phase stays the operator's.g" delegation — one rendering path, no drift.references/workflow.md: post-publish protocol (PR_OPEN -> MERGEDsection); the "never merged" completion sentence now carries the explicit merged-terminal exception.Boundary conformance
gh).merged-terminal-prescribes-merge-never-executes-it;turn-ends-only-at-the-operator-frontier(extension).post_publish_prescribe_conformance_test.go— positive (per-phase prescription + actor through realResolveNext; delegation line renders with the exact merge command), negative (operator phases prescribe nothing; published default byte-behavior preserved), bypass (drive decision is prescribe-and-stop;canAutoDriverefuses even a hostile allowlist namingpublished.merge), failure-state (unknown phase → operator; merged → none).Evidence
go build ./... && go vet ./... && go test ./...— pass.2026-07-28-post-publish-prescriptions.md.Next slices: bounded pursuit (escape conditions), then the offline retro miner.