Sync Boatstack from Intelligence Flow Labs @ 550a1c87fa41 - #100
Merged
operator-stack-publisher[bot] merged 1 commit intoJul 25, 2026
Merged
Conversation
operator-stack-publisher
Bot
deleted the
sync/intelligence-flow-550a1c87fa41
branch
July 25, 2026 09:20
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
The delivery-gate recorder resolves the evidence ledger through the shared dual-layout rule
A feature's compiled trio —
tasks.json,test-matrix.json, andevidence.md— is written byactivate-planunder the feature'scompiled/subdirectory, while older features carry these artifacts at the feature root. To keep the two layouts from diverging, Boatstack resolves such an artifact through one shared rule (featureArtifactPath): try each layout in turn and use the one that exists.pr-contextalready resolved the evidence ledger this way. The delivery-gate recorder did not:record-delivery-gate, invoked with no explicit--evidence, hand-joined the feature-root path with no fallback. On a project that keeps its ledger only atcompiled/evidence.md— the locationactivate-planwrites — the recorder could not find it, and the test and review gates failed with "delivery gate requires current evidence: … no such file," demanding the ledger at a path nothing writes. This is the compiled-artifact analogue of the published-slice split-brain: a shared resolution rule that one straggler consumer bypassed, so it silently diverged from every layer that honored it.The recorder now resolves its default evidence path through the same
featureEvidencePathhelperpr-contextuses — the feature-root copy first (canonical for legacy features), thecompiled/copy as the current-layout fallback — so the two layers provably resolve the same ledger for a given feature and can never again disagree on where evidence lives. The change is strictly additive: an explicit--evidenceargument and an absolute path are honored unchanged, a legacy feature-root ledger still resolves exactly as before, and the only new behavior is that acompiled/-only ledger is now found instead of reported missing.tasks.jsonresolution is unchanged.A regression suite pins the fix: the shared resolver's ordering (root canonical,
compiled/fallback, and the canonical path returned when neither exists so a missing-evidence error names the right location); a proof-of-fix gate over acompiled/-only ledger with no--evidence; the preserved legacy feature-root path; and the anti-drift invariant that the recorder andpr-contextroute through the one resolver and cannot re-diverge.Projection provenance
Generated from
operatorstack/intelligence-flow@550a1c87fa41edfc233c546105d5e4ee921290e7.Review provenance, tests, and examples before merging.