IREvent:
    | IRSubscribe
    | IRSubscribeCallback
    | IRUnsubscribe
    | IRDispose
    | IRRead
    | IRTxSet

Lifecycle event variant — the closed six-arm discriminated union EPIC-2's lint passes pattern-match against.

PR-B1 widens this from never (PR-A's forward-compat placeholder) to the six variants the EPIC-2 passes actually consume. The discriminator is kind, with on-the-wire literal strings that must match the Rust serde rename byte-for-byte:

  • subscribe
  • subscribe-callback (kebab; sixth variant for commit-origin lineage per the brutal-critical review's recommendation #1)
  • unsubscribe
  • dispose
  • read
  • tx-set (kebab; the engine-facing TS uses tx.set and the wire byte is the kebab-case form)

Adding a seventh variant requires changing this declaration and is caught at every assertNever-guarded reading site in the engine and the checker.