docs/solutions/best-practices/2026-05-10-tiptap-harvest-placeholders-need-harness-routing.md
TipTap demo specs can be syntactically runnable while containing no behavior:
they visit a route, then leave TODO: Write tests. Counting those as
portable-mixed makes the harvest look deeper than it is.
GuideContent/GenerateText or Nodes/TaskItem still had no assertions.After test-name extraction, re-open every runnable file with zero names. If the
body is only setup plus TODO, classify it as harness with an explicit reason.
In the TipTap harvest, 14 files moved this way, including:
../tiptap/demos/src/GuideContent/GenerateText/React/index.spec.js../tiptap/demos/src/GuideContent/GenerateText/Vue/index.spec.js../tiptap/demos/src/Nodes/TaskItem/React/index.spec.js../tiptap/demos/src/Nodes/TaskItem/Vue/index.spec.jsThe harvester should count behavior, not file shells. A no-assertion Cypress file can still be useful as evidence that a demo route exists, but it cannot justify a Slate or Plate test row.
runnable && testNames.length === 0 as a pressure check, not as a row.harness.docs/editor-test-harvester/tiptap/report.mddocs/editor-test-harvester/tiptap/inventory.mddocs/solutions/best-practices/2026-05-09-lexical-normalization-harvest-rows-need-selection-query-boundaries.md