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.