TAP version 13
# Subtest: ops catalog
    # Subtest: has unique ids and spoken twins
    ok 1 - has unique ids and spoken twins
      ---
      duration_ms: 0.802281
      type: 'test'
      ...
    # Subtest: covers every OpName used in applyOp besides client-only meter/focus
    ok 2 - covers every OpName used in applyOp besides client-only meter/focus
      ---
      duration_ms: 5.35374
      type: 'test'
      ...
    1..2
ok 1 - ops catalog
  ---
  duration_ms: 7.117129
  type: 'suite'
  ...
# Subtest: write / replace / backup
    # Subtest: renames, writes, snapshots, restores, replaces across the book
    ok 1 - renames, writes, snapshots, restores, replaces across the book
      ---
      duration_ms: 0.751001
      type: 'test'
      ...
    # Subtest: rounds money to cents
    ok 2 - rounds money to cents
      ---
      duration_ms: 0.342434
      type: 'test'
      ...
    1..2
ok 2 - write / replace / backup
  ---
  duration_ms: 1.266268
  type: 'suite'
  ...
# Subtest: import / export
    # Subtest: splits markdown into chapters and scenes
    ok 1 - splits markdown into chapters and scenes
      ---
      duration_ms: 1.785877
      type: 'test'
      ...
    # Subtest: round-trips a JSON backup with a new id
    ok 2 - round-trips a JSON backup with a new id
      ---
      duration_ms: 0.565174
      type: 'test'
      ...
    # Subtest: turns Word heading XML into markdown
    ok 3 - turns Word heading XML into markdown
      ---
      duration_ms: 0.717658
      type: 'test'
      ...
    # Subtest: zips and unzips stored files
    ok 4 - zips and unzips stored files
      ---
      duration_ms: 47.236876
      type: 'test'
      ...
    1..4
ok 3 - import / export
  ---
  duration_ms: 50.796004
  type: 'suite'
  ...
# Subtest: publish math / continuity / seed
    # Subtest: keeps KDP page floor and a real cover wrap
    ok 1 - keeps KDP page floor and a real cover wrap
      ---
      duration_ms: 0.33709
      type: 'test'
      ...
    # Subtest: builds a royalty table for the sample
    ok 2 - builds a royalty table for the sample
      ---
      duration_ms: 1.972033
      type: 'test'
      ...
    # Subtest: flags unfinished notes and keeps parts in compile
    ok 3 - flags unfinished notes and keeps parts in compile
      ---
      duration_ms: 1.530596
      type: 'test'
      ...
    # Subtest: normalizes a partial payload
    ok 4 - normalizes a partial payload
      ---
      duration_ms: 0.255481
      type: 'test'
      ...
    1..4
ok 4 - publish math / continuity / seed
  ---
  duration_ms: 4.309312
  type: 'suite'
  ...
# Subtest: skills
    # Subtest: names every skill in plain English
    ok 1 - names every skill in plain English
      ---
      duration_ms: 0.177967
      type: 'test'
      ...
    1..1
ok 5 - skills
  ---
  duration_ms: 0.247399
  type: 'suite'
  ...
# Subtest: tiny helpers
    # Subtest: replaces once or all
    ok 1 - replaces once or all
      ---
      duration_ms: 0.111138
      type: 'test'
      ...
    1..1
ok 6 - tiny helpers
  ---
  duration_ms: 0.212968
  type: 'suite'
  ...
1..6
# tests 14
# suites 6
# pass 14
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 316.851772
