▶ controlledDocHydrate
  ✔ shouldLoadControlledContent when non-template workflow doc (0.560314ms)
  ✔ shouldLoadControlledContent rejects local legacy/mock ids like doc-001 (0.079977ms)
  ✔ shouldLoadControlledContent keeps canonical, freeform-off, and template preview rules (0.081697ms)
  ✔ hydrateControlledDocumentContent never requests content/revision for doc-001 (0.145305ms)
  ✔ hydrateControlledDocumentContent never requests for template preview or registered freeform (0.078298ms)
  ✔ shouldLoadControlledContent stays inside toolbar server-backed eligibility (0.101657ms)
  ✔ resolveCanonicalDocId maps doc-p56-intake to doc_proj56_intake (0.176655ms)
  ✔ canonicalDocIdForTask maps doc-p56-research to doc_proj56_research (0.088608ms)
  ✔ hydrate treats projection missing as ledger content, not 404 (0.944302ms)
  ✔ attaches hydrate ETag as PATCH baseline and ignores a later GET (0.468346ms)
  ✔ rejects hydrate when revision-state network or 5xx fails (0.359089ms)
  ✔ aligns markdownToBlockAST random ids onto revision-state head_block_map (0.647101ms)
  ✔ leaves Math.random ids when head_block_map is omitted (why gate + fail-closed remain) (0.227144ms)
  ✔ rejects controlled hydrate on NOT_FOUND or NEEDS_CONTENT (0.129726ms)
  ✔ fingerprint stays stable when only object identity changes (0.060068ms)
  ✔ dedupes in-flight hydrate for the same doc fingerprint (0.127606ms)
  ✔ aligned late hydrate still cannot overwrite a PATCH-success baseline (0.226964ms)
✔ controlledDocHydrate (5.36378ms)
ℹ tests 17
ℹ suites 1
ℹ pass 17
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 72.177737
