Scout run 2026-09-04 (36 companies, 778 eligible) plus the NVIDIA package it surfaced, and the tooling and policy fixes found along the way. Application - NVIDIA Senior DevOps Engineer, Zurich (JR2024256): submitted 2026-09-05. Evidence Fit 64/100 Stretch, hard gate FAIL x2, channel Weak. Sent on an explicit user override with the working model unresolved, so hybrid-vs-onsite is a live screening topic. 2pp resume + 1pp cover letter, both validators PASS, 0 boxes, 0 Tier 1 findings open. Policy - Drop the 7 Core / 2 Adjacent / 1 Stretch cohort caps. They had no derivation and were overridden whenever they bound, and the cohort was confounded: it tested fit class while holding channel constant at Weak across all six applications. Keep the recording, drop the rationing. - Channel replaces the slot budget as the rationed variable: no application goes out cold when a named contact is published and reachable. - Propagated through shared_ops, session_file_template, cohort_tracker (counts, never counts-against-a-target) and application_cohort.json. Tool fixes - fetch_workday emitted 404 URLs for every Workday company (NVIDIA, Novartis, Equinor): externalPath is site-relative and needs the locale + site prefix. 6/6 short-form 404, 3/3 long-form 200. 773 dead links repaired across 42 archived reports. - find_decision_url silently de-linked decisions on two boards, which is why ruled-out roles kept resurfacing as undecided. RUAG rotates its UUID on repost; BIS migrated its vacancy URL scheme, orphaning 5 decisions including a live application. Fixed as a two-tier match, not a slug key -- slugs collide (two live RUAG reqs shared one). Knowledge base - claims.json: add Bash / shell scripting, the third canonical gap of this shape after Ansible and Linux administration. - bundle_data_platform: BS-4 was framed as a delivered observability stack over what claims.json calls a proof of concept -- the defect the 2026-08-21 sweep was told to look for. - CLAUDE.md and AGENTS.md: correct the RUAG Data Lakehouse shortlist claim, which the JD does not support and which both files still asserted. - resume_template: comment-guard the missing babel/ngerman language block. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QFb8tTCig5r1KzkQiNXcYt
4.1 KiB
Shared Operations — All Application Skills
Canonical Evidence Preflight
Before generation, editing or critique:
- Read
resume_builder/canonical/claims.jsoncompletely. - Read
config.mdandAGENTS.mdcorrections/status. - Run
python resume_builder/helpers/validate_resume_system.py. - Treat canonical claims as higher authority than extractions, experience files, bundles, sessions or outputs.
- Never use a file under
output/as source content for a new application. Consultresume_builder/canonical/historical_outputs.json. - Omit or ask about anything absent, ambiguous or unverified.
JD Integrity
- Use the real posting text verbatim.
- A URL is not a JD; retrieve the visible posting body first.
- Do not reconstruct, infer or complete a missing posting.
- If the real JD cannot be obtained, stop and ask the user to paste it.
- Record source, retrieval method, retrieval date and posting status in the session.
- Recheck that a live role still exists before investing in a package.
For JavaScript-heavy boards, use the in-app Browser skill or the existing Playwright environment under job_scout. Save the retrieved text in the output folder.
Fit Before Writing
Read resume_builder/reference/application_strategy.md and critique_framework.md. Complete the Evidence Fit and hard-gate assessment before planning bullets.
- Core: proceed.
- Adjacent: proceed selectively and state the serious gap.
- Stretch: confirm user intent before full generation and state the gap plainly. There is no cohort capacity to check -- the slot caps were dropped 2026-09-05 (
application_strategy.md). - No-go: record the decision; do not generate a package unless the user explicitly overrides after seeing the gate.
Audience and Cover-Letter Decisions
Select International Tech, Swiss/DACH or Employer-specific format before writing. International Tech is default.
Apply cl_reference.md and record Cover Letter Decision: YES/NO. A deliberately omitted letter is a valid complete package.
Session Files
Store each application at output/<Folder>/session_<name>.md; use session_file_template.md for new sessions.
Derive <name> from company and role using lowercase underscores. Related files use the same key:
session_<name>.mde2e_<name>_resume.tex- optional
e2e_<name>_cover_letter.tex critique_<name>.md
To find a session from a .tex path, strip e2e_ and the document suffix, search the same folder, then output/**/session_*<company>*.md.
Re-read the session at the start of each phase and resume from its Status. Do not restart completed work.
Folder Creation
At the start of an approved application:
- Create
output/<Folder>/. - Copy the verbatim JD into it.
- Create the session file.
- Copy
resume.clsand the selected template only when generation begins.
Do not copy a prior application resume.
Validation and Visual QA
After creating or editing a document:
- Run
python resume_builder/helpers/validate_resume_system.py --document <file.tex>. - Compile with the local LaTeX distribution.
- Inspect the PDF at normal size.
- Extract text with
pdftotextand verify heading/employer/title/date order. - Check page count, clipping, overlap, page breaks and contact information.
Character counts may diagnose an unwieldy bullet, but there are no target character bands and no page-fill quota.
Finalization
After explicit approval:
- Verify the session, resume source/PDF and critique exist.
- Verify the cover-letter source/PDF only when the session decision is YES.
- Run the canonical validator again on every submitted document.
- Copy final PDFs to
Dennis_Thiessen_Resume.pdfand, when applicable,Dennis_Thiessen_Cover_Letter.pdf. - Record submission date, fit class, Evidence Fit, hard gate, channel and outcome status.
- Add the application to the active cohort with
cohort_tracker.py add.
Progress and Recovery
Give short progress updates at major steps. Before ending or clearing context, update session Status and the Active Sessions pointer. If interrupted, add a Resume Point describing completed work and the exact next action.