
> cpcn-e03-e04@0.1.0 test
> node --test --test-concurrency=1 --test-force-exit test/protocol.test.js

▶ E03/E04 real Groth16, SQLite and synthetic authority baseline
  ✔ real Semaphore: valid member accepted by Groth16 verifier (628.5445ms)
  ✔ domain separation: application, action, epoch, ambiguous tuple and missing context (938.5967ms)
  ✔ public transcript regression: no identity commitment or stable per-user public field (2.7554ms)
  ✔ forged points, message/root/nullifier tampering and numeric aliases rejected (116.4502ms)
  ✔ four independent processes: atomic UNIQUE(scope,nullifier) accepts exactly one (3361.2505ms)
  ✔ same identity: fresh proof and changed message cannot reset spent nullifier; other app/epoch accepts (474.8288ms)
  ✔ async revocation race, stale root and suspended member rejected (387.8123ms)
  ✔ restart + same-secret backup recovery rotates token and preserves all spent records (468.3306ms)
(node:10708) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 18 unpipe listeners added to [Socket]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
  ✔ permanent revocation cannot be undone with recovery token, after restart too (426.4379ms)
  ✔ synthetic issuer seam: signature, expiry, duplicate and receipt replay fail closed (164.1317ms)
✔ E03/E04 real Groth16, SQLite and synthetic authority baseline (7312.6214ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 8843.8973
