> node run-tests.mjs
TAP version 13
# Subtest: verified approval releases one immutable PDF and reader downloads exact digest
ok 1 - verified approval releases one immutable PDF and reader downloads exact digest
  ---
  duration_ms: 15.748308
  type: 'test'
  ...
# Subtest: pending metadata cannot be downloaded, reviewed or released
ok 2 - pending metadata cannot be downloaded, reviewed or released
  ---
  duration_ms: 6.22037
  type: 'test'
  ...
# Subtest: declared digest and size reject a different upload
ok 3 - declared digest and size reject a different upload
  ---
  duration_ms: 7.080146
  type: 'test'
  ...
# Subtest: non PDF content cannot pass verification by matching its own digest
ok 4 - non PDF content cannot pass verification by matching its own digest
  ---
  duration_ms: 8.001433
  type: 'test'
  ...
# Subtest: stored file survives finalization rollback and is recoverable
ok 5 - stored file survives finalization rollback and is recoverable
  ---
  duration_ms: 10.094016
  type: 'test'
  ...
# Subtest: upload and finalize retries retain one verification audit
ok 6 - upload and finalize retries retain one verification audit
  ---
  duration_ms: 11.241564
  type: 'test'
  ...
# Subtest: approval cannot be transferred between digests
ok 7 - approval cannot be transferred between digests
  ---
  duration_ms: 9.603426
  type: 'test'
  ...
# Subtest: an author cannot review their own revision even with reviewer role
ok 8 - an author cannot review their own revision even with reviewer role
  ---
  duration_ms: 10.964889
  type: 'test'
  ...
# Subtest: new revision makes earlier approval stale without moving current release
ok 9 - new revision makes earlier approval stale without moving current release
  ---
  duration_ms: 14.902599
  type: 'test'
  ...
# Subtest: release compare and swap checks expected release version
ok 10 - release compare and swap checks expected release version
  ---
  duration_ms: 12.729876
  type: 'test'
  ...
# Subtest: replacement release preserves superseded revision and digest
ok 11 - replacement release preserves superseded revision and digest
  ---
  duration_ms: 16.822712
  type: 'test'
  ...
# Subtest: rejected revision cannot be released or rewritten
ok 12 - rejected revision cannot be released or rewritten
  ---
  duration_ms: 12.69295
  type: 'test'
  ...
# Subtest: stale expected latest does not allocate a duplicate revision
ok 13 - stale expected latest does not allocate a duplicate revision
  ---
  duration_ms: 7.898859
  type: 'test'
  ...
# Subtest: reader access is checked on direct file route and metadata
ok 14 - reader access is checked on direct file route and metadata
  ---
  duration_ms: 11.950623
  type: 'test'
  ...
# Subtest: reconciliation reports missing, mismatched, orphan and pending objects separately
ok 15 - reconciliation reports missing, mismatched, orphan and pending objects separately
  ---
  duration_ms: 16.731044
  type: 'test'
  ...
# Subtest: export and restore preserve revisions, reviews, audit and PDF digests
ok 16 - export and restore preserve revisions, reviews, audit and PDF digests
  ---
  duration_ms: 33.584927
  type: 'test'
  ...
# Subtest: damaged export checksum is rejected before destination creation
ok 17 - damaged export checksum is rejected before destination creation
  ---
  duration_ms: 11.441967
  type: 'test'
  ...
# Subtest: seed is repeatable and includes a restricted drawing
ok 18 - seed is repeatable and includes a restricted drawing
  ---
  duration_ms: 17.571369
  type: 'test'
  ...
# Subtest: HTTP upload, verify, review, release and authenticated file download
ok 19 - HTTP upload, verify, review, release and authenticated file download
  ---
  duration_ms: 72.956392
  type: 'test'
  ...
# Subtest: HTTP roles block reader mutation, author release and unauthorized direct files
ok 20 - HTTP roles block reader mutation, author release and unauthorized direct files
  ---
  duration_ms: 34.820113
  type: 'test'
  ...
# Subtest: HTTP authentication, CSRF, Origin and Host are enforced
ok 21 - HTTP authentication, CSRF, Origin and Host are enforced
  ---
  duration_ms: 20.34584
  type: 'test'
  ...
# Subtest: HTTP exports a restorable bundle and serves bounded static paths
ok 22 - HTTP exports a restorable bundle and serves bounded static paths
  ---
  duration_ms: 32.591116
  type: 'test'
  ...
# Subtest: HTTP competing releases accept only the latest approved revision
ok 23 - HTTP competing releases accept only the latest approved revision
  ---
  duration_ms: 31.300531
  type: 'test'
  ...
# Subtest: restore rejects a current release with no matching approval
ok 24 - restore rejects a current release with no matching approval
  ---
  duration_ms: 14.724481
  type: 'test'
  ...
# Subtest: restore database failure removes only its own new destination
ok 25 - restore database failure removes only its own new destination
  ---
  duration_ms: 18.787982
  type: 'test'
  ...
# Subtest: a killed restore marker prevents startup of partial data
ok 26 - a killed restore marker prevents startup of partial data
  ---
  duration_ms: 0.466833
  type: 'test'
  ...
1..26
# tests 26
# suites 0
# pass 26
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 598.739823


> node complete.mjs
28/28 extended checks matched


