Skip to content

BrandDocs v0.2.0

Choose a tag to compare

@ferdinandobons ferdinandobons released this 08 Jun 13:53
· 86 commits to main since this release

Hardening release: correctness fixes across all three formats, a real
doctor preflight gate, a uniform destructive-action policy, and a
3.10+ / CI matrix toolchain. Brand Profiles from 0.1.0 keep working
unchanged (schema 1.x is read as-is).

Added

  • doctor is now a preflight gate, not just a report: it exits nonzero
    when a required Python dependency is missing, so a broken environment
    fails before generation instead of mid-run.
  • doctor --json prints the machine-readable dependency/renderer probe;
    doctor --fast skips the slow LibreOffice render probes (visual QA is
    marked "not probed") for a quick check.
  • PowerPoint now expands reusable components / sections fragments,
    matching the Word vertical: a profile-defined fragment inlines
    identically across formats, fail-closed (an undefined reference raises
    rather than silently dropping content).
  • Schema: a profile whose major version is newer than this build supports
    now fails with a single clear "upgrade brand-docs or re-extract" message
    instead of a pile of confusing per-field errors, and a forward
    migrate() seam is in place for future schema growth.

Changed

  • The destructive-action confidence floor (>= 0.5) is now applied
    uniformly at every reconcile site across Word, PowerPoint, and Excel
    from a single source of truth, so a low-confidence delete is downgraded
    to keep-with-warning consistently (previously only some sites enforced
    it).
  • PowerPoint now honors the profile-resolved body placeholder index
    (ph_idx) when filling body content, instead of always assuming the
    first placeholder.
  • Python floor is now 3.10+ (declared in pyproject.toml
    requires-python). CI runs a 3.10 / 3.11 / 3.12 matrix, a ruff lint +
    format gate, and a real-render lane that installs LibreOffice + poppler
    and actually executes the visual end-to-end tests (a broken renderer
    fails the lane).
  • Reference docs (block catalog, profile schema) are synced to the engine
    and guarded by a freshness test; a fixture-determinism guard keeps the
    test fixtures byte-stable.
  • Internal: a shared ooxml/ layer now centralizes qualified-name
    helpers, the complex-field walk, and ZIP byte-idempotency, removing
    duplicated boilerplate from the format generators.
  • README slimmed and repositioned; the GitHub Pages site is split from the
    human-facing documentation/; em dashes removed across skills and
    metadata.

Fixed

  • Excel no longer crashes when a named region's first row straddles a
    merged banner: writes to a merged-slave cell are guarded (only the merge
    anchor is writable) and the skipped value surfaces as a block_degraded
    warning instead of raising or being lost.
  • PowerPoint no longer silently drops Component / Section / Toc / Divider
    blocks it has no native writer for: each now emits a visible
    block_degraded warning, honoring the "never drop content silently"
    invariant.
  • Word generation is now byte-deterministic: re-running the generator on
    the same inputs produces an identical file (ZIP entry timestamps are
    pinned), matching the existing PowerPoint and Excel behavior.