Part of #3839. Depends on #3840.
Context
All tier changes are audit events (hash-chained, src/audit/audit-logger.ts). The vote's machine-enforcement condition: a PROMOTION transition event must carry a reference to its ratification consensus_vote record; a gate (CI or verify-time) FAILS when a promotion event lacks one. Demotion events need no vote link (automatic-allowed) but are still chained.
Acceptance criteria
Evidence required
Fixture tests; chain verification test.
Out of scope
Building any actual promotion (those are the absorbed cases).
Part of #3839. Depends on #3840.
Context
All tier changes are audit events (hash-chained, src/audit/audit-logger.ts). The vote's machine-enforcement condition: a PROMOTION transition event must carry a reference to its ratification consensus_vote record; a gate (CI or verify-time) FAILS when a promotion event lacks one. Demotion events need no vote link (automatic-allowed) but are still chained.
Acceptance criteria
Evidence required
Fixture tests; chain verification test.
Out of scope
Building any actual promotion (those are the absorbed cases).