feat(templates): give CvEntry a location, a mark and a builder - #618
Merged
DemchaAV merged 1 commit intoAug 31, 2026
Merged
Conversation
This was referenced Aug 31, 2026
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 next CV bundle in the promotion queue sets the city beside the employer in its own colour, and opens each project and each achievement with an icon.
CvEntryhad four fields — title, subtitle, date, body — and neither of those has a home in them.Both workarounds were worse than the field. Folding the location into the subtitle merges two things the design deliberately styles apart, so the port would no longer be a port. Deriving the icon from the text is guesswork that reads fine on the fixture and picks the wrong mark on the next document.
This is also the point to settle it once: the remaining CV bundles are full of "Company · City", so the alternative to one field now is the same argument six more times.
What changed
CvEntrycarriesplaceandicon. Both are plain strings, blank when absent — the waysubtitleanddatealready behave — rather thanOptional, so the record reads the same all the way across.CvEntry.builder(title)reaches them without counting six positions, with abody(List<String>)overload for the presets that draw one bullet per line.CvEntryPlaceAndIconTestpins that, the null normalisation, and that the original fields still reject what they rejected.NavySidebarreadsplacefor its campus line, which it had been taking frombodyfor want of anywhere better. One meaning, one field — rather than shipping two ways to say the same thing across the CV presets.Verification
Full reactor gate → BUILD SUCCESS; the CV data and preset suites 31/31; examples suite 77/77.
The Navy retrofit is a pure data-shape change and both its gates say so without being re-blessed: the layout snapshot and the pixel baseline still pass untouched, and parity against the published template's own render is still 0 / 2,173,720 differing pixels.
Notes
Lane: canonical (templates.cv.data + one preset + qa + examples) — no engine changes.