v1.6.4 — Boxed Sections parser fix + structured WorkHistory/Education blocks
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.