A kind's event severities are literals at each emit call; only the core fixes them in one table.
05-observability.md §7 requires severity to be fixed per event name. The core enforces this structurally via a CORE_EVENTS map, but every kind instead writes severity inline at each emit call site, so nothing stops two call sites for one name from disagreeing, and nothing compares the emitted set against the contract's table at all. This is how four world-graph severities drifted for three weeks across four reconciliations, and incident.resolved's two call sites agree only by luck.
Done when
Agent instructions
Authority: this issue — the finding no longer lives in design/90-decisions.md §2 once tracked here.
Stop if: it turns out to need a contract or schema change beyond adding the per-kind table itself.
A kind's event severities are literals at each
emitcall; only the core fixes them in one table.05-observability.md§7 requires severity to be fixed per event name. The core enforces this structurally via aCORE_EVENTSmap, but every kind instead writes severity inline at eachemitcall site, so nothing stops two call sites for one name from disagreeing, and nothing compares the emitted set against the contract's table at all. This is how fourworld-graphseverities drifted for three weeks across four reconciliations, andincident.resolved's two call sites agree only by luck.Done when
CORE_EVENTSKind.eventNames, the emitted severities, and20-contract.md's tables, replacing the by-hand comparisonAgent instructions
Authority: this issue — the finding no longer lives in
design/90-decisions.md§2 once tracked here.Stop if: it turns out to need a contract or schema change beyond adding the per-kind table itself.