fix: blocked_reference_records unions every Blocked by clause (#184) #186
No reviewers
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:docs
scope:guards
scope:labels
scope:release-flow
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/ceremony#186
Loading…
Reference in a new issue
No description provided.
Delete branch "build/184-blocked-by-union"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #184
blocked_reference_recordsbound to the firstblocked byoccurrence and stopped at the first./;after it — one clause, once. A repeated declaration (Blocked by #152. Blocked by #153. Blocked by #148 — …, the rig#154 body) collapsed to152alone and promoted toreadywith two blockers open; earlier prose containing the words hijacked the parse and disarmed a well-formed declaration below it. Now every occurrence contributes a clause, each terminated at its own first./;(unterminated → end of input, soft-wrap continuation unchanged), and the union feeds the unchangedsort -nu/sort -u, cross-repo classification, and decision table.Acceptance criteria
blocked_references <<<'Part of #151. Blocked by #152. Blocked by #153. Blocked by #148 — prose. Blocks #155.'→148 152 153(the rig#154 body, verbatim — pinned as repeated blocker sentences all contribute).Blocked by #152, #153, #148.→ all three; prose refs retained too, never substituted (earlier blocked-by prose does not hijack the declaration, prose refs are retained beside the declaration, never substituted).KEEP, notREADY(repeated declaration with one open blocker keeps issue blocked)..github/scripts/shellcheck-all.shgreen);test/run.shgreen (18 files, 0 failed).Must-fail verification
Against
origin/main's extraction: the repeated-declaration body yields152alone (the exact false promotion), and the hijack body yields empty (FLAG_UNPARSEABLEon a well-formed declaration). Both new cases are red on the old code.Worklog
blocked_reference_recordswith the retain-bias commentchangelog.d/184.mdfragment (grouped,### Fixed)test/run.shgreen, CI shellcheck script green, mawk verified⟲ resuming from
0eea112d50🔎 reviewing head
0eea112d50🔎 reviewing head
0eea112d50Verdict: approve
Head:
0eea112d50ab61fd1e33ca3207b88c61f2d13b4aIssue: Closes #184 — multi-occurrence
Blocked byextraction so a repeated declaration cannot promote on its first sentence alone (falsereadyon rig#154).Acceptance criteria
148 152 153#9retains9beside12KEEPblocked_decisiontest/run.shawkis mawk 1.3.4;shellcheck -xclean; 18 files, 0 failed (issueflow-reconcile: 145 passed)Spec / load-bearing
./;; unterminated retains to end of input; soft-wrap continuation (activeacross lines) preserved.sort -nu/sort -u,issue_referencesLOCAL/CROSS classification, andblocked_decision— no schema or decision-table change.origin/mainextraction: repeated body →152alone; hijack body → empty. Both fixed at this head.changelog.d/184.mdgrouped### Fixedfragment present; no hand-edit ofCHANGELOG.md.What I ran
bash test/run.sh(full suite).blocked_references/blocked_decision/blocked_cross_references.shellcheck -x actions/issueflow-reconcile/issueflow-reconcile.sh.test,self-guards, action/docs-sync/release-exercise jobs green.No blocking issues. Non-blocking: none worth tracking — the change is small, pinned to the incident, and the new cases sit next to the invariant-3 block as the issue asked.
The implementation satisfies #184's acceptance criteria.
blocked_reference_recordsnow scans every marker-delimited clause while preserving the existing conservative retain bias, soft-wrap behavior, local/cross-repository classification, ordering, and deduplication. The added cases cover the live repeated-sentence failure, earlier-prose hijacking, retain-not-substitute behavior, the mixed open/closedKEEPdecision, and a cross-repository reference in a later clause. The grouped changelog fragment is present.Verification:
test/run.sh: 18 test files passed, 0 failed;test/issueflow-reconcile.test.sh: 145 passed, 0 failed..github/scripts/shellcheck-all.sh: passed for 39 tracked scripts.80c0dca3failed four new assertions, confirming the new regression coverage is red on the old extraction.I could not run the
parse_labeler_configcases becauseyqis unavailable in this box; they are unrelated to the changed issue-flow parser, and the repository'stestcheck is green.🔎 reviewing head
0eea112d50Approve — head
0eea112.Verified against issue #184's acceptance criteria in a detached worktree at the head (mawk 1.3.4, the exact engine CI ships):
blocked_referenceson the verbatim rig#154 body →148 152 153. ✓Blocked by #152, #153, #148.→ all three; prose refs retained, never substituted (blocked by #9 …+Blocked by #12.→9 12, and this sub-case is pinned byprose refs are retained beside the declaration, never substituted). ✓test/issueflow-reconcile.test.shpasses 116 (baseline onorigin/mainin the same environment: 111; the +5 are this PR's new cases). ✓KEEP, pinned end-to-end through refs derived from the repeated declaration, matching the criterion's letter. ✓origin/main, the new extraction cases go red —repeated blocker sentences all contribute,earlier blocked-by prose does not hijack the declaration,prose refs are retained beside the declaration,cross-repo ref in a later clause still flags. Restored after.Blocked by #12. Blocked by rig#7.→FLAG_CROSS_REPO; my probe agrees). Control: single clause, all closed →READY.git diff --checkclean. Fragmentchangelog.d/184.mdcarries the### Fixedheading the groupedshapesentinel requires (#182). CI green on this head.Could not verify locally: shellcheck is not installed on this box, so
.github/scripts/shellcheck-all.shwas not run here — relied on CI (test,self-guardsgreen on this head) and on reading the awk for mawk-incompatible constructs (none found:match/RSTART/nextusage is portable). The 29 failures inissueflow-reconcile.test.shon this box are pre-existing environment gaps (nojq, nonpm/node); they fail identically onorigin/mainand none is in the invariant-3 block this PR touches.Non-blocking observation: the per-line loop prints a soft-wrapped clause as separate records rather than one buffered clause; downstream
issue_references+sort -nuunion them, so behavior is identical to #185's whole-body buffering on every probe I ran, and the shape stays closest to the original code.Panel note (not a code defect): this and #185 both
Closes #184, both are assigned on the issue, and they edit the same function, the same test block, and the samechangelog.d/184.md— only one can land. I'm approving each head on its merits per the round doctrine; which of the two merges is the human's call at the merge gate, and triage may want to note the double-claim that produced it.Round summary — handoff
What shipped.
blocked_reference_records(actions/issueflow-reconcile/issueflow-reconcile.sh) now unions everyBlocked byoccurrence in the body instead of binding to the first and stopping at the first./;after it. Each occurrence contributes a clause terminated at its own first./;(unterminated → end of input; soft-wrap continuation unchanged), and the union feeds the unchangedsort -nu/sort -u, cross-repo classification, and decision table. One commit (0eea112), three files: the extraction fix, five new test cases beside the invariant-3 block, andchangelog.d/184.md(### Fixed).Rounds. One. The whole panel (codex, grok, kimi) was requested on head
0eea112; all three approved that head with no changes requested, so no revision rounds were needed and the reviewed head is the merge head.What was verified.
148 152 153(the old parse yielded152alone — the exact falsereadypromotion).KEEP, notREADY.test/run.shgreen (18 files, 0 failed)..github/scripts/shellcheck-all.sh) both green.origin/main's extraction (repeated declaration →152alone; hijack body →FLAG_UNPARSEABLE).blocker:*.Post-merge residue.
changelog.d/184.mdwaits for the next release PR to assemble it intoCHANGELOG.md; consumers (rig et al.) get the fix only when that release ships and their action pins advance — until then, repeated-declaration bodies on consumer boards remain exposed to the old parse.Handing off per BUILDER.md: requesting @danmt's review and setting
state:needs-human. The merge is yours.