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

Shared lexicon (d): share title surface forms between title-shape.ts and job-search ROLE_PROFILES

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

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
52/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
typescript
Domain
search, testing-qa

Research direction

Read src/lib/heuristics/extract/title-shape.ts and src/lib/job-search/role-profiles.ts, then inspect the join precedent at src/lib/job-search/role-profiles.test.ts:84. Choose one permitted dependency shape, wire the shared surface forms into title recognition, and run the #654 scoreboard plus npm run verify. Done means the import and join are test-asserted, before/after title precision and recall are reported, and any corpus changes are reviewed.

Written by the indexing model from the issue text.

Description

improvement ux:parsing

Part (d) of #653. The one part of #653 that is an accuracy lever rather than pure hygiene.

Problem

Two independent inventories of job-title surface forms exist and never talk to each other:

  • src/lib/heuristics/extract/title-shape.ts — ~62 title/seniority keywords, used by the parser to decide whether a line looks like a title.
  • src/lib/job-search/role-profiles.ts (1506 LOC) — hundreds of prevalence-ordered real-world title forms, curated for job search.

The job-search table is far richer, and the parser cannot see it.

Why it is an accuracy lever

A dated line that matches a known real-world title surface form is strong evidence of an entry header. Feeding the richer inventory into the parser's title recognition helps #492 (role lines funnelling into a generic other) and #543 (missing titles) without touching sectioning logic at all — it is new evidence for an existing decision, not a new code path.

Constraint

title-shape.ts's contract is that it imports nothing. That must survive — it is what keeps the module off the eager entry graph. Two shapes are acceptable:

  1. A test-asserted join: the two inventories stay separate, and a test asserts the agreed subset relationship. Precedent exists at src/lib/job-search/role-profiles.test.ts:84.
  2. job-search imports a heuristics leaf — the dependency points from job-search into heuristics, never the reverse.

Do not make title-shape.ts import role-profiles.ts.

Implementation plan
  1. Pick shape 1 or 2 and say why in the PR.
  2. Establish the shared surface-form data.
  3. Wire the richer inventory into the parser's title recognition.
  4. Measure: the ground-truth corpus scoreboard from #654 is the harness — report per-field title precision/recall before and after.
Acceptance criteria
  • title-shape.ts still imports nothing, asserted by a test.
  • The join between the two inventories is test-asserted, not conventional.
  • Title precision/recall from the #654 scoreboard is quoted before and after in the PR.
  • Corpus snapshot changes, if any, are reviewed fixture-by-fixture and are improvements.
  • npm run verify green.

Parent: #653. Roadmap item 5(d) of #646. Related: #492, #543.

Dominant language
TypeScript
Stars
11
Forks
4
Avg merge
1d 24m
Merged PRs (30d)
71

Getting set up

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.