Skip to content

Fullbleed 2.5.0: rebuild PDFs as you edit

Choose a tag to compare

@krflol krflol released this 01 Oct 18:08
· 111 commits to master since this release

Fullbleed Release Notes - 2.5.0

Release date: October 1, 2026

Rebuild PDFs while editing

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-path options.
  • 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-only streams 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.

Examples and discovery

  • 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.

Compatibility and verification

  • 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.

Retained release evidence

The release assets include SHA-256 checksums, the generated agent contract and CLI reference, and fullbleed-2.5.0-engineering-evidence.zip:

  • 15 platform wheels and the source distribution passed metadata checks; 19 installed-wheel checks passed.
  • All five native Windows/macOS watch checks produced the same final PDF SHA-256, matching the fresh public PyPI install check.
  • The required print gate passed 17 profile specimens and five PDF/VT source scenarios. The separate-parser gate passed 21 negative controls and its rewrite positive control. These are scoped engineering checks, not independent full ISO PDF/VT certification.
  • Every public PyPI file was downloaded and matched against the validated CI artifact. The published Rust crate was checked against the exact tagged source, including Cargo's registry normalization of the audit dependency. A clean Windows x64 environment installed the public Python wheel and passed runtime, contract, watch, and tutorial-invoice checks.

Candidate CI and crates.io publication passed. The release workflow passed all 38 engineering jobs; its final PyPI login failed because the trusted publisher configuration did not match. The same validated distribution files were subsequently uploaded with the maintainer-authorized API token and verified from the public registry.