The ways a hook can stop an action — a CLOSED set, listed once.
🔴 WHY A TABLE AND NOT THREE || TERMS. decideHook used to be a boolean
expression over three mechanisms while HookOutput declared a fourth,
continue, that nothing read (#174). The consequence was not a missed
detection but an INVERTED verdict in the flagship feature: a real guard that
stopped every command in the disaster battery was reported by
assertBlocksDisasters as blocking none of them.
A || chain has no shape that can be incomplete — every term is optional by
construction, so nothing can say "you declared a mechanism and did not handle
it". Record<BlockMechanism, …> can: adding a member to the union without
adding its row is a tsc error, the same device the rule set's satisfies uses (src/rules/index.ts).
The ways a hook can stop an action — a CLOSED set, listed once.
🔴 WHY A TABLE AND NOT THREE
||TERMS.decideHookused to be a boolean expression over three mechanisms whileHookOutputdeclared a fourth,continue, that nothing read (#174). The consequence was not a missed detection but an INVERTED verdict in the flagship feature: a real guard that stopped every command in the disaster battery was reported byassertBlocksDisastersas blocking none of them.A
||chain has no shape that can be incomplete — every term is optional by construction, so nothing can say "you declared a mechanism and did not handle it".Record<BlockMechanism, …>can: adding a member to the union without adding its row is a tsc error, the same device the rule set'ssatisfiesuses (src/rules/index.ts).