Sidebar text glued onto a role's last description line drops that bullet from the Download PDF
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
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
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[].descriptionline 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from offlinecv/OfflineCV
-
chore
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
testing
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
improvement ux:edit-export
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
refactor testing
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
chore
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
All issues in offlinecv/OfflineCV
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
receptron/mulmoterminal#2264 ·
-
documentation
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
components-web-app/docs#96 ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
simonsobs/tileviewer#114 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100