"Other bullets" render editable on screen but never reach the Download PDF
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
- Domain
- frontend, testing-qa
Research direction
Start by comparing the “Other bullets” handling in ReconstructedResume.tsx with buildAtsResumeModel in src/lib/pdf/ats-resume-model.ts, then read the round-trip tests named in the issue. Confirm the export-versus-surface decision with a maintainer before changing code. Done means the chosen behavior is covered by the listed acceptance tests and npm run verify is green.
Written by the indexing model from the issue text.
Description
Problem
The résumé column groups every parsed bullet by the entry the grouper attributes it to
(buildEntryGroups, src/lib/score/group-bullets.ts). Bullets it cannot attribute to any
experience, project, achievement, or certification fall into an "Other" group, which
ReconstructedResume.tsx appends to the tail of the Experience section as the "Other bullets"
bucket (experienceRenderGroups = other ? [...experienceGroups, other] : experienceGroups,
~line 1317; the bucket's own comment block is at ~line 47, 185, 252, 322, 333, 529). It is fully
editable on screen — text edits, add, remove all work on it, same as a real role's bullets.
The exported PDF does not carry it. buildAtsResumeModel (src/lib/pdf/ats-resume-model.ts)
groups bullets by experienceIndex (~line 740-751) and only bullets with a non-null
experienceIndex land in bulletsByIndex; experienceEntries (~line 776) is built by mapping
over experiences (parsed.experience) alone. The "Other" group — whose bullets carry no
experienceIndex by construction — is never consulted, so anything a user types into "Other
bullets" is silently absent from Download PDF, no matter how it's edited.
The whole-résumé rewrite CTA already treats this the same way: resumeSections (built for the
rewrite prompt in ReconstructedResume.tsx, ~line 1323) explicitly excludes the "Other" group
because "it has no parsed role to anchor the prompt to" — so this isn't a new asymmetry, it's an
existing one nobody has surfaced to the user yet.
This is a preview-fidelity gap worse than a cosmetic flag: the résumé column is supposed to be a
faithful preview of the exported document, and here it shows content — potentially edited,
user-authored content — that the export drops entirely, with no indication to the user that it
will vanish.
Proposal
Two directions, left open for the implementer/maintainer to pick between:
- Export them. Give the "Other" bucket a home in the PDF — e.g. its own untitled block at
the tail of Experience, or fold it under the last real role. Closes the fidelity gap outright,
but needs a design decision on where it lands and howrender-ats-pdf.ts+ the round-trip
tests (corpus-roundtrip.test.ts,render-roundtrip.repro.test.ts) represent it, since today's
round-trip model has no concept of an entry-less bullet run. - Surface it honestly. Leave the export behavior as-is, but tell the user in the UI that
"Other bullets" won't appear in the PDF, and add a "move to role" affordance so a bullet can be
reattached to a real entry (and thereby become exportable) instead of edited in a dead end.
Recommendation: option 2 is the smaller, lower-risk change — it doesn't touch
render-ats-pdf.ts, ats-resume-model.ts, or the round-trip contract, and it's honest rather than
silent, matching this repo's "copy claims must round-trip to code" standard. Option 1 is the
better long-term fix if the grouper's attribution can be made reliable enough that "Other" becomes
rare rather than a routine bucket.
Acceptance criteria
- A decision is made and recorded on export-vs-surface (or the maintainer instructs which).
- If surfaced: every bullet in the "Other bullets" bucket carries a clear, non-blocking
indication that it will not appear in the Download PDF. - If surfaced: a "move to role" (or equivalent) affordance lets the user reattach an "Other"
bullet to a real Experience/Project/Achievement/Certification entry. - If exported:
render-ats-pdf.tsrenders the bucket's bullets, andats-resume-model.ts's
buildAtsResumeModelincludes them without breakingexperienceIndex-keyed grouping for
real roles. -
corpus-roundtrip.test.tsandrender-roundtrip.repro.test.tspass and, if changed,
document the new behavior for an "Other"-bearing fixture. - No change to how the grouper (
buildEntryGroups) attributes bullets to entries — this issue
is about what happens to the ones it can't attribute, not the attribution logic itself. -
npm run verifyis green.
- 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 1/5 1-3 hours Newbie friendliness 88/100
motiondivision/motion#3849 ·
-
Add: S Play Event HD Opencheck:passed streams:add
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
i-am-bee/beeai-framework#1697 · 1 reaction ·
-
Support bun dedupe Openenhancement
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
antfu/node-modules-inspector#214 ·