Skip to content

feat(templates): add the Teal Pulse clinical CV preset - #627

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

DemchaAV merged 1 commit into
feature/template-promotionfrom
feat/teal-clinical-cv-preset

Conversation

@DemchaAV

Copy link
Copy Markdown
Owner

Why

The next published CV in the promotion queue, and the first one whose design does not
fit the shape the family has been assuming. It is drawn on a page that is not A4, its
headings sit on rules rather than beside them, and it is stacked in bands rather than
built as one atomic body — so it is the case that tests whether the CvDocument model
and the preset conventions hold for a sheet that was not made in their image.

They do: it lands with no model change at all.

What

cv.presets.TealPulse, composed from six package-private files — the measured geometry
and type scale, the icon loader, the idioms the sheet repeats, and one per band.

Five bands: a heart crossed by a flat pulse beside a letter-spaced name; a contact
strip divided by short rules; a two-column body carrying the competencies as dotted
lines beside the summary and the roles under badged headings; a three-column closing
band for the degree, the certifications and the facts; and a tracked line under a rule
that ends in a small heart.

Three things worth naming.

The preset sets its own page. The design was drawn on a raster whose proportion is
not A4's and every length is a share of that grid, so a caller's page size and margin
are overwritten rather than followed — the opposite choice from CharcoalGold, and made
because this sheet is a fixed composition rather than a layout that rescales.

What happens past one page is not what the other ported CV presets do. The bands are
stacked in the page flow, so a CV with more roles than the design holds carries the
closing band onto a second page rather than losing anything; the body row itself is
atomic, so a body taller than a page raises AtomicNodeTooLargeException. The first
draft of this preset documented it as one-page-strict like its siblings, which was
wrong — probing it found six roles produce two pages, and both behaviours are now
pinned by tests.

A link is drawn as its own label with the address behind it — the rule set on
TerracottaRail last week — which is the one deliberate departure from the ported
sheet: writing the URL out makes the strip's gaps depend on how long a profile happens
to be called. Measured at six of 121 nodes shifting sideways and 7 724 of 1 987 720
pixels, with nothing moving vertically.

Also here: the example (cv-teal-pulse-v2), its showcase row and its committed preview.

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.

  • TealPulseSmokeTest (12) — identity, the canonical render, every band's text, the
    tagline berth drawing its body and not its title, the page override, the contact and
    link targets, a link showing its label while the annotation keeps the address, a
    linked role and degree, a document with nothing but an identity, an identity with no
    links, the run onto a second page, and the refusal of a body taller than one.
  • TealPulseLayoutSnapshotTest (1) — an exact snapshot of the one-page sheet.
  • TealPulseVisualParityTest (1) — pixel baseline, same budget and tolerance as the
    other CV gates.

The port was proven before the gates were written: the preset rendered against the
bundle's own fixture differs by 0 of 1 987 720 pixels, with 121 of 121 layout
nodes identical in geometry
— the only differences being the eleven node names the
promotion deliberately changes.

One finding worth recording: this bundle does not reproduce its own published
preview — 46 783 pixels differ, identically on the engine it was cut against and on
this one. The cause is the engine's Latin-ligature fix: the preview's text layer reads
"Pa ent Assessment" and "medica on administra on", so it was rendered before that
landed. The published source is self-consistent and is what was ported; the preview is
stale.

A one-page clinical sheet in five bands: a heart crossed by a flat pulse
beside a letter-spaced name; a contact strip divided by short rules; a
two-column body carrying the competencies as dotted lines beside the summary
and the roles under badged headings; a three-column closing band for the
degree, the certifications and the facts; and a tracked line under a rule
that ends in a small heart.

It ports a published standalone template onto the existing CvDocument with no
model change. Six berths reach their sections by title, including a tagline
berth whose body is drawn and whose title is not.

The preset sets its own page: the design was drawn on a raster whose
proportion is not A4's and every length is a share of that grid, so a caller's
page size and margin are overwritten. Both vertical rules are the left border
of the column to their right, so they are the grid rather than lines beside
it, and the main headings are laid over their own rule with the paper knocked
out behind every letter — a row cannot nest in a row cell, and the rule's
visible length still has to follow the words.

Past one page it behaves unlike the other ported CV presets: the bands are
stacked in the page flow, so a longer CV carries the closing band onto a
second page rather than losing anything, while the body row is atomic and a
body taller than a page raises AtomicNodeTooLargeException.

A link is drawn as its own label with the address behind it, the one
deliberate departure from the ported sheet: six of 121 nodes shift sideways
and 7,724 of 1,987,720 pixels change, with nothing moving vertically.

Guarded by a smoke test, an exact layout snapshot and a pixel-parity gate; the
examples showcase gains `cv-teal-pulse-v2`.
@DemchaAV
DemchaAV merged commit adf961d into feature/template-promotion Aug 31, 2026
12 checks passed
@DemchaAV
DemchaAV deleted the feat/teal-clinical-cv-preset branch August 31, 2026 16:22
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