Skip to content

feat(boatstack): flow frontier — cross-delivery dashboard of who owes what - #237

Merged
bigboateng merged 1 commit into
mainfrom
boatstack/flow-frontier
Jul 28, 2026
Merged

feat(boatstack): flow frontier — cross-delivery dashboard of who owes what#237
bigboateng merged 1 commit into
mainfrom
boatstack/flow-frontier

Conversation

@bigboateng

Copy link
Copy Markdown
Contributor

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 frontier removes that cost with zero new authority.

What changed

  • New read-only flow frontier (--json supported): 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.
  • Earlier slices published with a still-open PR render as their own rows (they are exactly the addressable set the actuators can re-gate in place), so a red check on slice 1 is visible while slice 2 builds.
  • One unverifiable delivery becomes one blocked row routed to discard-delivery; healthy rows survive (stale-delivery-cannot-block-unrelated-feature).
  • Rows classify through the same nextControlFromStatus path as flow next — one classification path, no drift.
  • Supporting refactors (behavior-preserving): observePRTarget split out of observePublishedPR; publishedNextStatus (pure mapping) split out of nextForPublished.

Boundary conformance

  • Boundary: a new read surface over the delivery store + live GitHub observation.
  • Control law: 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.
  • Authorized actor: anyone; strictly read-only.
  • Required evidence: 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 next actor per feature), failure-state (uninitialized repo → empty frontier, no error).
  • Failure behavior: faults partition into blocked rows; invalid config fails the command with the doctor pointer.
  • Release condition: full suite green; no registry rows or non-exempt verbs added (flow is coverage-exempt).

Evidence

  • go build ./... && go vet ./... && go test ./... — pass.
  • Release note added: 2026-07-28-flow-frontier-dashboard.md; validate — PASS.

Next slice: flow watch (bounded re-evaluation loop that exits on frontier change).

…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
@bigboateng
bigboateng merged commit d3c22e1 into main Jul 28, 2026
12 checks passed
@bigboateng
bigboateng deleted the boatstack/flow-frontier branch July 28, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant