mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 08:36:25 +00:00
fix(cv-template): use ASCII hyphens and explicit ranges in CV date fields (#276)
* fix(cv-template): use ASCII hyphens and explicit ranges in CV date fields LaTeX ligatures `--` into an en-dash (U+2013), so a `\cventry` date written `2016--2024` reaches the PDF text layer as `2016<U+2013>2024`. Many ATS parsers split date ranges only on an ASCII hyphen and therefore extract no range at all. Separately, a bare single year gives the parser a start date with no end. Confirmed against a real Workday resume import: a CV built from this template lost the end date of a short contract role and imported no education entries whatsoever, forcing manual re-entry. The failure is silent - extraction was otherwise clean, with literal contact details, no (cid:) markers and correct reading order, so every existing check in the ATS Parseability section passed. - main_example.tex: date placeholders now use a single hyphen - 05-cv-templates.md: document both causes, with examples, and add the check to step 5d Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFNdaj4fB6Xrd29PQ6hc9B * chore(cv-template): bump framework_version to 1.4.0 The ATS date-format guidance added in the previous commit modifies a framework template, which the CI framework version guard requires to be accompanied by a version bump. Minor bump: new documented subsection, no breaking change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs(changelog): record the CV date-field hyphen fix and fork reconciliation Documents the U+FFFD extraction failure under lualatex, the fix, and the framework_version bump. Includes the fork reconciliation note requested in review: the five changed lines in cv/main_example.tex are the \cventry date fields every fork personalizes, so rebasing forks should expect conflicts there, resolve in favour of their own dates, and reapply the -- to - change by hand. Adds a grep to locate remaining instances and a pdftotext check to verify. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: kgb <kevingblackman@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
kgb
parent
6392ca1628
commit
befaaf5eef
@@ -29,6 +29,30 @@ per-file diff commands.
|
||||
`location` veto so a re-read of the file (or a future debugging session) can recover why a
|
||||
job did or didn't make the shortlist.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **CV date fields now use ASCII hyphens, so the PDF text layer extracts cleanly** - the
|
||||
stock template wrote date ranges as `[YYYY--YYYY]`, and on the repo's mandated `lualatex`
|
||||
toolchain the `--` en-dash ligature extracts from the PDF as U+FFFD (`�`). The stock
|
||||
template therefore failed the ATS checklist's own "no `�` replacement characters" item on
|
||||
*every* date field, and did so silently: the rendered page looks correct, and no existing
|
||||
check inspected the extracted text. `cv/main_example.tex` now uses `[YYYY-YYYY]` and
|
||||
`[YYYY-Present]`, and `05-cv-templates.md` documents the failure mode and the check that
|
||||
catches it (`framework_version` 1.3.0 to 1.4.0). The two-page layout budget is unaffected.
|
||||
|
||||
**Fork reconciliation note.** The five changed lines in `cv/main_example.tex` are the
|
||||
`\cventry` date fields - three under Professional Experience, two under Education -
|
||||
precisely the lines every fork personalizes. Rebasing forks should expect conflicts there,
|
||||
resolve them in favour of *their own* dates, and then apply the same `--` to `-` change by
|
||||
hand. To find remaining instances across your own CV variants:
|
||||
|
||||
```
|
||||
grep -rn '\\cventry{[^}]*--' cv/
|
||||
```
|
||||
|
||||
Verify afterwards with `pdftotext -layout <file>.pdf - | grep -c '�'`, which should
|
||||
return `0`.
|
||||
|
||||
### Security & privacy
|
||||
|
||||
- **The gitignore guard now covers every personal-output rule** - `security_guards.py`
|
||||
|
||||
Reference in New Issue
Block a user