Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[export] Non-bullet description content is dropped from the downloaded PDF

Open
#844 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
68/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript
Domain
data, testing-qa

Research direction

Start in src/lib/pdf/ats-resume-model.ts at resolveBullets and trace the description paths from src/lib/heuristics/group-bullets.ts and entry-blocks.ts, including splitAnchorProseTail. Reproduce the loss with tests/fixtures/pdfs/unknown/headerless-experience.pdf and inspect corpus-roundtrip.test.ts. Done means non-bullet description text appears in the exported PDF without duplicating glyph-bulleted lines, with the round-trip comparison decision recorded in the test docblock.

Written by the indexing model from the issue text.

Description

bug ux:edit-export

Description text that did not originate from a glyph bullet (•) is present in the parse and on the reconstructed résumé, but absent from the downloaded PDF. The user sees a line on screen, downloads, and it is gone.

Found while implementing #492 (PR #842); pre-existing, not caused by that work.

Mechanism

resolveBullets in src/lib/pdf/ats-resume-model.ts prefers the graded BulletObservation pool. src/lib/heuristics/group-bullets.ts documents that pool as "extracted from rawText" — i.e. glyph bullets only. Any description entry that reached the field by another route has no BulletObservation backing it and is dropped at render.

There are at least two such routes today, both legitimate:

  • belowAnchorBodyProse → description, the path #615 and #708 established for below-anchor scope lines.
  • The anchor-prose tail peeled by splitAnchorProseTail (entry-blocks.ts, added in #492).

Concretely, on tests/fixtures/pdfs/unknown/headerless-experience.pdf, role 1's "Leads the automation guild." is on description in the parse and renders on the reconstructed résumé, but does not appear in the exported PDF.

Why no gate caught it

The round-trip invariant (corpus-roundtrip.test.ts) compares only title / company / start_date / end_date. description is outside the compared set, so parse → export → re-parse stays green while the content silently disappears. Nothing regressed; the gap was simply never observable.

Acceptance criteria

  • Non-bullet description content survives export to the downloaded PDF.
  • A fixture pins it — headerless-experience.pdf already reproduces and needs no new binary.
  • Decide and record whether description should join the round-trip comparison set. If not, say why in the test's docblock, so the next person doesn't read the green gate as coverage.
  • Confirm the fix does not double-emit a line that IS glyph-bulleted (the preemptedIsHeader token-coverage filter in resolveDescription exists to prevent exactly that on the parse side).

Notes

Worth checking whether this is the same root as any open export-fidelity issue before building — the parse-model ↔ export-model seam has come up before, and the fix belongs wherever that seam is owned rather than patched at the call site.

Refs #811

Dominant language
TypeScript
Stars
11
Forks
4
Avg merge
2d 17h
Merged PRs (30d)
40

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from offlinecv/OfflineCV

All issues in offlinecv/OfflineCV

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.