feat(ruag): submit AI Engineer C5I, and record the Kdo Cy package

RUAG C5I - AI Engineer C5I (Thun, app ID 18027): SUBMITTED 2026-08-27.
Evidence Fit 74/100, fit class Stretch, title-capability hard gate FAIL
(R1 build/operate the AI-LLM platform and R2 in-house LLM/retrieval are
Adjacent, not Direct) - all knowingly accepted under the user's explicit
Phase 0 override. Consumes the cohort's sole Stretch slot: cohort is now
6/10, Stretch 1/1.

Critique ran twice. Round 1 scored the documents 85/100 and raised three
Tier 1 items; Round 2, after the fixes, scores 93/100 with truth and
provenance 24/25 and zero Tier 1 findings. Evidence Fit did not move and
was not allowed to: PP-3 is a personal project and cannot convert an
Adjacent title-capability into a Direct one.

Documents (.tex is the deliverable; PDFs are gitignored):
- resume 2pp/13 bullets, letter 1pp/295 words, both validators PASS
- headline is now the canonical title "Staff Data, Analytics & AI
  Engineer", which puts the req's own word above the fold
- PP-3 added as a Projekte section - the only current Linux/hardening
  evidence, since BS-6 ended Dec 2022
- the letter names the AI-platform gap in one sentence, then connects
  SW-5 to C5I's stated DevSecOps model
- "governte" -> "governance-konforme"; JD term coverage 18/22 -> 22/22
  claimable, with all six gap terms still correctly absent

Two defects found and fixed that the first critique missed:
- the resume never loaded babel, so a German document was hyphenated
  with English patterns (Hal-bleiterfertigung, Tran-skription). Fixed
  with babel[ngerman] plus a Transkription exception; this also cleared
  an overfull box. Check this on every future German package -
  resume_template.tex likely has the same omission.
- IBM AI Engineering had no primary-source record. Certificate read
  directly (IBM via Coursera, 4 Jun 2020, verify 3ZBZFVAL6A34), recorded
  as entry #8; it also proves PyTorch, now evidence: certification.

Also included: the submitted Kdo Cy DevOps Engineer III package, the
Capgemini omit rule promoted into config.md, BW-1 canonicalized in
experience_bundeswehr.md, and a scout.py comment correcting the
telenorgroup slug from "near-empty" to a claimed board serving stale
phantom listings that DEMO_TITLES would not catch.

