Repository navigation
0.2.0
Breaking API changes; consumers must be rebuilt. Workspace files stay compatible in both
directions — the new fields are additive, so older builds still open newer workspaces.
Added
- Canvas profile change tracking — each page records the profile it was rendered with
(canvasRenderFingerprint()), so a later edit to that profile is detectable ProjectItem::detectCanvasConfigChange()— reports which pages a profile edit
invalidated, or that the profile list itself changedProjectItem::effectiveCanvasProfileIds()— the profiles a project actually renders
with, mirroringCanvasProfileMatcher's ruleProcessingOutcome::appliedProfiles— which canvas profile the pipeline applied to
each input
Changed
- Breaking —
ProjectItem::sanitize()now takes the workspace canvas profiles, and
flags config-stale files asDesynchronizedalongside the existing on-disk checks - Breaking —
ProjectItem::applyProcessingResults()takes the applied profiles and the
workspace profile list, so the canvas baseline is recorded with the render - Breaking —
ScaledStrip::sliceAll()streams each slice to a callback instead of
returning them all; non-const and single-use - Breaking —
Slicerremoved — it wrapped two ints and forwarded toScaledStrip,
whichProcessingPipelinealready drove directly
Fixed
ScaledStripmemory contract — sources are released as slicing advances, as the class
always documented but never did. Peak memory is now flat instead of growing with page
count (24-page chapter: 534 MB → 213 MB). Output is byte-for-byte identical- Canvas profile edits were ignored — changing margins or canvas size left a project
reporting itself up to date while its rendered output no longer matched - Windows CLI hang on exit — an intermittent deadlock in the loader's DLL teardown
(LdrShutdownProcess), reproducible under both MinGW and MSVC. The CLI now flushes its
output and terminates instead of unwinding the dependency graph