A rule belongs here only when no published document and neither delivered reference build carries it. That is the last resort, not the easy option: the 2026-08-26 citation audit found rules resting on the nearest plausible document precisely because there was no such place, and one of them cited the Twelve-Factor App for a table of domain registrar accounts.
Entries are append-only and numbered. standard.cites.yml cites this file by line range and
bin/cites-check.mjs opens it, so inserting a decision above an existing one would break a
citation - which is the point. Add at the bottom.
These numbers are this standard's own. A project keeps its own decision record beside its
code, with its own numbering starting at D1, so the same token means two different things
depending on which document you are holding. Nothing published here refers to a project's
decision by number: it says what the decision was. A test enforces that, after
/projects/vocalcom/ spent a fortnight carrying five references to a decision record nobody
outside the build could open.
Each entry says what the rule asks, what was checked and came up empty, and why we hold the position anyway. A decision with no argument under it is a preference, and a preference does not get to be a rule.
D1 - JavaScript selects behaviour through data attributes, never through styling classes
colibrity.js-hooks-are-data-attributes was resting on wp-starter's CONVENTIONS.md, and the
audit found the file does not say it. CONVENTIONS.md:147 makes data-block and the SCSS class
identically named siblings, which is a naming convention and not a precedence rule.
PERFORMANCE.md:274 cuts the other way, recording GSAP acting on the .anim-hidden class. Neither
client document mentions data attributes. Both delivered builds select by BEM class throughout, so
this is not house practice recovered from the estate either - it is a position the standard takes
against its own evidence.
Kept anyway, and this is the whole argument: a class is a styling handle and a styling handle gets renamed during a restyle. When behaviour is bound to it, a visual change silently breaks an animation, and the failure surfaces on the client's site rather than in review. Separating the two costs one attribute and removes a whole class of regression. That is a judgement about maintenance, not a claim about a standard, and it is filed as one.
The rule stays required rather than becoming a blocker, because nothing external backs it.