Grill With Docs Lite
Purpose
Prepare trustworthy inputs for mini-spec before SPEC.md exists.
Turn a fuzzy but bounded AI-engineering request plus relevant docs/repo evidence into a compact PRE-SPEC ASSEMBLY packet. The packet should expose the source-backed facts, authority boundaries, contradictions, decisions, safe assumptions, verification anchors, and likely failure mode that mini-spec needs to assemble an auditable contract.
This is a pre-spec evidence-grooming gate, not a requirements author and not a domain-modeling workflow. It must not silently promote guesses, implementation details, or source silence into contract language.
PRE-SPEC ASSEMBLY replaces the older CLARIFICATION DELTA shape while preserving the same bounded pre-spec role.
When to use
Use when the task is probably small enough for mini-spec, but the request is still conversationally fuzzy or relevant docs/code may change the objective, acceptance boundary, compatibility surface, or proof target.
Skip it when the request is already crisp enough to write a bounded spec directly.
Use a fuller domain-model or architecture workflow instead when the work requires canonical vocabulary, multiple hard-to-reverse architectural decisions, cross-context modeling, or an open-ended decision tree.
Inputs
- User request
- Existing notes or docs
- Relevant repo files
CONTEXT.md if present
Evidence classes
Every unresolved or decision-relevant item must stay visibly classified until mini-spec assembles the contract:
FACT — supported by a source; include the file/path, symbol, test, artifact, URL, or other locator.
DECISION — requires an explicit user/product choice before it can become contract language.
ASSUMPTION — a reversible working default that does not silently alter public behavior, schemas, security, permissions, data semantics, or compatibility.
UNKNOWN — missing evidence that blocks safe specification or must remain explicitly unresolved.
Source silence is not a FACT. An implementation detail is not automatically a requirement.
Workflow
- Read the smallest relevant source set before asking questions.
- Identify what each source actually governs. Prefer the richest source of truth rather than paraphrasing it wholesale.
- Extract only evidence that can change the spec's objective, acceptance boundary, non-goals, compatibility seams, invalid-if conditions, or verification demo.
- Classify unresolved points as
FACT, DECISION, ASSUMPTION, or UNKNOWN.
- Build an authority map: reference -> governed behavior/decision -> task-specific delta (
none, explicit delta, or unresolved).
- Hunt for contradictions between the request, source facts, existing behavior, non-goals, constraints, and other authoritative sources.
- Answer from docs or code when the repository can settle the point; do not ask the user to repeat discoverable facts.
- Ask only questions whose answers can materially change the eventual spec. Default question budget: at most 3.
- When asking, use the anatomy evidence -> contradiction or absence -> decision -> consequence. Make the tradeoff visible rather than asking a generic discovery question.
- Carry an
ASSUMPTION only when it is reversible and low-risk. If it changes public behavior, schema, permissions, security, data semantics, compatibility, or the verification target, treat it as a DECISION or UNKNOWN instead.
- Groom the resolved material into spec ingredients: objective candidate, acceptance signals, boundaries, compatibility constraints, verification anchors, primary failure-mode candidate, and invalid-if candidates.
- Do not update
CONTEXT.md, create glossary entries, or write ADRs as part of this skill. Do not draft SPEC.md here.
- Emit one compact PRE-SPEC ASSEMBLY packet and stop.
- If important ambiguity cannot fit the bounded question budget without hiding consequential decisions, route to a fuller clarification/domain-model workflow instead of expanding this skill.
Question shape
Bad:
What should the export format be?
Better:
tests/export_contract.py treats total as the public header, while the request implies renaming it to amount. Should this slice intentionally change that output contract or preserve total? Changing it may break existing consumers.
The question should expose why the answer matters to the eventual contract.
Outputs
Use this compact shape:
PRE-SPEC ASSEMBLY
Request intent:
- ...
Authority map:
- [reference] — governs: ... — task-specific delta: none | ... | unresolved
Source-backed facts:
- FACT — ... [locator]
Spec ingredients:
Objective candidate:
- ...
Acceptance signals:
- REQUEST — ...
- SOURCE — ... [locator]
Non-goals / boundaries:
- ...
Constraints / compatibility seams:
- ...
Verification anchors:
- ...
Primary failure mode candidate:
- ...
Invalid-if candidates:
- ...
Contradictions:
- request ↔ source — ...
- source ↔ source — ...
Decisions required:
- DECISION — ...
Assumptions carried:
- ASSUMPTION — ...
Open unknowns:
- UNKNOWN — ...
Mini-spec readiness:
READY | READY_WITH_ASSUMPTIONS | BLOCKED
The packet is input to mini-spec; it is not a replacement for SPEC.md and should not survive as a second durable source of truth unless another workflow explicitly chooses to persist it.
Readiness gate
Use:
READY — evidence and decisions are sufficient for mini-spec; no consequential ambiguity remains.
READY_WITH_ASSUMPTIONS — only safe, reversible assumptions remain and each is explicitly labeled.
BLOCKED — an unresolved decision/unknown can change objective, acceptance, authority, compatibility, invalid-if boundaries, or verification.
Do not use READY_WITH_ASSUMPTIONS to smuggle a consequential product or technical choice past the user.
Handoff to mini-spec
mini-spec may promote resolved user intent and source-backed evidence into contract language.
It must not silently promote:
- an
ASSUMPTION into a requirement;
- source silence into a non-goal;
- an implementation detail into an acceptance criterion;
- an unresolved conflict into a task-specific delta;
- an
UNKNOWN into a working fact.
The expected mapping is:
- objective candidate -> Objective
- authority map -> Authoritative references + task-specific delta
- acceptance signals -> Acceptance criteria
- non-goals / boundaries -> Non-goals + spec ceiling
- constraints / compatibility seams -> Compatibility seams / invalid-if constraints
- verification anchors -> Verification demo
- primary failure-mode candidate -> Likely failure modes / primary failure mode
- decisions / unknowns -> Open questions until resolved
Success looks like
mini-spec receives clean ingredients instead of conversational mush.
- Source-backed facts remain distinguishable from user choices and assumptions.
- Contradictions are visible before they can be laundered into
SPEC.md as equally authoritative prose.
- The agent asked no question that available docs or code could answer.
- The packet is compact enough to feed directly into
mini-spec without becoming a parallel requirements document.
Stop conditions
Mini-spec readiness: READY.
Mini-spec readiness: READY_WITH_ASSUMPTIONS, with only reversible low-risk assumptions.
Mini-spec readiness: BLOCKED because a consequential decision or unknown remains.
- The default question budget is exhausted and important ambiguity remains -> route to a fuller workflow.
Anti-patterns
- Drafting
SPEC.md inside the grill step.
- Turning an implementation observation into a requirement without user/source authority.
- Treating source silence as a non-goal or source-backed fact.
- Asking generic discovery questions without showing the evidence and consequence.
- Building a glossary or ADR trail during a lite pre-spec pass.
- Walking every branch of a decision tree after the bounded slice is already clear.
- Asking the user for information the repository can answer.
- Starting implementation before pre-spec readiness is established.
1---2name: grill-with-docs-lite3description: Groom a fuzzy request and the smallest relevant source set into a bounded PRE-SPEC ASSEMBLY packet for mini-spec, separating evidence from decisions, assumptions, and blockers before contract language is written.4---56# Grill With Docs Lite78## Purpose910Prepare trustworthy inputs for `mini-spec` before `SPEC.md` exists.1112Turn a fuzzy but bounded AI-engineering request plus relevant docs/repo evidence into a compact **PRE-SPEC ASSEMBLY** packet. The packet should expose the source-backed facts, authority boundaries, contradictions, decisions, safe assumptions, verification anchors, and likely failure mode that `mini-spec` needs to assemble an auditable contract.1314This is a pre-spec evidence-grooming gate, not a requirements author and not a domain-modeling workflow. It must not silently promote guesses, implementation details, or source silence into contract language.1516`PRE-SPEC ASSEMBLY` replaces the older `CLARIFICATION DELTA` shape while preserving the same bounded pre-spec role.1718## When to use1920Use when the task is probably small enough for `mini-spec`, but the request is still conversationally fuzzy or relevant docs/code may change the objective, acceptance boundary, compatibility surface, or proof target.2122Skip it when the request is already crisp enough to write a bounded spec directly.2324Use a fuller domain-model or architecture workflow instead when the work requires canonical vocabulary, multiple hard-to-reverse architectural decisions, cross-context modeling, or an open-ended decision tree.2526## Inputs2728- User request29- Existing notes or docs30- Relevant repo files31- `CONTEXT.md` if present3233## Evidence classes3435Every unresolved or decision-relevant item must stay visibly classified until `mini-spec` assembles the contract:3637- `FACT` — supported by a source; include the file/path, symbol, test, artifact, URL, or other locator.38- `DECISION` — requires an explicit user/product choice before it can become contract language.39- `ASSUMPTION` — a reversible working default that does not silently alter public behavior, schemas, security, permissions, data semantics, or compatibility.40- `UNKNOWN` — missing evidence that blocks safe specification or must remain explicitly unresolved.4142Source silence is not a `FACT`. An implementation detail is not automatically a requirement.4344## Workflow45461. Read the smallest relevant source set before asking questions.472. Identify what each source actually governs. Prefer the richest source of truth rather than paraphrasing it wholesale.483. Extract only evidence that can change the spec's objective, acceptance boundary, non-goals, compatibility seams, invalid-if conditions, or verification demo.494. Classify unresolved points as `FACT`, `DECISION`, `ASSUMPTION`, or `UNKNOWN`.505. Build an **authority map**: reference -> governed behavior/decision -> task-specific delta (`none`, explicit delta, or `unresolved`).516. Hunt for contradictions between the request, source facts, existing behavior, non-goals, constraints, and other authoritative sources.527. Answer from docs or code when the repository can settle the point; do not ask the user to repeat discoverable facts.538. Ask only questions whose answers can materially change the eventual spec. Default question budget: at most 3.549. When asking, use the anatomy **evidence -> contradiction or absence -> decision -> consequence**. Make the tradeoff visible rather than asking a generic discovery question.5510. Carry an `ASSUMPTION` only when it is reversible and low-risk. If it changes public behavior, schema, permissions, security, data semantics, compatibility, or the verification target, treat it as a `DECISION` or `UNKNOWN` instead.5611. Groom the resolved material into spec ingredients: objective candidate, acceptance signals, boundaries, compatibility constraints, verification anchors, primary failure-mode candidate, and invalid-if candidates.5712. Do not update `CONTEXT.md`, create glossary entries, or write ADRs as part of this skill. Do not draft `SPEC.md` here.5813. Emit one compact **PRE-SPEC ASSEMBLY** packet and stop.5914. If important ambiguity cannot fit the bounded question budget without hiding consequential decisions, route to a fuller clarification/domain-model workflow instead of expanding this skill.6061## Question shape6263Bad:6465> What should the export format be?6667Better:6869> `tests/export_contract.py` treats `total` as the public header, while the request implies renaming it to `amount`. Should this slice intentionally change that output contract or preserve `total`? Changing it may break existing consumers.7071The question should expose why the answer matters to the eventual contract.7273## Outputs7475Use this compact shape:7677```text78PRE-SPEC ASSEMBLY7980Request intent:81- ...8283Authority map:84- [reference] — governs: ... — task-specific delta: none | ... | unresolved8586Source-backed facts:87- FACT — ... [locator]8889Spec ingredients:9091Objective candidate:92- ...9394Acceptance signals:95- REQUEST — ...96- SOURCE — ... [locator]9798Non-goals / boundaries:99- ...100101Constraints / compatibility seams:102- ...103104Verification anchors:105- ...106107Primary failure mode candidate:108- ...109110Invalid-if candidates:111- ...112113Contradictions:114- request ↔ source — ...115- source ↔ source — ...116117Decisions required:118- DECISION — ...119120Assumptions carried:121- ASSUMPTION — ...122123Open unknowns:124- UNKNOWN — ...125126Mini-spec readiness:127READY | READY_WITH_ASSUMPTIONS | BLOCKED128```129130The packet is input to `mini-spec`; it is not a replacement for `SPEC.md` and should not survive as a second durable source of truth unless another workflow explicitly chooses to persist it.131132## Readiness gate133134Use:135136- `READY` — evidence and decisions are sufficient for `mini-spec`; no consequential ambiguity remains.137- `READY_WITH_ASSUMPTIONS` — only safe, reversible assumptions remain and each is explicitly labeled.138- `BLOCKED` — an unresolved decision/unknown can change objective, acceptance, authority, compatibility, invalid-if boundaries, or verification.139140Do not use `READY_WITH_ASSUMPTIONS` to smuggle a consequential product or technical choice past the user.141142## Handoff to mini-spec143144`mini-spec` may promote resolved user intent and source-backed evidence into contract language.145146It must not silently promote:147148- an `ASSUMPTION` into a requirement;149- source silence into a non-goal;150- an implementation detail into an acceptance criterion;151- an unresolved conflict into a task-specific delta;152- an `UNKNOWN` into a working fact.153154The expected mapping is:155156- objective candidate -> Objective157- authority map -> Authoritative references + task-specific delta158- acceptance signals -> Acceptance criteria159- non-goals / boundaries -> Non-goals + spec ceiling160- constraints / compatibility seams -> Compatibility seams / invalid-if constraints161- verification anchors -> Verification demo162- primary failure-mode candidate -> Likely failure modes / primary failure mode163- decisions / unknowns -> Open questions until resolved164165## Success looks like166167- `mini-spec` receives clean ingredients instead of conversational mush.168- Source-backed facts remain distinguishable from user choices and assumptions.169- Contradictions are visible before they can be laundered into `SPEC.md` as equally authoritative prose.170- The agent asked no question that available docs or code could answer.171- The packet is compact enough to feed directly into `mini-spec` without becoming a parallel requirements document.172173## Stop conditions174175- `Mini-spec readiness: READY`.176- `Mini-spec readiness: READY_WITH_ASSUMPTIONS`, with only reversible low-risk assumptions.177- `Mini-spec readiness: BLOCKED` because a consequential decision or unknown remains.178- The default question budget is exhausted and important ambiguity remains -> route to a fuller workflow.179180## Anti-patterns181182- Drafting `SPEC.md` inside the grill step.183- Turning an implementation observation into a requirement without user/source authority.184- Treating source silence as a non-goal or source-backed fact.185- Asking generic discovery questions without showing the evidence and consequence.186- Building a glossary or ADR trail during a lite pre-spec pass.187- Walking every branch of a decision tree after the bounded slice is already clear.188- Asking the user for information the repository can answer.189- Starting implementation before pre-spec readiness is established.