Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: business-requirements description: Read and hand-edit the app's business requirements — the checklist the harness verifies the built app against. MUST be loaded whenever the user asks to add, change, remove, reword, re-prioritise, or reclassify a business requirement (e.g. "add a requirement that…", "that rule is wrong, fix it", "drop the requirement about X", "make the closed-outlet rule critical"). The requirements are a plain JSON file in the app repo; edit it directly with the file tools, then create the lock marker so the change survives.
Business Requirements
The harness checks the finished app against a list of business requirements and gives a ship / do-not-ship decision. Those requirements live in the app repo as a single JSON file:
_doc/business-requirements.json
It is a JSON array; each entry is one requirement:
{"id": "no-checkout-when-closed","excerpt": "No buying from a closed store.","description": "A customer cannot check out when the selected outlet is closed.","type": "explicit","severity": "critical"}
Field rules:
- `id` — stable kebab-case slug. Reuse the existing id when editing a requirement (never
renumber). Only mint a new kebab-case id for a genuinely new requirement.
- `excerpt` — a tiny glance-line, ideally under ~8 words, clearly shorter than
description. - `description` — the requirement in explain-like-I'm-five language: short sentences,
everyday words, as if explaining to someone with zero technical background. Describe what a person or the business experiences — never code, functions, APIs, endpoints, databases, schemas, tables, or frameworks. If you catch yourself naming a technical thing, rephrase it as what the user or business experiences.
- Good: "A customer cannot check out when the selected outlet is closed."
- Good: "Loyalty points are only awarded after an order is completed, never when it is cancelled."
- Bad: "The /checkout endpoint validates outlet.is_open before creating the order."
- `type` —
"explicit"when the user asked for it directly,"hidden"when it is implied by
the product category but not stated (e.g. preventing double rewards, blocking orders to a closed outlet).
- `severity` —
"critical","high","medium", or"low", by business impact if unmet.
Only critical requirements block the ship gate; the rest surface as warnings.
How to edit (MANDATORY steps)
Requirements are normally auto-derived from _doc/product-overview.md. To make a hand edit stick — so the next auto-derivation does not overwrite it — you MUST do BOTH:
- Edit the file. Read
_doc/business-requirements.json, apply the add / change / remove
the user asked for (keep it a valid JSON array, preserve unrelated entries and their ids), and write it back.
- Write the lock marker. Create/refresh the file
_doc/business-requirements.lock (any short text content). Its mere presence tells the system the requirements were hand-edited so auto-derivation stops overwriting them. Skipping this means the user's edit will be silently regenerated away.
Both files live under _doc/, so the end-of-turn commit persists them. After the turn, the harness automatically re-checks the app against the new requirement set — you do not trigger it.
When NOT to touch this
- If the user is changing what the app does (a feature, a rule in the product), fix the app —
that is normal build work, and the harness re-checks it afterward. Only edit business-requirements.json when the user is changing the requirement text itself (the thing being checked), not the implementation.
- Never invent requirements the user didn't ask for; never delete requirements they didn't
mention.