Skilllibrary spec-pack-normalizer
Normalize one or more source specs, notes, pasted chats, and Markdown planning documents into a single canonical brief, decision packet, and constraints summary. Use when given messy or multi-file project requirements that need to become a clean source of truth before scaffolding, ticketing, or implementation. Do not use when a canonical brief already exists and is current.
git clone https://github.com/merceralex397-collab/skilllibrary
T=$(mktemp -d) && git clone --depth=1 https://github.com/merceralex397-collab/skilllibrary "$T" && mkdir -p ~/.claude/skills && cp -r "$T/01-package-scaffolding/spec-pack-normalizer" ~/.claude/skills/merceralex397-collab-skilllibrary-spec-pack-normalizer && rm -rf "$T"
01-package-scaffolding/spec-pack-normalizer/SKILL.mdSpec Pack Normalizer
Use this skill to convert messy project inputs into a deterministic brief that weaker models can follow safely.
Procedure
1. Scan the workspace for project inputs
Search for spec-like files opportunistically. Look for:
files in the root,*.md
,docs/
,specs/
,plans/
,requirements/
,notes/design/
,README.md
,SPEC.md
,REQUIREMENTS.md
,PRD.mdDESIGN.md- Any directory that looks like it contains project planning material
- Pasted chat logs, informal notes, architecture documents
- API specifications (OpenAPI, GraphQL schemas, etc.)
- Existing code if this is a retrofit (scan for structure, not implementation)
Read primary specs first, then supporting material.
2. Extract durable facts
From everything you read, extract ONLY:
- Durable facts: what is being built, why, for whom
- Constraints: platform, runtime, model, process, integration
- Desired outcomes: goals and success criteria
- Explicit non-goals: what is NOT being built
- Stated preferences: stack choices, model choices, tooling
Separate facts from assumptions. Mark each clearly.
3. Identify contradictions and ambiguities
- Resolve obvious duplication by preferring the most specific or latest source
- Do NOT smooth over meaningful disagreements — call them out
- Create a batched decision packet for all blocking ambiguities:
- Blocking: choices that materially change implementation (stack, provider, model, architecture)
- Non-blocking: open questions that don't prevent the first execution wave
4. Present the decision packet
Present ALL blocking ambiguities to the user at once. Do not ask one at a time. Include:
- What the ambiguity is
- What the options are (if known)
- What the implications of each option are
- Which option you recommend and why (if you have enough information)
Wait for user decisions before proceeding.
5. Write the canonical brief
Write to
docs/spec/CANONICAL-BRIEF.md (or docs/BRIEF.md for simpler repos).
Required sections (all 12 must be present):
- Project Summary — one paragraph, what and why
- Goals — flat bullet list of desired outcomes
- Non-Goals — flat bullet list of explicit exclusions
- Constraints — platform, runtime, model, process, integration
- Required Outputs — repo structure, docs, agent/tool outputs, validation
- Tooling and Model Constraints — provider, models, runtime, host
- Canonical Truth Map — which file owns which kind of state
- Blocking Decisions — resolved choices from the decision packet
- Non-Blocking Open Questions — things that don't block the first wave
- Backlog Readiness — whether ticketing can proceed, which areas are blocked
- Acceptance Signals — what must be true for the result to be usable
- Assumptions — non-blocking assumptions that don't silently decide major behavior
6. Validate
Verify the brief:
- All 12 sections are present and non-empty
- Facts and assumptions are separated
- Blocking decisions are all resolved (or explicitly recorded as blocked)
- Backlog readiness clearly states whether the first execution wave can be detailed
- Exact product names, provider strings, and model identifiers are preserved
- Brief is concise enough for weaker models to load
Output contract
A single
CANONICAL-BRIEF.md file containing all 12 sections, plus a decision packet log if ambiguities were resolved during the run.
Rules
- Prefer opportunistic intake over rigid required input structure
- Do not invent implementation detail for work that depends on unresolved choices
- Do not hide contradictions — call them out in Open Questions
- Keep the brief concise enough for weaker models to load
- Preserve exact names, providers, and model strings when specified
- Separate facts from assumptions explicitly
Failure handling
- No source material found: Stop. Request minimum viable input (problem statement + target users + rough scope)
- Contradictions between sources: Call out in Open Questions; do not silently pick a winner
- Source material is a single vague paragraph: Extract what exists, mark everything else as Open Questions, present decision packet
- Too many blocking decisions: Prioritize by impact; present the top 3-5 most critical first
References
- Brief schema: defined in this skill's
(if available)references/brief-schema.md - This is step 1 of the scaffold-kickoff flow — return to
step 2 after completion../scaffold-kickoff/SKILL.md