Sync Boatstack from Intelligence Flow Labs @ 4dcec85043e6 - #90
Merged
operator-stack-publisher[bot] merged 1 commit intoJul 24, 2026
Merged
Conversation
operator-stack-publisher
Bot
deleted the
sync/intelligence-flow-4dcec85043e6
branch
July 24, 2026 12:58
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.
What this sync releases
repair-state recovery for stuck malformed drafts
The
repair-staterecovery the guard prescribes is now real and reachable. When an unregistered feature draft is authored by hand — aplan.mdthat never passed through the helper, so there is noplan.lock.jsonand no delivery state — a malformed plan makes the guard fail closed atINVALID_STATEand deny every product mutation. Previouslyrepair-stateexisted only as anext_operationlabel: it was neither implemented as a helper subcommand nor allowlisted in the guard, so the prescribed recovery was itself blocked and evenrmof the untracked directory was denied. The workflow was stuck behind the lock the recovery was meant to open.boatstack-helper repair-state [--feature <slug>]now quarantines the offending draft: it moves the directory out of.product-loop/features/into<git-common-dir>/boatstack/quarantine/<feature>/<timestamp>(reversible, never a hard delete) and returns the workflow toauto-plan. When--featureis omitted it resolves the sole malformed unregistered candidate and refuses ambiguously when more than one is present.Recovery is bounded and self-guarding. It acts only on a directory that carries no durable authority: it refuses any feature with a valid saved plan, a
plan.lock.json, apr.md, a managed delivery state, git-tracked files, or an active/published delivery. The guard allowlistsrepair-stateindependent of stage but still rejects shell metacharacters and non-helper executables, and gating for registered, active, or published deliveries is unchanged — an unregistered malformed draft still blocks product mutation, but the escape hatch is now genuine and one command away.Projection provenance
Generated from
operatorstack/intelligence-flow@4dcec85043e6fec7558e7bdff97cb2babe3af7c2.Review provenance, tests, and examples before merging.