SpecSheriff
rule · _guidelines/spec/3.4 · s-kgbzk2ph9e6jfb4

Every symbol carries a tag, and what carries no rule says so

Checkedconfirmed by its owner

Every symbol of the system's code — a function, a class or a member of one, a type, a constant, a component — carries a tag naming the node it implements, wherever in the code it stands and whichever domain the node belongs to; a symbol inside another is covered by the tag of the one it stands in.

A symbol that implements none of the system's logic but is required by the technology the system is built with — a framework, a library, the infrastructure — such as a module's re-exports or the glue a library needs, carries instead a tag that names no node and gives its reason.

The repository's tools, its configuration and its tests are exempt by where they live.

Only a symbol whose code a commit changes must name a checked node. A change to its tags is a change to its code; rewording the rest of its comments, moving a citation onto another sid or renaming an identifier everywhere it is spelled changes no code.

Why

A tag on every symbol is what makes logic without a rule visible: a symbol left untagged until somebody changes it hides until then whether any rule asks for it, one tag per file lets every symbol added to it later go untraced, and a binding read by the domain a file stands in misses code that implements another domain's rule.

Code that serves the stack exists because of how the system is built, not because of what it does, so there is no rule for it to cite; demanding one teaches people to attach whichever id is nearest, and marking it explicitly keeps 'nobody tagged it' apart from 'there is nothing to tag'.

Only a symbol whose code changes must name a checked node, since a rule under revision is unchecked while the code written against its earlier wording still stands, and a comment reworded, a citation moved or a name changed everywhere it is spelled changes nothing the code does. A tag counts as code because it decides which node the code is held to: were a change to it not counted, a tag could be moved onto an unchecked node, or onto one the code does not implement, with nothing refusing it.

The links made to it

The decisions taken on it

2026-10-07 · textual
Problem

One tag per changed file was owed, and only in a domain with a checked rule of its own, so code implementing two checked rules of another domain shipped with no tag, and logic no rule stated passed beside it.

Ruling

The owner: code changes only through the specification and never the reverse, enforced by scripts that refuse logic without a reference back to the specification and by an independent reviewer; every declaration a commit adds or changes carries a tag, in every domain and in contracts.

2026-10-27 · textual
Problem

A tag was owed only by a declaration a commit added or changed, so code nobody had touched since the rules were written stayed untagged, and whether a rule asked for it could not be seen.

Ruling

The owner: every declaration always carries a tag; a project adopting the method tags its code before the check is turned on.

The tests bound to it