Add explicit review and comment export profiles - #508
Conversation
|
Follow-up
Verification:
New viewable evidence is generated at |
f3fda3d to
2672eee
Compare
cf5d7aa to
13ae323
Compare
2672eee to
130b2b0
Compare
cc46333 to
61b62d5
Compare
|
Closing as part of retiring the #505 → #506 → #507 → #508 stack — see the rationale on #505. The stack forked before #493/#500/#501 landed and re-adds merged work; this tip is also conflicted against its base. #444 is being redone against Per #437's design doc, #443 only becomes the release gate once this has landed, so a reviewed ratchet refresh for the comment-bearing fixtures is budgeted into it. Generated by Claude Code |
The browser-page benchmark has rastered through Poppler for some time; the PDFs `@docxodus/export` actually produces were never measured. This routes them through the same raster contract over a ten-document pinned corpus with recorded provenance. The gates are layered deliberately. Conversion, page count, physical geometry, semantic content and the chart-vector contract are unconditional — no raster severity or attribution disposition can waive them, because a document that converted to the wrong number of pages is broken regardless of how similar those pages look. SSIM and ink metrics ratchet separately against a numbers-only record, and text and link extraction are gated independently so a text regression cannot hide behind an acceptable raster score. An environment fingerprint covering LibreOffice, Chromium, Poppler and the font contract is what keeps the ratchet honest: a changed environment reports `environment-changed` rather than being misattributed to the renderer. The committed record's numbers were recorded on the retired #505-#508 stack, whose barrier and font runtime differ from the ones that landed, so they are carried over as a starting point and annotated as such. The first complete run on this lineage will report `environment-changed` and needs a re-record. The unconditional gates do not depend on those numbers and are live now. The benchmark stays `workflow_dispatch`-only. The salvaged version ran on every pull request, but per the design doc this becomes the release gate only once #444 has landed its pixel-moving changes and the comment-bearing fixtures have had their reviewed refresh; until then a 90-minute LibreOffice and Poppler traversal per pull request buys signal the ratchet cannot act on. Building the corpus surfaced a real converter defect. A visually empty paragraph was synthesized with a normal space, which is eligible for the converter's own leading/trailing-whitespace suppression and could reach the browser as an empty span. That removed the paragraph-mark line box and left a canonical paragraph anchor with zero geometry, so the strict PageMap rejected otherwise-valid documents — signature-table spacer rows most visibly. The placeholder now uses a non-breaking space, confined to that synthesized run.
The browser-page benchmark has rastered through Poppler for some time; the PDFs `@docxodus/export` actually produces were never measured. This routes them through the same raster contract over a ten-document pinned corpus with recorded provenance. The gates are layered deliberately. Conversion, page count, physical geometry, semantic content and the chart-vector contract are unconditional — no raster severity or attribution disposition can waive them, because a document that converted to the wrong number of pages is broken regardless of how similar those pages look. SSIM and ink metrics ratchet separately against a numbers-only record, and text and link extraction are gated independently so a text regression cannot hide behind an acceptable raster score. An environment fingerprint covering LibreOffice, Chromium, Poppler and the font contract is what keeps the ratchet honest: a changed environment reports `environment-changed` rather than being misattributed to the renderer. The committed record's numbers were recorded on the retired #505-#508 stack, whose barrier and font runtime differ from the ones that landed, so they are carried over as a starting point and annotated as such. The first complete run on this lineage will report `environment-changed` and needs a re-record. The unconditional gates do not depend on those numbers and are live now. The benchmark stays `workflow_dispatch`-only. The salvaged version ran on every pull request, but per the design doc this becomes the release gate only once #444 has landed its pixel-moving changes and the comment-bearing fixtures have had their reviewed refresh; until then a 90-minute LibreOffice and Poppler traversal per pull request buys signal the ratchet cannot act on. Building the corpus surfaced a real converter defect. A visually empty paragraph was synthesized with a normal space, which is eligible for the converter's own leading/trailing-whitespace suppression and could reach the browser as an empty span. That removed the paragraph-mark line box and left a canonical paragraph anchor with zero geometry, so the strict PageMap rejected otherwise-valid documents — signature-table spacer rows most visibly. The placeholder now uses a non-breaking space, confined to that synthesized run.
The browser-page benchmark has rastered through Poppler for some time; the PDFs `@docxodus/export` actually produces were never measured. This routes them through the same raster contract over a ten-document pinned corpus with recorded provenance. The gates are layered deliberately. Conversion, page count, physical geometry, semantic content and the chart-vector contract are unconditional — no raster severity or attribution disposition can waive them, because a document that converted to the wrong number of pages is broken regardless of how similar those pages look. SSIM and ink metrics ratchet separately against a numbers-only record, and text and link extraction are gated independently so a text regression cannot hide behind an acceptable raster score. An environment fingerprint covering LibreOffice, Chromium, Poppler and the font contract is what keeps the ratchet honest: a changed environment reports `environment-changed` rather than being misattributed to the renderer. The committed record's numbers were recorded on the retired #505-#508 stack, whose barrier and font runtime differ from the ones that landed, so they are carried over as a starting point and annotated as such. The first complete run on this lineage will report `environment-changed` and needs a re-record. The unconditional gates do not depend on those numbers and are live now. The benchmark stays `workflow_dispatch`-only. The salvaged version ran on every pull request, but per the design doc this becomes the release gate only once #444 has landed its pixel-moving changes and the comment-bearing fixtures have had their reviewed refresh; until then a 90-minute LibreOffice and Poppler traversal per pull request buys signal the ratchet cannot act on. Building the corpus surfaced a real converter defect. A visually empty paragraph was synthesized with a normal space, which is eligible for the converter's own leading/trailing-whitespace suppression and could reach the browser as an empty span. That removed the paragraph-mark line box and left a canonical paragraph anchor with zero geometry, so the strict PageMap rejected otherwise-valid documents — signature-table spacer rows most visibly. The placeholder now uses a non-breaking space, confined to that synthesized run.
Closes #444
Summary
final,original, andmarkupreview profiles plushidden,inline,endnotes, andmargincomment profiles across the browser API, Node API, CLI, worker, and WASM bridge.Verification
Viewable evidence
CI uploads
playwright-reporteven if a later test fails. It now contains bothnpm/test-artifacts/andnpm-export/test-artifacts/.Local viewers from the final run:
npm/test-artifacts/review-comment-profiles/index.html— all 12 browser profile combinationsnpm-export/test-artifacts/view-artifacts.html— Node/PDF matrix plus warn/strict/fail-closed evidence/tmp/docxodus-444-release-artifacts-2/index.html— complete generated-PDF ratchet evidence