Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Break an approved PRD into small, dependency-ordered, vertically-sliced implementation issues written as local files in the Foreman feature directory. Each issue ships a runnable acceptance check and a declared file footprint. No GitHub, no live quizzing of the user — emits files matching Foreman's issue schema with PRD traceability.
.claude/skills/visionforge-ou-foreman-to-issues/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 321% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 30% | 0% |
(Adapted from mattpocock/skills to-issues — see NOTICE. Removed: all gh CLI usage, GitHub labels/triage vocabulary, and the interactive "quiz the user" loop. Issues are emitted as local files; the human reviews them in Foreman's queue-review screen instead.)
Break the approved PRD into independently-grabbable issues using vertical slices (tracer bullets). Run headless: produce the files and stop. The human will reorder/edit/delete/add in Foreman's queue-review screen — do not ask them anything here.
Read the approved prd.md (path injected by Foreman) — its body, user stories, and user flows. Read the approved plan.md and adr.md too for decisions.
Understand the current state so titles and descriptions use the project's domain glossary (CONTEXT.md) and respect ADRs in the area you're touching.
Break the PRD into tracer-bullet issues. Each issue is a thin vertical slice that cuts through ALL integration layers end-to-end (schema → logic → API → UI → tests), NOT a horizontal slice of one layer.
<vertical-slice-rules>
</vertical-slice-rules>
Write each slice to .foreman/features/<slug>/issues/ISS-NNN.md, numbered from 001 in dependency order (blockers first, so depends_on can reference real ids). Each file is YAML frontmatter + markdown body in exactly this schema:
md--- id: ISS-001 title: <short descriptive name> status: queued depends_on: [] # list of blocking issue ids, e.g. ["ISS-001"] branch: feature/<slug>/iss-001 attempts: 0 budget: { max_turns: 80, max_cost_usd: 5.00, timeout_min: 45 } prd_refs: ["PRD §<section>", "Story #<n>"] # traceability back to the PRD acceptance_check: tests/<area>/test_<slice>.py # runnable check (REQUIRED) touches: ["src/<area>/...", "tests/<area>/..."] # declared file footprint kind: feature --- ## Goal A concise description of this vertical slice — the end-to-end behavior, not a layer-by-layer implementation plan. Avoid file paths and code snippets (they go stale); a prototype-derived decision snippet may be inlined if it encodes a decision more precisely than prose. ## Acceptance criteria (testable) - [ ] Criterion 1 - [ ] Criterion 2 - [ ] Criterion 3 ## Out of scope - What this slice deliberately does not do.
Rules:
id is ISS- + zero-padded three-digit number, unique within the feature.branch is feature/<slug>/iss-NNN (lowercase).budget defaults come from the feature's config run_budget; only deviate whena slice is clearly bigger or smaller, and say why in the body if you do.
prd_refs MUST be present and non-empty — every issue traces to the PRD.depends_on MUST be acyclic and reference only earlier issues.acceptance_check — the executable form of acceptance (REQUIRED)Every issue MUST carry a runnable acceptance_check derived directly from a PRD acceptance criterion, so "done" is executable, not prose. It is either:
e.g. acceptance_check: tests/todo/test_done.py; or
acceptance_check: "pytest tests/todo/test_done.py::test_marks_complete".
If the check is a dedicated test the slice must add, write that test file into a canonical issues/ISS-NNN.check/ directory (same relative path it should have in the repo, e.g. issues/ISS-001.check/tests/todo/test_done.py). Foreman re-installs it into the worktree before verifying so the worker cannot weaken or delete it. An issue with no acceptance_check is rejected from the queue.
touches — the declared file footprint (for safe parallelism)List the files/dirs/modules the slice will create or modify. Foreman builds a conflict graph from these and never runs two overlapping issues concurrently, so maximise disjointness when slicing — prefer slices whose footprints don't overlap. An empty/unknown footprint is treated as conflicting with everything (the safe default), which serialises the slice — so always declare it.
Do not create any external tickets. Do not modify the PRD.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→fail | 3,597 | 6,019 | +67% | 1 | 1 | 0% | 195 | 1,474 | +656% | 0 | 0 | — |
case-01 | fail→fail | 21,077 | 33,426 | +59% | 1 | 1 | 0% | 3,901 | 1,472 | -62% | 0 | 0 | — |
case-02 | fail→fail | 19,387 | 5,753 | -70% | 1 | 1 | 0% | 3,856 | 1,572 | -59% | 0 | 0 | — |
case-03 | fail→fail | 22,487 | 5,630 | -75% | 1 | 1 | 0% | 3,402 | 1,460 | -57% | 0 | 0 | — |
case-04 | fail→pass | 7,398 | 3,133 | -58% | 1 | 1 | 0% | 1,210 | 1,745 | +44% | 0 | 0 | — |
case-06 | fail→fail | 27,418 | 32,454 | +18% | 1 | 1 | 0% | 4,402 | 7,260 | +65% | 0 | 0 | — |
case-07 | fail→pass | 11,130 | 5,076 | -54% | 1 | 1 | 0% | 1,750 | 2,090 | +19% | 0 | 0 | — |
case-08 | fail→pass | 2,492 | 2,450 | -2% | 1 | 1 | 0% | 370 | 1,556 | +321% | 0 | 0 | — |
case-09 | pass→pass | 7,096 | 5,828 | -18% | 1 | 1 | 0% | 1,220 | 2,239 | +84% | 0 | 0 | — |
case-10 | pass→pass | 4,876 | 2,051 | -58% | 1 | 1 | 0% | 745 | 1,505 | +102% | 0 | 0 | — |
case-11 | fail→pass | 10,891 | 3,475 | -68% | 1 | 1 | 0% | 1,886 | 1,809 | -4% | 0 | 0 | — |
case-12 | fail→pass | 8,952 | 3,534 | -61% | 1 | 1 | 0% | 1,404 | 1,821 | +30% | 0 | 0 | — |
case-13 | pass→pass | 12,250 | 4,312 | -65% | 1 | 1 | 0% | 1,729 | 1,911 | +11% | 0 | 0 | — |
case-14 | fail→pass | 10,436 | 3,604 | -65% | 1 | 1 | 0% | 1,635 | 1,805 | +10% | 0 | 0 | — |
case-15 | pass→pass | 6,114 | 3,738 | -39% | 1 | 1 | 0% | 1,125 | 1,892 | +68% | 0 | 0 | — |
case-16 | pass→pass | 10,381 | 3,182 | -69% | 1 | 1 | 0% | 1,520 | 1,736 | +14% | 0 | 0 | — |
case-17 | fail→pass | 11,596 | 2,143 | -82% | 1 | 1 | 0% | 1,880 | 1,547 | -18% | 0 | 0 | — |
case-18 | fail→pass | 10,132 | 2,945 | -71% | 1 | 1 | 0% | 1,654 | 1,677 | +1% | 0 | 0 | — |
case-19 | fail→pass | 9,439 | 2,194 | -77% | 1 | 1 | 0% | 1,359 | 1,515 | +11% | 0 | 0 | — |
case-20 | pass→pass | 10,738 | 3,366 | -69% | 1 | 1 | 0% | 1,612 | 1,686 | +5% | 0 | 0 | — |
case-21 | fail→pass | 6,705 | 2,461 | -63% | 1 | 1 | 0% | 1,036 | 1,592 | +54% | 0 | 0 | — |
case-22 | pass→pass | 6,350 | 2,050 | -68% | 1 | 1 | 0% | 920 | 1,508 | +64% | 0 | 0 | — |
case-23 | fail→pass | 8,070 | 2,611 | -68% | 1 | 1 | 0% | 1,241 | 1,584 | +28% | 0 | 0 | — |
case-24 | fail→pass | 12,844 | 3,103 | -76% | 1 | 1 | 0% | 1,943 | 1,745 | -10% | 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. 24 cases were attempted, and 20 counted toward the lift figure. The other 4 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 +50 percentage points is the difference between those two pass rates over the 20 comparable cases.
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.