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
This commit is contained in:
1 parent
0d999ab21b
commit
afdef7eb94
33 files changed
+1558
-1768
No files matched your search
@@ -1,142 +1,11 @@
|
||||
---
|
||||
description: Generate a tailored cover letter from an existing session file and finished resume/CV
|
||||
name: make-cl
|
||||
description: Decide whether a cover letter adds value and, when justified, generate a concise evidence-first LaTeX letter from an approved session and resume. Use for requested letters, Swiss/DACH motivation letters, meaningful transitions, or employer-specific formats; skip generic optional letters.
|
||||
user-invocable: true
|
||||
---
|
||||
|
||||
# /make-cl
|
||||
# Shared project workflow
|
||||
|
||||
**User input:** `$ARGUMENTS`
|
||||
Read and follow [the make-cl workflow](../../../resume_builder/reference/workflows/make-cl.md) before doing this task. Resolve project paths from the repository root.
|
||||
|
||||
Parse `$ARGUMENTS`:
|
||||
- Session file path (e.g., `output/Acme/session_acme_engineer.md`) → read that session file
|
||||
- Session name (e.g., `acme_engineer`) → find session file via shared_ops.md derivation
|
||||
- Empty → check `CLAUDE.md` Active Sessions for latest
|
||||
|
||||
---
|
||||
|
||||
## Safety Rules (ALWAYS ENFORCED)
|
||||
|
||||
**Accuracy > Relevance > Impact > ATS > Brevity**
|
||||
|
||||
Read `config.md` Provenance Flags before generating any content. Verify every claim against that table.
|
||||
|
||||
- Use the email from `config.md` Personal Info in all outputs
|
||||
- CL deepens what resume presents — never introduces new claims not traceable to resume bullets
|
||||
- Source field context from `resume_builder/support/significance_*.md` files
|
||||
|
||||
---
|
||||
|
||||
## User Input During Execution
|
||||
|
||||
If the user provides feedback, corrections, or suggestions at any point:
|
||||
1. Acknowledge the input immediately
|
||||
2. If it affects already-written content: fix it, re-verify word count and anti-patterns
|
||||
3. If it changes the framing: note the change in session file Framing Strategy
|
||||
4. Never restart — resume from current position
|
||||
|
||||
---
|
||||
|
||||
## Startup
|
||||
|
||||
Read `resume_builder/reference/shared_ops.md` for session startup and file derivation.
|
||||
|
||||
Then:
|
||||
1. Read `CLAUDE.md` — check Active Sessions and KB Corrections
|
||||
2. Read `config.md` — load Provenance Flags, email, role types
|
||||
3. Find and read the session file
|
||||
4. **Recovery check:**
|
||||
- If CL Status is DONE → "CL already generated. Run `/critique` next." Show next command. Stop.
|
||||
- If CL Status is IN_PROGRESS → check if CL .tex exists, offer to resume or regenerate
|
||||
- If Resume Status is not DONE → "Resume not yet generated. Run `/make-resume` first." Stop.
|
||||
- If CL Status is PENDING → proceed to Phase 1
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Load Context
|
||||
|
||||
Read in this order:
|
||||
1. **Session file** — specifically: Company Context, Cover Letter Plan, Framing Strategy, ATS Keywords
|
||||
2. **Finished resume/CV .tex** — path from session file Output Files. Read to understand what CL must complement.
|
||||
3. `resume_builder/reference/cl_reference.md` — CL format rules, paragraph templates, anti-patterns
|
||||
4. `resume_builder/support/ai_fingerprint_rules.md` — Banned words, structural rules (CLs are most vulnerable)
|
||||
5. The matching bundle from session file role type → `resume_builder/bundles/bundle_[role_type].md` — Section 5 (Cover Letter)
|
||||
5. All significance files from `resume_builder/support/significance_*.md`
|
||||
|
||||
Update session file Status: `Cover Letter: IN_PROGRESS`
|
||||
|
||||
Progress: "Loading CL context — [company], [role type] bundle, [institution type]..."
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Generate Cover Letter
|
||||
|
||||
Read `resume_builder/templates/coverletter_template.tex`.
|
||||
|
||||
**Detect institution type** from session file Cover Letter Plan:
|
||||
- Industry → 3 paragraphs, 250-300 words
|
||||
- National Lab → 4 paragraphs, 350-450 words
|
||||
- Academic → 4 paragraphs, 350-450 words (postdoc) or 450-650 words (faculty)
|
||||
|
||||
**Generate CL following cl_reference.md paragraph structure:**
|
||||
- Use significance files for field-context depth (NOT resume bullet text)
|
||||
- Use session file CL hooks and "why them" angle
|
||||
- Ensure every major claim is traceable to a resume/CV bullet
|
||||
- Open with a specific reference to their work — no generic openers
|
||||
- Weave credentials into body paragraphs, not closing
|
||||
|
||||
Save to `output/<FolderName>/e2e_<name>_cover_letter.tex`
|
||||
|
||||
Progress: "Writing [institution type] cover letter — [N] paragraphs, targeting [N] words..."
|
||||
|
||||
### CL Hook Verification Gate (MANDATORY before presenting to user)
|
||||
|
||||
Web-search every hook used in the CL:
|
||||
- Academic: PI name + cited paper/research area
|
||||
- National Lab: named program, thrust area, or group publication
|
||||
- Industry: product, technology, or company news referenced
|
||||
|
||||
Present evidence as:
|
||||
> **Claim:** [what the CL says] → **Evidence:** [what the search found] → **Source:** [URL]
|
||||
|
||||
Flag any unverified item: **"UNVERIFIED — please confirm"**
|
||||
|
||||
Do NOT present the CL draft to the user until all hooks are verified or flagged.
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Compile & Verify
|
||||
|
||||
```bash
|
||||
pdflatex -interaction=nonstopmode -output-directory=output/<FolderName> output/<FolderName>/e2e_<name>_cover_letter.tex
|
||||
```
|
||||
|
||||
Use Read tool to view compiled PDF. Verify:
|
||||
|
||||
| Gate | Check | If FAIL |
|
||||
|------|-------|---------|
|
||||
| Word count | Industry 250-300, Lab/Academic 350-450 | Trim/expand |
|
||||
| Page count | Resume package: 1 page. CV package: 1-2 pages | Adjust content |
|
||||
| Page fill | 1pg: well-filled. 2pg: page 2 >= half filled before signature | Adjust |
|
||||
| Anti-patterns | No generic opener, no defensive framing, no credential dump | Rewrite |
|
||||
| Package cohesion | CL claims traceable to resume bullets, no contradictions | Fix |
|
||||
| Compile | Clean pdflatex | Fix LaTeX errors |
|
||||
|
||||
Update session file:
|
||||
- Add CL to Output Files
|
||||
- Status: `Cover Letter: DONE`
|
||||
- Add Next Critique command
|
||||
|
||||
Progress: "Compiled — 1 page, 278 words. Package cohesion verified."
|
||||
|
||||
### >>>>>> MANDATORY STOP — DO NOT PROCEED <<<<<<
|
||||
Present: CL summary (word count, page count, key hooks used).
|
||||
**You MUST wait for the user's explicit text response before continuing.**
|
||||
|
||||
If user requests changes: apply them, re-compile, re-verify. Update session file.
|
||||
If user approves: update Status, present next command.
|
||||
|
||||
**Do NOT trigger file organization** — that happens after `/critique` approval.
|
||||
|
||||
"Cover letter done. Next steps:
|
||||
1. /clear
|
||||
2. [exact /critique command with session file path]"
|
||||
This shared file is the only workflow implementation for both agents. Preserve existing user authorization and resume from the application's recorded state.
|
||||
Reference in new issue
Block a user