Stage 3 — CV and cover letter
Stage 3 is where your CV and cover letter get tailored to each application. A single Stage 3 click fans out generation across every selected Stage 2 profile in parallel — one writer per CV and one per cover letter — and saves both documents back to each application.
Inputs the agent reads
- Your CV templates (Settings → CV Templates) — these are the source. The agent extracts experience bullets, projects, and skills from whichever template you have selected as primary.
- Your cover-letter template (if any) — the structure and salutation pattern.
- Your writing-style profile — vocabulary, sentence length, banned filler words.
- The employer profile from Stage 2 — overview, role needs, fit points, cover-letter angle.
- The job description — captured at Stage 1 ingest, optionally re-fetched if stale.
- Format mode (per-app) —
standard(the default Inter 11px PDF) orats(Calibri 11pt single-column, parser-safe).
The agent does NOT invent experience. If a fit point requires a skill you don’t list anywhere in your CV templates, the bullet stays generic — won’t fabricate a project, won’t claim a tool you’ve never used.
The two-doc output and the per-doc Re-Generate
Each application row shows CV status + Cover Letter status independently. If you tweak the CV by hand and want a fresh cover letter, the per-doc Re-Generate runs only that doc — the other one is left untouched. This relies on the agent honoring the explicit generate_cv / generate_cl flags the route passes.
Format mode
Settings → Profile → Document Format toggles the default for new applications. The Stage 3 picker overrides per-app. ATS mode means: ALL-CAPS section headers, plain - bullets, no tables, no images, single column, 0.75-inch margins. Workday and Taleo eat ATS-mode output without mangling.
Regenerate detection
When your format-mode setting changes after generation, Stage 3 surfaces a yellow “Re-Generate” badge on rows whose *_format_mode_applied snapshot disagrees with the current setting. You’re never silently shipping a stale doc.
Concurrency guard
Two cv-adapter runs racing on the same application would each PATCH cvText/coverLetterText and silently overwrite each other. The route refuses with 409 if a run is already in flight for that application; the active-runs indicator surfaces it.