feat(templates): add the Terracotta Rail two-column CV preset - #624
Merged
DemchaAV merged 1 commit intoAug 31, 2026
Merged
Conversation
An architect's one-page CV: a narrow column with a serif monogram over a terracotta rule, the contact channels behind their marks, two bulleted lists, the credentials and a block of closing facts, beside a wide column with a letter-spaced masthead, the summary, the roles held on a ringed rail, a projects grid and the degrees. It ports a published standalone template onto the existing CvDocument with no model change: eight berths reach their sections by title, and the software berth is claimed before the competency one so a section titled for both is drawn once rather than twice. The monogram is drawn from the name's own initials rather than a field of its own, so a document states its name once. A link in the contact block is set smaller than the channels above it, because a URL is one long token that cannot be broken and is the line that outgrows that column first; it takes the mark of the network it points at, or a globe. The headings are letter-spaced with a real space character rather than a style property — a hair space in the sidebar, a thin space in the wider column. Like its siblings it holds one page: the body is a single atomic row, so a longer CV raises AtomicNodeTooLargeException rather than losing an entry. Guarded by a smoke test, an exact layout snapshot and a pixel-parity gate; the examples showcase gains `cv-terracotta-rail-v2`.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The CV family's model was finished by the presets before this one — a portrait, a
place, a mark, a link — and the claim that it now carries a drawn sheet needs the next
published design to land on it without asking for anything. This one does: an
architect's two-column CV, ported from a published standalone template, on the existing
CvDocumentwith no model change at all.What
cv.presets.TerracottaRail, composed from five package-private files — the measuredgeometry and type scale, the icon loader, the idioms the sheet repeats, and one per
column.
The sheet: a narrow column with a serif monogram over a terracotta rule, the contact
channels behind their marks, two bulleted lists, the credentials and a block of closing
facts; a wide column with a letter-spaced masthead, the summary, the roles held on a
ringed rail, a projects grid and the degrees. Like
CharcoalGoldit leaves the page tothe caller and holds one page: the body is a single atomic row, so a longer CV raises
AtomicNodeTooLargeExceptionrather than dropping an entry to a silent cap.Eight berths reach their sections by title. The two bulleted lists are skills without
levels — this design writes them as plain lines, so a rating would have nowhere to go —
and one takes a terracotta square with no dash under its heading while the other takes
a disc and a dash, which is how the sheet tells two lists of one-liners apart. The
software berth is claimed first and the competency berth then skips whatever it took,
so a section titled for both ("Software Skills") is drawn once rather than twice.
Three details worth naming. The monogram is drawn from the name's own initials rather
than a field of its own: a document states its name once, and a second place to keep
true is a second place to be wrong. A link in the contact block is set smaller than the
channels above it — a URL is one long token that cannot be broken, so it is the line
that outgrows that column first — and it takes the mark of the network it points at, or
a globe. And the headings are letter-spaced with a real space character rather than a
style property: a hair space in the sidebar, because a full one would set ADDITIONAL
INFORMATION wider than the column and wrap it, and a thin space in the wider column.
Also here: the example (
cv-terracotta-rail-v2), its showcase row and its committedpreview.
Tests
./mvnw -B -ntp clean verify -pl :graph-compose-core,:graph-compose-render-pdf,:graph-compose-render-docx,:graph-compose-render-pptx,:graph-compose-templates,:graph-compose-testing,:graph-compose-qa,:graph-compose-coverage -am— BUILD SUCCESS.TerracottaRailSmokeTest(11) — identity, the canonical render, every column's text,the monogram drawn from the name, the contact and link targets, a project title
linked, an entry with no mark, an unknown mark reported as a data error, an identity
with no links, a document with nothing but an identity, and the refusal of a CV
longer than the sheet.
TerracottaRailLayoutSnapshotTest(1) — an exact snapshot of the one-page sheet.TerracottaRailVisualParityTest(1) — pixel baseline, same budget and tolerance asthe other CV gates.
The port was proven before the gates were written. The published bundle reproduces its
own approved preview exactly on the engine it was cut against and again on this one, and
the preset rendered against the bundle's own fixture differs by 0 of 2 173 720
pixels, with 154 of 154 layout nodes identical in geometry — the only differences
being the five node names the promotion deliberately changes.