NanmiCoder / NanmiCoder/dsh-agent-teams
[Bug] repair rounds are not wired to the findings they fix: false "failed without a follow-up repair", and auto-repair fires for reviews but not verifications
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 1.7k
- Forks
- 151
- Avg merge
- 5d 15h
- Merged PRs (30d)
- 17
Description
TL;DR
Two related defects in how repair rounds are wired:
- A generated
repairtask depends on its own automatically-derived upstream, not on the failed task whose findings it fixes — so the causal link is invisible to the plugin.Deliverythen reportsfailed without a follow-up repairfor tasks whose findings were fixed and independently re-verified. - Auto-repair fires for a failed
reviewbut not for a failedverification. In the same run, areviewfailure produced a repair round automatically, while twoverificationfailures produced none.
Environment
| Item | Value |
|---|---|
| Plugin | @nanmicoder/dsh-agent-teams@0.1.18 |
| DSH host | @deepseek-ai/dsh@0.1.5-rc.2, web profile, Linux |
| Team | 4 members, 6 quality-gated tasks, 4 repair rounds, 5 review rounds (the loop hit its limit) |
A · The causal link exists in the transcript but not in the graph
| Failed task | Its findings were fixed by | And independently re-verified by | Result |
|---|---|---|---|
verification (2 findings: 1 high, 1 medium) |
next repair |
following verification |
verdict=pass — real MySQL run: exactly one prefix layer, no stacking under 6 concurrent callers |
review r3 (5 findings: 1 medium, 4 low) |
next repair |
following review |
verbatim: "all the substantive acceptance items verified independently" |
review r4 (3 low, comments/docs only) |
next repair |
following review |
verdict=pass |
In every row the fix is complete. But the generated repair for row 1 depended on an earlier task (t7) rather than on the failed t13; the one for row 2 depended on the re-verification task rather than on the failed t15. Delivery therefore listed both as failed without a follow-up repair — a false alarm on an already-closed loop. We only untangled it by reading the task graph by hand.
B · Auto-repair is inconsistent across failure kinds
- A failed
reviewproduced a repair + follow-up review automatically, twice (t8 → repair → review,t18 → repair → review). - A failed
verificationproduced nothing; the status line readt9 failed without a follow-up repair, and the captain had to create the repair round by hand. The same happened fort13.
Since verification and review are both quality gates with the same contract (findings → repair → re-check), having only one of them self-heal is surprising, and the asymmetry is invisible until a captain hits it.
Impact
- The captain cannot trust
Delivery: blocked. Its reasons mix real open work with closed loops whose edges were never drawn, and there is no way to tell them apart from the surface. - When the loop does hit its limit (
escalated), some of the listed causes may be artifacts of (A) rather than genuine unresolved findings — which makes "escalated" read as "there is still a defect" when in fact there may be none. - Manual repair-round creation also reintroduces the ordering hazard: a hand-made repair can be dispatched while a verification of the previous revision is still running, which is exactly the collision described in #161.
Suggested direction
- Make a
repairtask depend on the failed task whose findings it addresses (or on both that task and the auto-derived upstream), so the graph records the causality the transcript already has. - Trigger the same repair + re-check loop for a failed
verificationas for a failedreview. - In
Delivery, distinguish "work remains" from "work closed, edges missing" — and, when the loop is escalated, say which findings are genuinely unresolved versus which are already fixed downstream.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Trace repair-task generation, failed review and verification handling, and Delivery’s blocked or escalated reporting; compare the review path with the verification path and inspect how upstream dependencies are derived. Done means repairs link to the failed task whose findings they address, verification failures trigger the same repair and re-check loop, and Delivery distinguishes unresolved work from closed loops with missing edges.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100