This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+12 more
Summary
AI summaryAdds WorkHistoryBlock and EducationBlock for structured CV sections, fixing a Boxed Sections layout bug caused by em‑dash/en‑dash parsing.
Full changelog
Bug fix + structured-block patch. Adds two new public Block types —
WorkHistoryBlock and EducationBlock — that let template authors
declare work-history and education entries with explicit (title,
organisation, date, description) / (degree, institution, year,
details) fields instead of relying on the legacy
MultiParagraphBlock pipe-separated string parser. Also closes a
Boxed Sections layout defect that bundled the date and description
into the right-aligned date column for any author-supplied line that
used an em-dash (" — "), en-dash (" – "), or contained
prose-shaped content the parser misread as a date. No public API
break — the sealed Block permit list grows from six to eight,
existing MultiParagraphBlock work-history strings continue to
parse, and the deprecated parser path stays in place for backward
compatibility.
Templates — new structured blocks
WorkHistoryBlock. New public record block carrying a list of
Item(title, organisation, date, description)entries. The
BoxedSectionspreset renders each item as a structured row:
title bold on the left, date right-aligned on the same row,
organisation italic on the next line under the title, and
description as a full-width paragraph beneath. Other presets fall
back to a single concatenated paragraph per item. Authors who use
WorkHistoryBlockbypass the legacy
BoxedSections#parseWorkEntryheuristic parser entirely.EducationBlock. New public record block carrying a list of
Item(degree, institution, year, details)entries. Renders with
the same structured layout asWorkHistoryBlock(degree bold
left, year right, institution italic, details paragraph) so
Education & Certifications sections visually match Professional
Experience.- Sample data migrated.
ExampleDataFactory.sampleCvSpecV2now
usesWorkHistoryBlockfor Professional Experience and
EducationBlockfor Education & Certifications. The legacy
MultiParagraphBlockpattern remains supported and is exercised
byPresetLayoutSnapshotTest/PresetVisualParityTestto lock
the backward-compat path.
Templates — parser robustness (legacy path)
parseWorkEntryaccepts em-dash and en-dash. Used to split
the post-pipe segment on ASCII" - "only; now tries" — ",
" – ", and" - "in order, mirroringsplitHeading. Authors
who typed"*2024-Present* — Led reusable document flows."saw
the whole tail collapse into the date column — this no longer
happens.parseWorkEntryrejects prose dressed up as a date. The
looselooksLikeDatecheck accepted any string containing a
year and a hyphen anywhere, which caused education lines like
"... | 2019. First-class honours. Specialisation ..."to
parse as work entries (the hyphen inside"First-class"was
enough to satisfy the heuristic). Parser now rejects post-pipe
segments that contain sentence-ending punctuation (.,:,
;) when no explicit date / description separator was found,
letting these lines fall back to plain paragraph rendering.
Marked@Deprecatedwith a@deprecatedJavadoc pointing
callers toWorkHistoryBlock/EducationBlock.parseProjectItempicks up the same em-dash / en-dash /
ASCII separator set so future Project items typed with em-dash
don't regress into "title only" rendering.
Tests
BlockTest.blockSealingPermitsAllEightVariantsupdated for the
two new permitted block types.PresetVisualGalleryTest.sampleSpecmigrated to
WorkHistoryBlockso the visible "primary example" exercises the
new structured shape.PresetLayoutSnapshotTestintentionally retained on
MultiParagraphBlockto lock the legacy parser's behaviour.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About GraphCompose 2.0
All releases →Related context
Related tools
Earlier breaking changes
- v2.0.0 Package rename: layered template packages dropped `.v2` suffix; update imports.
- v2.0.0 Removed dormant ECS engine internals (EntityManager, SystemECS, Entity components, render pipeline).
- v2.0.0 Removed linkOptions() accessor; use linkTarget() and ExternalLinkTarget.options().
- v2.0.0 Removed PDF‑typed document‑chrome overloads on DocumentSession; use backend‑neutral metadata/watermark/protect/header/footer.
- v2.0.0 Removed DSL name-aliases DocumentSession.builder() and DocumentDsl.text(); use builder() and paragraph().
Beta — feedback welcome: [email protected]