HTML anchors and component links now produce native PDF navigation. External
URLs, email links and internal destinations survive wrapped text, images,
transforms, page fragments and recipient-specific reflow. Tagged output retains
the tested Link, annotation-reference and parent-tree relationships. Styled and
unstyled component HTML exports retain their original href values.
Inline opacity now applies to text and images as a composited group while preserving wrapping and pagination. Fully transparent content leaves no active PDF link. Empty destinations retain their normal layout behavior. Plain text, neutral spans and neutral links share table-cell alignment; odd and fractional dimensions no longer introduce baseline shifts. The preview server cleans up timed-out render processes and recovers on the next save.
Cells containing inline text followed by block content retain inherited center and right alignment. This includes Common Ground's percentage labels above its budget bars; 56 regression cases cover both authoring paths and direct, compiled and reflow output.
Imported-link cropping retains appearance placement and targets without drawing an extra border along the cut. For border-only sources, Fullbleed creates an explicit appearance from the declared border. Readers disagree on their source fallback rendering, so this is not a promise to reproduce each reader's pixels. The navigation guide and independent reader checks describe the scope.
The implementation in PR #125 passes 1,570 native tests and 1,365 Python tests. All 426 targeted Chromium vertical-origin comparisons match within 0.001pt. Independent imported-border checks retain 63,000 analytic samples with no differences, alongside negative controls and the source-reader limitations. The unchanged 1,662-fixture CSS comparison reports 1,625 PASS, 19 FAIL and 18 REFERENCE-DISPUTED: two improvements against published alpha 13 and no new failing fixtures. The 29 output PNGs for the remaining failures are byte-identical to that baseline.
This entry describes a candidate until publication completes. The
alpha 14 runbook requires qualification of the
final-version wheel and public artifacts. Component authoring remains alpha;
the existing API and ordinary stable installation remain available. Python uses
2.6.0a14; Cargo source uses 2.6.0-alpha.14.
Reader hit regions can exceed some sloped painted shapes. Exact curve behavior, keyboard navigation, assistive-technology behavior and mouse-highlight parity are unqualified. Composition does not preserve imported structure trees. Dedicated PDF/VT validation remains unavailable. No general browser parity, accessibility conformance or stable-component graduation is claimed.
Styled spans and links no longer drop a paragraph's ::first-letter styling
when it takes the rich-inline authoring path. Floated initials reserve their
line space, clear words that cannot fit beside them, and stay on the first
fragment when a paragraph continues across pages. Inline initials stay with
the rest of their word, including across a text-node boundary.
The implementation in PR #121 passed 1,488 Rust unit tests and 981 local Python tests. Its 22 independent Chromium print references cover styled descendants, inherited emphasis, backgrounds, punctuation, whitespace, physical left/right floats, percentage edges, narrow words and page continuation. Both optimized CI platforms match the reviewed candidate's 66 PDFs and 56 preview images in PDF bytes and image pixels, respectively. Direct PDF, compiled replay, reflow, repeat determinism, native previews and render-time paragraph/text ownership are checked.
All 1,662 verdicts and 7,437 PDF/PNG outputs in the independent corpus match the qualified 2.6.0a12 baseline: 1,623 PASS, 21 FAIL and 18 REFERENCE-DISPUTED. Its existing failing gate remains visible. The alpha 13 runbook requires final-version qualification and public-package verification before publication; the implementation evidence alone is not a release approval.
The new reference gate covers horizontal styled inline content. Generated
initials, decorated inline ancestors, vertical text and the separate
initial-letter sizing model remain outside its scope. Reading-order trace
checks do not establish accessibility conformance. The component API remains
alpha while independent kit integration and author feedback are unresolved.
Python uses 2.6.0a13; Cargo source uses 2.6.0-alpha.13.
Use fullbleed.components for the new document component API and
fullbleed.components.bootstrap for its static Bootstrap kit. These modules
re-export the existing objects, styles and type contracts. Earlier alpha
imports from fullbleed.ui.experimental remain supported; the established
fullbleed.ui.Document decorator and existing component API are unchanged.
The complete-document migration example maps styles, literal class selectors, body typography, page geometry, metadata, explicit fonts and renderer options. Its A5 portrait and Letter landscape reports match the old authoring path in independent PDF text and exact 96 dpi pixels across six pages per path. Both styled and unstyled HTML are retained. This is an explicit migration example, not an automatic converter for arbitrary stylesheets.
The implementation passed 980 Python tests, both namespaces' mypy/Pyright contracts, and 24 real language-server completion checks per namespace. Its four paired PDFs and twelve HTML/CSS files match the published alpha 11 runtime byte for byte when only the import prefix changes. The independent source corpus retains 1,623 passes, 21 failures and 18 disputed references. These are implementation checks; the alpha 12 runbook requires qualification of the final new-version package before publication.
This entry describes a candidate until publication completes. Python uses
2.6.0a12 and Cargo source uses 2.6.0-alpha.12. Components remain alpha while
independent kit integration and author feedback are unresolved. No native
rendering behavior, runtime dependency, conformance claim or stable API
graduation is added. Ordinary installation remains on the stable channel.
Styled HTML exports now apply Flow gaps in a browser without a layout
workaround. HTML uses a flex column, preserving independent child margins and
the existing recipe, prop, instance, named-part and selector precedence.
PDF rendering keeps native block pagination. Shared component children are
not rewritten during export.
PDF-only PageBreak markers are hidden in continuous styled HTML, avoiding
an empty flex item and a second gap. Unstyled export still omits generated
and inline styles. Use compile(target="pdf") or
emit_artifacts(..., target="pdf") to retain exact native print source.
Browser layout is not a PDF pagination preview.
The implementation passed 973 Python tests and 171 browser geometry/export checks across Chromium, Firefox and WebKit. Its 20 native Flow PDFs, 30 preview images and print source match the published alpha 10 wheel byte for byte. Common Ground also retains its native PDF and previews. The independent corpus remains at 1,623 passes, 21 failures and 18 disputed references; it is not a complete CSS-conformance pass. The final release must reproduce this evidence before publication.
The alpha 11 runbook defines that qualification.
This entry describes a candidate until publication completes. Python uses
2.6.0a11 and Cargo source uses 2.6.0-alpha.11. The component API remains
experimental, exports remain static, and ordinary pip install fullbleed
stays on the stable channel. No core dependency or human accessibility claim
is added.
This component alpha carries solid underlines, overlines, strike-throughs and their shadows across interior word spaces. Collapsed spaces at a line boundary remain collapsed. Glyph placement and extracted reading text are preserved.
Ancestor decorations continue through a nested element with
text-decoration: none, using their resolved paint settings. Decorations stop
at atomic inline boundaries (inline-block, inline-table, inline-flex, and
inline-grid); an atomic element can still draw its own decoration. This does
not implement every combination of simultaneous CSS decoration layers.
The release workflow now retains the 80-case installed-wheel decoration-space matrix and independent PDF previews, alongside the existing thickness checks. The merged implementation improved four fixtures in the unchanged independent CSS corpus: 1,623 pass, 21 fail, and 18 are reference-disputed. Those are scoped comparison results, not a passing CSS or browser-conformance claim; the final release output must reproduce them before publication.
The experimental component API, static Bootstrap kit, PageBand/PageNumbers and
styled/unstyled HTML export remain available. Python uses 2.6.0a10; Cargo source
uses 2.6.0-alpha.10. The alpha 10 runbook
defines qualification and public verification. This entry describes a candidate
until publication finishes. Ordinary pip install fullbleed remains on the
stable channel. Human assistive-technology usability and dedicated PDF/VT
validation remain outside this release's verified scope.
This component alpha adds reusable page headers, footers and finalized page
numbers to the installable Python API. Put ordinary components in a PageBand
and attach it through Page(header=..., footer=...). Their styles, resources,
themes, named parts and authored class_name selectors travel with them.
PageNumbers supports current and total pages, including numbering that resets
for each compiled record. Bands have explicit first-page and blank-page policy.
The existing three positional Page geometry arguments remain compatible.
The Common Ground field-notes example shares styled brand components between
its body and margins and renders three numbered pages.
Native layout and conservative painted-bound checks reject managed band content
that cannot be proved to fit before it can be clipped. Diagnostics retain the
page, slot, record and authoring source. Page owns the margins; bands do not
silently enlarge them. Text measurements require explicitly registered fonts.
Conservative bounds can reject some decorations that would visually fit.
Styled and unstyled HTML exports contain one semantic header, main and footer,
with explicit [page] and [pages] placeholders. They do not paginate the browser.
Bootstrap components and exports remain static. Existing authored showcases and
the accessible guide are included in the release qualification.
The API remains under fullbleed.ui.experimental. Streaming output is not atomic,
and changed bindings reflow running content. Existing CSS comparator failures and
disputed references remain visible. Fixture-specific PDF/UA checks do not
establish conformance for arbitrary documents or human assistive-technology
usability. Dedicated PDF/VT validation remains unconfigured.
Python uses 2.6.0a9; Cargo source uses 2.6.0-alpha.9. The
alpha 9 runbook defines qualification and public
verification. This entry describes a candidate until publication finishes.
Ordinary pip install fullbleed continues to select the stable channel.
This component preview brings the published 2.5.34 running-header and page-furniture corrections into the experimental package. Generated margin text and decoration remain outside body reading order. Compiled reflow refreshes captured headers and footers when record values change, including values shared with body text.
Page-margin boxes resolve sizing and alignment together. Internal deferred
running content uses the final slot width for each page and record, including
named page sizes. Its diagnostics identify measured-box fit failures at the
authoring source. Those checks do not establish visible-ink containment: shadows,
transforms, positioned descendants and oversized paint can still clip. Public
PageBand and PageNumbers constructors are not included.
Components retain owned styles, named parts, literal class_name selectors and
styled/unstyled HTML export. Bootstrap components and exports remain static.
The release gates recreate Northstar, Common Ground and both accessible guide
profiles through their component and HTML/CSS authoring paths.
Changed bindings trigger full reflow for running content even when the header is static. Streaming output is not atomic. The independent CSS corpus retains its known failures and disputed references; neither the preview nor fixture-specific PDF/UA checks establish general CSS or accessibility conformance. Human assistive-technology usability and dedicated PDF/VT validation remain unverified.
Python uses 2.6.0a8; Cargo source uses 2.6.0-alpha.8. See the
alpha 8 runbook for qualification and public
verification. This entry describes a candidate until publication finishes.
Ordinary pip install fullbleed continues to select the stable channel.
This component preview corrects table-caption ownership (issue #98). Each nonempty visible caption belongs directly to its logical Table and contains paragraph content. Top and bottom captions retain their reading order across page breaks; nested tables and batch records retain separate owners. Empty or hidden captions preserve their layout without creating empty caption tags.
The Common Ground accessible showcase now accepts --pdf-profile pdfua1 or
--pdf-profile pdfua2 for rendering and verification. Both the component and
exported HTML/CSS paths use that profile. Its independent PDF reader also
rejects duplicate or detached captions, alongside the existing marked-content
and reading-order checks.
Caption placement and visible document content are preserved, while tagged PDF structure changes. The release gates compare saved output with the qualified caption candidate and retain independent validation evidence. See the alpha 7 runbook.
The component API remains experimental. Bootstrap components and HTML exports remain static. The authored specimen's machine checks do not establish human assistive-technology usability or conformance for arbitrary documents. Stable 2.5.32 remains the default installation; this is an opt-in prerelease.
This experimental component release integrates the 2.5.32 native pagination and compiled-reflow corrections. Rich table cells with default baseline alignment can continue paragraphs and lists across pages while keeping logical cells, column geometry and ending decoration. Replayed and changed batches retain the correct visible recipients, font resources and table column widths.
The component runtime retains source-aware fragmentation diagnostics. Supported continuations and rounded list fragments use the corrected geometry; unsupported alignment, row spans and monolithic content retain precise authoring-source failures where the engine cannot continue them. Both direct HTML/CSS and authored component exports are included in the release gates.
The Python component API remains experimental and static. No Bootstrap JavaScript is included. PDF/UA-2 caption containment remains a known limitation (issue #98). See the alpha 6 runbook for qualification and the paired/accessible showcase requirements.
This Python component candidate integrates stable 2.5.30 inline-spacing and 2.5.31 rich-table tagging corrections. Rich cells retain their TH/TD structure while nested paragraphs, styled spans, lists, figures and tables own their content. Plain cells retain their existing text owner. Same-font colored spans and generated content also use the corrected logical line box at unit line height.
The merge preserves the alpha's logical oversized-cell fragmentation, authored layout diagnostics and semantic flex/grid behavior. Components, owned styles, named parts and static Bootstrap/HTML export keep their existing API. The paired Northstar/Common Ground examples and accessible guide require their own installed-output, independent-reader and source-kit verification.
Python uses 2.6.0a5; Cargo source uses 2.6.0-alpha.5. Follow the
alpha 5 runbook. This entry describes a candidate
until its full source, public-package and guide-delivery gates pass. Existing
caption-containment failures must remain visible; no general accessibility,
CSS, Bootstrap or browser-conformance claim is made. The dedicated PDF/VT
validator remains unconfigured.
This Python component alpha includes the stable 2.5.29 correction for isolated transparency groups in saved-PDF PNG previews. Previously the PDF could contain the correct overlapping SVG shapes while its saved-PDF preview appeared too dark. The reader now composites an isolated group before applying its opacity.
The SVG gates also check repeated saved-PDF previews. Component coverage follows named-part opacity through direct documents, styled HTML exports and unstyled exports with host CSS. Existing expected colors and tolerances remain in place.
The component API, Bootstrap kit and static HTML export behavior remain the same.
Python uses 2.6.0a4; Cargo source uses 2.6.0-alpha.4. See the
alpha 4 runbook for the required source,
installed-wheel, component, independent-reader and public-distribution checks.
This entry describes a candidate until those publication gates finish.
This change is scoped to isolated groups emitted by Fullbleed. It does not establish complete Bootstrap, browser, CSS, external-PDF or standards conformance. The dedicated PDF/VT validator remains unconfigured.
This Python component alpha integrates the released 2.5.28 inset-shadow fixes. Signed spread, large offsets and translated rounded holes now use the corrected geometry; table cells share that behavior. Zero-blur shadows stay vector, clear edges avoid faint clipping fringes, and native previews preserve off-page blur support before applying the destination clip.
Explicit font choices now replace an earlier variable-based font declaration.
This fixes Bootstrap cards ignoring a document's Theme font and also covers
class rules, root/part overrides, inline declarations and font shorthands.
Installed-wheel checks inspect the embedded font program and both static HTML
export modes. Documents that previously received the wrong font can reflow.
Direct inline children of flex containers now retain their own layout boxes. This preserves authored font metrics, dimensions, margins and padding, including the space between Bootstrap navbar labels and between toast header labels. Paragraphs, headings and generic text elements also honor their declared flex or grid layout while retaining paragraph and heading tags in the rendered document.
The experimental component API keeps its owned styles, literal class_name
selectors, named parts and to_html(include_styles=True/False) exports. Bootstrap
components remain static in PDFs and HTML. See the
alpha 3 runbook for qualification of the component
and engine behavior together. Python uses 2.6.0a3; Cargo source uses
2.6.0-alpha.3. This is a candidate until the publication gates finish.
The stable source retains 1,620 PASS, 24 FAIL and 18 REFERENCE-DISPUTED cases. The alpha's own full-corpus result must be retained separately; neither component coverage nor focused output checks establish complete CSS or accessibility parity.
This opt-in Python alpha brings the qualified 2.5.27 inline SVG cascade and
isolated-opacity fixes into the experimental component branch. Document class
rules, inherited paint and currentColor reach supported inline SVG descendants.
SVG assets loaded separately retain their own styling context.
The static Bootstrap 5.0.0 kit, component-owned styles, named parts and styled/unstyled HTML exports retain their existing API. Components remain static in both PDF and HTML; no Bootstrap JavaScript is added. The 2.6.0a1 and earlier preview downloads stay immutable.
Python uses 2.6.0a2; Cargo uses 2.6.0-alpha.2. The
alpha update runbook records the required
installed-package, component, SVG and independent corpus qualification. This
entry describes the candidate; registry publication requires the release gates.
This opt-in Python alpha introduces fullbleed.ui.experimental: function
components with immutable content and styles, explicit page geometry, reusable
themes, column-based tables and authored diagnostics. The Bootstrap 5.0.0 kit
supplies all 23 component families plus layout, content, forms and utilities.
Components carry the pinned stylesheet and export static HTML with
to_html(include_styles=True/False). PDF controls retain printed values and
selected states. No Bootstrap JavaScript, browser engine or required Python
dependency is added.
Custom components preserve ordinary Python signatures. Root styles and exposed
parts are immutable overrides. Required parts must have targets; optional parts
permit conditional content, and forward_parts() deliberately exposes selected
child parts through a parent without adding elements or exposing private parts.
The guide explains class_name, default versus explicit styles, eager data
capture, migration from the stable authoring API and the earlier GitHub previews.
The API remains experimental. The stable fullbleed.ui surface stays available;
this does not establish cross-language parity, complete Bootstrap CSS/browser
parity, PDF accessibility conformance or independent author usability. Existing
native CSS and PDF/VT validation limits remain documented. HTML-only export
still requires the installed Fullbleed distribution.
Python uses 2.6.0a1; Cargo uses the corresponding SemVer 2.6.0-alpha.1.
The release gate checks that both spellings, the lockfile, wheel metadata and
installed contracts agree. This alpha distribution targets Python; the Rust
registry's stable release is managed separately. See the
alpha runbook for verification and publication.
Compiled reflow now refreshes running headers and footers when record values change. A binding shared by ordinary body text and a captured running element could previously update the body while retaining the preceding record's header. This corrects the reproduced behavior in issue #104.
Generated page-margin text and decoration now share balanced artifact marking, keeping page numbers and repeated navigation outside the body reading order in tagged output. This addresses issue #103.
Documents with running content reuse compiled layout only for identical binding values. Changing body values also triggers reflow when the header itself is static, reducing cache reuse. The choice preserves correct record content; dependency-aware reuse can be optimized separately.
The stable correction retains existing page-margin geometry. The proposed component page-band API remains in development. CI and release jobs retain saved-PDF regressions for page furniture and running record values.
See the 2.5.34 runbook for verification scope and release gates. Fixture checks do not establish accessibility for arbitrary authored documents.
Table captions now remain inside their logical Table in tagged PDF output, with one Caption group containing the caption paragraph. Top and bottom captions retain their reading order across page continuations, nested tables, compiled rendering and separate records. Empty or hidden captions retain their layout without adding empty caption tags.
This stable update carries the engine correction from the 2.6.0a7 preview. The experimental component API remains in the separate preview release. CI and release builds now retain the saved-PDF caption regression matrix.
See the 2.5.33 runbook for validation scope and release evidence. Profile selection alone does not establish accessibility conformance for an authored document.
Oversized table cells can continue their text, paragraphs and lists across pages with their repeated headers. The splitter handles top and default baseline alignment, keeps column widths stable, and leaves content with ending cell decoration instead of emitting an empty trailing page. This addresses the repeated-header stall in issue #99. Continued cells retain one logical TH/TD and their explicit header references.
Compiled reflow also preserves embedded font subsets when replaying cached pages. The replay cache is scoped to the actual batch values. Values whose visible text uses separate glyph outlines require layout when changed; updating only their searchable text could previously leave the first recipient's name visible. Changed table values also require layout so that columns and other cells follow the current record's content, including tables marked as presentation. Independent PDFium checks compare each record with a separately rendered PDF, including regular and synthesized-bold text, table geometry and both compression modes.
The new 240-case output gate checks visible ink, page bounds, content counts, logical cells, header links, tagged/untagged pixels and repeated-render bytes. Existing caption limitations in issue #98 remain separate. This does not establish general PDF/UA conformance or support for every oversized rowspan/alignment combination. The experimental component release requires its own qualification. No runtime dependency is added.
See the 2.5.32 runbook for evidence and release gates.
Rich table cells now keep their TH/TD structure separate from independently tagged text, lists, images and nested tables. Previously, a cell containing a paragraph or styled span could produce nested marked-content IDs even when a PDF/UA validator reported a passing profile result. Table borders and backgrounds are marked as artifacts. Plain cells retain their existing text owner; untagged native content inside rich cells receives a content owner.
The saved-PDF regression gate covers 180 cases across tagged PDF, PDF/UA-1 and PDF/UA-2, using direct, compiled, repeated and reflow output with both compression modes. It checks marked-content nesting, structure and parent-tree ownership, header scope, row/column spans, explicit header references, alternative text, pagination, text retention and repeated-render determinism. CI retains the PDFs and independent previews. This corrects issue #97.
Existing PDF/UA-2 table-caption containment failures remain tracked in issue #98. The new table gate is a focused structural regression check, not proof that all PDF/UA documents are conformant. A pre-existing oversized rich-cell pagination stall remains tracked in issue #99; the passing pagination fixtures split between rows. No runtime dependency or public authoring API is added. The experimental component library remains a separate opt-in release.
See the 2.5.31 runbook for validation evidence and publication gates.
Same-font colored spans and generated content now preserve authored row spacing
at line-height: 1. Previously, affected font sizes added one CSS pixel to each
row: 24 rows that fit on three pages as plain text could become four pages after
adding an accent color. Direct rendering and compiled reflow use the corrected
logical line box. Registered fonts with integral CSS-pixel sizes and unit line
height use nearest-pixel descent. Logical line geometry retains its half-pixel
phase until painting; mixed-size text encloses the parent strut without changing
table, page-margin or atomic-inline baselines. Floated initials keep their
existing glyph placement, and text shadows preserve the foreground baseline.
The installed-output gate checks 380 cases by reading saved PDFs with PDFium: absolute baselines at integral and fractional origins, row spacing, pagination and mixed-size border geometry. The public 2.5.29 wheel fails 22 of the original 64 spacing cases. The expanded gate retains fresh browser measurements with pinned fonts. The existing 20 floated-initial references and tolerances remain unchanged. Runtime dependencies and authoring APIs are unchanged.
Remote-template help now points to fullbleed new list so users can discover
available starters instead of copying an unavailable template ID.
See the 2.5.30 runbook for the independent corpus review and final publication gates. Remaining fractional line-height paint differences are outside this correction. The static Bootstrap component alpha remains a separate opt-in release.
Native previews of finalized PDFs now composite isolated transparency groups before applying their opacity. Overlapping SVG shapes and reused symbols no longer become darker in PNG previews than in the generated PDF. Member opacity, stroke opacity and nested group opacity remain distinct. Runtime dependencies and the document authoring APIs are unchanged.
The SVG output checks now inspect both layout previews and previews read from the saved PDF, across direct, compiled, fixed-binding and reflow output. The previous public wheel fails 16 finalized-preview checks while its PDFium-rendered PDFs remain correct. The candidate must pass all 810 checks across 54 inputs and preserve the retained PDF bytes and layout-preview pixels before release.
See the 2.5.29 runbook for evidence and publication gates. This is a scoped correction for isolated groups emitted by Fullbleed; it does not establish general external-PDF renderer or CSS conformance. The separate static Bootstrap component alpha remains an explicit opt-in release.
Inset box shadows now preserve negative spread, large offsets and translated rounded corners. Table cells share the corrected geometry. Zero-blur shadows remain vector, and unshadowed edges no longer acquire faint clipping fringes. Blurred shadows retain contributing pixels outside the page and clip their filtered result in native previews. Runtime dependencies are unchanged.
The qualified feature checks cover 27 block, table and page-edge scenarios, including 16 complete clear-region comparisons at 300 DPI. Direct and compiled PDFs, native previews and independent PDFium pixels match across the retained Windows and Linux builds. The release pipeline runs the same installed-output checks and retains their artifacts.
The unchanged 1,662-case CSS comparator reports 1,620 PASS, 24 FAIL and 18 REFERENCE-DISPUTED results. Its conclusion remains failure: a clipping case is classified FAIL despite improved pixels, and rounded blur differs from Chrome print output. These reviewed differences remain visible in the evidence; the patch does not claim complete CSS or PDF standards conformance.
See the 2.5.28 runbook for the retained evidence and publication checks. The experimental Bootstrap component alpha and the Node/.NET engine versions are unchanged by this release.
Document CSS now reaches inline SVG shapes and text through the native cascade,
including ancestor selectors, stylesheet selection, layers, custom properties
and currentColor. SVG assets retain their own stylesheet context.
SVG group opacity composites overlapping shapes once. Paint alpha, inherited
fill/stroke opacity and group opacity remain separate; explicit root-opacity
inheritance, translucent currentColor, transparent masks and form reuse are
covered by installed-output fixtures. Masks keep the existing binary luminance
subset. No runtime dependency is added.
The feature checks cover 54 fixtures and 810 installed-output checks across Windows and Linux builds. The complete 1,662-case CSS comparator retains the baseline's 1,619 passes, 25 failures and 18 disputed references. One passing fixture has a reviewed antialiasing change at a translucent rectangle's perimeter; its slightly higher mismatch score is retained in the evidence.
See the inline SVG styling guide and 2.5.27 runbook for checks and limitations.
Render a complete HTML document with its embedded <style> sheets. Supported
static CSS now reaches direct rendering, compiled templates, previews, reporting
and batches without requiring callers to extract it into a separate argument.
Embedded @page rules also initialize streaming batches with the first record's
paper size.
CSS bundle assets, active embedded sheets and explicit CSS share the native cascade. Collection preserves document order, raw HTML style text, print-media conditions, stylesheet type, inert templates and static preferred sets. Each source has a separate parsing boundary, and malformed sheets or unsupported imports produce structured diagnostics. External stylesheets are still supplied explicitly; the engine does not fetch them or execute JavaScript.
The installed runtime advertises embedded_stylesheets. Compiled templates
capture their stylesheet sources; changing those sources requires compilation
again. Inline SVG retains its existing separate stylesheet handling, documented
in the guide and tracked in issue #87. No required runtime dependency is added.
The release check exercises 195 installed-output cases, retaining PDFs, extracted text, page boxes, native previews and independent PDFium images. The complete 1,662-case source corpus retains the same 25 failures and 18 disputed references as the master baseline; this is regression evidence, not general CSS parity.
See the complete HTML guide and 2.5.26 runbook.
Build complete PDF documents with React-inspired Python functions, props,
children and conditionals. Named text and document elements support rich
children. StyleSheet composes Python style mappings, while document artifacts
render PDFs and PNGs through an explicitly configured engine. The new rendering
path supplies overridable layout defaults for standalone rows, stacks and grids.
Nested lists and ordered generators become real children instead of printed Python representations. Boolean children act as conditional placeholders; ARIA and data boolean attributes retain explicit string values. Invalid HTML names, cycles and content on void elements fail clearly. Inline style composition preserves quoted values, data URLs and nested CSS blocks. Decorated functions retain their signatures and documentation.
The component guide and designed invoice demonstrate the workflow without authored HTML. Installed-package checks cover empty, paid, unpaid, escaped, credit and long-table data, plus layout geometry, glyphs, previews and repeat rendering. The explicit HTML/CSS API and Rust renderer remain unchanged. No runtime dependency is added. Node, Rust and .NET component ports are not part of this release.
See the component guide and 2.5.25 runbook. Structural authoring validation does not establish PDF accessibility conformance.
Scripts and style elements are now hidden by default in HTML output, including between block elements. Previously, their source text could appear in a PDF depending on the surrounding layout.
Text extraction for visual paragraphs, lists, preformatted text, and captions
now respects computed display:none on descendants. Authors can deliberately
display script or style source using CSS. display:revert restores the
element's user-agent display default, including through layers and important
declarations. Whitespace around visible source follows the same display rules.
The installed-output gate compares rendered PDFs, extracted text, native previews, and independent PDFium pixels with visible-content controls through direct, compiled, fixed-binding, and reflow rendering. No runtime dependency is added. Fullbleed still does not execute JavaScript or apply embedded stylesheets.
See the 2.5.24 runbook for release evidence and validation requirements. These checks do not establish complete browser parity or PDF standards conformance.
HTML text using text-decoration-thickness: from-font now draws underlines,
overlines, and strike-throughs at the first available font's preferred
underline thickness. Previously, authored HTML used the automatic thickness
even when a registered font supplied a different value.
The font metric is scaled from its native design units to avoid intermediate rounding. Fonts without a positive preferred thickness retain the automatic fallback. Automatic-thickness and explicit-length behavior is unchanged. The existing placement and minimum-width rules still apply to the selected stroke.
The installed-output gate covers Noto Sans, Inter, an unavailable first family, small text, and a font without a preferred thickness. It checks direct, compiled, fixed-binding, and reflow PDFs, independent PDF stroke widths, native/finalized previews, explicit-length controls, and deterministic replay. No runtime dependency is added.
This is a targeted HTML text-rendering correction. It does not establish complete CSS parity or PDF standards conformance. See the 2.5.23 runbook.
Floated ::first-letter initials in plain-text blocks now reserve their full
margin-box width for the lines beside them. Left and right drop caps keep
their padding, borders, backgrounds, and indentation, and sit in their own
line box instead of protruding above the paragraph's normal text baseline.
Words that cannot fit beside the initial move below it. Paragraph splitting
keeps the initial intact when the remaining page space is too short. Existing
inline first-letter and initial-letter behavior is preserved.
The installed-output gate covers 20 browser-checked cases across direct, compiled, and reflow PDFs, with independent text/geometry and decoration checks, native previews, and deterministic replay. The public 2.5.21 negative control fails the 18 float cases while both controls pass. No runtime dependency is added.
This fixes the existing horizontal plain-text block path; it does not expand first-letter selection into arbitrary nested inline content or general float layout. It does not establish complete CSS parity or PDF standards conformance. See the 2.5.22 runbook.
Border images using space now leave a region empty when no complete tile
fits. Previously, a partial tile could appear inside a narrow border or center
region. Complete tiles retain their existing spacing and centering.
The center fill now skips a zero-width top or left edge when choosing its natural scale. It uses the opposite edge, or the unscaled source when neither edge supplies a scale. This preserves the intended repeat pattern instead of stretching it to the destination region.
Installed-output regression coverage includes 18 raster and SVG cases, with native/finalized previews, independently rendered direct/compiled PDFs, and deterministic rerenders. Browser expectations and public-release negative controls are retained with the release evidence. No runtime dependency is added.
These are targeted rendering fixes. They do not establish general CSS parity or PDF standards conformance. See the 2.5.21 runbook.
Filtered and positive-z-index descendants now retain their ancestors' overflow
clips when painting is deferred. This prevents a tall filtered child from
escaping a rounded panel with overflow: hidden. Nested clips, one-axis
clipping, overflow-clip-margin, and transforms retain their geometry without
making overflow create a stacking context.
Reusable drawing resources remain defined before deferred paint commands. This also fixes filtered positive-z-index children disappearing when their form definition was scheduled after its first use.
The installed-output regression gate covers 16 browser-checked cases in native previews, finalized PDFs, and independent PDFium rendering, including compiled documents, repeated records, and fixed/reflow bindings. CI retains the 35 PDFs and their checks. No browser or PDF-reader dependency is added to the engine.
These are targeted rendering fixes, not general CSS parity or PDF standards conformance. See the 2.5.20 runbook.
Native Rust applications can render the table, flex, grid, and nested-layout regression cases on Windows' default 1 MiB main-thread stack in unoptimized builds. Previously, even a small table could terminate the process with a stack overflow.
Container state and computed styles now own their wide values on the heap. This reduces large builder temporaries and values retained during recursive DOM and table compilation. Public container methods, style calculations, and clone behavior are preserved.
Windows/Linux CI runs a standalone main-thread consumer in addition to the Rust test harness. It verifies nine document cases and retains 33 PDFs across direct, compiled, repeated, and reflow output. Windows checks the executable's actual stack reserve; the check does not use a larger worker or linker stack. The probes include 16 nested blocks, three nested tables, and styled, paginated containers. They do not promise arbitrary nesting depth.
No new dependency or rendering capability is introduced. Existing CSS corpus failures and PDF conformance limitations remain. See the 2.5.19 runbook.
CSS counters created by a heading now remain in scope for its following
siblings. A chapter that resets its section counter produces 2.1 for the next
section, instead of continuing the previous chapter at 2.3. Nested branches
retain their own counter scopes.
Table groups, rows, and cells apply counter mutations once, in source order. Plain table cells preserve generated labels, and boxless table elements do not mutate counters. The predefined footnote counter continues across paragraphs; counter increments clamp at the supported integer bounds.
The installed regression check covers twelve fixtures and 48 emitted PDFs across direct, compiled, repeated, and reflow rendering, including page breaks. Windows/Linux CI and the release workflow retain PDFs and extracted labels.
The existing nested-counter corpus fixture has a separate visual mismatch; this release does not claim to fix that fixture or implement complete CSS counter support. Public APIs and dependencies are unchanged. See the 2.5.18 runbook.
The native Rust API reference now starts with a complete first-PDF program, explicit font setup, and a guide to choosing buffers, writers, files, previews, and compiled templates. Core methods document their return values and failure behavior, including fixed-layout versus reflowing record bindings and the distinction between layout previews and previews of a saved PDF.
The font example loads bytes into an asset bundle so missing files and invalid font data surface as errors. File-based font registration helpers retain their existing behavior of skipping unreadable or invalid files. Writer/file methods return byte counts, and file methods can leave partial output on failure.
Cargo's documentation link now points to the hosted Rust API reference. CI builds that reference with broken internal links treated as errors, alongside the Rust suite's executable documentation examples. This release changes documentation, CI checks and release metadata; it does not change rendering algorithms or add new conformance claims. See the 2.5.17 runbook.
With only a regular face registered, font-synthesis: weight now permits only
synthetic bold, and font-synthesis: style permits only synthetic italics or
oblique text. Previously both values could enable both approximations.
The four synthesis controls now inherit independently. The shorthand resets
omitted controls; longhands support auto/none, and the style longhand also
supports oblique-only. CSS-wide values, layer rollback, declaration order and
invalid-value rejection have focused regression coverage. HTML decoration
geometry and SVG text use the independent style control. SVG stylesheet
!important declarations take precedence over normal inline declarations.
Small-cap controls gate the existing HTML fallback; position controls gate the
default footnote-call superscript fallback. These controls do not add general
OpenType small-cap or positional substitution, or suppress real selected faces.
Rust TextStyle.font_synthesis_weight now controls weight alone; callers that
also want to disable slant synthesis can set font_synthesis_style to
FontSynthesisStyle::None.
The installed regression checks cover 130 render cases and 221 pages, with deterministic replay, extracted text and independent PDFium comparisons. See font controls and the 2.5.16 runbook.
Two existing fixed-template limitations remain documented: synthetic small caps uppercases binding-slot names, and finalized native previews can omit synthetic-bold strokes even when the emitted PDF displays them correctly in PDFium. Use reflow for small-cap bindings and an independent PDF viewer for fixed-slot synthetic bold. No complete CSS Fonts or new standards-conformance claim is made.
Overlapping border-image-slice values now preserve the corner image content.
Each source slice is clamped independently; empty intervening regions leave
gaps instead of shrinking every slice. Uniform-gradient shortcuts also respect
those gaps. Proportional reduction of oversized destination widths is unchanged.
Finalized-PDF previews now apply a transparency group's soft mask and parent alpha once at the group boundary. This corrects missing gaps in masked forms; the PDF writer already retained the mask. Four renderer regressions cover path gaps, shading, overlapping members, and the mask transform with caller clipping.
The installed-wheel checks cover 21 gradient, PNG, SVG, overlap, clamp, fill, destination-width and mask-border cases in native previews, finalized-PDF previews and independent PDFium rendering. Release CI retains the PDFs and all three preview modes. See the 2.5.15 runbook.
The full corpus comparison of source commit 9ec4f71, before this version bump,
changed one case from FAIL to PASS. The other 1,661 PDFs were byte-identical to
the published 2.5.14 baseline. That source run has 1,617 PASS, 26 FAIL and 19
REFERENCE-DISPUTED results; its upstream gate remains failed. These are results
for that retained source candidate, not a fresh registry-wheel corpus run or a
claim of full CSS parity. The published 2.5.14 evidence remains unchanged.
Arabic text with combining marks could duplicate its base letters when copied from a PDF. Internal direction wrappers could also replace ordinary spaces in the PDF Unicode map. The map now distinguishes combining marks from their base cluster and omits internal direction-wrapper glyphs.
Styled inline text now resolves bidirectional levels across its containing line. Arabic labels, Latin identifiers and dates retain the surrounding text context; explicit isolation keeps a field's contents together through nested styles. RTL inline words participate in line wrapping, and inline blocks remain atomic objects in the surrounding bidi paragraph.
Standalone unicode-bidi rules are no longer discarded as empty declarations.
HTML direction attributes and bidi elements receive default styling. Author
rules take precedence over user-agent defaults, including within CSS layers.
The installed-wheel regression uses a pinned OFL Arabic font and independent PDF readers to check marks, spaces, styled siblings, date isolation, nested styles and narrow paragraphs. CI retains its PDFs, extracted text and previews. PDF readers still differ in their reconstruction of mixed-direction lines; these checks do not assert identical copy/paste behavior in every reader or universal language support. See the 2.5.14 runbook.
This is the published release of the tagged decoration, list numbering and figure-caption corrections described below for 2.5.12. The 2.5.12 tag was retained, but its registry workflows stopped before uploading packages because the README's wheel example still named the previous version.
The wheel example now matches the release. Pull-request CI also runs the release metadata check so future version mismatches are caught before tagging. The engine implementation is identical to the tested 2.5.12 source. See the 2.5.13 runbook.
Release date: October 7, 2026
A paragraph with differently sized inline text can emit a grouping tag with tagged children. Its borders and backgrounds previously remained outside both an MCID and an Artifact sequence, causing PDF/UA validation failures. Decorative paint now receives artifact marking when no enclosing MCID covers it. Meaningful figure paint keeps its existing structure, including within a grouping child.
Screen-reader-only ActualText also closes an automatic decorative artifact before its own marked-content sequence begins.
Lists now emit ListNumbering attributes from their rendered marker styles, including item overrides, nested lists and paginated fragments. Generic marker kinds and description lists use PDF 2.0 attributes only in PDF 2.0 profiles. Single-image figures retain their caption within the semantic Figure; the image alternative describes that group without being announced twice.
The regression checks inspect emitted PDF operators and structure trees across ordinary, compiled, repeated and reflow rendering with tagged, PDF/UA-1 and PDF/UA-2 profiles. The release gate also validates a richer specimen with decorated inline text, table headers, nested lists and captions before and after illustrations. The corrections change affected PDF structure; it is not a blanket accessibility or conformance claim. Keep reviewing each final document and its validation reports. See the 2.5.12 runbook.
Release date: October 6, 2026
An ordinary PDF using unembedded Helvetica, Times, Courier, Symbol, or Dingbats could produce blank native previews on a host without suitable fonts. The native renderer now uses compact, bundled OFL outline substitutes for these 14 faces. Registered and embedded font programs retain precedence. The PDF font resources, text and advances remain unchanged; default preview pixels intentionally change.
The substitutes total 508,020 bytes and cover every glyph in the pinned AFMs'
built-in encodings. The unencoded, vendor-private Symbol /apple logo is not
available. These are substitute designs, not original Standard 14 outlines.
Sources, reproducible generation, hashes and complete license notices are retained.
Font-resolution traces report bundled_substitute with a deterministic bundled
source, and runtime discovery adds bundled_standard_font_previews. Missing
requested fonts still retain their existing fallback reason. No runtime package,
browser, network download, or system-font installation is introduced.
The installed-wheel regression checks 68 cases, including all encoded glyphs, named AFM glyphs, explicit-font overrides and embedded-font controls. CI retains the PDFs and previews and compares Linux output with system fonts present and hidden. Local Windows and isolated Linux results also match pixel-for-pixel.
See the 2.5.11 release runbook. Node and .NET packages have separate releases; their current versions still use engine 2.5.10.
Release date: October 6, 2026
The 2.5.9 inline wrapping correction exposed word fragments to the shared line builder. Intrinsic sizing did not include the spacing and layout-unit rounding between those fragments. A flex or inline-block label could consequently wrap inside its own max-content width even when the page had enough room.
Intrinsic widths now reserve the same advances used by inline layout. Min-content sizing also recognizes collapsed-space word boundaries, while no-wrap runs keep their combined width. Leading and trailing collapsed spaces do not inflate it. This restores tracked labels and footers without reverting the styled-inline overlap correction. Affected PDFs can change line breaks and hashes; review saved baselines when upgrading.
The installed-wheel checks retain independent word coordinates and previews for six flex/inline-block specimens, alongside the existing 48-case wrapping suite. This introduces no public API or runtime dependency and is not a claim of full CSS or PDF standards conformance. Node and .NET packages have separate releases.
See the 2.5.10 release runbook.
Release date: October 6, 2026
A paragraph such as Edit <code>print.css</code> to change the paper size...
could place its wrapped text over the prefix. Mixed inline runs now expose
ordinary word boundaries to the shared line builder. Following text uses the
remaining line width, and collapsed spaces at wrapped line edges are discarded.
Line-box and background wrappers preserve space semantics; letter and word
spacing remain part of the advance.
Built-in proportional fonts use their bundled PDF advances for inline word fragments, so separating a styled run does not introduce excessive word spacing.
The change covers horizontal, left-to-right text with collapsed whitespace. Preserved whitespace, no-wrap, vertical writing, and bidi runs retain their paragraph path. It adds no runtime dependency or public API. Affected PDFs can change line breaks, pagination, and hashes; review saved baselines when upgrading.
The internal PDF text extractor can return additional newlines between separately positioned words. Normalize whitespace when checking complete phrases.
The installed-wheel regression checks direct PDFs, fixed bindings with an explicitly wide enough variable slot, and both compiled reflow compression modes. It retains native previews, independent PDFium previews, text extraction, and word bounds. Fixed-template replacement streams are checked by visual position and single-copy content, without claiming their stream order equals reading order.
See the 2.5.9 release runbook. Node and .NET packages have separate releases; this core release does not update them.
Release date: October 5, 2026
Registering an italic face before its regular sibling previously made normal
family text use the italic font. Family aliases now prefer an upright face and
the CSS weight-400 fallback order. Both legacy and typographic family names are
recognized, and directory registration uses sorted paths. Face-specific names,
explicit source aliases, and @font-face mappings remain available; duplicate
explicit aliases and equally ranked family faces retain first-registration
priority.
Affected PDFs can change appearance, line breaks, and hashes. Review saved baselines before accepting updates. The core adds no dependency or public API. The installed-wheel check compares 54 cases / 84 pages with explicit-face controls, inspecting embedded fonts, extracted text, and native/PDFium previews. This is focused regression evidence, not complete CSS font matching conformance.
See font registration and the 2.5.8 release runbook.
Release date: October 5, 2026
TrueType subsets now omit unused character-map entries, glyph names, and metrics while preserving the original glyph IDs, retained outlines and instructions, composite dependencies, advances, and font notices. Horizontal-header extrema are recalculated for the subset. Character-map formats other than 4 and 12 keep their original bytes; an unsupported or larger map rewrite uses the source map.
The change adds no runtime dependency and does not change the rendering API. PDF bytes and hashes change. Review stored PDF baselines before updating them. Independent font, text, and pixel checks are described in the 2.5.7 release runbook. Claims remain limited to the retained fixtures and validator reports.
Release date: October 3, 2026
PDFs using upright synthesized bold previously contained both visible Type 3 glyph text and an invisible logical text copy. Independent readers could extract headings twice or interleave their letters. Visible glyphs now use shared vector paint forms, leaving one logical text copy for search and extraction.
The finalized preview reader preserves the affine transform of those path forms so outlines and strokes scale together. Selecting an unused fallback font after a transformed element no longer causes an embedded-font profile to reject the document. Fonts used by actual text still require embedding for those profiles.
Installed-wheel checks cover 36 styled fixtures across ordinary, tagged, and PDF/UA-1-profile output, with retained PDF/PNG evidence and an independent text reader in CI. Local comparisons use four text readers. These fixture checks do not establish general renderer parity, screen-reader acceptance, or standards conformance. The core gains no runtime dependency.
Affected PDF and finalized-preview hashes change. Review saved baselines before updating them. See the 2.5.6 release runbook.
Release date: October 2, 2026
Native previews now paint linear and radial gradient fills from finalized PDFs. Earlier versions ignored the PDF shading operator, leaving chart bars and other gradient backgrounds blank even though a PDF viewer displayed them correctly.
The reader preserves stitched color stops, coordinate transforms, clipping, and the gradient opacity masks emitted by Fullbleed. Form boundaries clip their contents and keep their paths and graphics state separate from the caller. Bounded function parsing rejects unsupported gradient programs explicitly. The change adds no core runtime dependency.
The supported preview subset includes exponential and stitching functions for axial and extended radial shadings, plus Fullbleed's generated hard radial bands. Arbitrary calculator functions, mesh shadings, nonextended radial shadings, and nonidentity mask transfer functions remain unsupported. These checks do not establish general PDF rendering parity or standards conformance.
Affected PNG hashes change. Review corrected previews before updating stored baselines. The retained authoring fixtures check that this preview fix leaves their PDF bytes unchanged.
See the 2.5.5 release runbook for the installed-wheel gradient checks, earlier-version negative control, and independent comparisons.
Release date: October 2, 2026
Native previews of finalized PDFs now use the standard advances for unembedded
Helvetica, Times, Courier, Symbol, and ZapfDingbats fonts when the PDF omits
/Widths. Earlier versions used a constant fallback advance, which could spread
narrow letters apart or overlap wide letters even when a separate PDF viewer
displayed the document correctly.
The preview reader respects built-in encodings and explicit encoding differences. Explicit PDF widths and embedded replacement fonts keep their existing behavior. The bundled metric and character tables add no runtime dependency. Their pinned sources, generator, and redistribution notices are included in the source tree.
This patch changes native preview placement, so stored preview hashes may change for affected PDFs. Review the new images before updating a reproducibility baseline. PDF authoring and layout measurements are unchanged. Unembedded fonts still use the preview renderer's available substitute outlines; the fix does not promise identical outlines across PDF viewers.
See the 2.5.4 release runbook for regression checks against explicit reference widths and the scope of retained verification.
Release date: October 2, 2026
--repro-check now rejects empty or malformed records, unsupported record schemas,
missing or invalid SHA-256 fields, and invalid asset-lock metadata. Earlier releases
could report success for {} or a record without hashes. Unreadable JSON and
non-object JSON return a structured REPRO_RECORD_INVALID failure.
A recorded asset lock now detects file removal, addition, and changed contents.
Using --repro-record and --repro-check on the same file, including an existing
hard-link alias, returns REPRO_RECORD_CONFLICT without replacing the baseline.
Different files remain supported so a failed check can retain a candidate record
alongside the changed PDF and previews for review.
Valid fullbleed.repro_record.v1 baselines remain compatible. Unknown metadata
fields remain accepted. The installed record schema supplies the validation rules
and generated agent contract. This patch changes CLI checks, not rendering code,
and adds no core runtime dependency.
Upgrade before using reproducibility records as CI gates:
python -m pip install --upgrade fullbleedSee the CLI reproducibility notes and 2.5.3 release runbook. A matching hash establishes agreement with the recorded fixture, not visual correctness or PDF conformance.
Release date: October 2, 2026
The MCP tools now explain every input parameter, including source selection, workspace paths, preview resolution, PDF profile prerequisites, and asset action requirements. Compiled-document tools describe columnar bindings, static versus reflow output, handle reuse, and handle expiration. Verification guidance makes the selected failure checks explicit.
Tool descriptions distinguish rendering, previewing, document verification,
existing-PDF inspection, and asset integrity checks. The asset action is correctly
named info. Side-effect hints acknowledge file replacement, compiled-handle
eviction, and possible network access when installing remote asset packages.
These hints describe existing behavior; they do not grant permissions or change
tool execution.
The shared runtime definitions supply the generated agent contract and both MCP entrypoints. Input and output validation constraints retain their existing shapes. This release adds no core runtime dependency and makes no rendering algorithm changes. The separately versioned MCP adapter remains 0.1.1.
Upgrade the engine in the Python environment used by your MCP client, then restart that client:
python -m pip install --upgrade fullbleed fullbleed-mcpThe agent setup guide covers local MCP configuration and installing the Agent Skill from a pinned GitHub release. See the 2.5.2 release runbook for the required verification and publication checks. Tool descriptions and profile selection do not establish PDF standards conformance.
Release date: October 1, 2026
MCP tool discovery now declares "type": "object" at the root of every tool's
output schema. Earlier schemas already described object-valued success and
error results through anyOf, but strict clients rejected tools/list because
the required top-level type was missing.
The correction lives in the shared runtime tool definitions. Generated agent contracts and both MCP entrypoints therefore describe the same schemas. Tool names, inputs, structured results, and error variants keep their existing shape.
Upgrade the engine in the Python environment used by your MCP client:
python -m pip install --upgrade fullbleed fullbleed-mcpThe release adds an independent interoperability check using the official TypeScript MCP SDK. It exercises discovery, a structured capabilities result, PDF preview generation, and a structured tool error against the installed wheel. The SDK is a development-only test dependency; the core Python package gains no runtime dependency. The Rust renderer is unchanged.
See the 2.5.1 release runbook for required checks and the evidence retained before publication.
Release date: October 1, 2026
fullbleed render --watch renders immediately, then rebuilds when explicit
HTML, CSS, asset, or file-backed configuration inputs change. Polling uses
Python's standard library and adds no runtime dependency.
python -m fullbleed render --html invoice.html --css styles.css --asset "@noto-sans" --out invoice.pdf --emit-image preview --watch- Add files or recursive directories with repeatable
--watch-pathoptions. - Editor save bursts are debounced; edits made during rendering trigger another pass.
- Missing inputs and failed render gates produce ordinary CLI errors while the watcher remains ready for the next edit.
- CLI output files and the preview directory are excluded from scans. Obsolete previews from this session are removed only if they remain unmodified.
--json-onlystreams the existing render-result and error schemas as newline-delimited JSON. Successful results include the PDF SHA-256; requested manifests refresh each cycle.- Stop with Ctrl-C. The polling interval and debounce duration are configurable.
The watch guide and complete invoice example explain the workflow. Fullbleed writes files; it does not launch or refresh a viewer, discover every dependency referenced inside source files, or rerun Python generators. Watch mode requires local input dependencies and file output. Use a one-shot render or verify command for delivery gates.
- A runnable first-invoice notebook includes a Colab link and a generated PDF preview.
- FastAPI, Flask, and Django examples serve the same invoice with shared rendering code and verified HTTP response headers.
- The designed showcase includes an editorial invoice, a vector-illustrated report, a tagged notice, and compiled member statements, with complete HTML/CSS, data, and licensed font sources. Its published PDFs remain reproducible with the public 2.4.0 wheel.
- The generated agent contract and CLI reference expose watch-mode flags, result streaming, and scope limits from the installed runtime.
- Ordinary one-shot rendering retains its existing behavior. No Rust rendering changes or new core Python dependencies are introduced by this release.
- The release matrix remains 15 CPython ABI3 wheels, supporting CPython 3.10–3.14. Rust MSRV remains 1.85; the audit crate remains 0.1.3 and the MCP adapter remains 0.1.0.
- Watch behavior is checked with an installed CLI process, including CSS edits, deleted-input recovery, recursive dependencies, stale-preview cleanup, and output exclusion. CI retains generated PDFs, previews, and JSON events. Native release-wheel checks also cover macOS and Windows architectures.
- Existing print-profile release gates remain required. Full ISO PDF/VT-1 conformance has not been independently established; this release does not claim certification or exhaustive ISO coverage.
See the 2.5.0 release runbook for the required checks and retained-evidence procedure.