Rendered from docs/obligations/0089-a-profile-names-its-rules-and-never-states-them.md in the Headwater
corpus. Every document on this half of the site is typed by the taxonomy
the descriptor names: corpus.json.
A profile names its rules and never states them
Context
regimes.language.ste_house writes controlled: ASD-STE100 and profile: house, and the engine matches that pair against a closed table and then applies four rules it holds in code. The 25-word limit is a constant in a Rust file.
Obligation
So an adopter who wants 20 words has no declaration to write. One who wants the semicolon rule without the spelling rule waits for a build.
The spelling rule is also smaller than the sentence it prints. The finding says that the regime declares the tag en-US. The rule is a table of 24 words, built from the seven stems that CLAUDE.md names. So colour, centre, analyse, recognise, defence and whilst all pass a governed document. This corpus writes none of them outside a fenced code block, measured over the three governed shelves. The gap costs this repository nothing today, and it costs an adopter the difference between a tag and a list.
Discharge
source_form and retired_terms went the other way in this milestone, and both are data. What is open is whether the remaining four rules of the profile should follow them. The cost is a value set per rule of a controlled language, and no specification states one. Spec 2 is where the statement belongs.