feat(boatstack): flow frontier — cross-delivery dashboard of who owes what - #237
Merged
Conversation
…owes what New read-only `flow frontier` verb: one row per managed delivery slice with its observed position (stage or live PR phase), the actor who owes the next step, and the prescribed command when one exists. Earlier published-but-open slices of an active delivery surface as their own rows. Rows classify through the same nextControlFromStatus path as flow next, so the dashboard and the advisor can never name different owners; one corrupt delivery becomes one blocked row instead of poisoning the view. Unlike next/recovery, the frontier performs ZERO writes — the terminal PR-state cache is deliberately not maintained here, pinned by conformance. Supporting refactors: observePRTarget split from observePublishedPR and publishedNextStatus split from nextForPublished (pure mapping, no cache write); both behavior-preserving for existing callers. control-law: frontier-reports-never-mutates Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
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.
Second slice of the published → merged program (follows #236). Half the cost of the repeated "check my PRs" prompt is re-orientation: reconstructing where every feature stands and what is waiting on whom.
flow frontierremoves that cost with zero new authority.What changed
flow frontier(--jsonsupported): one row per managed delivery slice — feature, observed position (stage, or live PR phase from feat(boatstack): observe the published PR's phase — checks, review, mergeability #236 when positively known), owning actor (agent/operator/none), and the prescribed command when one exists.discard-delivery; healthy rows survive (stale-delivery-cannot-block-unrelated-feature).nextControlFromStatuspath asflow next— one classification path, no drift.observePRTargetsplit out ofobservePublishedPR;publishedNextStatus(pure mapping) split out ofnextForPublished.Boundary conformance
frontier-reports-never-mutates— the report performs zero writes, including the best-effort terminal PR-state cache that next/recovery maintain. A report that mutates can lie about what it found.flow_frontier_conformance_test.go— positive (multi-delivery store renders every slice with typed actor + live phase), negative (corrupt delivery → one blocked row, healthy row untouched), bypass (delivery ledger byte-identical after a run even under a terminal MERGED observation), relation (frontier actor ==flow nextactor per feature), failure-state (uninitialized repo → empty frontier, no error).flowis coverage-exempt).Evidence
go build ./... && go vet ./... && go test ./...— pass.2026-07-28-flow-frontier-dashboard.md; validate — PASS.Next slice:
flow watch(bounded re-evaluation loop that exits on frontier change).