Skip to content

feat(templates): add the CharcoalGold photographic CV preset - #621

Merged
DemchaAV merged 1 commit into
feature/template-promotionfrom
feat/charcoal-gold-cv-preset
Aug 31, 2026
Merged

DemchaAV merged 1 commit into
feature/template-promotionfrom
feat/charcoal-gold-cv-preset

Conversation

@DemchaAV

Copy link
Copy Markdown
Owner

Why

The fourth CV bundle in the queue, and the first one the model was already ready for. It is the richest sheet so far — a charcoal sidebar with a ringed photograph, rated skills and languages, beside a paper column with a two-tone name, a dated experience rail, a pair of credential columns and a closing tools strip — and it needed no model change at all.

That is the payoff from the two adds this campaign made earlier: the portrait from #614, and the location, mark and link from #618 and #620. Every field this design carries had somewhere to go.

What changed

  • cv/presets/CharcoalGold — a DocumentTemplate<CvDocument> via create(), split for the 500-LOC rule into package-private CharcoalGoldStyles, CharcoalGoldWidgets, CharcoalGoldAside, CharcoalGoldMain, CharcoalGoldCredentials, CharcoalGoldText and CharcoalGoldIcons.
  • It leaves the page size to the caller, unlike the three ported before it. That is not an omission: this design's geometry is derived from the page's own width, so a different page rescales rather than breaks. Both column fills are page backgrounds, so each reaches the foot of the sheet whatever the other holds.
  • Vertical rhythm is authored as a pitch — the distance from one line's top to the next — with gap(pitch, size) subtracting the line box the type already fills. That is how the design was drawn, and setting the pitches as margins directly would have spaced every block too far apart.
  • Two places where the obvious cell count is wrong, and the comments say why: the experience row is two cells rather than three, because giving the marker its own column would put it in a different node from the rail and let the rail paint straight through it; and the credential pair is two cells rather than three, because the divider is the right column's own left border and so takes its height from that column's content, which a third cell holding a line could not.
  • The nine SVG marks ship inside the templates artifact under templates/cv/charcoal-gold/icons/.
  • CvFixturePortrait — the drawn silhouette the CV fixtures share, extracted from NavySidebarFixtures so the second preset that needs a photograph does not copy the Java2D.

Verification

Full reactor gate (the eight CI modules) → BUILD SUCCESS; the charcoal qa suite 13/13; examples suite 77/77 including CommittedAssetDriftTest with the new preview; javadoc:javadoc → BUILD SUCCESS with no warning naming a new file.

Port parity, verified against the published template itself: the preset fed the template's own fixture is pixel-identical to the standalone render — 0 / 2,173,720 differing pixels — and the layout snapshot matches node for node: 248 of 248, same paths, same names, largest geometry delta 0.001pt.

This bundle is also the first with no engine drift at all: its render on the pinned 2.2.1 and on this branch are identical to the last pixel, so the approved preview is itself the parity target rather than a render that differs by the ligature fix.

Navy's snapshot and pixel baseline pass unchanged after the fixture-portrait extraction, which is the proof that refactor moved nothing.

Notes

  • The sheet holds one page. The two columns are a single row, and a row is atomic, so a longer CV raises AtomicNodeTooLargeException rather than flowing or dropping entries — the same contract the three siblings landed with, documented on the class, in using-templates.md, and pinned by a test.
  • A skill the document leaves unlevelled draws no rating at all rather than five empty dots, which would read as a score of zero. The published bundle cannot express that case: its data types the rating as an int.
  • The masthead reads the given and family names separately, which is why this preset wants a structured CvName — nothing else could tell it where to change colour.

Lane: canonical (templates.cv.presets + qa + examples) — no engine changes, no model changes.

@DemchaAV
DemchaAV merged commit a160168 into feature/template-promotion Aug 31, 2026
12 checks passed
@DemchaAV
DemchaAV deleted the feat/charcoal-gold-cv-preset branch August 31, 2026 09:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant