Scout - New `prospective` adapter for ohws.prospective.ch, wired up as `kdocy` (jobs.admin.ch, filtered to Kommando Cyber). jobs.admin.ch is an S3-hosted SPA that returns AccessDenied to any direct fetch, headless included, so the site cannot be scraped -- but the SPA reads a public, unauthenticated API. All 463 federal roles in ~2.4s, against RUAG's 35s Playwright scrape. - This board is richer than any other source: Lohnklasse, application deadline, a named contact per posting, and the full Aufgaben/Anforderungen body, so scoring runs against the JD text rather than the title. - Thread `deadline` through normalization, the markdown report and the JSON dump. A board with hard deadlines needs them on the row. - Match `verwaltungseinheit_*` by prefix: the sub-unit key is department specific (VBS 1083398, EFD 1083364) and hardcoding one breaks reuse. - MANUAL_CHECK entry for the Bundeswehr Reserve portal. The data is reachable (SAP E-Recruiting OData, SearchCategory 0022) but the portal actively blocks automation, and getting through needs UA spoofing plus masking navigator.webdriver. Not wired up by choice -- the operator-sanctioned Suchauftrag/job alert is the better channel. Reasoning is in the comment. Applications - SBB Data Engineer 103755: interviewed 2026-09-09, WITHDRAWN by the candidate 2026-09-11. Net downgrade on four axes (41h vs 40h, 25+Brueckentage vs 28+5, 3 vs 2 office days, and Anforderungsniveau K tops out ~145k against ~135k inside a band running to ~160k -- he would enter K at its ceiling merely to break even). The cohort's only interview, and it ended as his no, not theirs. - Kdo Cy DevOps Engineer III: REJECTED 2026-09-10, 14 days, no interview. Form letter with no diagnostic content. Identical on every recorded dimension to SBB (core / 79 / gate pass / DQ 92 / weak channel) and the two went opposite ways -- recorded as worth watching, not as evidence for the channel thesis. - Citadel row cleaned up: it claimed the cohort and decision-log entries were deliberately unwritten while its own status line read SUBMITTED. Both exist. The next-step cell still said "ask BEFORE building the package" two weeks after submission. Decision log - 69 RUAG rows -> 3 undecided. 63 title/family rule-outs, each noting that it is not a JD read, plus three that are: Test Manager C5I, System Engineer C5I, ICT Solution Architect. Guarded against the shared F/A-18 slug so one write could not silently swallow the other. Note: the K->L/Kader rule is SBB-specific and was deliberately narrowed -- Anforderungsniveau is SBB's own system and does not map onto jobs.admin.ch (Lohnklassen), RUAG or PostFinance. Thun-area employers sit outside the Bern salary logic entirely. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
66 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 |
|---|---|---|
| NVIDIA - Senior DevOps Engineer, Zürich (req JR2024256) | SUBMITTED 2026-09-05. Recorded in the application record (now 7 entries) and in the scout decision log. ⚠ Hybrid vs 5-day onsite was never resolved before sending, so the working model is now a live screening topic, not a pre-cleared one - the same pattern as RUAG's comp/PSP. Thun→Zürich is ~1h50 each way; a 5-day-onsite answer is the main disqualifier to watch for. Comp is not a risk (levels.fyi Greater Zürich IC3 median ≈ CHF 204k, IC4 ≈ CHF 379k). Channel Weak - the 7th consecutive cold submit, though this posting published no named contact, so cold was the only option available. Submission PDFs Dennis_Thiessen_Resume.pdf and Dennis_Thiessen_Cover_Letter.pdf exist and are MD5-verified against source; letter recompiled so its date reads 5 Sep 2026. ⚠ The letter carries oday and the submission copies are copies, not build targets - if it is sent on a later day, recompile the letter and refresh both copies first (config.md Output Rules). Submitted despite the hard-gate failures on an explicit user override, the same shape as RUAG AI Engineer C5I. Resume 2pp/13 bullets + 1pp cover letter (279 body words), both validators PASS 0 warnings, 0 boxes, visually inspected. Measured Document Quality 82/100 at critique; both Tier 1 findings were fixed 2026-09-05 - Ubuntu removed from the skills line (0 canonical; PP-3 is Debian only, and the Debian→Ubuntu transfer argument belongs in an interview answer, not a skills line) and security hardening now marked (personal server) per the explicit claims.json instruction. Four honest ATS terms were added from existing evidence (configuration management, service reliability, container orchestration, observability), lifting JD term coverage 50%→61%; no bullet was touched, so the budget stayed at 13 and cadence could not regress. The critique is now STALE BY DESIGN - the document is better than 82 but that number was not re-measured, so never quote a post-edit estimate as a score. The headline reorder was deliberately NOT applied: it is a positioning call for the user and \headline sits in the FIXED header block. Cover-letter hook is first-party verified (NVIDIA's own live Zürich posting JR2022878); a hook was DROPPED at verification - the Phase 0 plan's "Alps / Swiss AI Initiative with ETH Zürich and EPFL" is not supported by the first-party NVIDIA newsroom release, which mentions neither EPFL nor any Swiss AI Initiative; that came from secondary coverage. The letter names both honest gaps out loud - on-prem networking, and that employer-side Linux/Ansible ended Dec 2022 with only a personal server carrying currency. ⚠ BLOCKING: the working model is still unresolved and no document fix changes that. Session output/NVIDIA_SrDevOps_Zurich/session_nvidia_sr_devops.md; JD scraped live via Playwright and saved verbatim (posted ~2026-09-01, very fresh). Evidence Fit 64/100, fit class Stretch, hard gate FAIL on two counts: (1) required line "Strong expertise in on-premises networking and compute infrastructure" is a Gap - networking is 0 canonical and is not substitutable from data-platform work; (2) hybrid vs onsite is UNRESOLVED and the JD is silent - Thun→Zürich is ~1h50 each way. Required tally 3 Direct / 3 Adjacent / 1 Gap. Recorded as an override rather than a passing gate, the same shape as RUAG AI Engineer C5I. (At the time this also had no free cohort slot; that constraint no longer exists - caps dropped 2026-09-05.) Correction to the same day's scout triage: it called two required lines Gaps; only Q5b networking is one. Q2 (10+ yrs DevOps) is Adjacent and defensible - a continuous CI/CD/automation thread runs Generali 2015 → today across five employers; the honest weakness is that those roles were titled data/test/research engineer, not DevOps. The finding that changes the calculus: comp. levels.fyi Greater Zürich puts NVIDIA IC3 median ≈ CHF 204k and IC4 ≈ CHF 379k, the highest-paying SWE employer in the city - the first role in the log where comp is a reason to accept a long commute rather than decline. Caveat: self-reported and equity-heavy after an extraordinary NVDA run; treat base as the reliable part. Strongest match is R3, CI/CD pipelines for R&D engineering teams - literally his career shape (FC-1 Jenkins at a Fraunhofer institute, BS-6 Ansible/Jenkins for fab analytics teams, SW-3 Kubernetes + GitLab today). Zürich is NVIDIA's HPC/AI infrastructure-software R&D hub - first-party verified from NVIDIA's own live Zürich posting JR2022878 ("building the next generation of scalable AI infrastructure ... distributed training, real-time inference, and communication efficiency across large systems"), which is the hook the letter uses. The Alps / Swiss AI Initiative framing was checked and dropped - see above. Honest gaps that travel with it: on-prem networking (0), HPC (0), bare metal/switches/QEMU-KVM (0), RHEL/CentOS (0 - Debian→Ubuntu transfers, Red Hat does not), and Ansible + Linux-at-work both ended Dec 2022 with currency carried only by PP-3, a personal server whose canonical entry forbids using it as physical-infrastructure evidence. No metric is quotable anywhere. |
Await response. Raise the working model at first contact - it went in unresolved and a 5-day-onsite seat would be a late no. Note: claims.json has no shell-scripting entry, so Bash is omitted from Skills although the JD names it and ten years of Debian admin plus Ansible work plainly involve it - same shape as the Ansible/Linux gaps found 2026-08-27. Confirm with the user and record it. Groovy stays out regardless. |
| RUAG C5I - AI Engineer C5I, Thun (application ID 18027) | SUBMITTED 2026-08-27 via jobs.ruag.ch (portal only; email and post refused). Evidence Fit 74/100, fit class Stretch, hard gate FAIL (R1 and R2, the two title-defining responsibilities, are Adjacent not Direct), Document Quality 93/100 after a full critique-and-fix round (85 pre-edit), truth and provenance 24/25, 0 Tier 1 findings at Round 2, channel Weak/cold. Submitted: German CV 2 pages, 13 bullets + German motivation letter 1 page, 295 words; both validators PASS, 0 boxes, text-order and visual QA clean, submission PDFs MD5-verified before sending. Cohort evidence-first-2026-01 is now 6/10 and the sole Stretch slot is CONSUMED (Core 3/7, Adjacent 2/2, Stretch 1/1) - any further application must clear Core or Adjacent on its own merits. Positioning is his canonical title Staff Data, Analytics & AI Engineer, carried by BS-1 production ML-inference integration, BS-6 Linux/Ansible, SW-3/SW-7/SW-2 current Kubernetes and data-product work, PP-3 current self-hosted Linux and hardening, SW-5 DevSecOps tied to C5I's stated operating model, and the canonical BW-1 officer career. The letter names the AI-platform gap in one sentence and pivots to the operations/platform side. Honest gaps that travel with it: no AI/LLM platform built or operated, no compute/GPU cluster, no RAG/retrieval implementation, no formal LLM evaluation; ML/AI-framework depth is certification-context only. Compensation, PSP/project eligibility and role level were NEVER resolved before sending, so all three are now live screening topics rather than pre-cleared ones. ⚠ Marco Heinzen's published direct line (+41 79 568 14 96) was never used - this went in as a pure cold submit, the sixth consecutive one. If rejected, that is NOT a signal to drop RUAG: five other RUAG C5I reqs sit in the scout log, and Senior DevOps Engineer C5I is already shortlisted and is a materially better fit than this one, sitting on the lane where his evidence is Direct rather than Adjacent (still live and verified on the board 2026-09-04). The Data Lakehouse / Senior Data Platform Engineer req was a title-match prior that the JD does not support — it was reposted 2026-09-04 as Senior Data Engineer (MSSQL), requires on-prem MSSQL / Talend / SAP S/4HANA (0 canonical each), and is ruled out. Scout run 2026-09-07: the RUAG C5I backlog is now SETTLED — undecided RUAG rows went 69 → 3 (ICT Architect, Software Engineer C5I, Cyber Security Consultant remain open; ICT Architect C5I stays paused). Do not re-triage that board from scratch; read decisions.json, where every rule-out note states whether it came from a JD read or from the title/family pattern. Three JD reads that cycle all ruled out: Test Manager C5I (the closest call — it escapes the networking gap entirely and BW-1 scores, but required "fundierte Erfahrung als Test Engineer" rests on VIZRT, ten months, ended 2018-05, so it is thin and stale, plus a lane exit and a third C5I req while 18027 is pending), System Engineer C5I (VMware + Firewall + Netzwerk, all 0), and ICT Solution Architect Business Applications (required "mehrjährige Erfahrung als Solution Architect" — a title feedback_swisscom_datamesh_ownership forbids — and the duties are "unter Anleitung", a supporting seat below authoring). |
Await response. Optional but still worthwhile: call Marco Heinzen about technical scope and level, and Frank Haugwitz about compensation and PSP/project eligibility. NEW CONTACT 2026-09-07 — Lars Kauz, Head of ICT Infrastructure C5I, +41 79 293 93 82, lars.kauz@ruag.ch, published on the System Engineer C5I posting. Channel is the rationed variable since the 09-05 cohort change, so a published, reachable name matters — but he heads ICT Infrastructure, the function whose req was ruled out for VMware/VDI/Windows content, and that is NOT demonstrably the Kubernetes platform group Senior DevOps C5I sits in. He is a warm entry into C5I, not a verified channel for rank 1; Haugwitz stays the recorded gate. Do not react to a single outcome with positioning changes (application_strategy.md §38/§74). |
| Schweizer Armee - Kommando Cyber (Kdo Cy), DevOps Engineer III (Data Platform), Zimmerwald (Ref JRQ$540-19848) | CLOSED - REJECTED 2026-09-10 (submitted 2026-08-27, 14 days to disposition, no interview - the fastest in the log after Google Business Home). Form letter from Besarta Mehmeti; the text is boilerplate („Profil und unsere Kriterien nicht in allen Punkten übereinstimmen") and carries zero diagnostic content - it is not a signal about the package and is no reason to re-audit it. Same disposition class as Microsoft ISE, Google Business Home and Aker BP: a cold-channel no-interview rejection does not implicate document quality on its own. ⚠ WORTH WATCHING, NOT CONCLUDING: this application and SBB are identical on every recorded dimension - Core, Evidence Fit 79, hard gate PASS, Document Quality 92, channel Weak - and they went opposite ways: SBB converted to an interview, this died in 14 days. That shows the fit score did not discriminate; it does not show what did. n=1 on each side - do not react with positioning changes (application_strategy.md §38/§74). Channel: Marcel Matthey-Doret's published line (+41 58 46 78409) was never called - the fourth published, reachable contact left unused after Heinzen (RUAG), Wienandts (SBB) and Marthinsen (Aker BP). Consistent with the 2026-09-05 channel policy but not evidence for it: the only interview in the log came from a cold submit whose resume was missing all three ATS literals. Kdo Cy as an organisation is NOT closed - 11 Kdo Cy roles were open on the portal at submission time and only this req is decided. Evidence Fit 79/Core, hard gate PASS, Document Quality 92/100, channel Weak. Submitted package: German 2-page CV with 15 bullets and 1-page motivation letter with 300 body words; validators PASS, 0 boxes, text order and visual QA clean. Canonical BW-1 records the six-year Bundeswehr officer career and anchors the letter's military/public-service motivation. User explicitly accepted the critique's remaining BS-1 wording issue („ohne manuellen Eingriff“) as good enough and submitted unchanged. Honest gaps remain physical datacenter work, GPGPU, ClickHouse and named Pull-GitOps practice. Cohort evidence-first-2026-01 is now 5/10, Core 3/7 (pre-dates the 2026-09-05 cap drop; counts are a record, not a budget). |
Done - rejection recorded in application_cohort.json, decisions.json and the session file. Optional and low-cost: a one-line feedback request to Besarta Mehmeti, which also builds a contact at an org with other open reqs. |
| Citadel Securities — Platform Engineer, Research Platform Engineering, Zürich (also NY/Miami) | SUBMITTED 2026-08-26 — open, awaiting response. Recorded as adjacent in application_cohort.json (outcome applied) and as applied in decisions.json. Slot language from the capped-cohort era has been removed here: the caps were dropped 2026-09-05 and counts are a record, not a budget. ⚠️ KEY FINDING — the application form's preferred-work-location selector offered NO Zurich, despite the JD saying "Miami, Zurich or New York" and the site's own Zurich filter returning this req. Careers site is operated by Citadel Enterprise Americas LLC; the apply flow is likely US-entity, or the Zurich seat is closed while the posting stands. This partly supersedes the working-model risk — if no Zurich seat is reachable through that form, hybrid-vs-onsite is moot and the application may sit against a US req, a hard NO on relocation. Rule for any future Citadel application: check the form's location selector BEFORE building a package — the posting's stated locations and the site filter both proved unreliable. User applied with low expectation; cold channel, evergreen standing req. 2pp resume (13 bullets) + 1pp CL (270 words), both validator PASS, 0 warnings; JD term coverage 51%→68% after Tier 1 fixes. Critique STALE by design (86/100 pre-edit; user chose to submit as-is over re-critiquing; est. ~91 post-edit, never quote as a score). CORRECTED 2026-09-10: this row previously said "Cohort entry and decision-log entry deliberately NOT written — no confirmed send date" while its own status line read SUBMITTED. Both entries exist and both are dated 2026-08-26 — the sentence was pre-submission text that survived the send. The working-model question is still open and travels with the application: Evidence Fit 71/100 (Adjacent, mid-band; revised down from 74), qualifications gate PASS but a practical constraint is UNRESOLVED, which critique_framework.md treats as a NO-GO trigger. The JD is silent on hybrid vs onsite (0 grep matches), and Ken Griffin is on record that Citadel returned to the office 5 days a week and calls it his most important leadership decision. If that holds for Zurich, it means ~2–2.5h daily commuting from Bern or relocating — breaking the Bern-based / 2–3 day hybrid bar. Only contrary evidence is a stale 2022 anonymous Fishbowl post about Operations. Must be asked, not researched — same class as the SBB K band. Practical constraints scored 5/5 in Phase 0 on an unexamined assumption; corrected to 2/5. Zero Gaps among the 7 minimum quals, and all five preferred technologies (Kafka, Kubernetes, Spark, Airflow, distributed DBs) are Direct — the strongest raw stack alignment in the log. Title-defining function splits: R2 (ingestion/transformation/storage/lifecycle of large datasets) is Direct and describes SW-1/SW-7 exactly; R1 (design and build the research platform itself) is Adjacent — the Aker BP authoring-vs-building shape again, and unwritable-around under Scope Discipline. Classification caveat: application_strategy.md's "a defining responsibility is only Adjacent → Stretch" would strictly class this Stretch; recorded Adjacent per the Aker BP precedent (the caps this once turned on no longer exist). Gaps: platform authoring at firm scale, no professional quant/finance (now partly mitigated by new PP-1/PP-2), SDKs (0 evidence), low-latency/HFT (0 evidence — thesis throughput figure is explicitly barred by thesis_limits). Go is NOT a gap — Q3 is disjunctive and Python satisfies it. $175–350k in the posting is a US/NY pay-transparency disclosure, NOT the Zurich number — must be asked. Channel Weak/cold — it was the 5th consecutive cold application, in an office visibly staffed from Google and ETH (platform research head Costas Bekas; Nicolai Meinshausen leads principal research). Cover letter was written and submitted (1pp, 270 words); the PP-1 domain story carries it. |
Await response (submitted 2026-08-26). No document work pending. Two questions travel with this application and must both be asked at first contact, before any interview effort: (1) is the application even against the Zürich seat? — the apply form offered no Zürich, so it may sit against a US req, which is a hard NO on relocation; (2) hybrid or 5-day onsite? — unresolved at submission, and 5-day onsite is a likely NO-GO on the Bern constraint. Same shape as the NVIDIA working-model issue: it went out unresolved, so it is now a live screening topic rather than a pre-cleared one. Also unasked: the Zürich compensation figure — the posting's $175–350k is a US/NY pay-transparency disclosure. |
| SBB - Data Engineer (m/w/d), Asset Management Infrastrukturanlagen, Bern (Job ID 103755) | CLOSED - APPLICATION WITHDRAWN BY THE CANDIDATE 2026-09-11. Interview held 2026-09-09 (HR + Scrum Master, not the People Leader the brief expected); SBB confirmed there was no room on the Einstufung, and he withdrew. This is the cohort's only interview and it ended as a NO from his side, not theirs. 💰 HARD COMP FIGURES - supersedes the earlier +10% estimate and is the reference point for the whole Bern/Thun tier: Anforderungsniveau K tops out at ~CHF 145k. He sits at ~CHF 135k inside a Swisscom band that runs to ~CHF 160k. The decisive argument was headroom, not the absolute number - he would have entered K at its ceiling merely to break even, with nothing above. ⚠ The package was a net DOWNGRADE on four counts: 41h vs 40h week · 25 days holiday + Brückentage vs 28 + 5 from Zeitautonomie · 3 office days vs 2 · the band ceiling. ⚠ Qualitative red flag worth carrying forward: he spoke only to HR and the Scrum Master and perceived difficulties in the team - that is not repairable by a salary offer. 🎯 TARGETING RULE — SBB ONLY: Anforderungsniveau K is too low; at SBB aim at NIVEAU L and/or KADER. ⚠ Deliberately NOT generalised (user, 2026-09-11): Anforderungsniveau is SBB's own salary system (published at https://company.sbb.ch/de/jobs-karriere/arbeitgeberin/lohn.html) and does not map onto other employers — jobs.admin.ch/Schweizer Armee uses Lohnklassen, RUAG has its own scheme, PostFinance publishes per-posting bands. ~145k is an SBB ceiling, not a tier anchor. ⚠ Thun and surroundings (RUAG, Kdo Cy) are explicitly OUT of this reasoning: near-zero commute plus benefits that a salary band does not show — he named childcare-cost coverage at the Schweizer Armee/Kdo Cy as potentially far more generous (unverified — ask, do not assume). Never decline a Thun-area role on band alone before pricing the benefits. What does carry across employers: judge by headroom in the band, and price the total package (working time, holiday, office days), not the entry salary. Original record: interview was stage 2 of 4, INTERVIEW HELD 2026-09-09. SBB asked him to come back on whether the role interests him; SBB's own feedback is still outstanding. User's summary: „ok", but ein paar Red Flags, and in his read the Rahmenbedingungen do not compensate for them - leaning negative, explicitly undecided as of 2026-09-10, and he asked to leave it open. ⚠ The specific red flags were NOT captured while fresh - anyone reopening this must ask rather than rely on memory. 💰 First real read on Anforderungsniveau K: his post-interview estimate is that roughly +10% on the current ~140k looks achievable (very roughly ~155k). This is HIS ESTIMATE of what is negotiable, not a band SBB is recorded as quoting - whether the K range was named on the call is unrecorded. Well below the 180k bar, above current pay. Recorded in comp_worksheet_sbb.md as the first calibration point for the entire Bern/Thun local tier (RUAG, Swissgrid, BKW, BFH), which was previously pure guesswork - treat as an estimate, never quote as a figure. INTERVIEW INVITED 2026-08-28 - 9. September 2026, 08:30, 45 Min, MS Teams. Per the posting's own process this is stage 2 of 4, "Virtuelles Kennenlernen mit HR und Fuehrungskraft" - HR together with Andri Wienandts, not a pure HR screen. Brief written to output/SBB_DataEngineer_AssetMgmt/interview_brief_sbb_2026-09-09.md. This is the FIRST interview of the evidence-first cohort (6 applications, 2 rejections, 1 conversion) and it converted from a COLD submit - the channel plan called for phoning Wienandts first and that never happened. The resume never contained Snowflake, dbt or Power BI, the three literals an ATS keyword screen would have keyed on; the session had recorded that risk as "accepted, not solvable". It did not filter him out, so a human read the dossier and the honest-substitution framing survived first contact. One data point, do not over-read it - but it is evidence against assuming honest omissions are fatal at the screen. Submitted 2026-08-25: 2pp English resume, 13 bullets, no cover letter (SBB waives it), Evidence Fit 79/100 Core, hard gate PASS, Document Quality 92/100, channel Weak/cold. Best practical fit in the log - Bern-based, German-language, no relocation, EU citizen + B permit. Four things unresolved before submitting and now live call topics: (1) Anforderungsniveau K is a capped GAV band, figures not public, very likely below the 180k bar; (2) the seat reads lateral or below current Staff + Component Owner scope, the same shape as the declined BKW, and the JD's only architecture language is a personal skill not an ownership mandate; (3) RAMSI Java/Spring Boot/Angular is a whole responsibility line on a stack that is historical or absent - ask its share, do not oversell; (4) Kidz Care scales on gross household income, so far below 90% at this band. Named gaps to answer honestly: Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular - all non-canonical, all survivable only because the JD prefixes the stack with "z. B.". Thesis stays a methods prototype: no real operational data, no accuracy figures, PSO surveyed only, throughput figure barred. |
Done - withdrawn and recorded in application_cohort.json, decisions.json, comp_worksheet_sbb.md and memory. Carry forward the headroom + total-package test, NOT the K→L mapping — that one is SBB-specific and was explicitly narrowed by the user on 2026-09-11. |
| 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) | CLOSED — REJECTED 2026-08-27 (submitted 2026-07-30, ~28 days to disposition, no interview; the session file and cohort record record the submission as 2026-07-29 — a one-day inconsistency, never reconciled). Adjacent, Evidence Fit 79/100, Document Quality 93/100, hard gate PASS, Channel Weak/cold — the optional follow-up email to Per Olav Marthinsen was left unsent, so this went in as a pure cold submit. Stavanger/Oslo/Trondheim, English working language, no Norwegian and no clearance required, EEA work rights. 2pp resume + 1pp CL, both validator PASS, no Tier 1 truth findings — a cold-channel no-interview rejection does not implicate document quality on its own (same disposition class as Microsoft ISE and Google Business Home). Honest practitioner framing: builds governed data products inside Swisscom's Data Mesh; role authored an enterprise framework — real level stretch, never fabricated authorship. Atlassian Compass closed the catalogue-tool gap (74→79). Standing gaps if a similar req appears: framework authorship, no energy domain, AWS vs their Microsoft/Cognite stack, zero verified metrics. Cohort slot stays consumed (evidence-first-2026-01, Adjacent 1/2 — a rejection does not free a slot; cohort remains 4/10). The Norway lane stays OPEN and selective — NATO JWC Stavanger is still live, and Equinor/Telenor and other strong Norwegian employers remain in scope per the user's standing instruction. Never frame this lane as closed. | Done — cohort rejection recorded; do not react to this single outcome with positioning changes (application_strategy.md §38/§74) |
| 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-09-05 | The ten-application cohort's slot caps (7 Core / 2 Adjacent / 1 Stretch) were DROPPED by user decision. Two reasons, both evidenced. (a) The numbers were arbitrary and non-binding: no derivation existed anywhere, and they were routed around whenever they bound - RUAG AI Engineer went in at Evidence Fit 74 with a hard-gate FAIL, and Citadel was recorded Adjacent when the strict reading said Stretch. (b) The cohort was a confounded experiment: it was built to test fit class, but the variable it silently held constant was channel - cohort_tracker.py reports channel weak: 6, moderate: 0, strong: 0. It therefore could not separate "Stretch does not convert" from "cold does not convert", and the evidence points away from fit class regardless: the highest-scoring package in the log (Snowflake, ~86) drew no reply in 80 days, while the single interview (SBB) came from a cold Core submit whose resume was missing the three ATS literals the session had flagged. What was kept is the recording, not the rationing - fit class, hard gate, channel, date, stage and outcome are still logged on every application, because that record is what makes patterns visible rather than re-derived. Channel replaces the slot budget as the rationed variable: no application goes out cold when a named contact is published and reachable - Marco Heinzen (RUAG), Andri Wienandts (SBB) and Per Olav Marthinsen (Aker BP) were all published, reachable and never used. Fit class is now a preparation signal, not a spend limit: 64/100 means know which two questions are coming, not do not apply. Hard gates and NO-GO triggers are unchanged. Three real constraints survive independently and must not be dropped with the caps: Google's 3-applications-per-rolling-30-days and 90-day same-role wait; not stacking a second cold application on one org while the first is pending; and the hours each package actually costs. Propagated to application_strategy.md, shared_ops.md, session_file_template.md, cohort_tracker.py (now prints counts, never counts-against-a-target) and application_cohort.json. |
application_strategy.md; shared_ops.md; session_file_template.md; cohort_tracker.py; application_cohort.json; CLAUDE.md |
| 2026-09-05 | Bash / shell scripting was missing from claims.json entirely - the third canonical gap of exactly this shape, after Ansible and Linux administration (both 2026-08-27). It surfaced while building the NVIDIA Senior DevOps package: the JD names "proficient scripting skills in Bash, Python, or Groovy", and ten years of Debian administration plus intensive Ansible work at Bosch plainly involve shell scripting - but the canonical file was silent, so under the evidence-first rule the skill was unwritable and was deliberately left off the resume. User-confirmed 2026-09-05 and added as production-historical-and-personal-current, output: allowed, with the same evidence basis as Linux administration (BS-6 professional 2020-2022; PP-3 personal and current). The note records two hard limits: it does not license Groovy, which stays unverified and forbidden, and it does not license systems-programming or kernel-level claims. Systemic lesson, now three times over: the KB is data-engineering shaped and under-records ordinary infrastructure and operations skills. Before scoring any DevOps/platform/SRE JD, ask about ops evidence explicitly rather than trusting claims.json to be complete. Edit note confirmed again: the file is compact inline JSON with CRLF - patch it as text; this change was 6 insertions with no reformatting. |
claims.json (new skill); NVIDIA resume Languages line |
| 2026-09-04 | This file asserted a shortlist that the JD does not support, and the 2026-08-31 scout triage had already caught it — but nothing was written here, so it survived into the next session exactly as that triage predicted. The RUAG session block called Senior DevOps Engineer C5I and Data Lakehouse / Senior Data Platform Engineer "both already shortlisted and materially better fits… where his evidence is Direct rather than Adjacent." Only the first half held. The Data Lakehouse claim was a title-match prior: the live JD is on-prem, MSSQL, Talend, SAP S/4HANA, and claims.json has 0 for all three. RUAG then settled it itself — between the 08-31 and 09-04 scrapes the req was pulled and reposted as "Senior Data Engineer (MSSQL) mit Data Lakehouse Perspektive", with the disqualifier moved into the title; its sibling Senior Data Analyst & Data Scientist was likewise reposted as Senior BI Specialist (Qlik Sense). Required line reads "mehrjährige Erfahrung im Aufbau und Betrieb von on premise Data Warehouse Lösungen" — his stack is AWS cloud-native. Senior DevOps C5I re-verified live on the board 2026-09-04 and stays rank 1. Systemic lesson: a triage finding that is not written into this log does not exist. Close the loop in the same session that finds it. |
CLAUDE.md (RUAG session block); reports/2026-09-04.triage.md |
| 2026-09-04 | The scout's decision log was silently de-linking decisions on two boards, so ruled-out roles kept resurfacing as undecided — this, not forgetfulness, is why the 08-31 RUAG rule-outs all came back dec=None. _decision_key had no pattern for either board, so it fell back to the raw path. RUAG regenerates the UUID in /offene-stellen/<slug>/<uuid> on every repost (DevOps Engineer C5I moved 349979ee… → f48073a5…), recovering 2 orphaned decisions. Fixed in find_decision_url as a two-tier match — exact key first, slug only as a fallback and only when unambiguous in the log — not as a slug key: that was tried and rejected because slugs collide (two live reqs shared flugzeugmechanikerin-technician-mechanical-f-a-18 on the board that day, so one skip would have decided both, the exact cross-req failure _decision_key's host-scoping was designed to prevent). BIS migrated /careers/vacancies/jrNNNNNN.htm → /vacancy/jrNNNNNN, orphaning 5 — including the applied row for jr100429, a live application; fixed with a jr-id pattern. Report rows carrying a decision went 49 → 65, and 14 verified rule-outs were backfilled with their quoted JD reasons. NVIDIA Senior DevOps Engineer was deliberately left undecided — it fails the cohort test as written but the override is the user's call, and a skip would foreclose it. ⚠ Surfaced by the BIS fix: jr100429 is off the BIS board (listed through 08-27, absent from both full runs since) — the req closed, so there is no open BIS application to stack against. Rule: when a triage rules a role out, write it to decisions.json in the same session — and if a role you know was decided shows as undecided, suspect the key before assuming nobody recorded it. |
scout.py (_JOB_ID_PATTERNS); state/decisions.json (14 backfilled) |
| 2026-09-04 | Every Workday job URL the scout has ever emitted was a 404, across three companies and every report in the archive. fetch_workday built links as https://{host}{externalPath}, but externalPath is site-relative (/job/<loc>/<slug>_<req>) and needs the locale and site segments. Verified: 6/6 short-form URLs returned HTTP 404 across NVIDIA, Novartis and Equinor — including a -1-suffixed row and a Switzerland-Remote slug, ruling out per-row drift — while 3/3 …/en-US/{site}/job/… returned HTTP 200. Patched in scout.py:fetch_workday; 49 URLs in reports/2026-09-04.json and 16 in the .md repaired in place. Seen-state keys on the Workday req id, not the URL, so nothing was falsely re-flagged as new. Reports before 2026-09-04 still carry the broken form — any NVIDIA, Novartis or Equinor role previously dismissed as a dead link was mis-dismissed and deserves a re-check. Roche is unaffected (it uses the phenom adapter). Caught only because a JD read was attempted; a keyword-scorer triage would never have surfaced it. |
scout.py (fetch_workday); reports/2026-09-04.json + .md (URLs repaired) |
| 2026-08-27 | A German-language resume was being typeset with English hyphenation patterns, and had been for every German package built from this template. The RUAG resume loaded lmodern but never babel - the cover letter did (\usepackage[ngerman]{babel}), the resume did not. The compiled PDF broke words as Hal-bleiterfertigung, Tran-skription, automa-tisierte and Foun-dation: all wrong in German, and exactly the kind of thing a native-German Swiss reader notices without being able to name. It survived an earlier full visual QA because nothing looks broken - the lines are justified and the page is clean. Adding \usepackage[ngerman]{babel} produced correct breaks (Halb-leiterfertigung, automati-sierte) and also cleared an overfull box introduced when the headline grew. ngerman still breaks Transkription after Tran, so \hyphenation{Trans-krip-ti-on} was added. Rule: any German-language document must load babel[ngerman], and hyphenation must be checked in the compiled PDF, not assumed from a clean box count. resume_template.tex should be checked for the same omission. Checked 2026-09-04: the template loads no babel at all. It is an English template, so it rides TeX's default English patterns and renders correctly as-is — loading ngerman unconditionally would be wrong. Fixed instead with a loud comment block at the package list carrying the ngerman + \hyphenation lines ready to uncomment, so the German case cannot be missed silently. No change to English output. |
RUAG resume (fixed); resume_template.tex (fixed 2026-09-04 — comment-guarded) |
| 2026-08-27 | IBM AI Engineering was on resumes for months with no primary-source record, and PyTorch was under-recorded as a result. The /critique flagged it as the only line a canonical preflight could not confirm: the other three certifications sit in thiessen_certifications.md with issuer, date and certificate number, while this one existed only in bundle_ml_ai_engineer.md. The user supplied the PDF (C:\myCloud\Bewerbungsunterlagen\Zeugnisse\Zertifikate\cert_IBM_AI_Engineering.pdf) and it was read directly: IBM via Coursera, 4 Jun 2020, no expiry, verify code 3ZBZFVAL6A34, six courses, name on the certificate Dennis Thiessen (sz variant, as on ITIL and iSAQB). Recorded as entry #8. It also proves PyTorch, which claims.json had as coursework-or-personal-unverified; upgraded to evidence: certification with output unchanged at certification-context-only. The certificate is explicitly non-credit and confers no grade or degree - never present it as an academic qualification. Same shape as the Ansible/Linux/Bosch-promotion gaps: the claim was true, the KB simply had no record of it. |
thiessen_certifications.md (entry 8); claims.json (PyTorch evidence) |
| 2026-08-27 | claims.json had no Bosch promotion date, so a Swisscom-style title line was unwritable from the canonical file. Asked to render Bosch like Swisscom ("Senior Data Engineer, Data Analysis (Beförderung xy)"), the canonical file offered only a combined official_title "Engineer / Senior Engineer, Data Analysis" with no title_history and no date - while SWISSCOM has a full title_history. The data existed one layer down: experience_bosch.md records it LinkedIn-confirmed as Data Engineer Feb 2020 - Jan 2021 and Senior Data Engineer Jan 2021 - Dez 2022. Added to claims.json as title_history, with display_title set to the user's own preferred wording "Senior Data Engineer, Data Analysis" and official_title left untouched as the formal Zeugnis string. Systemic lesson, the same shape as the Ansible/Linux gaps: claims.json is the declared highest authority but is not always the most complete file - when it is silent, check the experience/ files before telling the user something is unwritable. Edit note: the file uses compact inline JSON and CRLF; a json.dumps(indent=2) rewrite reformats all ~700 lines. Patch it as text. |
claims.json (BOSCH title_history, display_title); RUAG resume |
| 2026-08-27 | Vizrt shown as "DevOps Engineer" alone, on user instruction. Canonical official_title is "Test Automation Engineer"; display_title is "Test Automation / DevOps Engineer". The user asked to drop "Test Automation" for the RUAG C5I package. Bullet content (CI/CD quality gates, Python backend for distributed transcoding) supports the DevOps framing and the user is the authority on his own role - but this is the one title on that document that will not match a Zeugnis word-for-word, so flag it rather than silently propagate it. Not written into claims.json: it is a per-package display choice, not a canonical correction. |
RUAG resume (session file records the flag) |
| 2026-08-27 | A finished package had no reviewable PDF, and the only PDF that existed was a stale pre-fix build. The RUAG C5I resume was recorded as complete, but the previous session had compiled only into a scratch folder (.tmp_ruag_ai_resume/), so output/RUAG_AI_Engineer_C5I/ held just the .tex. The user could not approve what he could not open. Worse, that scratch folder still contained a pre-correction PDF that included Capgemini, named with the deliverable's stem - one grab away from being submitted. The folder also held a stale 3-page text extraction, which is why the prior session's "both pages visually inspected" claim had been made against a different document than the final one. Rule: compile the PDF into the application's own output/ folder (as the Kdo Cy package does), and never leave a superseded PDF beside a deliverable. "Output .tex only" means the .tex is the source of truth, not that the user should be handed nothing to look at. |
RUAG output folder (PDF added, stale temp folder deleted); config.md (Output Rules) |
| 2026-08-27 | Capgemini reappeared in a generated resume, breaking a standing omit preference. The RUAG C5I draft carried Capgemini Deutschland GmbH, Nov. 2014 - Mai 2015 as a compact chronology entry. The user does not want Capgemini on any document (six months only; short-stay impression in Germany). A corpus check found it was the only generated .tex under output/ containing the name, so this was a one-off regression, not a systemic drift. Root cause: the preference had no first-class home. It lived in memory and in a parenthetical inside the unrelated "12+ years" entry below, so a fresh model reading CLAUDE.md and config.md alone would not see it - config.md does not mention Capgemini at all. Recorded here as its own rule: Capgemini is omitted from every resume, CV and cover letter. The resulting Nov. 2014 - Mai 2015 gap is intentional and must never be "fixed". The visible chronology starts at Generali, Mai 2015 - which is also what the "over ten years" profile wording is measured against. |
RUAG resume (fixed); this log (rule recorded) |
| 2026-08-27 | The English resume template asserts "12+ years of production software experience" and that does not hold against claims.json. Canonical employment starts at Capgemini 2014-11 → ~11 years 9 months as of Aug 2026; and Capgemini is omitted from documents by standing user preference, so the visible record on any generated resume starts Generali 2015-05 → ~11 years 3 months. Either reading falls short of twelve. Inherited unexamined into the Kdo Cy draft's opening sentence and caught at final review; corrected there to "über zehn Jahren", which is true under both readings. resume_builder/templates/resume_template.tex still carries the 12+ claim and will re-infect the next package. Possible innocent explanation: officer service after the 2013 M.Eng. (he is a Universität-der-Bundeswehr graduate) may be counted and is not in employment — ask before editing the template, and if it counts, record it in claims.json so the number has a source. Lesson: a number inherited from a template is still a claim and needs a canonical source like any other. |
Kdo Cy resume (fixed); resume_template.tex (OPEN) |
| 2026-08-27 | Linux administration was missing from claims.json entirely — the second infrastructure blind spot found the same day, and the more consequential one. User-confirmed: at Bosch (2020–2022) Linux servers carried everything — ML platform hosts, Docker hosts, backend services, the Ansible control path — and he administered and automated them; he also wrote Ansible extensions, including a credential plugin pulling secrets from a password keystore with local caching to cut lookup volume (scalability/performance). Recorded as new claim BS-6. Separately, he has run a self-hosted Debian server for ~10 years — nginx, mail, Nextcloud, VPN, Docker services, Bitwarden — which he administers and hardens; recorded as PP-3 with a PP-1-style forbidden list (never enterprise/production/multi-user, no uptime or scale figures, never employer work, never evidence of physical-datacenter experience). Hardening evidence leans on the personal side — always say so. GitOps question resolved and the answer is NO: playbooks were in Git but execution was push-based from Jenkins/GitLab, no reconciliation agent. The word stays forbidden; the substance is writable as "versionskontrollierte Infrastrukturautomatisierung mit Ansible aus Git, ausgeführt über Jenkins-/GitLab-Pipelines". Systemic lesson: the KB is data-engineering shaped and under-records infrastructure and operations work. Two canonical gaps (Ansible, Linux) cost the Kdo Cy assessment ~15 points and produced an initial NO-GO that reflected the KB, not the candidate. Before scoring any DevOps/platform/SRE-flavoured JD, ask about ops evidence explicitly rather than trusting claims.json to be complete. |
claims.json (skills Linux administration + GitOps note, new claims BS-6 and PP-3) |
| 2026-08-27 | Ansible was missing from claims.json entirely — a real, currently-relevant skill that could not legitimately be listed. It already appeared in experience_bosch.md BS-1 bullet variants ("Docker, Kubernetes, Ansible"), but the canonical file had zero mentions in either skills or any claim, so by the evidence-first rule it was unwritable. User confirmed 2026-08-27 that Ansible work at Bosch (2020–2022) was intensive and went beyond the BS-1 ML-inference orchestration into configuration management and infrastructure automation. Added as production-historical, output: allowed, and BS-1's scope now records it. This is genuine IaC evidence alongside CloudFormation and it materially improves any DevOps/platform JD — it does not license Terraform, which stays unverified. GitOps added as a separate, explicitly forbidden skill pending clarification: the user described the Ansible work as GitOps, but Ansible is configuration management while GitOps is narrower (declarative desired state in Git, reconciled by an agent such as Argo CD or Flux). Until it is established whether playbooks lived in Git and were applied from there, and whether a reconciliation agent was involved, the word must not appear in any document. The Kdo Cy JD names "Pull-GitOps" explicitly, so that is the one audience guaranteed to probe the distinction. |
claims.json (skills Ansible + GitOps, BS-1 scope) |
| 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-26 | Degree final grades were missing from the KB entirely. A Citadel application form asked for GPA and neither degree's Abschlussnote was recorded anywhere in claims.json — only the M.Eng. thesis grade (1.0). The only lead was knowledge_base/extractions/thiessen_cv_master_profile.md, whose own provenance note says it is not authoritative and which already carries a known error (lists PSO as an applied thesis method, corrected 2026-08-02). User confirmed both grades directly: M.Eng. 1.6, B.Eng. 2.4 (German scale, 1.0 best / 4.0 lowest pass). US 4.0 equivalents added via the modified Bavarian formula (5.0 − G): 3.4 and 2.6. ECTS percentile settled the same day: B is formally the next 25% after the top 10%, i.e. the 10–35% band, so "top 35%" is the correct phrasing — the record's original value was right and the briefly-considered "top 30%" was the error. Never narrow B to a point estimate (top 30%/25%); it is a band. New grade_output_rule: grades stay off the resume and cover letter by default; these fields exist for form questions and credential checks. |
claims.json (EDU-MENG, EDU-BENG) |
| 2026-08-25 | Trading-domain evidence was entirely missing from the KB. claims.json had 0 hits for trading, finance or quant, so a genuine capability was unusable in any document. Added PP-1 (self-built, self-hosted single-user investing/signal platform: US-equity price/fundamental/sentiment ingestion, LLM-assisted sentiment, long-only cross-sectional residual 12-1 momentum book with ATR stop/trail and max 15 names, scheduled scan/backtest pipelines, web dashboard + Telegram alerts) and PP-2 (Udacity AI for Trading nanodegree), plus two allowed-with-context skills. Both carry hard forbidden lists: no PnL/Sharpe/return/backtest figure may ever be quoted, never call PP-1 distributed/production/multi-user, never imply professional quant or finance experience, never present the nanodegree as a quant credential. PP-1 is the one place full-ownership verbs are correct — it is genuinely solo, unlike the employer work governed by Scope Discipline. |
claims.json (claims PP-1, PP-2; skills "quantitative/systematic trading concepts", "backtesting") |
| 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) |