Files
claude-resume-kit/README.md
T
dennisthiessenandClaude Opus 5 afdef7eb94 refactor: shared agent workflows (F01) and one application registry (F02)
Checkpoint for the 2026-09-11 project review remediation. Work by a previous
agent that ran out of context; committed unchanged as a rollback point before
the remaining findings land on top of it.

F01 — the two agent directories had drifted into different processes
- Six shared workflows under `resume_builder/reference/workflows/`; both
  `.agents/skills/` and `.claude/skills/` are now thin entrypoints that route
  to the same file instead of carrying full copies.
- The `.claude` copies were the stale side: fixed bullet line variants and
  character budgets that the newer process had already dropped. Removing them
  is the point of the change, not collateral.
- Parity/link regression test added; corrected the top-level file map, which
  pointed at a directory that does not exist.

F02 — application status was stored in four places and disagreed
- New registry `job_scout/state/applications.json` (26 records) with
  `application_records.py` (schema, validation, transactional write) and
  `application_tracker.py` (add/update, no quota).
- AGENTS.md and CLAUDE.md no longer keep their own status tables; both point
  at `current_applications.md`, generated from the registry.
- Interview-reached is now independent of outcome, so a withdrawal after an
  interview can record both facts. The old tables are preserved verbatim in
  `job_scout/state/history/application_status_before_2026-09-11.json`.

Verification: `python -m unittest discover -s tests -v` — 18/18 pass.
Spot-checked that the detailed SBB and Kdo Cy notes survived the migration
into the registry rather than being flattened.

Known unresolved, deliberately not invented (see FIX_PROGRESS.md):
Aker BP's application date and its Adjacent-despite-79 classification.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
2026-09-11 19:23:13 +02:00

98 lines
4.6 KiB
Markdown

# Evidence-first resume kit
This repository turns verified career evidence into role-specific LaTeX resumes and, when useful, cover letters. It is designed to prevent a common failure mode of AI-assisted applications: making a document sound closer to the job description by silently overstating skills, scope, titles, or outcomes.
The workflow separates three questions that should never be confused:
1. **Evidence Fit:** does the candidate actually meet the role, including hard gates?
2. **Document Quality:** does the resume communicate the supported evidence clearly?
3. **Channel Strength:** is the application cold, referred, or supported by a warm contact?
A polished resume cannot repair a failed qualification gate. A strong fit can still be hidden by a weak document. The system records both.
## Source hierarchy
```text
source documents
-> structured extractions
-> canonical claims registry
-> experience records and role bundles
-> session plan
-> generated resume / optional cover letter
```
`resume_builder/canonical/claims.json` is the highest-authority career source. Generated files under `output/` are never treated as evidence. `historical_outputs.json` records whether an older package is safe to consult, must be revalidated, or must not be reused.
## Default application strategy
- Target Staff/Senior Data Engineering first.
- Use ML Platform/MLOps, data platform, analytics, and semiconductor profiles only where direct evidence covers the actual requirements.
- Treat direct LLM engineering, formal model evaluation, Terraform-heavy SRE, and similar missing required experience as gates rather than keyword opportunities.
- Record fit and outcomes without application quotas; a fit classification is a preparation signal.
- Add a warm-channel action for core applications.
The default document is a two-page International Tech resume for US-tech/FAANG-style roles in Europe. A Swiss/DACH policy overlay is available for employers that expect local conventions. Cover letters are conditional, not automatic.
## Workflow
### Add evidence
1. Put employment records, project material, papers, or notes under `knowledge_base/`.
2. Run `setup-extract` to create a source-grounded extraction.
3. Review it, then run `setup-build-kb` to update canonical claims, experience files, bundles, and support data.
### Apply to a role
1. Run `make-resume` with the real JD.
2. Review the requirement table and fit gate before approving content generation.
3. Generate and validate the LaTeX resume.
4. Run `make-cl` only when the session records a justified `YES` decision.
5. Run `critique` for separate Evidence Fit, Document Quality, and Channel Strength findings.
6. Run `edit-resume` for approved repairs.
The skills live in `.agents/skills/`. Each application receives a session file under `output/<Role>/` that preserves the JD, fit decision, claim IDs, content plan, validation results, and application status.
## Validation
Validate the knowledge system:
```powershell
python resume_builder/helpers/validate_resume_system.py
```
Validate a generated document:
```powershell
python resume_builder/helpers/validate_resume_system.py --document output/Role/resume.tex
```
Track the uncapped application record (use `summary --all` for older applications too):
```powershell
python resume_builder/helpers/cohort_tracker.py summary
```
`job_scout/state/applications.json` owns current status and event history. The old cohort JSON and
`resume_builder/reference/current_applications.md` are generated views. Update status without erasing interview history:
```powershell
python resume_builder/helpers/cohort_tracker.py update --id <application-id> --date YYYY-MM-DD --event interview_held --note "Interview completed"
python resume_builder/helpers/cohort_tracker.py update --id <application-id> --date YYYY-MM-DD --outcome withdrawn_by_candidate --note "Reason"
python resume_builder/helpers/application_records.py --check
```
Use `application_records.py --render` to recover stale generated views. A classification that differs
from its numeric rubric needs `--fit-override-reason`; it is never silently relabelled.
Character counts are available only as readability diagnostics. There are no fixed character bands, equal-length bullet rules, or page-fill quotas.
## Output and prerequisites
The system writes `.tex` source only. Compile locally with a LaTeX distribution such as MiKTeX, TeX Live, or MacTeX. Generated resumes should also be checked through PDF rendering and text extraction before submission.
See [DOCS.md](DOCS.md) for the architecture and policy reference.
## License
MIT; see [LICENSE](LICENSE).