Skip to content

fix: a parser reading the CV in order finds each bullet under its role - #65

Merged
coderback merged 1 commit into
mainfrom
fix/cv-bullets-read-in-order
Oct 20, 2026
Merged

coderback merged 1 commit into
mainfrom
fix/cv-bullets-read-in-order

Conversation

@coderback

Copy link
Copy Markdown
Owner

Why

A program reading the CV PDF in order (pypdf, PyMuPDF, or an ATS that indexes the file) found every experience bullet after the Skills section, cut off from its role. On the Catapult CV, the Rootlayer heading came at line 9 of 65, Skills at 37 and its first bullet at 45. A person sees the page normally, so it never showed in the preview.

The cause: the bullet marker (.cv-bullets li::before) was absolutely positioned inside a position: relative list item. WeasyPrint draws positioned boxes after the page's other text.

What changed

  • base.css: the marker is now an inline-block, 18pt wide with a -18pt margin, hung into the list's indent with line-height: 1, so it is drawn in line with its text. The list item is no longer positioned.
  • Nothing visible moves. I rendered the candidate's CV with the old and new styling: all 673 words land within 0.2pt of where they did, and the markers stay in the same column.

Tests

  • New WeasyPrint test test_a_parser_reading_the_cv_in_order_finds_each_bullet_under_its_role: the role title, its first bullet, the first project, then Skills, in that order. It fails on the old styling and passes on the new.
  • Document tests in the API container (WeasyPrint): 93 passed, including the measured CV layout tests.
  • Fast suite: 1068 passed.

After deploy

Rebuild the API with docker compose up -d --build api. This is independent of #64; one rebuild after both picks up everything.

The CV's bullet marker was absolutely positioned, and WeasyPrint draws positioned
boxes after the page's other text. A parser reading the PDF in order (pypdf,
PyMuPDF, an ATS that indexes the file) found every experience bullet after the
Skills section, cut off from its role.

The marker is now an inline-block hung into the list's indent, so it is drawn in
line with its text. On the candidate's CV every one of 673 words lands within
0.2pt of where it did, with the markers in the same column; the reading order is
role, its bullets, Projects, Skills. A new WeasyPrint test checks that order and
fails on the old styling.
@coderback
coderback merged commit bc110d0 into main Oct 20, 2026
3 of 4 checks passed
@coderback
coderback deleted the fix/cv-bullets-read-in-order branch October 20, 2026 12:55
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