The CI port job's tsc --noEmit caught SessionEventAccumulator literals not
initializing the new sawMessage field (tests don't typecheck, so bun test
was green). Add a committed .githooks/pre-commit that mirrors the CI port
job — regenerate the port into a temp dir and tsc --noEmit it — so this
class of error fails at commit time, not in CI.