Files
Amruth Pillai c288675b16 Release v5.2.9 (#3382)
* feat(ats): add ATS checker and replace resume analysis

Adds a public, browser-only ATS checker at /ats-checker and an ATS Check
section in the builder's right sidebar. PDFs are parsed locally: text
extraction, reading order, contact and date recovery, section detection,
and file-level readability are scored deterministically, with evidence
cited per finding and skipped checks reported rather than counted as
passes.

Removes the AI-scored resume analysis it supersedes: the resume_analysis
table (dropped via migration), the get_resume_analysis MCP tool, and
POST /ai/analyze-resume. The replacement, POST /ai/ats-review, reviews
extracted resume text and returns qualitative feedback with no score.

Also bumps the version to 5.2.9 and adds the changelog entry.

* chore(deps): bump workspace dependencies

* fix(ats-checker): keep negation inside each 'what this does not do' bullet

The three bullets were bare fragments whose negation came from the
section heading, which translators never see. A dozen locales rendered
them as affirmative assertions or imperatives, so the page claimed the
checker enforces a one-page rule and predicts rejection -- the opposite
of the source, and directly contradicted by the sentence beside it.

Each bullet now carries its own negation, so the polarity cannot be
lost in translation. Re-extracted and refilled across all 53 target
locales.
2026-08-27 03:37:01 +02:00
..
2026-08-27 03:37:01 +02:00
2026-08-27 03:37:01 +02:00
2026-08-27 03:37:01 +02:00
2026-08-27 03:37:01 +02:00

ATS extraction fixtures

Minimal, hand-authored PDFs for src/ats-extraction.integration.test.tsx. Each one isolates a single file-level defect the ATS checker claims to detect, so the test proves the claim against a real PDF reader rather than against a hand-built extraction object.

They are written uncompressed, so cat shows the whole file. Nothing here came from a third party: every byte was generated for this repository, and none of them contain personal data.

File What it is What it proves
image-only-scan.pdf One page, one image scaled to fill the page, no text operators. The image-coverage measurement is real page area, and NO_TEXT_LAYER / IMAGE_ONLY_DOCUMENT fire together on a scan.
type3-font.pdf One page of text set in a Type 3 font whose glyph procedure draws a rectangle. isType3Font is read off the font object, and TYPE3_FONT caps the score.
outlined-text.pdf 672 filled rectangles laid out like lines of text, and no text operators at all. Text converted to vector outlines looks like a page to a human and like nothing at all to a parser.

Regenerating

There is no build step. To change one, edit the bytes directly or re-derive it: each file is a five-to-seven object PDF with a correct xref table, and the offsets must be updated if the object bodies change. Keep every fixture under 50 KB — they exist to make one assertion each, not to be realistic resumes.