Files
msd-core/commands/gsd/ingest-docs.md
Tom Boucher e81592878e feat(#2789): trim skill description anti-patterns; enforce 100-char budget (#2823)
* feat(#2789): trim skill description anti-patterns; enforce 100-char budget

- Trim descriptions in all commands/gsd/*.md files over 100 chars
- Remove flag documentation from descriptions (belongs in argument-hint)
- Remove Triggers: keyword stuffing
- Add scripts/lint-descriptions.cjs — fails on descriptions > 100 chars
- Add npm script: lint:descriptions
- Add tests/enh-2789-description-budget.test.cjs

Closes #2789

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(#2789): add CHANGELOG entry for description budget lint

* docs(#2789): update COMMANDS.md descriptions; add skill description standards note

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:14:11 -04:00

2.1 KiB

name, description, argument-hint, allowed-tools
name description argument-hint allowed-tools
gsd:ingest-docs Bootstrap or merge a .planning/ setup from existing ADRs, PRDs, SPECs, and docs in a repo. [path] [--mode new|merge] [--manifest <file>] [--resolve auto|interactive]
Read
Write
Edit
Bash
Glob
Grep
AskUserQuestion
Task
Build the full `.planning/` setup (or merge into an existing one) from multiple pre-existing planning documents — ADRs, PRDs, SPECs, DOCs — in one pass.
  • Net-new bootstrap (--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.
  • Merge into existing (--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.

<execution_context> @/.claude/get-shit-done/workflows/ingest-docs.md @/.claude/get-shit-done/references/ui-brand.md @/.claude/get-shit-done/references/gate-prompts.md @/.claude/get-shit-done/references/doc-conflict-engine.md </execution_context>

$ARGUMENTS Execute the ingest-docs workflow end-to-end. Preserve all approval gates (discovery, conflict report, routing) and the BLOCKER safety rule.