- name
- grill-with-docs
- description
- A relentless interview to sharpen a plan or design, capturing decisions in this repo's canonical homes as they land. Use when the user wants to stress-test a design and record what comes out of it.
- disable-model-invocation
- true
Run a `/grilling` session over the plan or decision at hand, then capture what
crystallises where it belongs. Capture inline, as each decision lands — not
batched at the end.
## Where things land in this repo
**Hard-to-reverse decisions with a real trade-off → write the ADR now.**
`project-docs/adr/`, shape and bar in [`.claude/rules/adr.md`](../../rules/adr.md).
Read that rule before writing one; it is stricter than the generic advice
(sequential numbering, supersede rather than edit, and a `TestADR_NNNN_*` test
when the decision is one a test can pin).
**Format or vocabulary changes → flag them, do not write them.** A new schema
key, a renamed concept, a changed definition: note it for the implementing
change and move on. Format vocabulary lives in three places that are checked
against each other — `internal/schema/v1/modelith.schema.json`,
`internal/model/model.go` (guarded by `TestSchemaStructSync`), and
`docs/06-schema-reference.md` — plus the golden `examples/`. Editing one of
them mid-grilling leaves the repo failing `task check` with the design still
half-argued.
**Running state → `HANDOFF.md`** at the end of the session (gitignored,
local-only; see `CLAUDE.md`).
## This repo has no CONTEXT.md, deliberately
The upstream version of this skill maintains a `CONTEXT.md` glossary. Don't
create one here. modelith's domain *is* the domain-model format, and that
vocabulary is already defined in the schema, the Go structs, and the schema
reference — two of which a test holds in sync. A `CONTEXT.md` would be a fourth
copy that nothing checks.
For the same reason, don't propose modelling modelith in `*.modelith.yaml`.
It would drift from the enforced definitions and compete with `examples/` for
the worked-example job.
## During the session
Beyond the interview itself, the angles worth pressing:
- **Sharpen fuzzy language.** When a term is vague or overloaded, propose a
precise canonical one. Two names for one concept, or one name for two, is the
bug that this whole tool exists to catch — don't let it pass in our own
design conversation.
- **Stress-test with concrete scenarios.** Invent cases that probe the edges
and force precision about where one concept stops and the next starts.
- **Cross-reference against the code.** When a claim is made about how modelith
behaves, check it. The linter, the renderers, and the schema are right here;
a contradiction between what we believe and what the binary does is a finding.
- **Probe emission frequency.** When the design emits something observable — a
lint diagnostic, a log line, a rendered element — pin down how often it fires:
once per model, per entity, or per attribute? A diagnostic that turns out to
fire per attribute is a wall of output, and usually belongs on a different
surface.
Ver en GitHub