Compensation, PSP/project eligibility and role level were never resolved
before sending and are now live screening topics.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JMcHCsTKWvVzqyLChF5ckk
This commit is contained in:
2026-08-27 23:20:17 +02:00
co-authored by Claude Opus 5
parent 93b0fc5b76
commit a0f844c143
21 changed files with 2305 additions and 80 deletions
@@ -0,0 +1,70 @@
Source URL: https://jobs.ruag.ch/offene-stellen/ai-engineer-c5i/4afaa9aa-74c1-4b4d-9232-cf65651ce8ec
Apply URL: https://jobs.ruag.ch/umantis/2514/de/apply/18027
Retrieved: 2026-08-27
Status at retrieval: LIVE; application form reachable
Official portal listing: Berufserfahrene, Thun, Schweiz, 80-100%
AI Engineer C5I (w/m/d)
Rund 3000 Mitarbeitende von RUAG und RUAG Real Estate leisten jeden Tag einen wesentlichen Beitrag zur Sicherheit der Schweiz. Sie sorgen dafür, dass die Schweizer Armee sowie andere Einsatz- und Sicherheitsorganisationen ihre Aufgaben jederzeit umfassend wahrnehmen können.
Das kannst du bewegen
* Aufbau, Weiterentwicklung und Betrieb einer internen AI-/LLM-Plattform inkl. Compute Cluster
* Implementierung von Inhouse LLM-Lösungen inkl. Connectors, Tools und Retrieval-/Dokumentenlösungen
* Entwicklung von Datenpipelines, Data Preprocessing und Schnittstellen zu internen Systemen
* Umsetzung von Proof of Concepts (POCs), MVPs und Pilotlösungen im Bereich AI / R&D
* Containerisierung, Deployment und Automatisierung von AI-Workloads
* Technische Dokumentation sowie Wissenstransfer innerhalb des Teams
Das bringst du mit
* Hochschulabschluss (BSc/MSc) in Informatik, Computer Science, Data Science oder vergleichbar
* Mehrjährige Berufserfahrung in ML- Engineering, Data Engineering, Software Engineering oder DevOps
* Sehr gute Python-Kenntnisse sowie Erfahrung mit modernen ML-/AI- Frameworks
* Erfahrung mit Linux, Docker, Kubernetes oder vergleichbaren Plattformen
* Kenntnisse in LLMs, RAG, APIs, Data Pipelines oder Search-Technologien von Vorteil
* Strukturierte, selbständige und pragmatische Arbeitsweise mit hoher Umsetzungskompetenz
* Sehr gute Deutschkenntnisse in Wort und Schrift; Englischkenntnisse von Vorteil
* Militärische Karriere als höherer Unteroffizier oder Offizier von Vorteil
Erfüllst du nicht alle Voraussetzungen hundertprozentig? Bewirb dich trotzdem. Wir sind stets auf der Suche nach talentierten und motivierten Personen, die unser Team bereichern möchten. Wir legen grossen Wert auf Vielfalt und Chancengleichheit und unser Ziel ist es, ein vielfältiges Team aufzubauen, in dem alle ihre persönlichen Stärken voll entfalten können.
Wir ermutigen insbesondere alle Personen, unabhängig von ihrem Geschlecht, die möglicherweise Bedenken haben, eine Stelle in einem armeenahen Umfeld anzunehmen, sich zu bewerben.
Deine Ansprechperson
Frank Haugwitz
recruiting-c5i@ruag.ch
Arbeitsort
C5I, Uttigenstrasse 36, 3600 Thun
Über den Bereich
Die Business Area C5I der RUAG MRO Holding AG unterstützt die Schweizer Armee bei der Realisierung von IKT-Projekten mit spezifischem Fokus auf das Kommando Cyber. Dies ist deine Chance, einen Beitrag zu hochsicheren und souveränen IT-Systemen zu leisten. Wir sind in den letzten acht Jahren von einem kleinen «Start-up» mit null Mitarbeitenden auf über 260 Mitarbeitende gewachsen und bieten ein einmaliges, dynamisches Umfeld.
Hier kannst du an vorderster Front bei der Digitalisierung der Schweizer Armee mitarbeiten. Willst du einen Beitrag zum sicherheitspolitischen Umfeld leisten? Dann bist du bei uns genau richtig. Wir arbeiten agil und richten uns konsequent nach dem DevSecOps-Modell aus. Mit dem C5I-Campus haben wir einen Innovationsraum für hochsichere IT-Systeme geschaffen und bieten attraktivste Arbeitsplätze. Für fachliche Auskunft steht dir Marco Heinzen, Principal GIS Engineering C5I, gerne zur Verfügung: Tel. +41 79 568 14 96 | Mail marco.heinzen@ruag.ch
Deine Vorteile
Lohn und Nebenleistungen
Wir bieten dir ein leistungsorientiertes- und marktgerechtes Salär, 13 Monatslöhne sowie grosszügige Prämien- und Zulagen. Zusammen mit weiteren Nebenleistungen ergibt sich daraus ein attraktives Gesamtpaket.
Flexibles Arbeiten
Wir legen grossen Wert darauf, dass unsere Mitarbeitenden ein gesundes Gleichgewicht zwischen Beruf und Privatleben finden. Darum bieten wir unter anderem flexible Arbeitszeiten und Homeoffice-Optionen an.
Aufstiegs- und Weiterbildungsmöglichkeiten
Das Potenzial unserer Mitarbeitenden zu fördern und zu entfalten ist uns wichtig. Durch Schulungen, Kurse und Weiterbildungen unterstützen wir sie dabei, ihre Fähigkeiten kontinuierlich auszubauen um ihre beruflichen Ziele zu erreichen.
Wichtige Hinweise zum Bewerbungsprozess
* Vor Anstellungsbeginn wirst du darum gebeten, einen Straf- und Betreibungsregisterauszug vorzuweisen.
* Bewerbungen nehmen wir ausschliesslich über unser Stellenportal jobs.ruag.ch entgegen. E-Mail- wie auch Briefbewerbungen können wir leider nicht akzeptieren.
Zusätzliche offizielle RUAG-Karriereinformation, nicht Teil des obigen Stelleninserats:
RUAG führt bei allen neu eintretenden Mitarbeitenden eine Personensicherheitsprüfung durch.
@@ -0,0 +1,200 @@
# Critique: RUAG C5I — AI Engineer C5I (w/m/d) — Round 2
**Date:** 2026-08-27 (Round 2, after Edit 1)
**Round 1:** same day, pre-edit. Evidence Fit 74 · Document Quality **85** · Channel Weak · 3 Tier 1 fixes.
**Documents:** `e2e_ruag_ai_engineer_c5i_resume.tex` (2 pp, **13 bullets**), `e2e_ruag_ai_engineer_c5i_cover_letter.tex` (1 p, **295 body words**, 5 short paragraphs + close)
**JD:** `JD_ruag_ai_engineer_c5i.txt` — verbatim live posting, retrieved 2026-08-27. **JD integrity: PASS.**
> Scored per `critique_framework.md`, which governs over `SKILL.md` §9.3/§9.4: separate Evidence Fit and Document Quality, verdicts rather than invented probabilities, no single overall score. Documents were re-read from disk, not scored from the Round 1 record.
---
## 1. Round 1 findings — resolution status
| # | Finding | Status |
|---|---|---|
| **T1-1** | Cover letter never connected to DevSecOps, C5I or the Army | **CLOSED.** New standalone paragraph carries `SW-5` and names the DevSecOps model and C5I |
| **T1-2** | `PP-3` missing — the only *current* Linux/ops evidence | **CLOSED.** New `Projekte` section; audited clean against PP-3's full forbidden list |
| **T1-3** | `governte Datenprodukte` is not a German word | **CLOSED.** Now `governance-konforme Datenprodukte` |
| **T2-2** | Headline dropped "AI" from a req titled AI Engineer | **CLOSED.** Now his canonical title, `Staff Data, Analytics & AI Engineer` |
| **T2-3** | Four honestly closeable JD terms absent | **CLOSED.** `Wissenstransfer`, `Datenaufbereitung`, `AI-/ML-Workloads`, `Containerisierung` |
| **T2-4** | IBM AI Engineering had no primary-source record | **CLOSED.** Certificate read directly: IBM via Coursera, 4 Jun 2020, verify `3ZBZFVAL6A34`. Recorded as entry #8 in `thiessen_certifications.md` |
| **T2-5** | CL paragraph 2 re-told resume bullets | **CLOSED.** Compressed; the working-style sentence survives |
| **T2-6** | Post-gap pivot conceded without evidence | **CLOSED.** Now anchored: *"wie zuvor bei der ML-Inferenz in Dresden"* |
| **T2-7** | Citizenship volunteered in the letter | **CLOSED by user decision** — cut. Resume header still carries it |
| **T3** | Bullets 910 both opened `Implementierte` | **CLOSED.** Bullet 9 now opens `Baute`; 0 consecutive identical openers |
| **T2-1(a)** | Vizrt title vs canonical `official_title` | **OPEN by user decision**, logged. Unchanged |
**Plus one defect Round 1 did not catch, found during the edit and fixed:** the resume **never loaded `babel`**, so a German document was hyphenated with English patterns (`Hal-bleiterfertigung`, `Tran-skription`, `automa-tisierte`). This was present at baseline and had survived a full visual QA, because nothing *looks* broken — the lines justify and the page is clean. Fixed with `\usepackage[ngerman]{babel}` plus a `\hyphenation{Trans-krip-ti-on}` exception, which also cleared an overfull box the longer headline had introduced.
---
## 2. Fit Verdict and Hard Gates — unchanged, and unchangeable by editing
| Gate | Result |
|---|---|
| Title-defining capability Direct? | **FAIL.** R1 (build/operate an internal AI-/LLM platform incl. compute cluster) and R2 (in-house LLM solutions, connectors, retrieval/document solutions) remain **Adjacent** |
| Minimum qualification a Gap? | **PASS.** None of the eight `Das bringst du mit` items is a Gap |
| Level requires absent scope? | **PASS** |
| Location / authorization | **PASS.** Thun role, Thun resident, German native, EU citizen with Swiss B permit |
| Clearance (PSP) | **UNRESOLVED** |
| Compensation / level | **UNRESOLVED** |
No document change touches any of this. The user overrode this gate on 2026-08-27 with all of it in view; recorded, not re-litigated.
---
## 3. Evidence Fit — 74/100 (unchanged)
| Dimension | Weight | Score | Reasoning |
|---|---:|---:|---|
| Required qualifications | 35 | 29 | Degree, years, Python, Linux/Docker/Kubernetes, German/English Direct. ML/AI-framework half of Q3 Adjacent |
| Core responsibilities | 25 | 17 | R3/R5/R6 Direct, R4 Direct-to-Adjacent; R1 and R2 Adjacent |
| Level and ownership | 15 | 11 | Staff plus Component/Application Owner exceeds "Berufserfahrene"; may be lateral or down-level |
| Recency and depth | 10 | 8 | Python/Kubernetes/data current; production-ML integration ended 2022; LLM evidence configuration-level |
| Domain/tool transfer | 10 | 6 | Compute cluster, GPU, RAG and search are not substitutable by wording |
| Practical constraints | 5 | 3 | Location/language/authorization excellent; PSP and compensation unresolved |
| **Total** | **100** | **74** | Numerically top-of-Adjacent; strategically **Stretch** |
**`PP-3` does not move this score.** It strengthens the *document's* evidence for the operating half of the role, but it is a personal project and cannot convert an Adjacent title-capability into a Direct one. Treating it as fit-moving would be exactly the "bridge valued as highly as direct evidence" error §5 warns against.
---
## 4. Document Quality — 93/100 (was 85)
| Dimension | Weight | R1 | R2 | Reasoning for the change |
|---|---:|---:|---:|---|
| Truth and provenance | 25 | 23 | **24** | IBM AI Engineering now has a primary source, closing the one line a canonical preflight could not confirm. New `PP-3` and `SW-5` content audited clean against their full forbidden lists. The headline is now *more* accurate than before — his real title, not a positioning label he never held. Remaining deduction: the Vizrt title, user-authorized and logged, is still the one line that will not match a Zeugnis |
| Information hierarchy | 20 | 17 | **19** | Headline now carries the req's own word above the fold. `Projekte` is cleanly placed and parses correctly. Remaining: the officer career, an explicit JD advantage, still sits on page 2 |
| Bullet evidence and impact | 20 | 16 | **16** | **Unchanged and still the weakest dimension.** 12 of 13 bullets are activity descriptions with no outcome clause; only `BS-1` carries a result. This is the honest consequence of `metrics: unverified` across the KB, not a writing failure — but it is real, and it is what a hiring manager notices |
| Relevance and terminology | 15 | 12 | **15** | Both Round 1 deductions closed. **22/22 claimable JD terms now present**, and all six gap terms (RAG, Retrieval, Compute Cluster, AI-/LLM-Plattform, Connectors, Dokumentenlösungen) remain correctly absent. `MVP/Pilotlösung` and `R&D` stay uncovered because the evidence supports "Proof of Concept" and nothing more — declining to stretch is correct behaviour, not a deduction |
| Skills evidence | 10 | 9 | **9** | All tokens still traced. `Datenaufbereitung` and `AI-/ML-Workloads` are claim-backed. TensorFlow/Keras now rests on a verified certificate. Unchanged deduction: `MLOps` in the headline is an umbrella term with no canonical `skills[]` entry, claim-backed only via BS-1 |
| Mechanics/readability | 10 | 8 | **10** | `governte` fixed. German hyphenation fixed. Cadence: list-terminated bullets **50% → 31%**, consecutive identical openers **1 → 0**. 0 boxes, 0 warnings, correct parse, consistent Swiss orthography |
| **Total** | **100** | **85** | **93** | |
**Truth and provenance 24/25 (9.6/10)** — well clear of the 8/10 automatic-failure floor.
The 8-point rise is almost entirely the closure of named Round 1 deductions plus a defect Round 1 missed. The one dimension that did **not** move is bullet impact, and it is the one that would most change a hiring manager's read — see Tier 2.
---
## 5. Channel Strength — **Weak** (unchanged)
Cold portal application; `jobs.ruag.ch` refuses email and post. **Marco Heinzen's direct mobile (+41 79 568 14 96) is published in the posting and still unused.** Nothing in Edit 1 changed this, and no further document work can. This remains the single highest-value action on the application: one call upgrades the channel to Moderate *and* answers whether C5I is hiring someone who has built an AI platform or someone who can operate one and grow into building it — the question the whole application turns on.
---
## 6. Reader Sequence — Verdicts
**Parser / ATS (Umantis). PASS.** `pdftotext -layout` extracts employer, title, dates, location and section order correctly on both pages; the new `Projekte` block parses cleanly; footers read 1/2 and 2/2. No tables, text boxes or multi-column body.
**Recruiter glance (10 s) — Frank Haugwitz. FORWARD.** *The Round 1 friction point is gone.* He is filling a req titled **AI Engineer**, and the headline now reads `Staff Data, Analytics & AI Engineer` — the candidate's real title, containing the word, above the fold, alongside Thun, citizenship, permit and native German. Every box he owns is answered before he scrolls.
**HR / dossier completeness (30 s). COMPLETE.** Two pages, no photo, clean chronology, education, languages, work authorization, `Militärischer Werdegang`, and now a `Projekte` section — which reads as a fuller local dossier, appropriate for a traditional Swiss employer. The Nov 2014 Mai 2015 gap remains intentional and unremarkable.
**Hiring manager (2 min) — Marco Heinzen. Still MAYBE, but a stronger MAYBE.** The underlying split is unchanged: if his brief is "build our RAG stack", this is a no; if it is "run the platform and the pipelines while we grow the AI layer", it is a strong yes. What changed is that the letter now argues the second case more completely — it names his DevSecOps practice against C5I's stated operating model, and the pivot after the gap admission is anchored in something he has actually done rather than in an intention. The resume now also shows *current* hands-on infrastructure, not only work that stopped in 2022.
**Technical reviewer (10 min). CREDIBLE.** No claim collapses. Likely probes, in order: (1) "You configured the assistants — who built the platform underneath?" (2) "Compute cluster — what is the largest thing you have operated, and have you scheduled GPU workloads?" (3) **new:** "Your private server — what have you actually hardened, and how do you patch it?" This is a probe the document now *invites*, and it is a good one to invite. (4) The 20082014 / 20092013 officer-track overlap. (5) Ansible vs Pull-GitOps — the word is still correctly absent and the substance is answerable.
---
## 7. Claim Audit — new and changed content only
| Claim | Canonical | Safe? | Note |
|---|---|---|---|
| Headline `Staff Data, Analytics & AI Engineer` | `claims.json` SWISSCOM `title_history` / current title | ✓ | Now his **actual** title. More accurate than the Round 1 headline |
| Profil opener, same title | as above | ✓ | Consistent with headline and body |
| `governance-konforme Datenprodukte innerhalb des unternehmensweiten AWS Data Mesh` | SW-7 | ✓ | Object still scoped; mesh still not claimed |
| **`Projekte`: private Debian server** | **PP-3** | ✓ | Verbs `Betreibt`/`administriert`/`verantwortet Systemhärtung` all in `allowed_verbs`. "selbst gehostet" stated; section reads `Eigenbetrieb`. **No** enterprise/production/multi-user/business-critical wording, **no** uptime/availability/SLA/user-count/scale figure, **no** SRE or sysadmin implication, **no** datacenter claim. Audited against all five forbidden items |
| `koordinierte Hersteller, technische Dokumentation und Wissenstransfer an die Nutzer` | BS-3 | ✓ | All four BS-3 elements retained (SLOs, vendors, documentation, training) in natural German |
| `Baute einen ELK/Kafka-Proof-of-Concept` | BS-4 | ✓ | `built` is an allowed verb; PoC status still explicit |
| Skills `Datenaufbereitung` | SW-1 / SW-2 / BS-2 | ✓ | Real work, previously unnamed |
| Skills `Containerisierung und Deployment von AI-/ML-Workloads` | BS-1 / BS-6 | ✓ | No new claim; renames existing evidence in the JD's vocabulary |
| Cert `IBM AI Engineering mit TensorFlow/Keras im Weiterbildungskontext` | `thiessen_certifications.md` #8 | ✓ | **Now primary-source verified.** Still correctly confined to certification context |
| **CL:** `Für 2025/2026 bin ich Security Champion meines Teams, mit 100 Stunden Training…` | SW-5 | ✓ | Single year only. Team role, not an award. Does **not** claim DevSecOps compliance ownership |
| **CL:** `Dass C5I konsequent nach dem DevSecOps-Modell arbeitet, entspricht damit meiner heutigen Praxis` | SW-5 + SW-3 | ✓ | A soft alignment claim, supported by the Security Champion role, 100 h training and GitLab CI/CD automation. See Tier 2 — expect it to be probed |
| **CL:** `die Implementierungsseite erarbeite ich mir von dort aus, wie zuvor bei der ML-Inferenz in Dresden` | BS-1 | ✓ | Back-reference to real work; introduces no new claim |
| Citizenship sentence removed from CL | — | ✓ | Resume header still carries `Deutscher Staatsbürger` / `Schweizer Aufenthaltsbewilligung B`, so nothing is concealed |
**No Tier 1 truth finding.** Full sweep across both `.tex` sources and both extracted PDFs: **0 hits** for Capgemini, LangChain/LangGraph/LlamaIndex, Terraform, Azure, GCP, GitOps, TypeScript, FastAPI, Flask, Django, every `global_forbidden_output_patterns` entry, and the standalone acronym `RAG` (word-boundary count 0 — the only `rag` matches are inside *Fragen* and *Abfragen*). **0 em dashes.**
---
## 8. Tiered Improvements
### Tier 1 — none.
No truth, fit or relevance defect remains that is fixable by editing. This is the honest result of Round 1's fixes, not a courtesy.
### Tier 2
**T2-A · Bullet impact is now the document's weakest dimension, and it is a KB problem, not a writing problem.**
12 of 13 bullets describe activity with no outcome. `BS-1` is the only bullet that says what changed. Every other claim in `claims.json` carries `metrics: unverified`, and inventing figures is barred — so the resume is correctly written but structurally flat where a hiring manager looks for consequence. **The fix is upstream:** if any verified outcome exists for `SW-2` (incident or SLA record), `SW-3` (deployment frequency, service count), `SW-7` (data products delivered, sources onboarded) or `BS-3` (applications owned), recording it in `claims.json` would raise this dimension across every future package, not just this one. Do not invent anything to close it here.
**T2-B · The officer career still sits on page 2.**
The JD names it explicitly as an advantage, and it is the one thing most competing software candidates cannot offer. It is mitigated by the profile sentence, and moving the section would break reverse chronology. Structural; accepted rather than fixed.
**T2-C · The headline now duplicates the Swisscom title line verbatim.**
Both read `Staff Data, Analytics & AI Engineer`. Accurate and defensible — it is his title — but the repetition is visible within the first fifteen lines. Optional: differentiate the headline's tail (it currently carries `Python · Kubernetes · MLOps`) or leave it. Cosmetic only.
**T2-D · Prepare the DevSecOps sentence for a follow-up question.**
*"…entspricht damit meiner heutigen Praxis"* is a soft alignment claim. It is supported — Security Champion, 100 h training, GitLab CI/CD — but a security-conscious reader may ask what DevSecOps actually looks like in his current team, and the honest answer is that he is the team's security point of contact, not the owner of a DevSecOps pipeline. Worth having ready; not worth rewording.
### Tier 3
- **Bosch bullet lengths cluster** at 19/22/17/18 words — a 5-word spread, just above §7a's flagged threshold of ≤4. The validator passes it. Diagnostic only; do not pad or trim to move it.
- **`\today`** renders "27. August 2026". If the built PDF is submitted later, recompile so the date refreshes.
- **`MLOps`** in the headline remains an umbrella term with no canonical `skills[]` entry. Claim-backed via BS-1; keep.
---
## 9. Cover Letter Critique
**6A — Anti-patterns. PASS.** No generic opener, no company-history paraphrase, no adjective stack, no defensive gap list. Opens on the candidate-role connection in the first clause. 0 em dashes. The gap sentence — *"Eine AI-Plattform habe ich nicht aufgebaut"* — remains one sentence, immediately followed by what he does bring, and is now followed by evidence rather than intention.
**6B — Tailoring. PASS (was Partial).** The Round 1 deduction is closed. The letter now engages the posting's own `Über den Bereich` framing by name — **C5I** and the **DevSecOps model** — and does so through evidence that was already on the resume rather than through company-research filler. The role thesis in paragraph 1 still derives directly from the JD's first two bullets.
**6C — Context-specific. PASS.** Defence motivation correctly bounded: *"im Umfeld von Landesverteidigung und gesellschaftlicher Verantwortung"*, never rejoining the armed forces. *"ich wohne in Thun, also am Standort selbst"* remains the strongest practical line in the package.
**6D — ATS.** Not a factor; the letter supplements the CV in a portal upload.
**6E — Structural. PASS.** 295 body words (target 250300). Six blocks with good variation — 50 / 52 / 77 / 35 / 63 / 18 words — and no paragraph dominating the page after the split. One page, 0 boxes. Swiss orthography consistent (*Grüsse*, *einschliesslich*). Salutation correctly without a comma. Addressed to the named Ansprechperson at the verbatim-verified legal entity and address. `cl_reference.md`'s "two or three short paragraphs" is the International-Tech default; line 49 explicitly permits an employer-appropriate motivation-statement format, and five short German paragraphs serve this reader better than three long ones.
**6F — Package cohesion. PASS.** Every letter claim maps to a resume bullet and a canonical ID (BS-1, BS-6, SW-3, SW-2, SW-8, **SW-5**, BW-1). No new tool, metric, customer or ownership claim. The LLM boundary is stated identically in both documents. Contact block and location consistent. Citizenship now appears in exactly one place — the resume header — which is the right number.
**Would deleting the letter improve the application? No.** It is now doing more work than in Round 1: it answers the question the resume structurally cannot — what this candidate thinks he is applying for, given what he has not done — and it connects his current security practice to the employer's stated operating model.
---
## 10. Mechanical Verification — re-run on the edited files
| Check | Resume | Cover letter |
|---|---|---|
| `validate_resume_system.py --document` | **PASS, 0 warnings** | **PASS, 0 warnings** |
| Canonical system validator | **PASS, 0 warnings** | — |
| `claims.json` parses after the PyTorch patch | **valid JSON** | — |
| MiKTeX, two passes | **PASS** | **PASS** |
| Page count | **2** (exact) | **1** (exact) |
| Overfull / Underfull boxes | **0** | **0** |
| LaTeX warnings | **0** | **0** |
| `pdftotext -layout` order | employer / title / date / location / sections correct incl. new `Projekte`; footers 1/2, 2/2 | correct |
| German hyphenation | **ngerman**`Halb-leiterfertigung`, `Trans-krip-tion`, `automati-sierte` | ngerman (was already loaded) |
| Visual QA at 130 dpi | both pages re-rendered and inspected after every edit | re-rendered and inspected after the split |
| Submission copy refreshed + MD5 match | **yes** | **yes** |
| PDF newer than `.tex` | **yes** — no unbuilt edits pending | **yes** |
**Content checks.** Email `dennis@thiessen.io` ✓. `Thun, Schweiz` on both; Swisscom entry keeps `Bern, Schweiz` ✓. Capgemini 0 ✓. All forbidden skills 0 ✓. All global-forbidden patterns 0 ✓. French/Italian absent ✓. No DOB, marital status, gender, children or photo ✓. No LOC or test counts ✓. Certifications appear exactly once ✓.
**Structural.** 13 bullets (1114 guide ✓). Six skills lines (46 guide, sixth is Zertifizierungen ✓). Profile 4 rendered lines, one over the 23 guide but carrying three distinct positioning claims; not flagged. Reverse chronology intact. `Militärischer Werdegang` and `Projekte` correctly separated from `Berufserfahrung`.
---
## 11. Summary
**Evidence Fit 74/100 · Stretch · title-capability gate FAIL · PSP and compensation UNRESOLVED — all unchanged.**
**Document Quality 93/100 (was 85) · truth and provenance 24/25 · no Tier 1 findings of any kind.**
**Channel Weak — unchanged, and the published direct line is still unused.**
The documents are now as good as this evidence base allows. Every Round 1 finding is closed except the Vizrt title, which is a conscious user decision, and bullet impact, which is a `claims.json` limitation rather than a writing one.
Per `critique_framework.md`, a high Document Quality score does not make this package submit-ready, and 93 does not mean 93% likely to interview. The gate still reads FAIL. What decides this application is not the documents — it is whether C5I wants the platform's AI layer or its operating layer, and that is answered by a phone call, not by another edit.
@@ -0,0 +1,69 @@
% RUAG C5I: AI Engineer C5I (w/m/d). German-language Swiss/DACH letter.
% Every claim traces to a resume bullet and a canonical ID.
% Boundaries enforced here:
% - SW-8 stays configuration-level. No RAG, retrieval, orchestration, evaluation or fine-tuning.
% - No AI/LLM-platform ownership and no compute/GPU-cluster operation is implied anywhere.
% - BS-1 does not claim model training.
% - BW-1: no clearance, no command scope, no technical military work.
% - RUAG is a defence contractor, not the armed forces. The letter says "im Umfeld von
% Landesverteidigung", never "wieder Teil der Armee".
% - The LLM gap is named once, briefly and without apology. The JD invites applicants who do
% not meet every requirement, so an honest bridge reads as candour, not as a defensive list.
% - SW-5 (Security Champion 2025/2026, 100 h training) answers the JD's stated DevSecOps model.
% Team role only, never an award, never DevSecOps compliance ownership.
% - Citizenship is deliberately NOT restated here (user decision 2026-08-27); the resume header
% already carries "Deutscher Staatsbuerger" and "Schweizer Aufenthaltsbewilligung B".
% Contact location is Thun, matching the resume and the Thun-area rule in config.md.
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage[a4paper,left=0.85in,right=0.85in,top=0.7in,bottom=0.7in]{geometry}
\usepackage{parskip}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{hidelinks}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\begin{document}
{\Large\bfseries Dennis Thiessen, M.Eng.}\par
Thun, Schweiz $\vert$
\href{mailto:dennis@thiessen.io}{dennis@thiessen.io} $\vert$ +41 795 955 585 $\vert$
\href{https://linkedin.com/in/dennis-thiessen}{LinkedIn}
\vspace{1.5em}
RUAG MRO Holding AG, Business Area C5I\\
Herr Frank Haugwitz\\
Uttigenstrasse 36, 3600 Thun
\vspace{1em}
\today
\vspace{1em}
\textbf{Bewerbung als AI Engineer C5I (w/m/d)}
\vspace{0.8em}
Sehr geehrter Herr Haugwitz
Ihre Ausschreibung verbindet zwei Aufgaben, die in meiner Arbeit ohnehin zusammengehören: eine interne Plattform für AI-Workloads zu betreiben und die Datenpipelines und Schnittstellen zu bauen, von denen diese Workloads leben. An dieser Schnittstelle arbeite ich seit Jahren, zuerst in der Halbleiterfertigung bei Bosch, heute bei Swisscom auf Kubernetes und AWS.
Bei Bosch in Dresden integrierte ich ML-Inferenz als Docker-Container mit Kubernetes und Ansible in die kontinuierlich laufende Fertigung; die Klassifikation von Defektbildern lief danach vollautomatisiert. Die Linux-Server darunter administrierte ich selbst und automatisierte ihre Konfiguration mit Ansible, inklusive eigener Erweiterungen. In einer Fertigung ohne Stillstandstoleranz zeigt sich früh, ob eine Automatisierung trägt.
Heute entwickle und betreibe ich bei Swisscom Python-Datenanwendungen auf Kubernetes und verantworte als Component Owner geschäftskritische ETL-Strecken von Oracle und Kafka ins Data Warehouse, einschliesslich Rufbereitschaft. Meine LLM-Erfahrung möchte ich klar einordnen: Ich konfiguriere domänengestützte Assistenten in einer Swisscom-eigenen Oberfläche und arbeite über LiteLLM mit Modell-APIs. Eine AI-Plattform habe ich nicht aufgebaut. Was ich mitbringe, ist die Betriebs- und Plattformseite dieser Rolle; die Implementierungsseite erarbeite ich mir von dort aus, wie zuvor bei der ML-Inferenz in Dresden.
Sicherheit ist dabei kein Anhang: Für 2025/2026 bin ich Security Champion meines Teams, mit 100 Stunden Training zu Cloud Security, DevSecOps und Security by Design. Dass C5I konsequent nach dem DevSecOps-Modell arbeitet, entspricht damit meiner heutigen Praxis.
Die Aufgabe hat für mich auch persönlich Gewicht. Ich diente sechs Jahre in der Bundeswehr, absolvierte den Offizieranwärterlehrgang und die Offizierschule und schied als Leutnant aus. Nach über zehn Jahren in der Industrie wieder im Umfeld von Landesverteidigung und gesellschaftlicher Verantwortung zu arbeiten, ist ein wesentlicher Grund für diese Bewerbung. Deutsch ist meine Muttersprache, und ich wohne in Thun, also am Standort selbst.
Über ein Gespräch würde ich mich freuen, besonders darüber, wie Plattform und erste Inhouse-Lösungen bei Ihnen zusammenspielen sollen.
Freundliche Grüsse
\vspace{1.5em}
Dennis Thiessen
\end{document}
@@ -0,0 +1,92 @@
\documentclass{resume}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage[a4paper,left=0.65in,right=0.65in,top=0.55in,bottom=0.55in]{geometry}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{hidelinks}
\usepackage[version=4]{mhchem}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[R]{\small \thepage/\pageref{LastPage}}
\hyphenation{Trans-krip-ti-on}
\name{Dennis Thiessen, M.Eng.}
\headline{Staff Data, Analytics \& AI Engineer $\vert$ Python · Kubernetes · MLOps}
\contactline{Thun, Schweiz $\vert$ \href{mailto:dennis@thiessen.io}{dennis@thiessen.io} $\vert$ +41 795 955 585 $\vert$ \href{https://linkedin.com/in/dennis-thiessen}{LinkedIn}\\Deutscher Staatsbürger $\vert$ Schweizer Aufenthaltsbewilligung B\\Deutsch (Muttersprache) $\vert$ Englisch (fliessend)}
\begin{document}
\begin{rSection}{Profil}
Staff Data, Analytics \& AI Engineer mit über zehn Jahren Erfahrung in produktiven Daten- und Softwaresystemen. Verbindet Python/Kubernetes und Linux-/Ansible-Automatisierung mit produktiver ML-Inferenz und der Konfiguration domänengestützter LLM-Assistenten; sechs Jahre Bundeswehr mit abgeschlossener Offizierausbildung ergänzen das Profil.
\end{rSection}
\begin{rSection}{Kenntnisse}
\skillline{Programmierung \& Schnittstellen}{Python, SQL, REST APIs; LiteLLM in aktueller API-Nutzung}
\skillline{AI/ML Engineering}{Containerisierung und Deployment von AI-/ML-Workloads, domänengestützte LLM-Assistenten, NLP/Spracherkennung im Forschungsprojekt}
\skillline{Plattform \& Automation}{Linux, Docker, Kubernetes, Ansible, GitLab CI/CD, Jenkins}
\skillline{Data Engineering}{Kafka, Airflow, PySpark, AWS (S3, Glue, Athena/Iceberg, Redshift), Datenpipelines, Datenaufbereitung}
\skillline{IaC \& Betrieb}{CloudFormation, ELK, Grafana, Prometheus, On-Call-Betrieb, DevSecOps}
\skillline{Zertifizierungen}{AWS Solutions Architect -- Associate, gültig bis Sep. 2027; Data Engineering with AWS, 2026; IBM AI Engineering mit TensorFlow/Keras im Weiterbildungskontext; iSAQB CPSA Foundation}
\end{rSection}
\begin{rSection}{Berufserfahrung}
\begin{rSubsection}{Swisscom (Schweiz) AG}{Okt. 2023 -- heute}{Staff Data, Analytics \& AI Engineer (Engineer IV; Beförderung Apr. 2025)}{Bern, Schweiz}
\item Konfiguriert domänengestützte LLM-Assistenten in einer Swisscom-eigenen Weboberfläche: Auswahl verfügbarer Modelle und kuratierte Wissensgrundlagen für Fragen, Migrationsunterstützung und Datenmapping.
\item Entwickelt, deployt und betreibt Python-Datenanwendungen auf Kubernetes; automatisiert Build, Tests und Deployment mit GitLab CI/CD.
\item Modelliert und implementiert governance-konforme Datenprodukte innerhalb des unternehmensweiten AWS Data Mesh von Swisscom. Onboardet Quellsysteme und dokumentiert Metadaten sowie Lineage in Atlassian Compass.
\item Verantwortet als Component Owner geschäftskritische Fulfillment-ETL-Pipelines von Oracle und Kafka in das Teradata DWH, einschliesslich Data Governance, 2nd/3rd-Level-Support, Rufbereitschaft und SLA-Einhaltung.
\item Übernimmt 2025/2026 die Teamrolle als Security Champion; absolvierte 100 Stunden Training zu Cloud Security, DevSecOps, Security by Design und Risikomanagement mit abschliessender Prüfung.
\end{rSubsection}
\end{rSection}
\newpage
\begin{rSection}{Berufserfahrung (Fortsetzung)}
\begin{rSubsection}{Robert Bosch Semiconductor Manufacturing Dresden GmbH}{Feb. 2020 -- Dez. 2022}{Senior Data Engineer, Data Analysis (Beförderung Jan. 2021)}{Dresden, Deutschland}
\item Integrierte ML-Inferenz als Docker-Container mit Kubernetes und Ansible in die kontinuierliche Halbleiterfertigung. Ermöglichte damit eine vollautomatisierte Klassifikation von Defektbildern.
\item Administrierte Linux-Server für Analyse- und ML-Workloads und automatisierte deren Konfiguration mit Ansible. Entwickelte ein Plugin, das Zugangsdaten lokal zwischenspeicherte und Keystore-Abfragen reduzierte.
\item Verantwortete als Application Owner Analyseanwendungen und vorgelagerte Pipelines; definierte SLOs und koordinierte Hersteller, technische Dokumentation und Wissenstransfer an die Nutzer.
\item Baute einen ELK/Kafka-Proof-of-Concept für Anomalieerkennung und ergänzte das Monitoring um Grafana, Prometheus und Loki.
\end{rSubsection}
\begin{rSubsection}{Fraunhofer-Center für Maritime Logistik und Dienstleistungen CML}{Sep. 2018 -- Okt. 2019}{Wissenschaftlicher Mitarbeiter / Research Software Engineer}{Hamburg, Deutschland}
\item Implementierte im ARTUS-Forschungsteam ML- und NLP-Komponenten für die automatische Transkription von Kommunikation bei Seenotrettungseinsätzen.
\end{rSubsection}
\begin{rSubsection}{Vizrt}{Juli 2017 -- Mai 2018}{DevOps Engineer}{Bergen, Norwegen}
\item Entwickelte Python-Backend-Komponenten für verteiltes Video-Transcoding und integrierte automatisierte Audio-/Video-Tests als Quality Gates in die CI/CD-Pipeline.
\end{rSubsection}
\compactentry{Generali Deutschland Informatik Services GmbH}{Mai 2015 -- Juni 2017}
\textit{IT Consultant}\hfill\textit{Hamburg, Deutschland}\par
\end{rSection}
\begin{rSection}{Militärischer Werdegang}
\begin{rSubsection}{Bundeswehr}{Juli 2008 -- Nov. 2014}{Offizieranwärter / Offizier}{Deutschland}
\item Absolvierte Offizieranwärterlehrgang und Offizierschule während sechsjähriger Dienstzeit; schied im Dienstgrad Leutnant aus der Bundeswehr aus.
\end{rSubsection}
\end{rSection}
\begin{rSection}{Projekte}
\begin{rSubsection}{Privater Debian-Server}{seit rund zehn Jahren}{Eigenbetrieb}{}
\item Betreibt und administriert einen selbst gehosteten Debian-Server mit nginx, Mailserver, Nextcloud, VPN, Docker-Diensten und Bitwarden; verantwortet Systemhärtung und Security-Konfiguration selbst.
\end{rSubsection}
\end{rSection}
\begin{rSection}{Ausbildung}
\compactentry{M.Eng. Computer Aided Engineering}{Apr. 2012 -- Okt. 2013}
Universität der Bundeswehr München, Vertiefung Software Design \& Engineering. Masterarbeit an der Tongji University, Shanghai: \textit{Development of a Web-Based Remote Fault Diagnosis System}; Note 1,0.
\vspace{0.25em}
\compactentry{B.Eng. Information and Telecommunication Technologies}{Okt. 2009 -- Okt. 2012}
Universität der Bundeswehr München.
\end{rSection}
\end{document}
+58
View File
@@ -0,0 +1,58 @@
\ProvidesClass{resume}[2026/07/27 Evidence-first professional resume]
\LoadClass[11pt,a4paper]{article}
\RequirePackage{enumitem}
\RequirePackage{ifthen}
\RequirePackage{lastpage}
\RequirePackage{parskip}
\RequirePackage{needspace}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\def\@resumename{}
\def\@resumeheadline{}
\def\@resumecontact{}
\newcommand{\name}[1]{\def\@resumename{#1}}
\newcommand{\headline}[1]{\def\@resumeheadline{#1}}
\newcommand{\contactline}[1]{\def\@resumecontact{#1}}
\newcommand{\printresumeheader}{%
{\LARGE\bfseries \@resumename}\par
\vspace{0.15em}
\ifthenelse{\equal{\@resumeheadline}{}}{}{\@resumeheadline\par}
\vspace{0.1em}
{\small \@resumecontact}\par
\vspace{0.45em}
}
\AtBeginDocument{\printresumeheader}
\newenvironment{rSection}[1]{%
\vspace{0.35em}
{\bfseries #1}\par
\vspace{0.1em}\hrule\vspace{0.35em}
}{%
\vspace{0.2em}
}
\newenvironment{rSubsection}[4]{%
\Needspace{6\baselineskip}%
{\bfseries #1}\hfill{\small #2}\par
{\itshape #3}\hfill{\itshape #4}\par
\vspace{0.1em}
\begin{itemize}[leftmargin=1.25em,label=\textbullet,itemsep=0.18em,topsep=0.15em,parsep=0pt,partopsep=0pt]
}{%
\end{itemize}
\vspace{0.25em}
}
\newcommand{\skillline}[2]{%
\textbf{#1:} #2\par
\vspace{0.08em}
}
\newcommand{\compactentry}[2]{%
\textbf{#1}\hfill #2\par
}
@@ -0,0 +1,474 @@
# Session: RUAG C5I - AI Engineer C5I (w/m/d)
## JD Integrity
- **File/source:** `JD_ruag_ai_engineer_c5i.txt`; verbatim visible body from `https://jobs.ruag.ch/offene-stellen/ai-engineer-c5i/4afaa9aa-74c1-4b4d-9232-cf65651ce8ec`.
- **Retrieval method and date:** direct web retrieval of the live RUAG posting and apply form, 2026-08-27.
- **Verbatim posting:** YES.
- **Posting status:** LIVE 2026-08-27; application form reachable. Internal application ID 18027, publish ID 10075372.
- **Official portal listing:** Berufserfahrene, Thun, Switzerland, 80-100%.
## Application Decision
- **Audience profile:** Swiss/DACH. German-language posting, Swiss defence employer, local Thun role.
- **Evidence Fit:** **74/100**.
- **Fit class:** **Stretch under `application_strategy.md`**, although the numerical score is at the top of Adjacent. The title-defining AI-/LLM-platform build and in-house LLM implementation are only Adjacent.
- **Hard gate:** **FAIL under the strict `critique_framework.md` title-capability rule.** Dennis has not built or operated an AI-/LLM platform or implemented a production retrieval/document solution. His evidence is real but one layer adjacent: Kubernetes/data-platform operation, professional Linux/Ansible, containerized ML inference integration, LiteLLM/API exposure and configuration of grounded LLM assistants.
- **Channel Strength:** Weak today; upgradeable to Moderate only after an actual conversation.
- **Channel plan:** contact Frank Haugwitz (`recruiting-c5i@ruag.ch`) for compensation/PSP screening and Marco Heinzen (`marco.heinzen@ruag.ch`, +41 79 568 14 96) for technical scope, especially whether the first six months centre on platform engineering or direct RAG/LLM implementation.
- **Cohort slot:** evidence-first-2026-01 currently 5/10: Core 3/7, Adjacent 2/2, Stretch 0/1. Proceeding would consume the sole Stretch slot.
- **Decision:** **PROCEED by explicit user override, 2026-08-27.** The user consciously accepts the title-capability gap, unresolved compensation/PSP questions and use of the cohort's sole Stretch slot. The Evidence Fit, Stretch classification and strict hard-gate result remain unchanged.
## Role and Practical Context
| Field | Current fact |
|---|---|
| Employer | RUAG, Business Area C5I |
| Role | AI Engineer C5I (w/m/d) |
| Location | C5I, Uttigenstrasse 36, 3600 Thun |
| Pensum | 80-100% |
| Target group | Berufserfahrene |
| Technical contact | Marco Heinzen, Principal GIS Engineering C5I, +41 79 568 14 96, `marco.heinzen@ruag.ch` |
| Recruiting contact | Frank Haugwitz, Director Sourcing C5I-Campus, `recruiting-c5i@ruag.ch` |
| Application documents | CV / complete dossier required; motivation letter and certificates optional |
| Work model | Flexible hours and home-office options stated; no cadence promised. Commute is immaterial because the role is in Thun |
| Security process | RUAG states that all new employees undergo a Personensicherheitsprüfung; the JD also requests criminal- and debt-register extracts before employment |
| Compensation | No band. RUAG states market-based pay, 13 monthly salaries and allowances. Small self-reported samples indicate a meaningful risk of a cut versus current approximately CHF 140k; exact role band must be asked |
### PSP / citizenship read
- The posting contains **no Swiss-citizenship requirement**.
- RUAG's official careers page says all new employees undergo a PSP.
- SEPOS states that people resident abroad can in principle undergo a PSP and that third-party/company employees are checked for security-sensitive work. This does not guarantee a positive result or this role's project eligibility.
- German citizenship plus Swiss B work authorization is therefore **not an evidenced automatic disqualifier**, but the role-specific PSP/project-access position remains a practical question for RUAG.
### Compensation read
- Official posting: no salary band; only market-based pay, 13 salaries and benefits.
- Kununu RUAG samples are small and non-authoritative: DevOps Engineer approximately CHF 96.6k (n=2), Data Scientist approximately CHF 106.2k (n=2), Software Developer approximately CHF 110.5k average with CHF 78.3k-138.4k range (n=6).
- These numbers cannot price this vacancy, but they make a material pay cut versus current compensation plausible. The Thun-local exception permits near-current pay, not a large reduction.
## Requirements
| # | Requirement | Req/Pref | Class | Canonical evidence | Gate? |
|---|---|---|---|---|---|
| Q1 | BSc/MSc in Informatics, Computer Science, Data Science or comparable | Required | **Direct** | EDU-MENG (M.Eng. Computer Aided Engineering, Software Design & Engineering); EDU-BENG | - |
| Q2 | Several years in ML Engineering, Data Engineering, Software Engineering or DevOps | Required, disjunctive | **Direct** | SWISSCOM employment + SW-1/SW-2/SW-3; BOSCH + BS-1/BS-2/BS-6; FRAUNHOFER; VIZRT | - |
| Q3 | Very strong Python and experience with modern ML/AI frameworks | Required | **Split: Python Direct, frameworks Adjacent** | Python production-current; FC-2 ML/NLP contribution; BS-1 ML-inference integration; TensorFlow/Keras only certification-context evidence | ⚠ |
| Q4 | Linux, Docker, Kubernetes or comparable platforms | Required, disjunctive | **Direct** | BS-6, PP-3, BS-1, SW-3 | - |
| Q5 | LLM, RAG, APIs, data pipelines or search knowledge | Preferred, disjunctive | **Direct overall / partial** | SW-8 LLM configuration and LiteLLM API exposure; SW-1/SW-2/SW-3 data pipelines. RAG and search implementation remain Gaps | - |
| Q6 | Structured, independent, pragmatic execution | Required behaviour | **Adjacent** | SW-2 Component Owner, BS-3 Application Owner, FC-1 independent CI/CD setup; do not turn these into unsupported personality claims | - |
| Q7 | Very good German; English preferred | Required / preferred | **Direct** | German native, English fluent | - |
| Q8 | Higher NCO or officer career | Preferred | **Direct and differentiating** | BW-1: six years Bundeswehr, officer training/school, left as Second Lieutenant | - |
| C1 | Swiss work authorization | Practical | **Direct** | German citizen, Swiss B permit, no sponsorship required | - |
| C2 | PSP and project access | Practical | **Constraint** | PSP applies to all RUAG entrants; no nationality gate stated; role-specific outcome unknown | ⚠ |
| C3 | Compensation acceptable | Practical | **Constraint** | No published band; external samples suggest downside risk | ⚠ |
## Core Responsibilities
| # | Responsibility | Class | Canonical evidence | Gap boundary |
|---|---|---|---|---|
| R1 | Build, evolve and operate internal AI/LLM platform including compute cluster | **Adjacent, title-defining** | SW-3 Kubernetes/Python operations; BS-6 professional Linux/Ansible; BS-1 ML inference | No AI/LLM platform ownership, compute-cluster or GPU-cluster operation |
| R2 | Implement in-house LLM solutions, connectors, tools, retrieval/document solutions | **Adjacent-to-Gap, title-defining** | SW-8 configured grounded assistants; LiteLLM API hands-on | No production LLM implementation, RAG/retrieval implementation, orchestration or formal evaluation |
| R3 | Develop data pipelines, preprocessing and internal interfaces | **Direct** | SW-1, SW-2, SW-3, SW-6, SW-7, BS-2 | Scope must stay on owned pipelines/data products, not company platform ownership |
| R4 | Deliver AI/R&D PoCs, MVPs and pilots | **Direct-to-Adjacent** | BS-4 anomaly-detection PoC; FC-2 ML/NLP contribution; GN-2 PoCs; academic prototype evidence | No claim of end-to-end ownership of shared research programmes |
| R5 | Containerize, deploy and automate AI workloads | **Direct** | BS-1 Docker/Kubernetes/Ansible ML-inference integration; BS-6 automation | Do not claim model training or full ML lifecycle |
| R6 | Technical documentation and team knowledge transfer | **Direct** | BS-3 documentation/training; GN-1 training and technical ownership | - |
## Evidence Fit Breakdown
| Dimension | Weight | Score | Reasoning |
|---|---:|---:|---|
| Required qualifications | 35 | **29** | Degree, years, Python, Linux/container stack and languages are Direct; modern ML/AI-framework depth is Adjacent |
| Core responsibilities | 25 | **17** | Data pipelines, AI-workload deployment and documentation are Direct; the two leading AI/LLM-platform responsibilities are only Adjacent |
| Level and ownership | 15 | **11** | Staff + Component Owner/Application Owner exceeds generic Berufserfahrene level; role may be lateral/down-level despite meaningful build scope |
| Recency and depth | 10 | **8** | Data/Kubernetes/Python current; direct production-ML integration and deepest Linux automation date to Bosch, while current LLM evidence is configuration-level |
| Domain/tool transfer | 10 | **6** | Strong transfer from Kubernetes, Linux, data platforms and inference deployment; compute cluster, GPU operations, RAG and search are not substitutable by wording |
| Practical constraints | 5 | **3** | Thun, German, 80-100% and work authorization are excellent; compensation and project-specific PSP access remain unresolved |
| **Total** | **100** | **74** | Numerical Adjacent; strategic **Stretch** because both title-leading AI/LLM responsibilities are not Direct |
## Competitive Read
- **Obvious-fit candidate:** an MLOps/LLM-platform engineer who has built a private RAG platform, operates GPU/compute clusters, implements retrieval/connectors in Python, and can pass RUAG's PSP; ideally also Swiss military officer/NCO background.
- **Dennis's advantage:** unusually strong combination of production data engineering, Kubernetes delivery, professional Linux/Ansible automation, containerized ML inference in 24/7 manufacturing, current LLM configuration/API exposure, native German, exact Thun location and verified officer career.
- **Their advantage:** direct ownership of the two things the title names: an AI/LLM platform and production retrieval/LLM solutions, plus likely GPU cluster depth.
- **Level/scope:** Dennis is currently Staff/Engineer IV. This vacancy is labelled only Berufserfahrene, not Senior/Staff/Principal. The platform build could be substantive, but compensation and decision authority must be checked before treating it as lateral rather than a down-level move.
## Framing Strategy if the user overrides the HOLD
- **Professional identity:** Staff Data & Platform Engineer with production ML-inference integration, Kubernetes/Linux automation and a six-year officer career.
- **Strongest proof points:** BS-1, BS-6, SW-3, SW-2, SW-1/SW-7, BW-1.
- **Honest adjacent bridges:** SW-8 and LiteLLM/API exposure for LLM context; FC-2/BS-4 for AI/R&D PoCs.
- **Explicit gaps:** no owned AI/LLM platform, no RAG/retrieval implementation, no compute/GPU cluster operation, no formal LLM evaluation, no model training ownership.
- **User directives:** officer career should be visible because the JD explicitly lists it as advantageous; no invented clearance, command scope or military ICT work.
## Cover Letter Decision
- **Provisional decision: YES if proceeding.** The portal makes it optional, but the officer-career motivation and the honest transition from data/MLOps infrastructure into an AI/LLM-platform remit add information the resume cannot fully carry.
- **Verified hooks:** only the live RUAG posting: C5I support to the Swiss Army/Kommando Cyber, DevSecOps model, sovereign/high-security systems and the Thun C5I campus.
- **Do not write yet:** Phase 0 is on HOLD.
## Questions that clear the HOLD
1. **Technical scope to Marco Heinzen:** Is direct production experience implementing RAG/LLM platforms expected on day one, or is the team explicitly hiring a strong Python/Kubernetes/data-platform engineer to build that capability?
2. **Compensation to Frank Haugwitz:** What is the target base-salary range for this vacancy, including how the 13th salary and variable allowances are quoted?
3. **PSP/project access to Frank Haugwitz:** Is a German citizen with a Swiss B permit eligible for the required PSP and all intended C5I project assignments?
4. **Level:** What decision authority and technical ownership distinguish this role from RUAG's Senior/Principal engineering roles?
## Phase 2: Audience and Content Plan
### Positioning and format
- **Profile:** Swiss/DACH, German, two pages. RUAG is a traditional Swiss defence employer and the portal requests a complete dossier.
- **Professional identity:** Staff Data & Platform Engineer with production ML-inference integration, Kubernetes/Linux automation, current hands-on LLM application configuration and a six-year Bundeswehr officer career.
- **Accuracy boundary:** Do not present Dennis as an established AI/LLM-platform owner. Do not claim RAG, retrieval implementation, GPU/compute-cluster operation, model training, formal LLM evaluation or a security clearance.
- **Headline direction:** `Staff Data & Platform Engineer | Python · Kubernetes · MLOps`
- **Summary:** YES, two short sentences. Lead with current Staff-level data/platform ownership and production ML-inference deployment; add the officer career as defence-context differentiation. Describe LLM work as configuration of domain-grounded assistants, not production platform engineering.
### Skills plan, five compact lines
1. **Programming and interfaces:** Python, SQL, REST APIs; LiteLLM only as current hands-on API exposure.
2. **AI/ML engineering:** ML-inference deployment, containerized AI workloads, domain-grounded LLM assistant configuration, applied NLP/speech-recognition contribution.
3. **Platform and automation:** Linux, Docker, Kubernetes, Ansible, GitLab CI/CD, Jenkins.
4. **Data engineering:** Kafka, Airflow, PySpark, AWS S3/Glue/Athena with Iceberg/Redshift.
5. **IaC, operations and security:** CloudFormation, ELK, Grafana, Prometheus; DevSecOps tied to the 2025/2026 Security Champion assignment, not presented as a certification.
TensorFlow/Keras remain certification-context only. C++, JavaScript, Terraform, RAG frameworks and named LLM orchestration libraries are omitted.
### Planned resume bullets
| Order | Role / claim | Evidence type | Scoped bullet direction | Why it belongs |
|---:|---|---|---|---|
| 1 | Swisscom, **SW-8** | Hands-on, current | Configured domain-grounded LLM assistants in a Swisscom-owned interface by selecting available models and supplying curated knowledge for Q&A, migration assistance and data mapping. | Closest current LLM evidence; directly relevant without implying RAG or deployment ownership. |
| 2 | Swisscom, **SW-3** | Production, current; primary developer/operator | Develops, deploys and operates Python data applications on Kubernetes; automates build, test and deployment through GitLab CI/CD. | Direct match for Python, Kubernetes, containerization and automation. |
| 3 | Swisscom, **SW-7** | Production, current; scoped data-product delivery | Models and implements governed data products and source onboarding within Swisscom's company-wide AWS Data Mesh; uses Compass for metadata and lineage as a practitioner. | Shows reliable data foundations for internal AI solutions while preserving shared-platform scope. |
| 4 | Swisscom, **SW-2** | Production, current; Component Owner | Holds component responsibility for Fulfillment pipelines from Oracle/Kafka into Teradata, including governance, support, on-call duty and SLA accountability. | Strongest operations and ownership evidence. |
| 5 | Swisscom, **SW-5** | Current bounded team assignment | Serves as team Security Champion for 2025/2026 after 100 hours of DevSecOps/security training and assessment. | C5I and the posting's DevSecOps context justify the otherwise optional signal. |
| 6 | Bosch, **BS-1** | Production, historical; primary integration owner | Integrated containerized ML inference with Docker, Kubernetes and Ansible into 24/7 semiconductor production, enabling fully automated image classification. | Flagship direct evidence for deployment and automation of AI workloads. |
| 7 | Bosch, **BS-6** | Production, historical; primary administrator/automation developer | Administered and automated Linux hosts for analytics and ML workloads; developed Ansible extensions and CI-triggered configuration workflows. | Closest evidence for the platform/compute side of the target role; no cluster scale is claimed. |
| 8 | Bosch, **BS-3** | Production, historical; Application Owner | Owned lifecycle responsibilities for analytics applications and upstream pipelines, including SLOs, documentation, training and vendor coordination. | Direct operational ownership plus the JD's documentation and knowledge-transfer requirements. |
| 9 | Bosch, **BS-4** | Proof of concept | Implemented an ELK/Kafka anomaly-detection PoC with Grafana, Prometheus and Loki monitoring. | Direct evidence for AI/R&D PoCs and observability; PoC status stays explicit. |
| 10 | Fraunhofer, **FC-2** | Research-project contribution | Implemented ML/NLP components within the ARTUS research team for automatic transcription of sea-rescue communications. | Adds applied NLP and research-pilot evidence; team scope avoids sole-ownership implication. |
| 11 | Vizrt, **VZ-1 + VZ-2** | Production, historical; primary developer | Developed Python backend components for distributed video transcoding and integrated automated A/V tests as CI/CD quality gates. | Concise software-engineering and DevOps depth; avoids irrelevant C++/JavaScript skill padding. |
| 12 | Bundeswehr, **BW-1** | Verified completed service | Completed officer candidate training and officer school during six years of Bundeswehr service; left service as Second Lieutenant. | Explicit preferred qualification and the package's strongest defence-context differentiator. |
Generali remains a compact chronology entry without bullets. **Capgemini is omitted entirely** by standing user preference (six months only; short-stay impression). The Bundeswehr receives a dedicated `Militärischer Werdegang` section rather than being hidden under additional information.
### Certifications and education
- M.Eng. Computer Aided Engineering and B.Eng. Information and Telecommunication Technologies remain visible.
- Highlight AWS Certified Solutions Architect - Associate, Data Engineering with AWS and IBM AI Engineering. TensorFlow/Keras appear only within the IBM certification context.
- iSAQB CPSA Foundation may be retained if layout permits; certifications appear exactly once.
### Impact and verification
- No unverified numeric metric is planned.
- `BS-1` may use the source-backed qualitative outcome of fully automated image classification; no percentage, scale or exact workload reduction will be invented.
- Optional enrichment, not required for generation: verified adoption/users or deployment status of the `SW-8` assistants. Without it, the bullet remains configuration-level.
### Cover Letter Decision
- **YES.** The optional letter adds two things the resume cannot fully explain: the deliberate, honest bridge from data/MLOps infrastructure into an AI/LLM-platform remit, and the motivation to contribute again in a defence-related environment after six years of Bundeswehr service.
- **Narrative:** production-critical ML integration at Bosch; current Kubernetes/data/LLM-adjacent work at Swisscom; officer background and motivation to support sovereign, secure C5I capabilities in Thun.
- **Boundary:** RUAG supports the Swiss Army; employment at RUAG must not be described as rejoining the armed forces. Use `erneut im Umfeld von Landesverteidigung und gesellschaftlicher Verantwortung wirken` rather than `wieder Teil der Armee sein`.
## Phase 3/4: As-built Resume
- **File:** `output/RUAG_AI_Engineer_C5I/e2e_ruag_ai_engineer_c5i_resume.tex`
- **Format:** German Swiss/DACH profile, A4, 11 pt, two pages, no photo.
- **As-built positioning:** `Staff Data & Platform Engineer | Python · Kubernetes · MLOps`.
- **As-built selection:** 12 bullets using `SW-8`, `SW-3`, `SW-7`, `SW-2`, `SW-5`, `BS-1`, `BS-6`, `BS-3`, `BS-4`, `FC-2`, `VZ-1 + VZ-2` and `BW-1`. Generali remains an unbulleted chronology entry. Capgemini is omitted.
- **Military evidence:** `BW-1` appears in the profile and in a dedicated `Militärischer Werdegang` section. No command responsibility, deployment, clearance or military ICT work is implied.
- **LLM boundary:** current evidence is stated as configuration of domain-grounded assistants and LiteLLM API use. The document contains no RAG, retrieval, compute-cluster, GPU-cluster, model-training or LLM-platform ownership claim.
- **Plan adjustment for layout:** certifications appear once inside `Kenntnisse`; German and English appear in the header. This preserves the information and gives page 2 a cleaner close. The Bosch title was shortened to the verified formal title to avoid a collision with the location.
- **Language sweep:** no em dash, `Baue`, `Trug`, `begrenzt`, C++, JavaScript, Terraform, RAG or fabricated orchestration framework appears. Bullets use technical, scoped verbs.
### Validation and rendering
- Canonical system preflight: **PASS, 0 warnings**.
- Document validator after final edit: **PASS, 0 warnings**.
- MiKTeX compilation: **PASS**, two runs, exactly **2 pages**.
- Log inspection: no Overfull/Underfull boxes and no LaTeX/package warnings.
- `pdftotext -layout`: employer, title, date, location and section order parse correctly across both pages.
- Visual QA: both final pages rendered to PNG at 150 dpi and inspected; no clipping, overlap, broken glyphs, isolated headings or awkward page transition.
- The compiled PDF and PNGs were temporary QA artifacts only. The deliverable remains the `.tex` source as configured.
## Post-Handover Fix and Re-Verification, 2026-08-27
The package was inherited mid-session after a usage limit on the previous model. The recorded Phase 3/4 completion was audited independently and one defect was found and corrected.
### Defect found and fixed
- **Capgemini Deutschland GmbH was present as a chronology entry.** This violates a standing user preference recorded in `CLAUDE.md` and in memory: Capgemini is omitted from all documents because the six-month tenure reads as a short stay. A corpus check confirmed this resume was the **only** generated `.tex` under `output/` containing Capgemini. The entry and its separating vertical space were removed; the visible chronology now begins at Generali, Mai 2015.
- **The Nov. 2014 to Mai 2015 gap this creates is intentional and stays.** The submitted Kdo Cy resume carries the identical gap.
- **The profile claim "über zehn Jahren" survives unchanged.** The visible record now runs Generali Mai 2015 to Aug. 2026, about eleven years three months, so the wording remains true.
### Re-verification after the fix
- Document validator: **PASS, 0 warnings** (re-run after the Thun contact-line change).
- MiKTeX compilation, two runs: **PASS**, exactly **2 pages**, **0 Overfull/Underfull boxes**, no LaTeX or package warnings. Re-run after the Thun change, this time **compiled into the output folder** rather than a temp directory.
- Extracted text of the final PDF contains **0** occurrences of "Capgemini" and reads `Thun, Schweiz` in the contact line.
- Text extraction: employer, title, date, location and section order parse correctly on both pages; footers read 1/2 and 2/2.
- Visual QA: both pages re-rendered to PNG and inspected **after** the edit. No clipping, overlap, orphaned heading or broken page transition. Page 2 closes on Ausbildung with roughly two inches of trailing whitespace, which is accepted; `CLAUDE.md` forbids page-fill quotas.
- **Note on the prior session's QA claim:** the temporary working folder still held a stale 3-page text extraction from an earlier draft, so the previously recorded visual check was made against a different document than the final one. The checks above were run against the current source.
- **Page 2 was deliberately not backfilled.** `PP-3` (private Debian server) is available as additional Linux evidence and was used in the Kdo Cy package, but re-opening the approved 12-bullet plan to fill freed space would be page-filling, not relevance.
### Contact location: RESOLVED 2026-08-27
- **The contact line was changed from `Bern, Schweiz` to `Thun, Schweiz`.** The user decided on 2026-08-27 that for roles **in Thun and its immediate surroundings** the contact line may carry Thun. This vacancy is in Thun and the user lives in Thun, so local residency is now visible to a traditional Swiss defence employer - the session's Competitive Read already counted "exact Thun location" among his advantages, and the document had been hiding it.
- **Scope of the change:** contact line only. The Swisscom position keeps `Bern, Schweiz`, because that is factually where that job is.
- **Recorded as a standing rule** in memory and `config.md`: Thun for Thun-area roles, Bern as the default everywhere else. The earlier "always Bern, ask first" note is superseded.
## User Review Round, 2026-08-27
Three changes requested by the user on review of the compiled PDF. All three applied, then re-validated, re-compiled and both pages re-inspected.
| # | Change | Basis |
|---|---|---|
| 1 | **Removed "Kein Sponsoring durch den Arbeitgeber erforderlich" from the contact line.** | User: it is common knowledge that EU citizens need no sponsorship, so the sentence adds nothing. The header still carries "Deutscher Staatsbürger" and "Schweizer Aufenthaltsbewilligung B", which resolve work authorization on their own. |
| 2 | **Bosch title changed to `Senior Data Engineer, Data Analysis (Beförderung Jan. 2021)`**, matching the Swisscom line's shape. | The promotion is **not** in `claims.json`; it is recorded LinkedIn-confirmed in `experience_bosch.md`: Data Engineer Feb 2020 - Jan 2021, **Senior** Data Engineer Jan 2021 - Dez 2022. That file also explicitly sanctions "(Senior) Data Engineer" as a display form. `claims.json` has now been corrected so this is canonical going forward. |
| 3 | **Vizrt title shortened to `DevOps Engineer`**, dropping "Test Automation /". | User request. ⚠ **Flagged accuracy note:** the canonical `official_title` for Vizrt is **"Test Automation Engineer"**; "DevOps Engineer" is half of the sanctioned `display_title` "Test Automation / DevOps Engineer". The 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 line on the document that will not match a Zeugnis or reference check word-for-word. Recorded here so it is a conscious choice, not a drift. |
### Re-verification after the review round
- Document validator: **PASS, 0 warnings**.
- MiKTeX, two runs: **PASS**, exactly **2 pages**, **0 Overfull/Underfull boxes**, no LaTeX or package warnings.
- Both pages re-rendered and inspected. The longer Bosch title does **not** collide with `Dresden, Deutschland`; the earlier concern recorded in `CLAUDE.md` about a Bosch title/location collision does not apply at this length.
- Header now reads three lines: contact, citizenship/permit, languages.
- Build artifacts removed from the output folder; `Dennis_Thiessen_Lebenslauf.pdf` refreshed from the new build and verified identical to the `e2e_` PDF by checksum.
## Phase 5: As-built Cover Letter, 2026-08-27
- **File:** `output/RUAG_AI_Engineer_C5I/e2e_ruag_ai_engineer_c5i_cover_letter.tex`
- **Format:** German Swiss/DACH motivation letter, A4, 11 pt, **1 page, 275 body words** (target 250-300).
- **Addressee:** Frank Haugwitz, Director Sourcing C5I-Campus, at RUAG MRO Holding AG, Business Area C5I, Uttigenstrasse 36, 3600 Thun. Submission is portal-only; the letter is uploaded, not mailed.
- **Contact location:** `Thun, Schweiz`, consistent with the resume and the new Thun-area rule.
- **Structure:** four short paragraphs plus close. (1) Role thesis: the posting pairs operating an internal AI-workload platform with building the pipelines those workloads depend on, which is the seam he already works on. (2) Bosch `BS-1` and `BS-6`. (3) Swisscom `SW-3`, `SW-2`, then the LLM boundary. (4) `BW-1` and practical fit.
### Deliberate decision: the LLM gap is named explicitly
The letter states plainly *"Eine AI-Plattform habe ich nicht aufgebaut"*, then pivots immediately to the operations/platform side and to working toward the implementation side from there.
This is a conscious departure from the Kdo Cy letter's approach, where the second-Amtssprache point was deliberately **not** raised so as not to hand the reader an objection (the Aker BP CL-A finding). The reasoning for treating this case differently:
- The AI/LLM-platform build is **R1, the title-defining responsibility and the JD's first bullet**, not a peripheral requirement. The reader will assess it whether or not the letter mentions it, so silence does not remove the objection - it only removes his framing of it.
- The session's own Cover Letter Decision names this bridge as the letter's reason to exist: the resume cannot carry it.
- The JD explicitly invites applicants who do not meet every requirement, which makes candour read as judgement rather than as a defensive gap list.
- It is one sentence, immediately followed by what he does bring. It is not a gap list.
**Reversible.** If the user prefers the Kdo Cy posture, the sentence can be cut and the paragraph still stands on `SW-3`, `SW-2` and `SW-8`.
### Claim traceability
Every claim in the letter maps to a resume bullet and a canonical ID: `BS-1` (containerized ML inference into continuous semiconductor production), `BS-6` (Linux administration, Ansible extensions, credential-caching plugin), `SW-3` (Python data applications on Kubernetes), `SW-2` (Component Owner, Oracle/Kafka to Teradata, on-call), `SW-8` (configuring domain-grounded assistants; LiteLLM API use), `BW-1` (six years, officer training, Leutnant). No new skill, tool, metric, customer or ownership claim is introduced.
### Boundaries verified in the body text
Automated scan of the letter body (comments excluded) found **0** occurrences of RAG, Retrieval, GPU, Compute Cluster, GitOps, LangChain, Terraform, fine-tuning, model training, clearance/Sicherheitsfreigabe, or "wieder Teil der Armee". The only regex hit was the substring "rag" inside *Abfragen*. **0** em dashes.
- RUAG is described as an environment of `Landesverteidigung und gesellschaftlicher Verantwortung`, never as rejoining the armed forces.
- `SW-8` stays configuration-level; no platform ownership, orchestration or evaluation is implied.
- `BS-1` claims integration, not model training.
- `BW-1` carries no clearance, command scope or military technical work.
- No unverified metric appears.
### Hook verification, 2026-08-27
All hooks are first-party, re-fetched live from the posting on the day of writing rather than trusted from the earlier retrieval.
| Claim in the letter | Evidence | Source |
|---|---|---|
| Role title `AI Engineer C5I (w/m/d)` | Verbatim match | jobs.ruag.ch posting, live 2026-08-27 |
| Legal entity `RUAG MRO Holding AG, Business Area C5I` | Verbatim match | same |
| Address `Uttigenstrasse 36, 3600 Thun` | Verbatim match | same |
| Addressee `Frank Haugwitz`, Director Sourcing C5I-Campus | Verbatim match, contact still listed | same |
| The role pairs an internal AI/LLM platform with pipelines/interfaces | `Aufbau, Weiterentwicklung und Betrieb einer internen AI-/LLM-Plattform inkl. Compute Cluster` | same |
| Posting status | LIVE, application form reachable | same |
No company-news, product or executive-statement hook was used. `cl_reference.md` prefers omitting an unnecessary hook over spending a paragraph proving company familiarity.
### Validation and rendering
- Document validator: **PASS, 0 warnings**.
- MiKTeX, two runs: **PASS**, exactly **1 page**, **0 Overfull/Underfull boxes**, no LaTeX or package warnings.
- Page rendered to PNG and inspected: single well-filled page, no clipping or awkward break.
- Build artifacts removed; `Dennis_Thiessen_Motivationsschreiben.pdf` created from the same build and verified identical by checksum.
## Critique, 2026-08-27
- **File:** `output/RUAG_AI_Engineer_C5I/critique_ruag_ai_engineer_c5i.md`
- **Evidence Fit: 74/100** - re-verified against `claims.json`, unchanged. Strategic **Stretch**; title-capability gate **FAIL** (R1 and R2 both Adjacent). PSP project access and compensation remain **UNRESOLVED**, which is independently a NO-GO trigger under `critique_framework.md` section 1. All of this was in front of the user at the 2026-08-27 override and is recorded, not re-litigated.
- **Document Quality: 85/100.** Truth and provenance **23/25** - well clear of the 8/10 automatic-failure floor.
- **Channel: Weak.** Cold portal submit; `jobs.ruag.ch` refuses email and post. Marco Heinzen's direct mobile is published and unused.
- **Scoring standard:** `critique_framework.md` governs over `SKILL.md` section 9.3/9.4 - dual score, verdicts instead of invented probabilities, no single overall score, no publications weight. `SKILL.md`'s additive coverage (domain lens, five-reader read, bridge points, 6A-6F) was kept in full.
### Verified independently, not inherited from this session file
Both documents re-validated (**PASS, 0 warnings**), recompiled twice in a scratch folder and found **byte-identical** to the shipped PDFs (133 673 B / 95 497 B), 2 pages / 1 page exactly, **0 boxes, 0 LaTeX warnings**, correct `pdftotext` order, both resume pages and the letter re-rendered at 130 dpi and inspected. Submission-named copies match their `e2e_` builds by **MD5**. `Capgemini` 0 hits; all global-forbidden patterns 0 hits.
### Full skills-token audit - the check that had not been run
Every token in the header, `Kenntnisse` block and letter was enumerated against `claims.json` `skills[].output`. **Zero `forbidden` skills on either document.** The two non-plain-`allowed` tokens present both carry their required context: **LiteLLM** (`allowed-with-context`) as "in aktueller API-Nutzung", **TensorFlow/Keras** (`certification-context-only`) only inside the Zertifizierungen line. Tokens absent from `skills[]` (Grafana, Prometheus, Loki, Jenkins, GitLab, ELK, Teradata, Oracle, Glue, Athena, Iceberg, Redshift, S3, MLOps) are all claim-backed or experience-file-backed - `skills[]` is a control list, not an inventory. **No Tier 1 truth finding anywhere in the package.**
### Tier 1 fixes - 3, none reopens the bullet plan's truth boundaries
(Tier 1 ranks by **submission impact**, not strictly by point value: T1-1 scores under cover-letter tailoring, which section 3 does not weight.)
1. **The letter drops DevSecOps, C5I, Kommando Cyber and the Army.** The JD's `Ueber den Bereich` block leads with all four and states "konsequent nach dem DevSecOps-Modell". `SW-5` is on the resume - Security Champion 2025/2026 after 100 h of Cloud Security / DevSecOps / Security by Design training - and the letter never uses it. A first-party hook matched by current canonical evidence, left on the table. One sentence closes it. **Highest-value edit in the package.**
2. **`PP-3` is missing and it is the only *current* evidence for the operating half of the role.** The letter's load-bearing sentence is *"Was ich mitbringe, ist die Betriebs- und Plattformseite dieser Rolle"*, and its resume proof is `BS-6`, which **ended Dec 2022**. `claims.json` calls PP-3 "the primary evidence for hands-on Linux administration, system hardening and security configuration, and it is current and continuous". For a defence employer screening every entrant, a decade of self-hosting *and hardening* is materially different, and it evidences Q6 better than any employer bullet. **This is a relevance argument, not page-filling** - section 7a's whitespace ban is not the basis. Kdo Cy used PP-3; this package dropped it.
3. **`governte Datenprodukte` is not a German word** - the only outright language error in the package. German IT does form participles from English verbs (*gemanagt*, *gehostet*), but *governt* is not among them, and the reader is a native-German Swiss engineer. A corpus check confirms it is a **one-off**: it appears in no other generated document, and **the user's own submitted Kdo Cy CV already carries the fix** - "Modelliere **governance-konforme** Data Products". A one-word substitution, independent of the other two, **worth taking regardless of what is decided about them**. It carried a full point of the Mechanics deduction on its own, separate from cadence.
### Tier 2 (6)
- **The headline drops "AI" from a req titled AI Engineer**, while his canonical title "Staff Data, Analytics & **AI** Engineer" contains it. Deliberate session choice, not reversed; middle option `Staff Data, Analytics & AI Engineer | Python - Kubernetes - MLOps` uses his real title and promises no platform ownership. **User's call.**
- **Four honestly closeable JD terms absent:** Data Preprocessing/Datenaufbereitung, Wissenstransfer, AI-Workloads, Containerisierung. Leave MVP/Pilotloesung - PoC is what the evidence supports.
- **`IBM AI Engineering` has no primary-source record.** The other three certs are in `thiessen_certifications.md` with issuer, date, expiry and cert number; this one is only in `bundle_ml_ai_engineer.md`. Same class as the Ansible/Linux/Bosch-promotion gaps - **verify and record, do not remove**. It matters because TensorFlow/Keras is the *sole* answer to the JD's required "moderne ML-/AI-Frameworks".
- **CL paragraph 2 is ~90 of 275 words re-telling BS-1 and BS-6**, redeemed by one genuinely new sentence. Compressing it frees the words the two Tier 1 fixes need.
- **The pivot after the gap admission concedes without evidence** - *"die Implementierungsseite wuerde ich mir von dort aus erarbeiten"* promises to learn. The gap sentence itself is a sound call and should stay; anchor the pivot in BS-1/FC-2.
- **Volunteering foreign citizenship in the letter at a PSP employer.** Already in the resume header. Lean keep (the sentence lands on "ich wohne in Thun, also am Standort selbst"), but a conscious choice.
### Tier 3
Cadence: 6/12 bullets end in a 3+ list, exactly at the section 7a ceiling, with consecutive triples at B1-B2 and B8-B9; **bullets 9 and 10 both open "Implementierte"**, a direct section 7a hit that the validator missed because its check does not cross position boundaries. `\today` in the letter - recompile if submitted after 2026-08-27. Bottom whitespace is **not** a finding (section 7a bans adding content for it). Thesis grade 1,0 is permitted; keep.
### Reader verdicts
ATS **PASS** - clean extraction. Recruiter (Haugwitz) **FORWARD** - every box he owns is above the fold. HR **COMPLETE**. Hiring manager (Heinzen) **MAYBE, and the letter decides it** - if the brief is "build our RAG stack" this is a no; if it is "run the platform while we grow the AI layer" it is a strong yes. Technical reviewer **CREDIBLE** - no claim collapses; first probes are the SW-8 boundary, compute-cluster scale, the 2008-2014 / 2009-2013 officer-track overlap, and Pull-GitOps.
### Cover letter decision
**KEEP.** The resume structurally cannot answer what this candidate thinks he is applying for given what he has not done; the letter does, in his own words, before Heinzen has to infer it. It needs T1-1 and T2-6.
## Edit 1 Baseline, 2026-08-27
- **Pages:** 2 (exact)
- **Validator:** PASS, 0 warnings
- **Overfull/Underfull boxes:** 0 | **LaTeX warnings:** 0
- **Variable bullets:** 12 (Swisscom 5, Bosch 4, Fraunhofer 1, Vizrt 1, Bundeswehr 1)
- **Skills lines:** 6 (incl. Zertifizierungen)
- **Char violations:** none - `CLAUDE.md` and `resume_reference.md` sections 4/7 replaced fixed 1L/2L/3L bands with natural-length bullets; character counts are diagnostic only and there is no page-fill quota, so the skill's "all bullets must be 2L" and "<=3 lines white space" gates do **not** apply to this project.
- **Orphan violations:** none observed in visual QA
- **White space:** ~2 in at the foot of both pages, accepted per `resume_reference.md` section 7a ("Do not add content merely to reduce bottom whitespace")
- **Cover letter:** 1 page, 275 body words, 4 paragraphs + close, validator PASS
### Edit 1 (2026-08-27): critique Tier 1 + Tier 2, user-approved
**Source:** `critique_ruag_ai_engineer_c5i.md`, user instruction 2026-08-27 ("apply 1-5, 6: use my official title, 7: cut").
**Resume**
| # | Change | Class | Source |
|---|---|---|---|
| 1 | `governte` -> `governance-konforme Datenprodukte` | MODIFY | T1-3 |
| 2 | New `Projekte` section: `Privater Debian-Server / seit rund zehn Jahren / Eigenbetrieb`, one bullet (`PP-3`) | ADD | T1-2 |
| 3 | Headline and profile opener -> **`Staff Data, Analytics & AI Engineer`**, his canonical title | MODIFY | T2-2, **user chose the official title** |
| 4 | `Wissenstransfer`, `Datenaufbereitung`, `AI-/ML-Workloads` + `Containerisierung` added where the work is real | MODIFY | T2-3 |
| 5 | Bullet 9 opener `Implementierte` -> `Baute` | MODIFY | Tier 3 (7a) |
| 6 | BS-3 list reordered to natural German: `koordinierte Hersteller, technische Dokumentation und Wissenstransfer an die Nutzer` | MODIFY | found during visual QA |
**Cover letter**
| # | Change | Class | Source |
|---|---|---|---|
| 7 | New standalone paragraph naming **DevSecOps and C5I**, carried by `SW-5` (Security Champion 2025/2026, 100 h) | ADD | T1-1 |
| 8 | Paragraph 2 compressed: the Ansible credential-plugin detail re-told resume bullet 7 | MODIFY | T2-5 |
| 9 | Pivot anchored in evidence: `erarbeite ich mir von dort aus, wie zuvor bei der ML-Inferenz in Dresden` | MODIFY | T2-6 |
| 10 | **Volunteered citizenship sentence cut** | REMOVE | T2-7, **user chose cut**. The resume header still carries `Deutscher Staatsburger` and `Schweizer Aufenthaltsbewilligung B` |
| 11 | Paragraph 3 split so the DevSecOps beat stands alone | MODIFY | found during visual QA - the merged paragraph ran to nine lines and carried three jobs |
### Two defects found during this edit that the critique had not caught
1. **The resume never loaded `babel`, so a German document was being hyphenated with English patterns.** Visible in the compiled PDF as `Hal-bleiterfertigung`, `Tran-skription` and `automa-tisierte`. Present at baseline and inherited by every earlier build. Adding `\usepackage[ngerman]{babel}` fixed the hyphenation (`Halb-leiterfertigung`, `automati-sierte`) **and** cleared the one overfull box that the longer headline had introduced. A `\hyphenation{Trans-krip-ti-on}` exception was added because ngerman still broke `Transkription` after `Tran`. **Worth checking on every future German-language package.**
2. **A one-box regression appeared and was caught by the gate, not by eye:** the longer official title reflowed the profile paragraph and overflowed by 33.6 pt. Fixed by the babel change above, not by rewording.
### Verification after Edit 1
| Gate | Resume | Cover letter |
|---|---|---|
| Canonical validator | **PASS, 0 warnings** | **PASS, 0 warnings** |
| MiKTeX, two passes | **PASS** | **PASS** |
| Pages | **2** (unchanged) | **1** (unchanged) |
| Overfull/Underfull boxes | **0** | **0** |
| LaTeX warnings | **0** | **0** |
| Submission copy refreshed + MD5 match | **yes** | **yes** |
| Visual QA at 130 dpi | both pages re-rendered and inspected | re-rendered and inspected |
- **CL body words: 295** (target 250-300). Five short paragraphs plus close.
- **Cadence improved:** list-terminated bullets **6/12 (50%) -> 4/13 (31%)**, comfortably under the 7a ceiling; **consecutive identical openers 1 -> 0**.
- Forbidden sweep across both `.tex` files and both extracted PDFs: **0 hits** for Capgemini, LangChain/LangGraph/LlamaIndex, Terraform, Azure, GCP, GitOps, TypeScript, FastAPI, Flask, Django, every global-forbidden pattern, and the standalone acronym `RAG` (the only `rag` matches are inside *Fragen* and *Abfragen*). **0 em dashes.**
### Baseline comparison
| Metric | Before | After | Delta |
|---|---:|---:|---|
| Pages | 2 | 2 | 0 |
| Bullets | 12 | 13 | +1 (`PP-3`, inside the 11-14 guide) |
| Boxes | 0 | 0 | 0 |
| Validator warnings | 0 | 0 | 0 |
| List-terminated bullets | 50% | 31% | **-19 pts** |
| Consecutive identical openers | 1 | 0 | **-1** |
| CL body words | 275 | 295 | +20 (in range) |
| German hyphenation | English patterns | **ngerman** | fixed |
### KB corrections made during this edit
- **`IBM AI Engineering` verified and recorded.** The user supplied the certificate; it was read directly. IBM via Coursera, **4 Jun 2020**, no expiry, verify code `3ZBZFVAL6A34`, name on certificate `Dennis Thiessen` (ss/sz variant, as on ITIL and iSAQB). Added as entry **#8** in `thiessen_certifications.md`. **T2-4 is closed** - the resume's `IBM AI Engineering mit TensorFlow/Keras` line is now backed by a primary source, which matters because it is the sole evidence for the JD's required *moderne ML-/AI-Frameworks*.
- **`PyTorch` upgraded in `claims.json`** from `coursework-or-personal-unverified` to `evidence: certification`. The same certificate includes *Deep Neural Networks with PyTorch*. `output` stays `certification-context-only`, so this changes nothing on any current document - it just means PyTorch now has a real source if a JD ever asks. Patched as text, not re-serialized, per the CRLF/compact-JSON note in `CLAUDE.md`.
- The certificate is explicitly **non-credit** and confers no grade or degree; never present it as an academic qualification.
## Critique Round 2, 2026-08-27 (post-Edit 1)
- **File:** `critique_ruag_ai_engineer_c5i.md`, rewritten as Round 2 with a Round 1 resolution table.
- **Evidence Fit: 74/100 - unchanged.** Strategic Stretch, title-capability gate **FAIL**, PSP and compensation **UNRESOLVED**. Document edits cannot move candidate-role fit. **`PP-3` deliberately did not move it**: it is a personal project and cannot convert an Adjacent title-capability into a Direct one - counting it would be the "bridge valued as highly as direct evidence" error `critique_framework.md` section 5 warns against.
- **Document Quality: 85 -> 93/100.** Truth and provenance **23 -> 24/25**.
- **Channel: Weak - unchanged.** Heinzen's published direct line still unused.
- **Tier 1 findings: NONE.** No truth, fit or relevance defect remains that editing can fix.
### Dimension movement
| Dimension | R1 | R2 | Why |
|---|---:|---:|---|
| Truth and provenance | 23 | **24** | IBM cert primary-source verified; new PP-3 and SW-5 content audited clean; headline now his real title, not a positioning label |
| Information hierarchy | 17 | **19** | Headline carries the req's word above the fold; `Projekte` parses cleanly |
| Bullet evidence and impact | 16 | **16** | **Unchanged - now the weakest dimension** |
| Relevance and terminology | 12 | **15** | 22/22 claimable JD terms; all six gap terms still correctly absent |
| Skills evidence | 9 | **9** | Unchanged; `MLOps` remains an umbrella term with no `skills[]` entry |
| Mechanics/readability | 8 | **10** | `governte` fixed, German hyphenation fixed, cadence 50%->31%, consecutive openers 1->0 |
### Reader verdicts
ATS **PASS**. Recruiter **FORWARD** - the Round 1 friction point is gone, the headline now shows the req's own word. HR **COMPLETE**. Hiring manager **still MAYBE, but a stronger MAYBE** - the underlying R1/R2 split is unchanged; the letter now argues the operating-layer case more completely. Technical **CREDIBLE**, with a new and welcome probe invited by PP-3: "what have you actually hardened, and how do you patch it?"
### The one dimension that did not move
**Bullet impact: 12 of 13 bullets describe activity with no outcome clause; only `BS-1` says what changed.** Every other claim in `claims.json` carries `metrics: unverified`, and inventing figures is barred - so the resume is correctly written but flat where a hiring manager looks for consequence. **The fix is upstream, not in this package:** if any verified outcome exists for `SW-2` (incident/SLA record), `SW-3` (deployment frequency, service count), `SW-7` (data products delivered, sources onboarded) or `BS-3` (applications owned), recording it in `claims.json` would lift this dimension for **every** future package. Do not invent anything to close it here.
### Remaining Tier 2 / Tier 3
Officer career still on page 2 (structural; moving it breaks reverse chronology). Headline now duplicates the Swisscom title line verbatim (cosmetic). The CL's *"entspricht damit meiner heutigen Praxis"* is a soft alignment claim worth being ready to answer, not worth rewording. Bosch bullet lengths cluster at a 5-word spread (validator passes; diagnostic only). `\today` - recompile if submitted after 2026-08-27.
## SUBMITTED 2026-08-27
Application sent via `jobs.ruag.ch` (portal only - email and postal applications are explicitly refused).
Application ID **18027**, publish ID 10075372.
### As-submitted record
| Field | Value |
|---|---|
| Employer | RUAG MRO Holding AG, Business Area C5I |
| Role | AI Engineer C5I (w/m/d), Thun, 80-100% |
| Submitted | **2026-08-27** |
| Fit class | **Stretch** (numerically top-of-Adjacent at 74) |
| Evidence Fit | **74/100** |
| Hard gate | **FAIL** - R1 and R2, the two title-defining responsibilities, are Adjacent not Direct |
| Document Quality | **93/100** (85 pre-edit), truth and provenance 24/25, **0 Tier 1 findings** |
| Channel | **Weak** - cold portal submit |
| Cohort | evidence-first-2026-01, now **6/10**; **the sole Stretch slot is CONSUMED (stretch 1/1)** |
| Outcome | applied - awaiting response |
**Submitted documents:** `Dennis_Thiessen_Lebenslauf.pdf` (2 pages, 13 bullets) and
`Dennis_Thiessen_Motivationsschreiben.pdf` (1 page, 295 words, 5 short paragraphs). Both validators PASS with
0 warnings, 0 boxes, clean two-pass compiles, correct text-order parse and visual QA of every page. Submission
copies were MD5-verified identical to their `e2e_` builds before sending.
### What went in, in one line
Staff Data, Analytics & AI Engineer - his canonical title - with production ML-inference integration (`BS-1`),
professional Linux/Ansible automation (`BS-6`), current Kubernetes and data-product work (`SW-3`, `SW-7`, `SW-2`),
current self-hosted Linux and hardening (`PP-3`), DevSecOps practice tied to C5I's stated operating model (`SW-5`),
and the canonical six-year Bundeswehr officer career (`BW-1`). The letter names the AI-platform gap in one sentence
and pivots to the operations and platform side.
### Live screening topics - none of these were resolved before sending
1. **Compensation.** No band published. Kununu samples are small and non-authoritative but suggest a material cut
against the ~CHF 140k current and the 180k bar. The Thun-local exception permits near-current pay, not a large
reduction. **Ask Frank Haugwitz.**
2. **PSP and project access.** RUAG screens every entrant. No citizenship requirement is stated and German
citizenship plus a Swiss B permit is not an evidenced disqualifier, but role-specific project eligibility is
unknown. **Ask Frank Haugwitz.**
3. **Level.** The req is labelled only "Berufserfahrene" and may be lateral or a down-level move against current
Staff + Component Owner scope. **Ask what decision authority separates this from RUAG's Senior/Principal roles.**
4. **The question the application actually turns on:** does C5I want someone who has *built* an AI/LLM platform, or
someone who can *operate* one and grow into building it? **Marco Heinzen, +41 79 568 14 96** - the published
direct line that was never used. A call now would still upgrade the channel from Weak to Moderate.
### Honest gaps that travel with this application
No AI/LLM platform built or operated; no compute or GPU cluster; no RAG, retrieval or document-solution
implementation; no formal LLM evaluation; no model-training ownership. ML/AI-framework depth is certification-context
only (IBM AI Engineering, now primary-source verified). These are real and were never written around.
### Standing note for any future RUAG C5I application
The KB now holds a verified, live JD and a full Phase 0 for this business area, and RUAG C5I has **five other reqs**
already in the scout log (Senior DevOps Engineer C5I and Data Lakehouse / Senior Data Platform Engineer are both
shortlisted and are **materially better fits than this one** - they sit on the DevOps/data-platform lane where his
evidence is Direct rather than Adjacent). If this application is rejected, that is **not** a signal to drop RUAG;
it is a signal to target the reqs that match the evidence. Note also that the cohort's Stretch slot is now full,
so any further RUAG application must clear Core or Adjacent on its own merits.
## Output Files
- Verbatim JD: `output/RUAG_AI_Engineer_C5I/JD_ruag_ai_engineer_c5i.txt`
- Session: `output/RUAG_AI_Engineer_C5I/session_ruag_ai_engineer_c5i.md`
- Resume: `output/RUAG_AI_Engineer_C5I/e2e_ruag_ai_engineer_c5i_resume.tex`; finished, Capgemini defect corrected, re-validated and re-compiled 2026-08-27; awaiting user approval.
- Compiled resume PDF: `output/RUAG_AI_Engineer_C5I/e2e_ruag_ai_engineer_c5i_resume.pdf` and a submission-named copy `output/RUAG_AI_Engineer_C5I/Dennis_Thiessen_Lebenslauf.pdf`, both built 2026-08-27 from the corrected source. ⚠ **`Dennis_Thiessen_Lebenslauf.pdf` is a copy, not a build target.** pdflatex only regenerates the `e2e_` file, so the submission-named copy must be **refreshed after every recompile** or it silently becomes the old version under the exact filename that would be attached to the application.
- Cover letter: `output/RUAG_AI_Engineer_C5I/e2e_ruag_ai_engineer_c5i_cover_letter.tex`, with `e2e_ruag_ai_engineer_c5i_cover_letter.pdf` and the submission-named `Dennis_Thiessen_Motivationsschreiben.pdf`. Built 2026-08-27; awaiting user approval.
- Critique: `output/RUAG_AI_Engineer_C5I/critique_ruag_ai_engineer_c5i.md` - **CURRENT**, written 2026-08-27. Evidence Fit 74, Document Quality 85, Channel Weak.
## Status
- **Phase 0:** COMPLETE 2026-08-27.
- **Fit gate:** Explicitly overridden by the user on 2026-08-27; strict hard-gate FAIL, Evidence Fit 74 and strategic Stretch remain recorded.
- **Phase 2:** COMPLETE; audience and 12-bullet content plan prepared.
- **Phase 3/4:** COMPLETE; resume generated, validated, compiled and visually inspected. **Re-audited after handover 2026-08-27:** one standing-preference defect (Capgemini) found and fixed, then re-validated, re-compiled and re-inspected. See Post-Handover Fix and Re-Verification.
- **Resume:** finished; awaiting user approval.
- **Phase 5 (cover letter):** COMPLETE 2026-08-27; generated, hooks verified live, validated, compiled and inspected.
- **Cover letter:** DONE; awaiting user approval.
- **Application/outcome:** **SUBMITTED 2026-08-27** via jobs.ruag.ch, application ID 18027. Awaiting response. Cohort recorded: Stretch slot consumed, cohort 6/10.
- **Contact location:** RESOLVED 2026-08-27 - `Thun, Schweiz`.
- **Resume:** approved by the user 2026-08-27 (implicitly, by invoking `/make-cl`), after three review changes: sponsoring sentence removed, Bosch title with promotion date, Vizrt shortened to DevOps Engineer.
- **Critique:** **CURRENT (Round 2, 2026-08-27, post-Edit 1)** - Evidence Fit **74/100**, Document Quality **93/100**, Channel **Weak**, **Tier 1 findings: none**. Round 1 (pre-edit) scored - Evidence Fit **74/100**, Document Quality **85/100**, Channel **Weak**, **no Tier 1 truth finding**, 3 Tier 1 fixes open (DevSecOps hook in the letter, PP-3 on the resume, `governte` -> `governance-konforme`).
- **Edit 1:** COMPLETE 2026-08-27. All three Tier 1 fixes applied, plus Tier 2 items 3-5 and the two user decisions (official title; citizenship sentence cut). Both documents re-validated, recompiled, re-rendered and inspected; submission-named PDFs refreshed and MD5-matched.
- **Next:** await response. Optional and still worthwhile: call **Marco Heinzen, +41 79 568 14 96** about technical scope and level, and **Frank Haugwitz** about compensation and PSP/project eligibility - all three are now live screening topics rather than pre-cleared ones. Do not react to a single rejection with positioning changes (`application_strategy.md` sections 38/74); the better-fitting RUAG C5I DevOps and Data Platform reqs are already shortlisted in the scout log. **Unchanged and unaffected by any edit:** Evidence Fit 74, Stretch, title-capability gate FAIL, and the open PSP / compensation / level questions. The highest-value remaining action is not a document change - it is the call to Marco Heinzen (+41 79 568 14 96). Compensation, PSP/project access and role level remain open practical questions and are unaffected by the documents. Because the cover-letter decision is YES, proceed with `/make-cl` after approval. Compensation, PSP/project access and level remain open practical questions.