Version. 0.1 Date. 2026-08-20 Status. Standing note for the Loomworks project. Read before writing or reviewing any test that asserts on a kind, role, status, or other governed vocabulary value. Filed where a W2 CR will find it: W2 rules kinds, roles and statuses repeatedly, and this is the failure mode that will bite it. Origin. Paired evidence from CR-2026-227 (W1), items 10 and Q5, 2026-08-20.
A contract test that pins a governed value as a literal cannot follow a ruling that changes it. A test that compares against the constant follows silently.
Neither is universally right. The point is that the choice decides whether a future ruling produces a red test or a silent pass, and that choice is usually made without noticing it is being made.
Two actors were reclassified from kind="agent" to kind="system" under the same ruling, hours apart.
…0010 — RENDER_AUTO_TRIGGER_SYSTEM_ACTOR. Its assertions read:
assert triggered_by_json["kind"] == RENDER_AUTO_TRIGGER_SYSTEM_ACTOR.kind
Comparing the constant against itself. The reclassification changed the constant; the assertion followed; the suite stayed green and said nothing. Three render suites passed on the first run.
…0051 — CME_COMPANION_AUTHORITY_ACTOR. Its assertion read:
assert CME_COMPANION_AUTHORITY_ACTOR.kind == "agent"
A literal. The reclassification broke it, the full suite went red, and the failure had to be looked at and dispositioned by hand.
Same change, same CR, same hour. One test spoke and one did not, and the only difference was the right-hand side of an assertion.
Ask: if a ruling changes this value, do I want to be told?
Pin the literal when the value is part of the contract you are defending — a wire format, a persisted enum a migration constrains, an identifier other systems cite, a value a decision sheet fixes. Here a red test is the point: someone changing it should have to say so out loud. Add a comment naming the ruling that set it, so the person who breaks it knows what they are arguing with.
**Compare against the constant when you are testing *plumbing*** — that the value travels, is persisted, round-trips, or reaches the right field. The test is about the path, not the payload; a literal there produces churn that teaches nothing.
The trap is the third case, which is where both of these lived: a test that looks like plumbing but is the only place a governed value is written down. test_cme_companion_authority_actor_constructs is named for construction and reads as a smoke test; it was in fact the sole assertion pinning that actor's kind.
W2 rules kinds, roles and statuses repeatedly — agent_identities.status (active / frozen / retired), role identifiers on the seeded roster, the grantability verdict's shape. Each is a governed vocabulary, each will be asserted somewhere, and each will one day be amended.
…0010's green run was not evidence of coverage; it was evidence of indirection.A test suite's silence is not information until you know which kind of silence it is. Indirection through a constant makes tests robust to refactors and blind to rulings. That is a good trade for plumbing and a bad one for contracts, and the same codebase needs both — so the trade must be chosen rather than inherited from whichever import was nearest.
Related: loomworks-standing-note-observe-the-failure-before-trusting-the-check-v0_6 — the same family. There, a check that never fired looked like a passing check; here, a check that could not fire looked like a passing suite.