Settle the requirement before anything is designed. The interview engine is /grilling: its design tree and frontier decide what to ask. This skill decides what the tree must cover, what counts as settled, and what the session hands over.
Coverage
The tree must visit, for the change at hand:
- goal and non-goals
- current and desired observable behavior
- inputs and outputs, state transitions
- failure behavior, boundary behavior
- constraints and invariants
- compatibility requirements
- acceptance criteria
Classification
Classify every fact as you go into one of six buckets:
- USER FACT — stated by the user
- REPO FACT — verified in the code or by running it
- ASSUMPTION — inferred, not yet verified
- REQUIREMENT — a confirmed product or business requirement
- OPEN QUESTION — not yet closed
- ARCHITECTURE QUESTION — a design problem that surfaced here
A repo fact is not a requirement. "The current system uses SessionStore" is a repo fact; "the new system must use SessionStore" is an architecture decision. The first gets recorded; the second, if it comes up, gets recorded as an ARCHITECTURE QUESTION.
Boundaries
Decide: what the user actually needs, normal and edge behavior, compatibility, acceptance criteria.
Record, don't decide: module boundaries, state ownership, dependency direction, shared abstractions, persistence, migration. When a question lands there, write it down as an ARCHITECTURE QUESTION and move on.
Completion
The session is done when:
- /grilling's frontier is empty
- every dimension above has been visited
- no blocking OPEN QUESTION remains
- assumptions are explicitly classified
- acceptance criteria are sufficient to test the requirement
Deferred questions are marked DEFERRED. They do not silently disappear.
Handover
Write the requirement contract to a markdown file the user names. Give every requirement a stable ID — REQ-001, REQ-002 — and keep a ledger per requirement: source, status (ANSWERED / REPO_VERIFIED / DEFERRED / NOT_APPLICABLE), acceptance evidence, related architecture questions. The contract is the single handover to the architecture layer; if it gets compressed later, nothing settled here is lost.
Contract contents:
Goal
Non-goals
Current Behavior
Desired Behavior
User Facts
Repo Facts
Requirements
Invariants
Inputs
Outputs
Failure Behavior
Boundary Behavior
Compatibility Requirements
Acceptance Criteria
Open Questions
Architecture Questions
The contract stays free of design vocabulary — repository, service, manager, adapter — except where it describes existing code facts.