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

Sidebar text glued onto a role's last description line drops that bullet from the Download PDF

Open
#936 1 comment 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
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
testing, tooling

Research direction

Start with the two fixtures, runCascade, scoreForCascade, groupBulletsByExperience in src/lib/score/group-bullets.ts:147, then trace the Tier 1 experience body assembly and the base export/re-parse path. Add a regression test for the glued-line shape without changing grouping behavior. Done means both fixtures have no sidebar text in experience descriptions, no bullets in “Other,” and retain the final bullet after export and re-parse.

Written by the indexing model from the issue text.

Description

bug

What

On two-column résumés with a sidebar, the parser appends sidebar text to the last description line of an experience role. The graded bullet pool still holds the clean bullet. Grouping is an exact normalized-line match (groupBulletsByExperience, src/lib/score/group-bullets.ts:147), so that clean bullet matches no role line and lands in "Other bullets". It also does not come back when the unedited résumé goes through Download PDF and is parsed again.

No edit is involved, so this is a base parse/export defect, not an edit-leg one.

Reproduction (on main)

For each fixture: run runCascade → take the bullet pool from scoreForCascade(p1).bullets → group with groupBulletsByExperience(pool, fields.experience) → run the base export buildAtsResumeModel(p1, scoreForCascade(p1)) → renderAtsResumePdf → runCascade again.

Fixture Pool size Bullets in "Other" That bullet
unknown/chromium-asymmetric-sidebar.pdf 11 1 (index 10, the last) its normalized text is a strict prefix of a role's last description line; absent from the re-parse
unknown/two-column-achievements-sidebar.pdf 16 1 (index 15, the last) same

Why it matters

  • The line is lost. The role's final bullet is missing after Download PDF, with no user action involved.
  • It is in the wrong group on screen. In the reconstructed résumé the bullet shows under "Other bullets" instead of its role, so the role-level rewrite never sees it.
  • The edit gate cannot see it. The edit-leg gate (corpus-edit-roundtrip.test.ts) only edits bullets inside a role, so it skips this bullet on purpose. Nothing else gates it.

Proposed fix

Stop the sidebar text from being appended at the source: the experience body assembly in the Tier 1 parser, where column-flattened sidebar lines join the preceding role's last line. Do not loosen the grouper to prefix matching. That would hide the bad parse and could attach the wrong bullets to a role.

Acceptance criteria

  • On both fixtures, no experience[].description line contains sidebar text.
  • On both fixtures, every pool bullet groups under a role, so the "Other" group is empty.
  • On both fixtures, the last role's final bullet is present after the base export and re-parse.
  • A regression test covers the glued-line shape.

Found while reviewing PR #935, which recorded it as a side result of a probe and left it unfiled.

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.