Skip to content

feat(templates): give CvEntry a location, a mark and a builder - #618

Merged
DemchaAV merged 1 commit into
feature/template-promotionfrom
feat/cv-entry-place-and-icon
Aug 31, 2026
Merged

feat(templates): give CvEntry a location, a mark and a builder#618
DemchaAV merged 1 commit into
feature/template-promotionfrom
feat/cv-entry-place-and-icon

Conversation

@DemchaAV

Copy link
Copy Markdown
Owner

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. CvEntry had 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

  • CvEntry carries place and icon. Both are plain strings, blank when absent — the way subtitle and date already behave — rather than Optional, so the record reads the same all the way across.
  • CvEntry.builder(title) reaches them without counting six positions, with a body(List<String>) overload for the presets that draw one bullet per line.
  • The four-argument constructor is kept explicitly, so existing calls compile and link unchanged. CvEntryPlaceAndIconTest pins that, the null normalisation, and that the original fields still reject what they rejected.
  • NavySidebar reads place for its campus line, which it had been taking from body for 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

  • The icon vocabulary is preset-scoped, which the field's documentation states: a token means something only to the preset that packages the mark, and a preset that draws no marks ignores it. That is the contract the structured proposal model already uses for its goal marks.
  • Nothing else in the family reads either field yet. The preset that does arrives next.

Lane: canonical (templates.cv.data + one preset + qa + examples) — no engine changes.

@DemchaAV
DemchaAV merged commit 5c0f11b into feature/template-promotion Aug 31, 2026
12 checks passed
@DemchaAV
DemchaAV deleted the feat/cv-entry-place-and-icon branch August 31, 2026 07:15
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