fix(dispatch): arm cascade on collapsed single-task (1-hop) closures (Gap B/#301) - #305
Conversation
…(Gap B)
The issues:closed cascade walk hard-coded a 2-hop tree (Feature→Unit→task), so
an ADR-0028 collapsed single-task feature — whose task is a DIRECT 1-hop child
of the tracking issue — was mis-classified as a Unit/tracker closure and the
cascade never re-armed (tracking issue stalled, needing a manual /dispatch).
sdd-dispatch-compute already admits a direct `## Task` child of the tracker;
this aligns the close-walk with that.
Three additive edits in sdd-route-dispatch: compute closedIsTask from the
closed issue's `## Task` body block; on a 1-hop walk that terminates at a
parentless tracker (stoppedBy==='none') AND a genuine task, resolve the tracker;
widen the arming gate from walked===2 to walked∈{1,2}. A genuine Unit closure
(no `## Task` block) leaves the tracker null and still declines; the 2-hop case
is untouched. Composite action — no lock recompile.
Fixes #301.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Important Review skippedNo new commits to review since the last review. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughIn the ChangesTask Classification and Cascade-Arming in
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Fixes #301.
Problem
The
issues:closedcascade walk insdd-route-dispatchhard-coded a 2-hop tree (Feature→Unit→task). An ADR-0028 collapsed single-task feature parents the task directly to the tracking issue (1 hop), so the GraphQL walk reaches the parentless tracker atwalked===1— failed bothwalked===2arming gates, was mis-read as a Unit/tracker closure, and the cascade never re-armed (the tracking issue stalled, needing a manual/dispatch; observed on staging #52/#36).sdd-dispatch-computealready admits a direct## Taskchild of the tracker — this aligns the close-walk with it.Fix (surgical, additive, no recompile)
Three edits in
.github/actions/sdd-route-dispatch/action.yml:closedIsTaskfrom the closed issue's## Taskbody block (mirrors compute'sisTaskguard).stoppedBy==='none') and the closed issue is a genuine task, resolve the tracker (previously it only recorded depth and declined).walked===2→walked∈{1,2}.Safety: the tracker is resolved on the 1-hop path only when
closedIsTaskis true, so a genuine Unit closure (no## Taskblock, also 1-hop to a parentless Feature) leaves the tracker null and still declines. The 2-hop Feature→Unit→task case is untouched (caps atwalked===2). Thesdd:dispatchedprecondition inside the gate is unchanged.Composite action referenced
@mainbywrappers/sdd-dispatch.yml— not lock-embedded, no recompile.Verification
YAML valid; embedded github-script JS clean (async-wrapped
node --check); control flow traced against all four tree shapes (collapsed-task arms; Unit closure declines; 2-hop arms as before; no-parent declines).🤖 Generated with Claude Code