PASS append and canonical projection
PASS replay is idempotent
PASS old canonical notification does not rewind head
PASS reorg removes orphan events and retains observed block
PASS orphaned branch can become canonical again
PASS trusted shorter competing tip replaces suffix
PASS wrong chain rejected atomically
PASS unknown ancestor rejected atomically
PASS gap late in batch rejected atomically
PASS parent mismatch late in batch rejected atomically
PASS hash reuse with different contents rejected
PASS duplicate event indices rejected
PASS finalized checkpoint blocks conflicting reorg
PASS reorg above finalized checkpoint remains allowed
PASS noncanonical and regressing finality rejected without change
PASS hash and identity validation
PASS immutable snapshots and defensive event copy
PASS empty batch rejected
Suffix combinations checked: 108
PASS exhaustive suffix replacement: 108 ancestor and depth combinations
19 tests passed
