Skip to content

feat(templates): render inline links in CV project-card titles#435

Merged
DemchaAV merged 1 commit into
developfrom
feat/cv-project-title-inline-links
Jul 24, 2026
Merged

feat(templates): render inline links in CV project-card titles#435
DemchaAV merged 1 commit into
developfrom
feat/cv-project-title-inline-links

Conversation

@DemchaAV

Copy link
Copy Markdown
Owner

Why

EngineeringResume and SidebarPortrait hand-roll their project cards outside the
shared ProjectRenderer, and each emitted the card title as a flat styled run
(rich.style(label.title(), …)). So a [label](url) in a project title stayed
literal text there — the last CV surface still bypassing the inline-link path that
entry titles, subtitles, project rows, and body text already route through. A link
that renders everywhere else silently failed to render in these two presets' project
cards.

What changed

  • EngineeringResume.addProjects and SidebarPortrait.addProjectsList now build the
    title run with MarkdownInline.append(rich, label.title(), titleStyle) instead of a
    raw rich.style(...), mirroring how ProjectRenderer.titleThenBody / .inline
    already do it. The trailing " (" + label.stack() + ")" run and the plain body run
    are untouched, so only the title becomes link-aware.
  • CHANGELOG.md### Public API bullet under ## v2.1.0 — in progress recording
    that project-card titles now accept inline [text](url) links in these two presets,
    next to the sibling entry-title entry.

Backward-compatible by construction: for a title without inline-Markdown syntax,
MarkdownInline.append finds no link match and collapses to a single base-styled run
— byte-identical to the old rich.style(...).

Verification

./mvnw -B -ntp clean verify -pl :graph-compose-templates,:graph-compose-qa -am
BUILD SUCCESS (qa suite 672 tests, 0 failures).

  • +3 tests — new ProjectTitleLinkTest (mirrors EntryTitleLinkTest): a
    [Acme Corp](https://acme.example) (Java, PDFBox) project label composes to an
    ExternalLinkTarget run ("Acme Corp"https://acme.example) in both
    presets; the " (Java, PDFBox)" stack run survives; and a plain title stays
    non-link (backward-compat control). Reverting the production edit turns the link run
    back into flat text, so the guard goes red.
  • CvV2VisualParityTest16/16 in non-approve mode against reactor-built
    templates: pixel-identical to the committed baselines, no re-bless.

Lane: templates — two CV presets (cv.presets) + one qa wiring test; no shared
widget, theme, or engine change.

EngineeringResume and SidebarPortrait hand-roll their project cards
outside ProjectRenderer and emitted the card title as a flat styled run,
so a [label](url) in a project title stayed literal there — unlike entry
titles, project rows, and body text, which already render it as a link.
Route both title runs through MarkdownInline.append so the link syntax
becomes a clickable hyperlink, keeping the trailing " (stack)" run.
Plain titles render byte-identically, so CV visual parity is unchanged.
@DemchaAV
DemchaAV merged commit f477511 into develop Jul 24, 2026
12 checks passed
@DemchaAV
DemchaAV deleted the feat/cv-project-title-inline-links branch July 24, 2026 08:17
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