Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Scan a repo for mixed ADRs, PRDs, SPECs, and DOCs and bootstrap or merge the full .planning/ setup from them. Classifies each doc in parallel, synthesizes a consolidated context with a conflicts report, and routes to new-project or merge-milestone depending on whether .planning/ already exists.
.claude/skills/davepoon-gsd-ingest-docs/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -40% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -41% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -58% | 0% |
<objective> Build the full .planning/ setup (or merge into an existing one) from multiple pre-existing planning documents — ADRs, PRDs, SPECs, DOCs — in one pass.
--mode new, default when .planning/ is absent): produces PROJECT.md + REQUIREMENTS.md + ROADMAP.md + STATE.md from synthesized doc content, delegating final generation to gsd-roadmapper.--mode merge, default when .planning/ is present): appends phases and requirements derived from the ingested docs; hard-blocks any contradiction with existing locked decisions.Auto-synthesizes most conflicts using the precedence rule ADR > SPEC > PRD > DOC (overridable via manifest). Surfaces unresolved cases in .planning/INGEST-CONFLICTS.md with three buckets: auto-resolved, competing-variants, unresolved-blockers. The BLOCKER gate from the shared conflict engine prevents any destination file from being written when unresolved contradictions exist.
Inputs: directory-convention discovery (docs/adr/, docs/prd/, docs/specs/, docs/rfc/, root-level {ADR,PRD,SPEC,RFC}-*.md), or an explicit --manifest <file> YAML listing {path, type, precedence?} per doc.
v1 constraints: hard cap of 50 docs per invocation; --resolve interactive is reserved for a future release. </objective>
<execution_context> @${CLAUDE_PLUGIN_ROOT}/workflows/ingest-docs.md @${CLAUDE_PLUGIN_ROOT}/references/ui-brand.md @${CLAUDE_PLUGIN_ROOT}/references/gate-prompts.md @${CLAUDE_PLUGIN_ROOT}/references/doc-conflict-engine.md </execution_context>
<context> $ARGUMENTS </context>
<process> Execute the ingest-docs workflow end-to-end. Preserve all approval gates (discovery, conflict report, routing) and the BLOCKER safety rule. </process>
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,494 | 4,558 | -39% | 1 | 1 | 0% | 1,332 | 748 | -44% | 0 | 0 | — |
case-02 | fail→fail | 7,013 | 2,998 | -57% | 1 | 1 | 0% | 1,269 | 830 | -35% | 0 | 0 | — |
case-03 | fail→fail | 3,224 | 3,899 | +21% | 1 | 1 | 0% | 571 | 739 | +29% | 0 | 0 | — |
case-04 | fail→pass | 23,155 | 5,564 | -76% | 1 | 1 | 0% | 1,518 | 1,560 | +3% | 0 | 0 | — |
case-05 | fail→pass | 8,135 | 1,789 | -78% | 1 | 1 | 0% | 1,295 | 771 | -40% | 0 | 0 | — |
case-06 | pass→pass | 3,770 | 4,321 | +15% | 1 | 1 | 0% | 586 | 1,247 | +113% | 0 | 0 | — |
case-07 | pass→pass | 10,467 | 4,805 | -54% | 1 | 1 | 0% | 1,760 | 1,328 | -25% | 0 | 0 | — |
case-08 | fail→pass | 11,432 | 5,807 | -49% | 1 | 1 | 0% | 1,859 | 1,543 | -17% | 0 | 0 | — |
case-09 | fail→pass | 13,189 | 5,104 | -61% | 1 | 1 | 0% | 2,379 | 1,402 | -41% | 0 | 0 | — |
case-10 | fail→pass | 12,471 | 2,715 | -78% | 1 | 1 | 0% | 2,038 | 851 | -58% | 0 | 0 | — |
case-11 | pass→pass | 12,162 | 7,530 | -38% | 1 | 1 | 0% | 2,079 | 1,748 | -16% | 0 | 0 | — |
case-12 | fail→pass | 9,653 | 1,444 | -85% | 1 | 1 | 0% | 1,597 | 663 | -58% | 0 | 0 | — |
case-13 | fail→pass | 8,060 | 3,028 | -62% | 1 | 1 | 0% | 1,509 | 999 | -34% | 0 | 0 | — |
case-14 | fail→pass | 9,473 | 2,429 | -74% | 1 | 1 | 0% | 1,509 | 919 | -39% | 0 | 0 | — |
case-15 | fail→pass | 10,275 | 4,093 | -60% | 1 | 1 | 0% | 1,851 | 1,217 | -34% | 0 | 0 | — |
case-16 | fail→fail | 7,491 | 5,628 | -25% | 1 | 1 | 0% | 1,142 | 1,384 | +21% | 0 | 0 | — |
case-17 | pass→pass | 5,717 | 2,237 | -61% | 1 | 1 | 0% | 1,092 | 840 | -23% | 0 | 0 | — |
case-18 | pass→pass | 9,467 | 2,716 | -71% | 1 | 1 | 0% | 1,765 | 942 | -47% | 0 | 0 | — |
case-19 | fail→pass | 11,929 | 5,102 | -57% | 1 | 1 | 0% | 2,144 | 1,367 | -36% | 0 | 0 | — |
case-20 | fail→pass | 4,118 | 7,698 | +87% | 1 | 1 | 0% | 671 | 1,885 | +181% | 0 | 0 | — |
case-21 | fail→fail | 18,804 | 5,028 | -73% | 1 | 1 | 0% | 3,569 | 1,291 | -64% | 0 | 0 | — |
case-22 | pass→fail | 9,320 | 15,684 | +68% | 1 | 1 | 0% | 1,813 | 1,118 | -38% | 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 18 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 +45 percentage points is the difference between those two pass rates over the 18 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.