An audit of all 18 packages in output/ (368 bullets) found one rhythm
running through every document: 45% of bullets used the same "X, Y and
Z" triple, and the SBB package reached 85% - 11 of 13 bullets, every
Swisscom and Bosch line - plus two adjacent bullets both opening
"Build and...".
This is a style finding, not a truth finding. Every bullet was accurate.
The corpus is clean on the axes that actually signal generated text: no
AI vocabulary (0 hits for leverage/spearheaded/robust/passionate and 56
others across 35 documents), prose em-dashes at 0.08/bullet, and PDF
metadata carrying nothing but MiKTeX pdfTeX with empty Author/Title
(0 AI tokens and 0 generator-term leaks across 69 PDFs). What is left is
cadence: ten bullets sharing one three-beat rhythm read as machine-made
even when nothing in them is false.
Guarded deliberately so it cannot do harm. cadence_checks() emits WARN
and never ERROR, the critique deduction caps at 1 point, and both the
reference and the docstring state that no claim, scope or hedged verb
may be bent to satisfy rhythm. An anti-monotony rule with teeth would be
worse than the problem - it would pressure a future run into loosening a
scoped claim to vary a sentence.
Thresholds are calibrated on the corpus, not guessed. Position length
spreads are bimodal (1-9 words, then 15-17), so the check flags a spread
of <=4, the tight tail at ~28% of positions; the first draft used <=6
and flagged the median. Also fixed the opening-verb extractor, which
read \textbf{Owned ...} as the word "textbf" and produced six false
positives on one document. Per-package warnings now run 0-3.
Docs: resume_reference.md 7a + verification step, critical_rules.md 7a,
critique_framework.md mechanics row, CLAUDE.md corrections log.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
23 KiB
claude-resume-kit — Project Instructions
This file is auto-loaded by Claude Code. It provides project-wide rules for all skills.
File Map
.claude/skills/
├── setup-extract/SKILL.md # Extract from papers/files into structured extractions
├── setup-build-kb/SKILL.md # Build experience files, bundles, taxonomy from extractions
├── make-resume/SKILL.md # Phase 0-2: JD research → bullet plan → resume/CV generation
├── make-cl/SKILL.md # Cover letter generation from session file
├── edit-resume/SKILL.md # Edit resume/CV from critique or user feedback
└── critique/SKILL.md # 8-dimension critique of full package
resume_builder/
├── canonical/
│ ├── claims.json # Highest-authority career facts and claim controls
│ └── historical_outputs.json # Reuse safety for prior application packages
├── reference/
│ ├── shared_ops.md # Session startup, derivation, workflow — ALL skills
│ ├── resume_reference.md # Resume/CV rules — /make-resume, /edit-resume
│ ├── cl_reference.md # CL rules — /make-cl, /edit-resume (CL edits)
│ ├── critical_rules.md # Compact re-read — /make-resume Phase 2
│ ├── session_file_template.md # Session file format
│ ├── critique_framework.md # Separate fit, document, and channel assessment
│ └── application_strategy.md # Targeting and cohort strategy
├── templates/ # LaTeX .cls + .tex templates
├── helpers/ # Validators, diagnostics, and cohort tracker
├── examples/ # Example KB for a fictional researcher
├── experience/ # /setup-build-kb outputs: one file per position
├── bundles/ # /setup-build-kb outputs: one per target role type
└── support/ # /setup-build-kb outputs: skills taxonomy, pub metadata, etc.
knowledge_base/ # User's raw materials
├── extractions/ # /setup-extract outputs here
├── papers/ # Drop your PDFs / .tex source here
└── notes/ # Any other reference material
config.md # User configuration (email, provenance, role types)
Your Role
You are simultaneously:
- Expert Resume Strategist — STAR bullets, ATS optimization, strategic framing
- Senior Hiring Manager (resumes) / Senior Scientist (CVs) — evaluate from the reader's chair
You write as the strategist but critique as the reader.
Hard rules:
- Output .tex files ONLY. User compiles locally.
- Read
config.mdfor email, provenance flags, and output preferences. - Accuracy > Relevance > Impact > ATS > Brevity
Evidence-First Workflow
resume_builder/canonical/claims.jsonis the highest-authority source for career facts, ownership scope, skill evidence, and allowed wording.- Files under
output/are generated artifacts, never evidence sources. Checkresume_builder/canonical/historical_outputs.jsonbefore reusing any historical package. - Verify the JD and assess hard gates before writing. Record Evidence Fit, Document Quality, and Channel Strength separately; never collapse them into one optimistic score.
- Default to the International Tech profile for US-tech/FAANG roles in Europe. Use the Swiss/DACH profile only when the audience calls for it.
- Natural bullet length and relevance govern selection. There are no character targets, forced line variants, or page-fill quotas.
- A cover letter is conditional. Generate one only when required or when it adds specific evidence or motivation that the resume cannot show.
- Run
resume_builder/helpers/validate_resume_system.pyon generated documents, compile the LaTeX, and inspect the rendered output before finalization.
User Focus Directives
- "Emphasize X" — prioritize X-related achievements
- "Downplay Y" — reduce or omit Y-related bullets
- "Include Z" — force-include achievement Z
- "Lead with A" — make A the first bullet in its position
- "Keep B concise" — shorten without deleting material evidence
If no directives, use bundle's Priority Matrix defaults.
Anti-Fabrication Rules
CRITICAL: These rules override everything else.
Accuracy Priority
Accuracy > Relevance > Impact > ATS > Brevity
When in doubt between a more impressive but less accurate claim and a less impressive but accurate claim, ALWAYS choose accuracy.
Provenance Discipline
- Read
config.mdProvenance Flags before every generation - NEVER claim unpublished work is published
- NEVER claim internal tools are peer-reviewed
- NEVER inflate author position (contributing does not equal first author)
- NEVER claim results from collaborators' experiments as the user's own
Verb Discipline
- Full-ownership verbs (Developed, Built, Engineered, Designed) ONLY for work the user performed independently
- Hedged verbs (Contributed, Provided, Supported) for shared or contributing-author work
- When in doubt, hedge
Scope Discipline (big-corp ownership — RECURRING ERROR, enforce hard)
Dennis works in large enterprises (Swisscom, Bosch, etc.). He does not solo-own company-wide platforms, migrations, or systems. Repeated past error: "Built a Data Mesh", "I own the data platform", "Migrated the warehouse" written as if he did it alone.
- NEVER pair a full-ownership verb with a company-wide/organization-scale object (a Data Mesh, the data platform, the company warehouse, the observability platform). That reads as a false solo claim.
- He owns what is genuinely his: his components/domains (Component Owner, Application Owner), the data products he modelled/built/onboarded, the pipelines and services he delivered, the migration work within his scope.
- Fix pattern: scope the object or hedge the verb.
- ✗ "Built a decentralized Data Mesh" → ✓ "Built governed data products within <Company>'s company-wide Data Mesh"
- ✗ "I own the cloud-native data platform" → ✓ "I build and own data pipelines and products on <Company>'s platform"
- ✗ "Migrated the legacy warehouse to AWS" → ✓ "Migrated my domains' ETL stack to AWS" / "Contributed to the warehouse migration"
- Titles he legitimately held (Component Owner, Application Owner) ARE his — state them plainly. The ban is on implying he single-handedly built/owns shared org-scale infrastructure.
- See
[[feedback_bigcorp_ownership_scope]]in memory.
Generation Rules
Rule 1: No code folder names as package names
NEVER use internal code folder names as if they are software packages. Always describe the tool/method instead (e.g., "custom FEM solver" not "FEM_project/").
Rule 2: No LOC counts or test counts in output
NEVER include lines-of-code counts or test counts in resume, CV, or cover letter output. Focus on what the tool does, its impact, and adoption.
Rule 3: Publication status accuracy
Only list papers as "Under Review" if they are actually under review. Check config.md Provenance Flags.
Rule 4: Publication format — use et al.
Use et al. format. Show authors up to and including the user's position, then "et al." When total authors <= 4, show all names.
Rule 5: Funding is not a personal award
Institutional project funding (grants, internal R&D programs) is NOT a personal fellowship or award. Never list funding sources under Fellowships & Honors.
LaTeX Scientific Notation (MANDATORY)
All templates load mhchem (\usepackage[version=4]{mhchem}). Use these conventions:
| Item | Correct LaTeX | Wrong | Rendered |
|---|---|---|---|
| Chemical formulas | \ce{H2O}, \ce{TiO2} |
H2O, H$_2$O |
H₂O |
| Superscripts | $^2$, $^\circ$C |
^2, °C |
², °C |
| Greek letters | $\beta$, $\alpha$ |
beta, alpha |
β, α |
| Approximately | $\sim$64 |
~64 (LaTeX non-breaking space!) |
~64 |
CRITICAL: ~ in LaTeX is a non-breaking space, NOT a tilde. Use $\sim$ for "approximately."
Character counts are diagnostic only; they must never drive page filling or equal-length bullets.
Active Sessions
Update this section when starting/finishing a JD.
| Session | Status | Next Command |
|---|---|---|
| SBB — Data Engineer (m/w/d), Asset Management Infrastrukturanlagen, Bern (Job ID 103755) | SUBMITTED 2026-08-25. Cohort slot: Core (evidence-first-2026-01). 2pp English resume (13 bullets, validator PASS) + critique: Document Quality 92/100 (90 at critique, +2 after Edit 1), hard gate PASS, no Tier 1 truth findings, no outstanding fixes. No cover letter — SBB waives it. Evidence Fit 79/100 (Core, lower end), hard gate PASS — the title-defining capability (build/operate cloud data pipelines and governed data products) is Direct and current, unlike the AWS FDE NO-GO. Best practical fit in the log: Bern-based, German-language, no relocation, EU citizen + B permit. Real strength cluster for the vorausschauende Wartung purpose — Bosch fab sensor/process data, ELK/Kafka anomaly detection, containerized ML inference, plus the condition-monitoring thesis. Two open risks, both level/comp not fit: (1) Anforderungsniveau K is a capped GAV band and the figures are not public — must be asked, not researched; (2) the seat reads lateral or below current Staff + Component Owner scope (same shape as the declined BKW). Named gaps: Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular — all non-canonical, survivable only because the JD prefixes the stack list with "z. B.". Cover letter: NO — SBB explicitly waives it. Channel: posting names Andri Wienandts, People Leader, +41 79 364 62 53 — the first published warm entry point in the entire log. The comp question was NOT resolved before submitting, so the K band is now a live screening topic rather than a pre-cleared one; the same applies to Kidz Care childcare support (up to 90% of Betreuungskosten but scaled on gross household income, so realistically far less at this level — bracket table is intranet-only). | Prep an interview brief before any screening call: (1) Anforderungsniveau K band figures, (2) design/architecture scope vs current Staff + Component Owner level, (3) Kidz Care actual rate at this band. Named gaps to have honest answers for: Snowflake, dbt, Argo Workflows, Helm, Power BI |
| AWS (AWS EMEA SARL, Switzerland Branch) — Senior Forward Deployed Engineer, Zürich (job 10504263) | CLOSED — NO-GO 2026-08-18 at the Phase 0 gate. Evidence Fit 69/100 (Adjacent). Minimum-qual gate passed (all 4 Basic Quals Direct) but the title-defining capability — customer embedding — is a Gap that claims.json globally forbids claiming, and R2 multi-agent/retrieval is a second Gap. User declined: 69 is below the fit bar worth spending a package on. Consistent with revealed behaviour — every application actually submitted scored 77.5–89; nothing below 75 has ever been sent. No cohort slot consumed (Adjacent stays 1/2). Phase 0 analysis retained in the session file for reuse if a better-fitting AWS req appears. |
Done — no package built |
| Google — Forward Deployed Engineer III, Google Cloud GTM (French, German), Zürich (req 78350205438567110) | CLOSED — NOT PROCEEDING 2026-08-18. Phase 0 was done (Evidence Fit 67/100, hard gate PASS) but user declined to proceed after two Google rejections (Merchant Data Science, Business Home): the bar is now that a Google req must fit very well to be worth a third attempt, and this one was Adjacent with an agent-orchestration Gap. Frees the Adjacent cohort slot (back to 1/2). Phase 1 never started. | Done — do not reopen without a materially stronger Google req |
| SDU Center for Energy Informatics, Odense DK — PhD, Theme 2 Predictive Maintenance & Asset Management of Smart Energy Networks (job 4159) | CLOSED — NOT PROCEEDING 2026-08-18. Enquiry email to Prof. Bo Nørregaard Jørgensen (sent 2026-08-02) went unanswered for 16 days; user dismissed the idea. Genuine thesis fit (vibration condition monitoring, RBR+ANN hybrid) but the blockers were never the documents — 2 letters of recommendation 13 years out of academia, and DKK 37,075/mo ≈ CHF 56k against a 180k bar. Deadline was 2026-08-20. | Done — no further action |
| Aker BP ASA — Data Product Architect, AI-ready Data Products (FINN 469067315) | SUBMITTED 2026-07-30 (ahead of the 2026-08-02 deadline; Adjacent, Evidence Fit 79/100, Document Quality 93/100, hard gate PASS, Channel Weak; Stavanger/Oslo/Trondheim, English working language, no Norwegian and no clearance required, EEA work rights). 2pp resume + 1pp CL, both validator PASS. Honest practitioner framing: builds governed data products inside Swisscom's Data Mesh; role authors an enterprise framework — real level stretch, never fabricate authorship. Atlassian Compass closed the catalogue-tool gap (74→79). Remaining gaps: framework authorship, no energy domain, AWS vs their Microsoft/Cognite stack, zero verified metrics. | Done — await response; optional follow-up email to Per Olav Marthinsen |
| Google - Software Engineer III, Business Home, Zurich (req 93922217108087494) | CLOSED - NOT PROCEEDING 2026-07-28 (submitted 2026-07-27; Core, Evidence Fit 89/100, Document Quality 94/100; no interview). Rapid early-screen disposition; known risks were Mid-level versus current Staff scope, data/platform versus product-SWE positioning, preferred algorithms/accessibility gaps, and a cold channel. | Done - cohort rejection recorded; do not treat this outcome alone as a document-quality failure |
| Microsoft — Principal Forward Deployed Engineer, SWE (German Speaking), Zürich (req 200043897) | SUBMITTED 2026-07-27 (84.2/100 Pass 2; finalized 2-page resume + 1-page cover letter). Strong native-German, Staff progression, production ownership and enterprise-data-readiness case; honest gaps remain in end-to-end LLM delivery, Azure AI and strategic-account FDE experience. | Done — await response |
| BIS Basel — Senior Data & Analytics Engineer, AI (jr100429, 3-yr term) | SENT 2026-07-10 (80.5/100; deadline 2026-07-24; hybrid Basel, English-working intl org). Critique flags LLM-depth probe (integration/config vs. ownership) as the screening risk — prep honest answer before any call | Prep interview brief when screening lands |
| NATO JWC Stavanger — Staff Officer, AI Engineer (2030 Digitalisation, G15, 3-yr PLN) | SENT 2026-07-10 (77.5/100; deadline 2026-08-09; final interviews 2nd half Oct 2026). Borderline screen: Azure-cert "or equivalent", LLM depth, no current clearance; German national + officer service are the legibility assets. Tax-free NOK 93,933/mo + allowances | Await screening; no action until contact |
| Microsoft — Senior SWE, Industry Solutions Engineering (ISE), Zürich (req 200040836) | CLOSED — REJECTED 2026-08-11 (submitted 2026-07-03, 85.8/100 Pass 2; 2pp resume + 1pp CL; verbatim Eightfold JD; IC4 base CHF 146.2–245.9k; applied ~7 days after posting). No interview, ~39 days to disposition. Cold-channel application; does not implicate document quality on its own. The separate Microsoft Principal FDE req 200043897 is a different pipeline and remains open | Done — cohort rejection recorded |
| Kraken (Payward) — SRE, AI Agents (remote, CH-eligible) | CLOSED — REJECTED 2026-06-17 (applied 2026-06-15 ~87.2/100, no interview). Honest gaps (NO Terraform/SRE-title/LangGraph) likely the filter; 4th Kraken req declined/rejected to date | Done |
| Google — Senior Data Engineer (Merchant Data Science), Zürich/MV | CLOSED — NOT PROCEEDING 2026-07-24 (applied 2026-06-15, 85.5/100; passed Google Hiring Assessment 2026-06-20, no interview). Assessment pass remains recorded separately. The official 90-day wait applies only to reapplying for the same job; different Google roles remain eligible, subject to 3 applications per rolling 30 days. | Done — target a different strong-fit Google req |
| Snowflake — Sr SWE, Enterprise (Observe by Snowflake), Zürich | CLOSED — NO RESPONSE 2026-08-25 (sent 2026-06-06, ~86/100; 2pp resume + 1pp CL; real Ashby JD; comp CHF 176–253k base; NO C++ gate). Closed by user decision at 80 days silent — past the longest real disposition in the log (Equinor, 79 days). No rejection was ever received: this is a presumed-dead call, not a rejection — do not count it in rejection statistics or treat it as a document-quality signal. Cold channel. Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27), so no cohort slot freed. Highest-scoring package in the log at ~86 and it drew no reply at all — the strongest single argument in the log for the channel problem over the document problem. Unblocks the Snowflake Observe Metrics Platform req (db4f0492), paused 2026-07-28 solely to avoid stacking a second cold application on the same org while this one was open |
Done — if Snowflake is still wanted, the Metrics Platform req is now open to pursue, but route it through a recruiter rather than another cold submit |
| Isovalent (Cisco) Sr Data Engineer, Observability | CLOSED — role pulled (live Cisco scrape 2026-06-02: not on board; Recruitee link dead). Package finalized ~86/100, SHELVED for reuse | Done — retarget PDFs to next live data-eng req (QuantCo/Grafana/Confluent) |
| Google Zürich Sr SWE Infrastructure (Data Pipeline) | CLOSED — DROPPED + DELETED 2026-06-02 (poor fit). Live JD = Core infra/systems SWE with C++ as a MINIMUM qual, off-thesis vs user_positioning. Output folder deleted (was built on a fabricated JD). |
Done — do not reattempt this req |
| Kraken AI Infrastructure | CLOSED — REJECTED (applied, no interview) | Done |
| Infineon Doctoral | CLOSED — withdrew (got interview invite, declined: no relocation to Germany) | Done |
| Infineon AI Engineer | CLOSED — not applied (no relocation to Germany) | Done |
| Apple Data Engineer (ISE, Zurich) | CLOSED — REJECTED (no interview) | Done |
| Google FDE GenAI (Zurich) | PAUSED — GenAI evidence gap too large; redirecting to data-eng/MLOps roles | Likely abandon |
| Equinor — Manager / AI Architect, Agentic systems (Stavanger/Oslo/Rotvoll/Sandsli; req JR106747) | CLOSED — REJECTED 2026-08-14 (submitted 2026-05-27, ~80/100; posting deadline 05.06.2026). No interview, 79 days to disposition — the longest turnaround recorded. Cold channel. This was a Manager req, not a pure IC architect role, so level/scope stretch compounds the standing Norway per-role gates (norsk working-language, no NO clearance — not comp: the 180k bar is CH-only and does not apply to Norway). Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27) — does not free a cohort slot. The Norway lane stays OPEN but selective — Equinor, Telenor and NATO JWC remain in the scout; the user has explicitly said he still wants to reach out for very good Norwegian roles, Equinor included, after this rejection. Never frame this lane as closed. | Done — cohort-external rejection recorded |
| QuantCo Cloud Engineer (Europe/Zürich) | CLOSED — REJECTED (applied 2026-06-01 ~82/100, no interview; rejection 2026-06-15) | Done |
KB Corrections Log
See config.md for user-specific corrections. Add verified errors here as you find them.
| Date | Correction | Files fixed |
|---|---|---|
| 2026-08-21 | The data-engineer bundle carried the SW-1 scope violation it was supposed to prevent. bundle_data_engineer.md §S5's cover-letter opening hook read "while simultaneously leading the migration of our legacy stack to a cloud-native AWS architecture" — a full-ownership verb on a company-scale object, directly contradicting claims.json SW-1 forbidden and point 2 of the narrative thread three lines below it. Live trap for every future data-eng cover letter. Rewritten to the scoped form plus an inline scope warning. Check the other four bundles for the same pattern. |
bundle_data_engineer.md (§S5 hook + new warning) |
| 2026-07-27 | SW-1 was not solo. Swisscom AWS migration was written as "sole technical lead" / "Led migration of legacy stack." Dennis was primary engineer for his own domains' pipelines and a contributor to the wider programme. | experience_swisscom.md (role line + all 3 bullet variants + overclaiming warning), config.md |
| 2026-07-27 | Security Champion is 2025/2026 only, and is a team role — not an award. Source files claimed "3 consecutive years (2023/24–2025/26)." User has now corrected this twice. Default is OMIT unless the JD explicitly requires security/DevSecOps. | experience_swisscom.md SW-5, achievement_reframing_guide.md, skills_taxonomy.md (3 rows) |
| 2026-07-29 | Atlassian Compass is the metadata/lineage platform for Swisscom data products (user-supplied). Previously the KB named no catalogue/lineage product at all, which read as a hard gap against data-governance JDs. Practitioner use only — never claim admin, rollout or ownership. Does NOT license claiming Purview/Collibra/Alation. | claims.json (SW-7 scope + skills entry), experience_swisscom.md SW-7 |
| 2026-08-02 | Master's thesis verified against the PDF. Vibration-based condition monitoring of CNC machine tools; hybrid rule-based reasoning + 7-10-3 ANN; throughput/latency evaluation (~500 SPS pipeline vs 72.9 kSPS sensors). PSO was surveyed but NOT implemented — an earlier note in this session wrongly listed it as an applied method. No real operational data and no accuracy figures: it is a methods prototype, not a validated system. Also recorded: ECTS relative grade B (top 35%), English-language transcripts exist. | claims.json EDU-MENG |
| 2026-08-02 | Bosch data types named. Fab sensor/process data: defect-management records, wafer inspection images, PCM electrical parameters (user-confirmed). Previously the KB named no concrete sensor-data types for Bosch. | claims.json BS-2 |
| 2026-07-27 | Bullet density. Fixed 1L/2L/3L and character-band rules made bullets uniform and encouraged page filling. | Replaced globally with natural-length, evidence-led bullets; character counts are diagnostic only. |
| 2026-08-25 | Cadence monoculture across every generated package. Audit of all 18 packages in output/ (368 bullets) found 45% used the same "X, Y and Z" triple; the SBB package hit 85% — 11 of 13 bullets, every Swisscom and Bosch line — plus two adjacent bullets both opening "Build and…". Not a truth defect: every bullet was accurate and the corpus is clean on AI vocabulary (0 cliché hits in 35 documents) and prose em-dashes (0.08/bullet). It is a rhythm tell — uniform three-beat cadence reads as machine-written. PDF metadata is clean (MiKTeX pdfTeX, empty Author/Title, no AI tokens in 69 PDFs, no generator-term leakage). |
New resume_reference.md §7a + verification step 7; critical_rules.md rule 7a; critique_framework.md mechanics row now scores cadence (max 1 pt, style only) |