Sync Boatstack from Intelligence Flow Labs @ 60f76062f721 - #99
Merged
operator-stack-publisher[bot] merged 1 commit intoJul 25, 2026
Merged
Conversation
operator-stack-publisher
Bot
deleted the
sync/intelligence-flow-60f76062f721
branch
July 25, 2026 03:05
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
Corrections for a published-but-open slice route to that slice in place, not the active one
When a multi-slice delivery publishes an early slice and the build pointer advances, that slice is not finished: its pull request is still open and may need a CI fix or a review follow-up before it merges. Boatstack's actuators already knew this —
resolveAddressableSlicetreats the addressable set as{the active slice} ∪ {published slices whose PR is not terminal}, sorecord-delivery-gate --sliceandpublish-prcan re-gate and update a published-open slice in place. But the advisor, router, and safety layers were left deciding purely on the whole-delivery pointer (ActiveIndex < len(Slices)): whenever any later slice was still unbuilt they treated the correction as belonging to the active slice. A fix pushed on the published slice's own branch was mis-routed —recovery-statusnamed the active slice and prescribedrepair_active,record-changecharged the active slice's repair budget and reset it toBUILD, and the publication-bypass finding reported the fix branch asrelation=unrelatedagainst the active slice. The published slice's open PR was left with no clean forward move, and the active slice's build loop was corrupted by a correction that was never about it. This is the slice-granularity instance of advisor–actuator addressability drift: one domain concept — "which slice may still be corrected" — with two implementations, only one of which had been migrated to per-slice addressability.The advisor layer now consumes the same addressability the actuators do. A single branch-keyed resolver,
resolveAddressableSliceByBranch, returns the addressable slice (active or published-open with a non-terminal PR) that a correction branch owns, and the router, recorder, and safety finding all route through it. A correction reported from a published-open earlier slice's branch now resolves to that slice:recovery-statusreportsPUBLISHED_OPENand arepair_published_slicenext-operation that directs the operator to re-gate andpublish-pr --action updatethe slice in place;record-change(now with an optional--slice, falling back to the correction branch) binds the observation to that slice and drives an in-place re-gate that preserves its open-PR identity, without touching the active slice's status, repair budget, or mode; and the publication-bypass finding names the published slice and reads the branch ascurrent_branch. The active-slice path is unchanged for the ordinary case, and a fully-published (terminal-PR) delivery keeps its existingdraft_corrective_childbehavior.The regression suite pins the class shut: from a published-open slice's branch it asserts the router routes in place,
record-changebinds the published slice while leaving the active slice untouched (both via--sliceand via branch resolution), the safety finding names the published slice, and — the anti-drift invariant — the advisor's by-branch resolver and the actuator's by-id resolver select the same slice, so the two layers cannot silently diverge again.Projection provenance
Generated from
operatorstack/intelligence-flow@60f76062f72185efddad1c22f6c1fc088aff0005.Review provenance, tests, and examples before merging.