Skip to content

0.2.5

Choose a tag to compare

@keenan-fullbleed keenan-fullbleed released this 17 Feb 23:55
· 204 commits to master since this release

Fullbleed Release Notes - 0.2.5

Release date: February 17, 2026

Summary

0.2.5 is a determinism-and-native-runtime release focused on composed image correctness, pure-Rust execution, and linker/perf hardening.

Key outcomes:

  • composed image output now reflects finalized/stamped template pages (not overlay-only renders)
  • native finalized-PDF raster path is engine-owned (no PyMuPDF dependency path)
  • native deterministic deflate upgraded to compressed blocks (LZ77 + Huffman) with concurrency scheduling
  • linker stream emission/compression paths hardened and instrumented
  • deterministic hashing contract expanded for image-emitting runs
  • golden baselines refreshed to current native engine outputs

Highlights

Compose Image Correctness (Native)

  • render --templates ... --emit-image ... now emits PNGs from finalized composed PDF pages.
  • output semantics are explicit via outputs.image_mode:
    • overlay_document
    • composed_pdf
  • compose-mode image smoke validation now asserts:
    • image count == composed page count
    • expected template-background pixels are present

Primary paths:

  • python/fullbleed_cli/cli.py
  • src/pdf_raster.rs
  • src/lib.rs
  • src/python.rs

Pure-Rust Runtime Path

  • removed runtime dependencies for compose image emission/smoke.
  • finalized-PDF raster replay is native Rust.
  • compression backend stays Rust-native (no system zlib/libz dependency requirement).

Native Deflate Upgrade

  • in-house deflate moved from stored-block baseline to compressed blocks.
  • implemented deterministic:
    • LZ77 tokenization
    • fixed-Huffman block coding
    • parallel chunk scheduling
    • parallel Adler-32 combination

Primary path:

  • src/flate_native.rs

Linker and PDF Stream Hardening

  • linker now emits binary streams for content/image/font/ICC paths.
  • content streams are flate-compressed by policy/threshold.
  • legacy alternate stream-encoding path removed to enforce single runtime writer behavior.
  • new perf counters for link/compression telemetry:
    • content_stream_raw_bytes
    • content_stream_encoded_bytes
    • content_stream_compressed
    • content_stream_ratio_ppm

Primary path:

  • src/pdf.rs

Determinism Contracts

  • expanded deterministic regression coverage for:
    • PDF bytes
    • PNG bytes
    • thread-count invariance
    • cross-process artifact parity
  • CLI deterministic hash contract for image-enabled runs now emits artifact-set digest semantics.
  • Python engine APIs now support optional deterministic hash file output via deterministic_hash.

Primary paths:

  • examples/template-flagging-smoke/run_cli_determinism_smoke.py
  • python/fullbleed_cli/cli.py
  • src/python.rs

Raster Font-Style Fidelity Fix

  • native raster fallback now performs style-aware candidate selection (regular/bold/italic/bold-italic).
  • subset-prefixed PDF base font names are normalized before fallback lookup (for example ABCDEF+Family-Style).
  • regression tests added for style-aware candidate selection and subset normalization.

Primary paths:

  • src/raster.rs
  • src/pdf_raster.rs

Verification and Standards

  • canonical smoke suite passed:
    • template-flagging smoke
    • CLI compose-image smoke
    • CLI cross-process determinism smoke
    • VDP backpage smoke
    • I-9 batch font dedup CI check
  • golden baselines were refreshed and verified as new standards for native runtime outputs.

Primary path:

  • goldens/expected/golden_suite.expected.json

Behavior Notes

  1. For image-emitting compose runs, image artifacts are now composed-page truth by default (image_mode=composed_pdf).
  2. Deterministic hash outputs for image-enabled CLI runs follow artifact-set semantics.
  3. Golden hash drift vs older dependency-backed raster outputs is expected and now standardized in refreshed baselines.

Upgrade Guidance

  1. Rebaseline any downstream snapshot/hash gates against 0.2.5 outputs.
  2. If your automation consumes deterministic hash files, verify artifact-set behavior for image-enabled workflows.
  3. Prefer native composed-image paths and remove any external PDF raster fallback assumptions.