Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Translate product specs (PRDs, user stories) into a ship-ready repo plan: ticket decomposition, branch strategy, and PR sequencing. Use when breaking a PRD into tickets or designing the branch/PR sequence.
.claude/skills/borghei-spec-to-repo/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 123% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 85% | 0% |
A delivery-focused skill that bridges product spec to repository work. Where PRD-writing skills focus on what to build, this skill focuses on how to break it down for execution — the ticket decomposition, branch strategy, PR sequencing, and acceptance criteria that make a spec actually ship.
Before generating the repo plan, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
prd_to_tickets_decomposer.py with the user stories + technicalnotes to surface a candidate ticket tree (epic → tickets → subtasks) with size estimates and dependencies.
bashpython3 spec-to-repo/scripts/prd_to_tickets_decomposer.py \ --input prd.json --format markdown
pr_scope_analyzer.py to flag oversized PRs, missing tests,missing telemetry, and risky merges.
bashpython3 spec-to-repo/scripts/pr_scope_analyzer.py \ --input pr_plan.json --format markdown
git branch --list).branch_naming_validator.py to flag non-conformant names.bashpython3 spec-to-repo/scripts/branch_naming_validator.py \ --input branches.txt --format markdown
| Size | Effort | Description | |------|--------|-------------| | XS | < 0.5 day | Trivial; usually skip ticketing | | S | 0.5–1 day | One simple change | | M | 1–3 days | Single feature, well-scoped | | L | 3–5 days | Multi-day work; should split if possible | | XL | > 5 days | Always split — too big for confident estimate |
A ticket that's L or XL almost always hides a missing decomposition. Push back on yourself.
Epic — large product feature ("Notifications v2")
├── Story — user-facing capability ("As a user I can mute by channel")
│ ├── Ticket — one engineering work item (backend, frontend, infra)
│ │ └── Subtask — atomic step (optional)Most orgs:
Best ticket: ships a small user-visible improvement end-to-end.
When you can't slice vertically (e.g., backend is weeks before frontend):
For a multi-PR feature:
Each PR < 400 lines if possible. Reviewability collapses above 400.
Per ticket:
Per epic:
references/spec-to-ticket-decomposition.md — patterns for breaking specs into ticketsreferences/branch-strategy-for-features.md — branching, feature flags, dark-launchreferences/pr-discipline-and-conventions.md — PR size, review, definition-of-doneproduct-team/agile-product-owner — sprint planning, prioritizationengineering/feature-flags-architect — flag strategyengineering/observability-designer — SLO / telemetryc-level-advisor/vpe-advisor — broader delivery contextproject-management/ skills — ticket / sprint management tooling| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 23,663 | 26,588 | +12% | 1 | 1 | 0% | 3,842 | 6,141 | +60% | 0 | 0 | — |
case-02 | fail→fail | 12,435 | 12,666 | +2% | 1 | 1 | 0% | 2,274 | 4,189 | +84% | 0 | 0 | — |
case-03 | fail→fail | 4,494 | 6,427 | +43% | 1 | 1 | 0% | 648 | 2,909 | +349% | 0 | 0 | — |
case-04 | fail→fail | 22,376 | 20,673 | -8% | 1 | 1 | 0% | 3,636 | 5,588 | +54% | 0 | 0 | — |
case-05 | fail→fail | 21,845 | 21,557 | -1% | 1 | 1 | 0% | 3,510 | 5,656 | +61% | 0 | 0 | — |
case-06 | fail→pass | 15,295 | 5,469 | -64% | 1 | 1 | 0% | 2,426 | 2,829 | +17% | 0 | 0 | — |
case-07 | pass→pass | 12,543 | 11,239 | -10% | 1 | 1 | 0% | 1,844 | 3,766 | +104% | 0 | 0 | — |
case-08 | pass→pass | 9,833 | 5,971 | -39% | 1 | 1 | 0% | 1,471 | 2,927 | +99% | 0 | 0 | — |
case-09 | fail→pass | 8,179 | 2,433 | -70% | 1 | 1 | 0% | 1,298 | 2,284 | +76% | 0 | 0 | — |
case-10 | pass→pass | 12,773 | 7,800 | -39% | 1 | 1 | 0% | 2,068 | 3,199 | +55% | 0 | 0 | — |
case-11 | pass→pass | 12,319 | 6,048 | -51% | 1 | 1 | 0% | 1,884 | 2,903 | +54% | 0 | 0 | — |
case-12 | fail→pass | 8,762 | 3,088 | -65% | 1 | 1 | 0% | 1,469 | 2,423 | +65% | 0 | 0 | — |
case-13 | fail→pass | 11,435 | 13,855 | +21% | 1 | 1 | 0% | 1,850 | 4,123 | +123% | 0 | 0 | — |
case-14 | fail→pass | 8,081 | 2,529 | -69% | 1 | 1 | 0% | 1,281 | 2,365 | +85% | 0 | 0 | — |
case-15 | fail→pass | 14,191 | 3,008 | -79% | 1 | 1 | 0% | 2,752 | 2,405 | -13% | 0 | 0 | — |
case-16 | fail→pass | 13,748 | 2,332 | -83% | 1 | 1 | 0% | 2,682 | 2,264 | -16% | 0 | 0 | — |
case-17 | fail→pass | 13,436 | 1,905 | -86% | 1 | 1 | 0% | 2,367 | 2,173 | -8% | 0 | 0 | — |
case-18 | pass→pass | 15,716 | 14,404 | -8% | 1 | 1 | 0% | 2,343 | 4,096 | +75% | 0 | 0 | — |
case-19 | pass→pass | 14,270 | 4,950 | -65% | 1 | 1 | 0% | 2,156 | 2,670 | +24% | 0 | 0 | — |
case-20 | pass→pass | 13,438 | 12,893 | -4% | 1 | 1 | 0% | 2,286 | 3,958 | +73% | 0 | 0 | — |
case-21 | pass→pass | 15,414 | 15,095 | -2% | 1 | 1 | 0% | 2,422 | 4,445 | +84% | 0 | 0 | — |
case-22 | pass→pass | 10,552 | 9,278 | -12% | 1 | 1 | 0% | 1,601 | 3,355 | +110% | 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. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 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.