Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Headless root-cause debugging loop for a Foreman worker whose tests, build, or acceptance check are failing — especially on a retry. Find the root cause before changing anything, fix at the source with a regression test, and never thrash on symptom patches. Used inside a foreman-tdd build session; emits no summary of its own.
.claude/skills/visionforge-ou-foreman-debug/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-06 | ✓→✗ | ▼ Worse | -2% | 0% |
| case-19 | ✓→✓ | = Same ✓ | 46% | 0% |
(Adapted from obra/superpowers systematic-debugging (MIT) — see NOTICE. Made headless: removed the "discuss with your human partner" hand-offs — under Foreman there is no live human, so a genuine architectural dead end becomes a FOREMAN-SUMMARY escalate from the surrounding foreman-tdd run, not a question. Folded the regression step into Foreman's existing foreman-test + evidence contract.)
You are invoked inside a foreman-tdd build session when something is failing: a red test that should be green, the project test/lint/typecheck command, the issue's acceptance_check, or a distilled failure report from a prior attempt. You run headless — do not ask questions. Find the root cause, fix it at the source, and hand control back to foreman-tdd. You emit no FOREMAN-SUMMARY of your own; the foreman-tdd run owns the single summary block.
NO FIX WITHOUT ROOT-CAUSE INVESTIGATION FIRSTA symptom patch that makes the red go away without explaining why it was red is a failure — it will bounce at Foreman's merge gate or resurface on the next slice.
line, the ERROR lines in the foreman-test log on disk. The message often is the answer. If a distilled failure report from a prior attempt is in your context, treat its "why it was rejected" as the starting hypothesis, not noise to re-discover.
foreman-test(use --fast while iterating). If it is flaky, that is the bug — chase the nondeterminism (ordering, time, shared state), don't paper over it.
git diff the slice against the integration branch. Theregression almost always lives in the diff.
passed it in? Keep walking up the call stack until you reach the origin. Fix there, not at the symptom.
Find working code that does the same thing elsewhere in the repo. List every difference between it and the broken path, however small — "that can't matter" is how root causes hide.
State one specific hypothesis: "the root cause is X because Y." Make the smallest change that tests it. One variable at a time. If it doesn't hold, form a new hypothesis — do not stack a second fix on top of an unproven first.
this root cause and will pass once it's fixed — exactly the red-green discipline foreman-tdd already uses. A fix with no test that proves it does not count.
foreman-test. The targeted test passes AND the full suitestays green. Read the output; do not assume.
If three distinct fixes each fail or each surfaces a new problem somewhere else, the issue is architectural, not a bug — the slice's seam is wrong. Stop patching. Hand back to foreman-tdd with a clear note for its FOREMAN-SUMMARY: set escalate: true with a one-line statement of the structural problem (e.g. "ISS-012 assumes a synchronous store but the queue is async — the seam can't hold"). A wrong architecture is Foreman's human's call, not another guess.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | pass→pass | 12,837 | 12,887 | +0% | 1 | 1 | 0% | 2,251 | 3,295 | +46% | 0 | 0 | — |
case-01 | fail→fail | 7,020 | 3,649 | -48% | 1 | 1 | 0% | 208 | 1,230 | +491% | 0 | 0 | — |
case-02 | fail→fail | 9,137 | 8,708 | -5% | 1 | 1 | 0% | 197 | 1,340 | +580% | 0 | 0 | — |
case-03 | fail→fail | 4,713 | 5,605 | +19% | 1 | 1 | 0% | 136 | 1,136 | +735% | 0 | 0 | — |
case-08 | fail→pass | 11,627 | 3,430 | -70% | 1 | 1 | 0% | 1,737 | 1,531 | -12% | 0 | 0 | — |
case-04 | pass→pass | 10,172 | 6,126 | -40% | 1 | 1 | 0% | 1,412 | 1,863 | +32% | 0 | 0 | — |
case-05 | pass→pass | 14,505 | 7,957 | -45% | 1 | 1 | 0% | 2,359 | 2,260 | -4% | 0 | 0 | — |
case-06 | pass→fail | 15,435 | 9,080 | -41% | 1 | 1 | 0% | 2,395 | 2,356 | -2% | 0 | 0 | — |
case-07 | pass→pass | 16,639 | 12,721 | -24% | 1 | 1 | 0% | 2,499 | 2,830 | +13% | 0 | 0 | — |
case-09 | pass→pass | 11,521 | 7,752 | -33% | 1 | 1 | 0% | 1,841 | 2,254 | +22% | 0 | 0 | — |
case-10 | pass→pass | 10,105 | 3,246 | -68% | 1 | 1 | 0% | 1,600 | 1,473 | -8% | 0 | 0 | — |
case-11 | pass→pass | 12,766 | 6,973 | -45% | 1 | 1 | 0% | 1,866 | 2,177 | +17% | 0 | 0 | — |
case-12 | pass→pass | 8,010 | 4,278 | -47% | 1 | 1 | 0% | 1,406 | 1,579 | +12% | 0 | 0 | — |
case-13 | pass→pass | 7,982 | 2,157 | -73% | 1 | 1 | 0% | 1,236 | 1,292 | +5% | 0 | 0 | — |
case-14 | pass→pass | 11,871 | 4,329 | -64% | 1 | 1 | 0% | 1,870 | 1,545 | -17% | 0 | 0 | — |
case-15 | fail→pass | 13,108 | 5,120 | -61% | 1 | 1 | 0% | 1,882 | 1,770 | -6% | 0 | 0 | — |
case-16 | fail→pass | 9,675 | 4,224 | -56% | 1 | 1 | 0% | 1,384 | 1,662 | +20% | 0 | 0 | — |
case-17 | pass→pass | 15,068 | 4,255 | -72% | 1 | 1 | 0% | 2,299 | 1,687 | -27% | 0 | 0 | — |
case-18 | fail→fail | 5,810 | 2,936 | -49% | 1 | 1 | 0% | 829 | 1,397 | +69% | 0 | 0 | — |
case-20 | fail→fail | 12,283 | 10,816 | -12% | 1 | 1 | 0% | 1,373 | 2,858 | +108% | 0 | 0 | — |
case-21 | pass→pass | 7,371 | 4,050 | -45% | 1 | 1 | 0% | 1,302 | 1,645 | +26% | 0 | 0 | — |
case-22 | pass→pass | 13,323 | 6,447 | -52% | 1 | 1 | 0% | 1,937 | 1,896 | -2% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.