From e15a2963e9dc27055e5d2f1b9eaae95a58954cd5 Mon Sep 17 00:00:00 2001 From: krflol Date: Wed, 7 Oct 2026 19:04:39 -0500 Subject: [PATCH] Publish complete current-wheel CSS corpus evidence --- docs/assets/css-corpus/IRONPRESS-LICENSE.txt | 21 ++ docs/assets/css-corpus/border-image-diff.png | Bin 0 -> 25789 bytes .../css-corpus/border-image-fullbleed.png | Bin 0 -> 26136 bytes .../css-corpus/border-image-reference.png | Bin 0 -> 28496 bytes docs/assets/css-corpus/source.json | 28 +++ docs/css-coverage.md | 2 + docs/guides/css-corpus.md | 195 ++++++++++++++++++ docs/guides/renderer-comparison.md | 2 + docs/stylesheets/extra.css | 7 + mkdocs.yml | 1 + tools/sync_reference.py | 6 + 11 files changed, 262 insertions(+) create mode 100644 docs/assets/css-corpus/IRONPRESS-LICENSE.txt create mode 100644 docs/assets/css-corpus/border-image-diff.png create mode 100644 docs/assets/css-corpus/border-image-fullbleed.png create mode 100644 docs/assets/css-corpus/border-image-reference.png create mode 100644 docs/assets/css-corpus/source.json create mode 100644 docs/guides/css-corpus.md diff --git a/docs/assets/css-corpus/IRONPRESS-LICENSE.txt b/docs/assets/css-corpus/IRONPRESS-LICENSE.txt new file mode 100644 index 0000000..d669694 --- /dev/null +++ b/docs/assets/css-corpus/IRONPRESS-LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Gaston Gouron + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/assets/css-corpus/border-image-diff.png b/docs/assets/css-corpus/border-image-diff.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e53ee8a50be0d2a80544b07d185ee0fa83c01a GIT binary patch literal 25789 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 T;(tq$I%V={lS(I?ckTZGypl9m literal 0 HcmV?d00001 diff --git a/docs/assets/css-corpus/border-image-fullbleed.png b/docs/assets/css-corpus/border-image-fullbleed.png new file mode 100644 index 0000000000000000000000000000000000000000..404fd360a14f44f92c30eb66a7c051d706c3a252 GIT binary patch literal 26136 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 literal 0 HcmV?d00001 diff --git a/docs/assets/css-corpus/border-image-reference.png b/docs/assets/css-corpus/border-image-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..2520d966dec1e7977a762c579ca3cde9f105dae1 GIT binary patch literal 28496 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 + +
+[![Chromium reference for the border-image overlap and sizing fixture](../assets/css-corpus/border-image-reference.png)](../assets/css-corpus/border-image-reference.png) +
Chromium reference
+
+ +
+[![Fullbleed 2.5.14 output for the same border-image fixture](../assets/css-corpus/border-image-fullbleed.png)](../assets/css-corpus/border-image-fullbleed.png) +
Fullbleed 2.5.14
+
+ +
+[![Above-floor difference image highlighting changed border-image patterns](../assets/css-corpus/border-image-diff.png)](../assets/css-corpus/border-image-diff.png) +
Above-floor difference
+
+ + + +[Image provenance and hashes](../assets/css-corpus/source.json) | [Upstream MIT license](../assets/css-corpus/IRONPRESS-LICENSE.txt). All failing cases remain in the complete report. + +## Results by category + +These are fixture counts within this corpus, not percentages of the CSS standard. + +| Category | PASS | FAIL | Disputed | +| --- | ---: | ---: | ---: | +| backgrounds-borders | 79 | 3 | 1 | +| backgrounds-gradients | 46 | 0 | 0 | +| block-box-model | 59 | 0 | 0 | +| clip-mask | 52 | 0 | 0 | +| color-opacity | 49 | 0 | 1 | +| effects | 57 | 2 | 1 | +| filters | 46 | 0 | 1 | +| flexbox | 132 | 0 | 0 | +| fonts-advanced | 25 | 1 | 0 | +| generated-content | 33 | 2 | 2 | +| grid | 95 | 1 | 0 | +| images-replaced | 38 | 0 | 0 | +| inline-text | 45 | 4 | 1 | +| interactions | 350 | 10 | 2 | +| lists-counters | 34 | 0 | 1 | +| multicol | 36 | 0 | 0 | +| overflow-clipping | 17 | 0 | 3 | +| paged-media | 82 | 2 | 3 | +| positioning | 22 | 0 | 0 | +| probes | 6 | 0 | 0 | +| selectors-cascade | 60 | 0 | 0 | +| tables | 97 | 1 | 1 | +| text-advanced | 47 | 0 | 2 | +| transforms | 44 | 0 | 0 | +| typography | 23 | 1 | 0 | +| units-values | 42 | 0 | 0 | + +### Failing fixtures + +The raw report retains the diagnostics and images for every failing case. + +- `backgrounds-borders/border-image-fill-axis-repeat` +- `backgrounds-borders/border-image-intrinsic-overlap-reset` +- `backgrounds-borders/border-image-round-horizontal` +- `effects/r2-box-shadow-inset-blur-radius` +- `effects/r2-text-shadow-blur-rgba` +- `fonts-advanced/fonts-advanced-font-synthesis-none` +- `generated-content/generated-content-counters-nested` +- `generated-content/generated-content-no-open-quote-depth` +- `grid/grid-display-contents-fragmentation-text-survival` +- `inline-text/inline-text-decoration-subpoint-geometry` +- `inline-text/inline-text-text-decoration-line-through` +- `inline-text/inline-text-text-decoration-overline` +- `inline-text/inline-text-text-decoration-color` +- `interactions/interactions-grid-fragmentation-svg-background-single-owner` +- `interactions/interactions-cartesian-backgrounds-borders-x-effects` +- `interactions/interactions-cartesian-block-box-model-x-clip-mask` +- `interactions/interactions-cartesian-clip-mask-x-clip-mask` +- `interactions/interactions-cartesian-clip-mask-x-tables` +- `interactions/interactions-cartesian-effects-x-overflow-clipping` +- `interactions/interactions-cartesian-effects-x-page-margins` +- `interactions/interactions-cartesian-filters-x-overflow-clipping` +- `interactions/interactions-cartesian-filters-x-paged-media` +- `interactions/interactions-transforms-x-font-synthesis-matrix` +- `paged-media/paged-footnote-counter-reset` +- `paged-media/paged-string-set-attr-start` +- `tables/tables-cell-generated-before-child` +- `typography/typography-font-weight-bold` + +### Disputed references + +These 19 REFERENCE-DISPUTED verdicts remain separate from the PASS count. The reference metadata is retained for every fixture, including the passing tagged case described above. + +- `background-clip-text-gradient` +- `opacity-text-glyph-group` +- `r2-mix-blend-mode-text-difference` +- `r2-filter-url-feturbulence-displacement` +- `generated-content-first-letter-dropcap` +- `generated-content-string-set-running-header` +- `inline-text-text-decoration-wavy` +- `interactions-cartesian-page-margins-x-paged-media` +- `interactions-cartesian-positioning-x-tables` +- `lists-counters-marker-side-match-parent` +- `overflow-axis-visible-hidden-coercion` +- `overflow-scroll-print-clip` +- `overflow-x-y-separate` +- `footnote-float` +- `paged-footnote-display-compact` +- `paged-footnote-max-height` +- `tables-colspan-max-clamp` +- `text-advanced-text-combine-upright-center` +- `text-advanced-text-combine-upright-digits` + +## Reproduce and evaluate your templates + +Follow the [pinned runner instructions](https://github.com/fullbleed-engine/fullbleed-official/blob/0136a801a4bfe4a0cab5379abdb17fbaa336b4b2/docs/ironpress-parity.md) to use the same corpus and adapter. The [retained workflow run](https://github.com/fullbleed-engine/fullbleed-official/actions/runs/37700802857) records the execution. + +The corpus runner needs Git, Docker, and a compatible Linux wheel. Its container +and external rasterizer are test tools, not dependencies of `pip install +fullbleed`. Cargo dependencies are locked separately for the upstream comparator. +The actual container image is recorded; operating-system packages are not a +byte-identical environment lock. + +A corpus result applies to its exact engine version, fixtures, fonts, references, +and comparison policy. It does not establish support for all CSS, browser +JavaScript, arbitrary web pages, accessibility standards, or PDF conformance. +Test your own templates with representative data and explicit fonts. + +See [CSS coverage](../css-coverage.md) for documented behavior and boundaries, or +the [shared-document renderer comparison](renderer-comparison.md) for PDFs and +timings from three application-style documents. That comparison uses different +versions and inputs; its results should not be combined with this corpus run. diff --git a/docs/guides/renderer-comparison.md b/docs/guides/renderer-comparison.md index c1406cd..c040027 100644 --- a/docs/guides/renderer-comparison.md +++ b/docs/guides/renderer-comparison.md @@ -97,3 +97,5 @@ python3 -m venv .venv The merged revision above contains the same benchmark files as the measured source snapshot. Run on a local Linux filesystem. `--smoke` exercises output qualification with fewer samples; it is not a performance run. Use the [recorded package list](../assets/renderer-comparison/packages.txt) as pip constraints (`-c packages.txt`) to reproduce the measured transitive dependency versions. Change the fixtures and acceptance contract to match your real documents before treating a result as relevant to your application. Fullbleed is a print-document engine. A browser remains relevant when JavaScript or live browser layout is the required behavior. See [Choose a PDF library](comparison.md) for that distinction and [CSS coverage](../css-coverage.md) for Fullbleed's tested surface. Three small fixtures on one host cannot establish a universal speed, memory, or quality ranking. + +For a larger fixture-level comparison, inspect the [Fullbleed 2.5.14 results on the pinned IronPress CSS corpus](css-corpus.md). That run uses different inputs, versions, and comparison rules; evaluate its results separately from these application-document timings. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index f88601a..26d42e2 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -12,6 +12,13 @@ .md-typeset .facts { padding: .8rem 1rem; border-top: 1px solid #718c8135; border-bottom: 1px solid #718c8135; font-size: .78rem; } .md-typeset .grid.cards > ul > li { border-radius: .4rem; } .md-typeset .gallery img { border: 1px solid #b3c5be; max-height: 23rem; object-fit: contain; object-position: top; } +.md-typeset .corpus-images { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .75rem; } +.md-typeset .corpus-images figure { margin: 0; min-width: 0; } +.md-typeset .corpus-images img { display: block; width: 100%; border: 1px solid #718c8140; } +.md-typeset .corpus-images figcaption { font-size: .7rem; } +@media (max-width: 600px) { + .md-typeset .corpus-images { grid-template-columns: 1fr; } +} .md-typeset .md-button { border-radius: .25rem; padding: .55em 1.15em; margin: .25rem .2rem .25rem 0; } .md-typeset .showcase-entry { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 1.7rem; align-items: center; margin: 1.2rem 0 3rem; } .md-typeset .showcase-entry figure { margin: 0; } diff --git a/mkdocs.yml b/mkdocs.yml index ecb8795..c11ada9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -113,6 +113,7 @@ nav: - Evaluate: - Choose a PDF library: guides/comparison.md - Three-renderer comparison: guides/renderer-comparison.md + - CSS corpus evidence: guides/css-corpus.md - PDF file size: guides/pdf-size.md - Performance evidence: guides/performance.md - FAQ: faq.md diff --git a/tools/sync_reference.py b/tools/sync_reference.py index c3f8733..7eeeac4 100644 --- a/tools/sync_reference.py +++ b/tools/sync_reference.py @@ -22,6 +22,12 @@ # Site-only context must survive later imports of the historical report. INTRODUCTIONS = { + "css-coverage.md": ( + "For the published Fullbleed 2.5.14 wheel, see the " + "[complete 1,662-fixture CSS comparison](guides/css-corpus.md), including " + "verdicts, the upstream gate outcome, PDFs, images, and file hashes. " + "The imported reference below preserves earlier version-specific reports." + ), "guides/performance.md": ( "For a current shared-input example, see the " "[Fullbleed 2.5.6, WeasyPrint, and Chromium comparison](renderer-comparison.md). "