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

"Other bullets" render editable on screen but never reach the Download PDF

Open
#1,007 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
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
typescript

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

bug ux:edit-export

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:

  1. 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 how render-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.
  2. 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.ts renders the bucket's bullets, and ats-resume-model.ts's
    buildAtsResumeModel includes them without breaking experienceIndex-keyed grouping for
    real roles.
  • corpus-roundtrip.test.ts and render-roundtrip.repro.test.ts pass 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 verify is green.
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.