Build & score a resume from a job link
A bare job link is a complete instruction. Do the whole pipeline without asking. Stop at "built + scored + recorded" — applying is the user's action.
Steps
- Dedupe. Run
python -m resume_pipeline.tracker report data/applicationsand check whether this company/team is already there. Say so up front; keep going anyway. - Extract the JD — stop at the first method that returns the full text:
- the ATS's public JSON endpoint (Greenhouse / Ashby / Lever boards expose one),
- a structured web fetch ("list every responsibility and requirement, one per line"),
- a browser, for JS-rendered career sites. If all fail, ask the user to paste it. Never invent JD content.
- Write the record
data/applications/<slug>.mdfromexamples/applications/_TEMPLATE.md. New record = onefoundevent only (notapplied; the user applies). One file = one requisition. - Write the target
data/targets/<slug>.yaml:- choose module ids from
data/modules.yaml, ordered for this JD; no resume text in a target - set
output:(a missingoutput:silently buildsresume.docx) - a JD keyword with no real bullet behind it is a gap: write it in the header comment, never as a skills-line keyword. Mark each gap inherent (no such experience -> interview narrative) or fixable (real experience, wrong wording).
- fill the page; if it spills to page 2, trim
project_bulletsfirst. Do not editconfig/layout.yaml— it is shared by every resume.
- choose module ids from
- Build + verify one page
python -m resume_pipeline.build_resume data/targets/<slug>.yaml --modules data/modules.yaml --out /tmp/resume_<slug>.docx soffice --headless --convert-to pdf --outdir /tmp /tmp/resume_<slug>.docx # then count pages - Score with the
scoring-resumesskill. A resume is not done until the scorecard is in the record. - Validate the record:
python -m resume_pipeline.tracker validate data/applications. - Report: verdict + three gate scores -> which JD asks are covered -> gaps (inherent/fixable) -> positioning -> non-resume gates (location, visa, on-site days, clearance — the application form asks these separately and they are not resume edits) -> one-line recommendation.
Rules
- Never fabricate experience, a date, or a JD. Add a bullet only for real experience the user confirms.
- A low score is information, not a veto: the user decides whether to apply.
- On a full page, "add a bullet to patch a flagged gap" must be A/B-scored — patches often score worse.
- Several links at once: extract all JDs first, then run steps 3-8 one job at a time; say when one resume can cover two near-identical roles instead of building a duplicate.