D1/D2 - Bosch title and promotion: CONFIRMED by the user. The promotion and its
timing are correct and came from a re-grading (Neueinstufung). The Zeugnis does
not contradict it - it names DEPARTMENTS ("Ingenieur" in Fertigungstechnologie
1/2/3) rather than job titles. Separately corrected a false provenance note that
claimed official_title was "the formal combined string on the Zeugnis"; it never
came from that document, it comes from the user and LinkedIn.
D3 - part-time from 2021-09: NOT recorded, by the user's decision. Noted for
completeness that tenure wording such as "over ten years" measures elapsed time
and is unaffected; it would only matter if a document claimed FTE years, and
none does.
D4 - French and Italian: the Swisscom Zwischenzeugnis says he uses both
professionally on a regular basis. The user reviewed the sentence and confirmed
it is an ERROR IN THE DOCUMENT. DE/EN only stands. Recorded in
identity.language_note so nobody rediscovers the line and acts on it, with the
practical warning that a reader of that Zeugnis may take it at face value.
D5 - the RUAG MSSQL rule-out: the DECISION stands (user does not want it
revisited), the REASONING is corrected. Two of its four premises were wrong:
MSSQL is not 0 (Fraunhofer SCEDAS ran on Microsoft SQL Server), and "his stack
is AWS cloud-native" was too narrow - the Swisscom Zeugnis documents component
ownership for ETL into the Teradata DWH. Talend and SAP S/4HANA remain genuinely
0, and the required line reads "Aufbau UND Betrieb" while he has documented
Betrieb only - so the skip is still defensible, it was just better than its
written justification. Both RUAG decision rows now carry the correction and a
standing rule for future DWH postings.
D6 - Vizrt end date: 2018-05 stands by the user's decision.
And the follow-through that matters: the data-warehouse, MSSQL and mentoring
evidence is now IN THE BUNDLES, not only in claims.json. BS-6 showed last week
that evidence which reaches no bundle cannot be selected - this is the same
failure mode, caught the same week. The DWH entry carries its scope limit
explicitly: documented Betrieb, not Aufbau.
Validator PASS, 37/37 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
All three read as primary documents. Uncontested facts are written in; six
conflicts between the documents and the KB are RECORDED AND LEFT OPEN, because
several are the user's call and one contradicts a memory entry that shaped
targeting.
New evidence
- Swisscom Zwischenzeugnis (Okt 2025) is unusually specific and now backs SW-1,
SW-2 and SW-3 verbatim: component ownership for the ETL pipelines feeding the
TERADATA DATA WAREHOUSE, Python on Kubernetes with GitLab CI/CD, AWS migration
(S3, Glue, Athena, Redshift, Airflow), 2nd/3rd-level support and on-call.
- Bosch Zeugnis corroborates BS-1 directly: "Erarbeitung und Durchfuehrung von
Integrationsstrategien fuer den Einsatz von Machine Learning Modellen in der
24/7 Fertigungsumgebung". It also confirms the BS-4 PoC framing as the
document's own wording rather than a policy hedge.
- NEW claim BS-7: "Fachliche Betreuung von Studierenden, auch im Rahmen von
Abschlussarbeiten". Documented mentoring evidence, recorded NOWHERE before
today, although "developing other engineers" is a recurring JD requirement -
SBB asked for it explicitly and the answer had to lean on team roles instead.
- Vizrt's letter is thin: testing responsibilities only. It does NOT mention the
transcoding backend, Python or C++, so VZ-1 is marked as resting on the user's
statement rather than on the document.
Six open discrepancies (claims.json: open_discrepancies_2026_09_11)
- D1 HIGH: the Bosch Zeugnis says "Ingenieur" in "Fertigungstechnologie" 1/2/3.
The words "Senior" and "Data Analysis" do not appear in it, yet the KB note
claims official_title is "the formal combined string on the Zeugnis".
- D2: KB has a promotion at 2021-01; the Zeugnis shows department moves at
2021-06 and 2022-03 and names no promotion.
- D3 HIGH: "Seit dem 01. September 2021 arbeitete Herr Thiessen in Teilzeit."
Bosch was PART-TIME for its final ~16 months. Recorded nowhere. Tenure wording
including "over ten years" was written without knowing this.
- D4 HIGH: the Swisscom Zeugnis says he uses ENGLISH, FRENCH and ITALIAN
professionally on a regular basis. Memory user_international_mobility says
"DE/EN only (no French)" - and that entry screened out French-speaking roles.
- D5 HIGH: Swisscom component ownership feeding a Teradata DWH, plus Fraunhofer
MSSQL, undercut two premises of the RUAG "Senior Data Engineer (MSSQL)"
rule-out. Talend and SAP S/4HANA are still 0 and may still carry it.
- D6 LOW: Vizrt letter says 01.07.2017-01.07.2018; KB has end 2018-05.
None of the six is resolved here. Do not quietly pick a side when writing a
document - ask.
Validator PASS, 37/37 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
Both references are image-only scans with no text layer, so they were read
visually. Everything recorded is quoted or directly paraphrased from the
documents; nothing is inferred.
Fraunhofer (Arbeitszeugnis 31.10.2019)
- FC-1 SCEDAS: C#, Entity Framework and MICROSOFT SQL SERVER; introduced and
configured Jenkins and built the deployment build jobs. No language was
recorded on this claim before today.
- FC-2 ARTUS: SPEECH RECOGNITION and ML for an automatic transcription system
for SEA RESCUE. Separately co-authored a research proposal on predicting
optimal MAINTENANCE TIMING with ML - genuine predictive-maintenance exposure,
at proposal stage.
- FC-3 MISSION: microservices with EXPRESS.JS, JAVASCRIPT, DOCKER and SQLITE.
Generali (Zwischenzeugnis/Endzeugnis 30.06.2017)
- GN-1: the BDD stack is named - SERENITY-BDD, SELENIUM, JBEHAVE, with the build
jobs administered in Jenkins.
- GN-2: UIPath RPA PoCs plus evaluation of IBM ODM Decision Center 8.7.
- GN-3: migrated web services to XLDEPLOY, CONTRIBUTED TO DESIGN AND
ARCHITECTURE DECISIONS, and built into the Dispatcher PoC with APACHE CAMEL
and SPRING BOOT.
11 skills newly evidenced from primary documents.
TWO OF THESE CHANGE EARLIER CONCLUSIONS:
1. Microsoft SQL Server is NOT zero. The RUAG "Senior Data Engineer (MSSQL)"
rule-out of 2026-09-04 stated "claims.json has 0 for MSSQL, Talend and SAP".
That premise was wrong. The rule-out may still stand on its other required
lines - multi-year ON-PREMISE data-warehouse construction, Talend, SAP
S/4HANA are all genuinely 0 - but the MSSQL half must not be repeated, and
one project database in 2018-2019 is not data-warehouse experience either.
2. Spring Boot is now documented rather than asserted. The SBB interview brief
claimed "a PoC contribution roughly a decade ago" from memory; the
Arbeitszeugnis confirms it exactly. Still PoC-scale and still no Angular.
This is the fifth time a real capability turned out to be missing from
claims.json. The previous four surfaced by accident in conversation; these
surfaced because the user asked to read the primary documents. That is the
cheaper route and should be the default for the remaining employers.
Validator PASS, 37/37 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
User corrections, 2026-09-11.
KOTLIN was absent from claims.json entirely and was therefore unwritable under
the evidence-first rule. Bosch 2020-2022: backend services, Ansible plugin work
and extensions. This is the FOURTH real skill found missing this way, after
Ansible and Linux (2026-08-27) and Bash (2026-09-05).
Correction to an earlier statement in this session: I described Kotlin as the
fifth instance and named Groovy/Snowflake as the other two. That was wrong and
the user caught it. Groovy and Snowflake were registered the same day as
`forbidden` - skills he does NOT have, registered so the document scanner could
catch them. The opposite of this pattern. The Kotlin note records the
distinction so it does not propagate.
Language split per employer, none of it previously recorded:
- Fraunhofer: C#. FC-1 and FC-3 named no language at all.
- Vizrt: Python for the wrapper, C++ for the transcoding engine (FFmpeg).
Cross-referenced to the standing rule not to oversell C++.
- Bosch: primarily Python, with some Java and Kotlin (backend, Ansible plugins,
extensions) and C# for Spotfire plugins.
BS-3 / BS-5: he was TECHNICAL Application Owner for the KLA Defect Management
System (DMS) as well as for Spotfire. "Technical" is explicit so the line cannot
be read as people management or vendor-side ownership.
SW-6 (PySpark): the scope line carried "scale and performance metrics are not
verified", which duplicated the metrics field and read as doubt about the skill
rather than about the numbers - the skill is production-current and allowed. The
caveat now lives only where it belongs.
last_verified REMOVED from all 26 evidence blocks at the user's instruction:
every claim already carries its employer in the ID prefix, and for closed
employers a recency date measured nothing. Provenance (source, ownership) stays.
The schema records the reasoning so it is not reintroduced out of habit.
Validator advisory warnings 18 -> 0. 37/37 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
BS-1 operating constraint - the F07 open item, resolved by the user
The user clarified what the 24/7 constraint actually is: a defect in the
software could, worst case, halt production - an outcome that must never occur.
That is a FAILURE-CONSEQUENCE constraint, and the submitted NVIDIA cover letter
states something different: "a production line that could not be stopped for a
deployment" describes a scheduling window. The distinction matters in both
directions - the letter is inaccurate, and the truth is the stronger claim.
- BS-1 scope now records the real constraint and how to write it.
- Both variants of the letter's phrasing are added to BS-1 `forbidden`, so the
scanner catches them. Verified: it now flags the submitted letter.
- BS-1 evidence filled from a real source (this clarification) rather than left
unrecorded, including ownership - integration and operation, not model work.
- The submitted letter is NOT rewritten (F17). experience_bosch.md records the
resolution and the wording to use instead.
Scanner false positive fixed: the employer-date check now runs on CVs only. A
cover letter naming an employer in prose is not claiming a date.
Cleanup, authorised by the user
- 136 LaTeX build artefacts removed (already gitignored, regenerable).
- 7 superseded intermediate QA renders removed, 6 of them in NATO_AI_ENGINEER
which carried nine PDFs for two documents.
- Nothing evidential touched: 36 submitted PDFs, 41 e2e deliverables, 44 sources,
54 session/critique files and 20 JD files are intact. The Kraken PDF was
checked before deleting and turned out to be the saved job description, not a
render.
- output/ 16M -> 13M.
37/37 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
F18 - page-one weighting
- Across four compiled packages the first employment entry began at 45-55% of
page one. A reader reaching the middle of the page had seen a profile and a
skills block, and no evidence.
- The old skills rule counted `\skillline` MACROS, which does not control
density: six categories with long value lists wrap to twelve or more rendered
lines. Replaced with a rendered-line budget verified in the compiled PDF, plus
the rule that a skills line repeating what three bullets below already prove is
spending the first screen to say it twice.
- Employer chronology stays reverse-chronological; the ordering freedom is
WITHIN a position, where the bullet closest to the target role leads.
- New helper `page_metrics.py` measures page-one geometry from the PDF via
pdftotext -bbox.
F19 - education and phrasing
- Degree + focus + institution crammed into one cell with a right-aligned date
produced visible word spacing and mid-word breaks in SBB, NVIDIA and Aker BP.
Split the entry, as RUAG_AI_Engineer_C5I already did. Template carries the rule.
- Grades and thesis stay only where concretely relevant. claims.json
grade_output_rule already keeps grades off by default; the M.Eng. thesis earns
its place on condition-monitoring or sensor-data roles and otherwise does not.
Validated by measurement rather than assertion
- page_metrics.py first reproduced the review's own figures (NVIDIA 55.4%,
SBB 50.6%, RUAG 50.3%). That is what makes the after-figure meaningful.
- The NVIDIA CV was rebuilt FROM A COPY with the guidance applied: experience
moved 55.4% -> 44.0% of page one, page-one text lines 47 -> 39, still two
pages, zero overfull boxes, validator PASS.
- The submitted package itself was not modified. F17 classifies archives as
evidence, not as drafts.
The percentage is a diagnostic, not a target: no pixel goal and no rule that
page two must be filled.
All 19 review findings are now complete. 37/37 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
Build sweep run this session: 48 sources, 46 built, 2 failed. Infineon_AI_Engineer's
cover letter fails on font expansion (the font is not scalable); cv_template.tex
fails on unfilled placeholders, which is expected for the academic legacy path.
Overfull boxes: Microsoft ISE 25.33pt, Isovalent 0.88pt. All historical, all
left alone.
New: resume_builder/helpers/package_manifest.py records, per application
package, what a rebuild would ACTUALLY do - sources, class-file hashes, PDFs
present, and the reasons a rebuild would not reproduce the submitted document.
It is descriptive; nothing in it authorises rewriting a submitted file.
What it found across 21 packages:
- 17 are DATE-DEPENDENT. The cover letters use oday, so recompiling a
historical package silently restamps it with today's date.
- 1 has an INCOMPLETE SOURCE DISTRIBUTION: output/NATO_AI_ENGINEER ships no
resume.cls. It builds on this machine only because a copy exists elsewhere,
and the shipped PDF hid that. Not repaired by copying the newest class in -
the repo carries THREE different resume.cls variants (13/7/1 copies) and older
macros differ, so that "fix" could silently change a historical document.
- 1 has no PDF at all, so nothing is reviewable without a build.
Classification: 7 application packages were in no reuse category. Added to
historical_revalidate, and the register now records the default explicitly -
anything unlisted is treated as revalidate-before-reuse. Being recent is not the
same as being verified; none of the seven was re-read for this.
Prevention rather than repair: oday removed from the cover-letter template so
new packages stop adding to the pile. A test now fails if it comes back, if the
manifest goes stale, or if a package is left unclassified.
Also: scan_document gained a template mode. A placeholder in a TEMPLATE is what
makes it a template; the defect is one surviving into a generated document.
37/37 tests pass; counter-proof still catches all 9.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
F08 - evidence metadata
- Only 1 of 26 claims carried structured source/last_verified/ownership, which
is why recency and reference checks could not run. Added an evidence_schema
block and an evidence block on all 26 claims.
- 8 dates were recovered from each claim's OWN recorded text; the other 18 are
written as the literal "unrecorded". Nothing was inferred. "unrecorded" means
nobody wrote it down, NOT that the claim is unevidenced - most carry evidence
in their free-text scope.
- Coverage is reported as an advisory warning, never a gate: failing on it would
push a future session to invent dates to clear the run.
F09 - templates
- resume_template.tex asserted "12+ years of production software experience".
It does not hold: canonical employment starts 2014-11 (~11y10m) and the
VISIBLE chronology starts 2015-05 (~11y4m) because Capgemini is omitted.
Now "over ten years", with the arithmetic and the no-date-math rule inline.
- cv_template.tex still carries page targets, rendered-line budgets and 2L/3L
variants the project dropped. Banner-marked as the ACADEMIC legacy path so it
is not reached for whenever a posting says "CV".
F10 - US GPA
- The modified Bavarian formula converts FOREIGN grades INTO the German system.
Inverting it to produce a US GPA is not a recognised method, and the TUM
source calls even its forward calculator orientation only.
- Fields renamed to final_grade_us_4pt_orientation_only with that caveat. The
German grades remain the canonical facts. If a recipient publishes its own
conversion, use theirs and record which was used.
Validator PASS (1 advisory), 31/31 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
The review's key point is that the error ran BOTH ways.
Overstatement, narrowed to canonical scope:
- BS-1 variants claimed "eliminated manual wafer inspection", "no manual
intervention" and "unattended quality monitoring". Canonical BS-1 supports a
qualitative reduction whose size is unverified. Reworded; the scope limit is
now stated inline where the variants are written.
- bundle_data_platform called BS-1 a "zero-downtime constrained deployment".
Integration into a fab that runs continuously is not a measured zero-downtime
property.
- experience_swisscom carried "grounded retrieval" as a skill and ATS keyword
while SW-8 records retrieval implementation as explicitly unknown, and its
reframing note invited "evaluation discipline" although formal model
evaluation is a globally forbidden pattern. Both removed.
- PyTorch sat in bundle_ml_ai_engineer as a bold tool and an ATS must-include
with no certification context - the exact way the context gets lost.
Undervaluation, the half that quietly costs him roles:
- BS-6 (Linux administration, intensive Ansible incl. self-written extensions)
has been canonical since 2026-08-27 but appeared in NO bundle, so the normal
selection paths could not see it. Added to the data-platform and data-engineer
bundles with its currency limit (employer-side ended Dec 2022; PP-3 is
personal) and the standing GitOps prohibition.
- Linux, Ansible and Bash were missing from skills_taxonomy entirely.
- skills_taxonomy still said the IBM certification year was "not recorded" and
that PyTorch needed verification; both were settled on 2026-08-27.
Not rewritten, deliberately: the NVIDIA and RUAG cover letters state the
production line could not be stopped. That exceeds the canonical record but is
plausible and both are already submitted. Recorded as an OPEN ITEM in
experience_bosch.md to be confirmed with the user before any reuse.
Validator PASS, 31/31 tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
F03 — application records
- Quota already removed with F02's tracker; verified uncapped and that
"interview reached" survives a later withdrawal.
- Aker BP: application date confirmed 2026-07-29 by the user, settling the
one-day conflict. Its Adjacent-despite-79 classification is kept, NOT
reclassified: the user does not remember the rationale and judged it
immaterial on a closed role, and silently reclassifying to make the
arithmetic tidy is the exact objection the review raised. Recorded as an
explicit override reason with a rubric version instead.
F04 — rule hierarchy
- Three levels stated in AGENTS.md and CLAUDE.md: immutable evidence rules,
standing user preferences, market/employer presentation.
- Deliverables separated from QA. The .tex stays the artefact of record; you
still compile, into the application's own output/ folder, because the user
cannot approve what he cannot open.
- `resume_reference.md` said "Capgemini/Bundeswehr: include only when directly
relevant", contradicting the standing never-include rule. Split and fixed.
F05 — a green validator now means something
- Per-claim `forbidden` wording is enforced. 14 of 26 claims carried such a
list and NONE of it was checked, which is why "owned the full ML lifecycle"
passed. Matching tolerates inserted adjectives: the real regression read
"Built a decentralized Data Mesh" and one word defeated the literal list.
- Added identity (e-mail/phone), employer-date, placeholder and
document-exclusion checks. Capgemini's omission rule now has a canonical
home in claims.json instead of living only in memory and config.md.
- Registered Groovy and Snowflake as forbidden skills. Both were absent from
claims.json entirely, so "forbidden" existed in prose with nothing enforcing
it.
- PASS no longer reads as a truth certificate: it prints what it did not check
— scope implications, bullet-to-claim support, whether a number is real.
F06 — the scanner stopped fighting the documents
- LaTeX comments are no longer claims; `% never claim Terraform` was a finding
before, which taught the workflow to write around the checker.
- Markup, accent macros and umlauts are normalized, so `\textbf{Snow}flake`
cannot smuggle a forbidden skill past a substring test and
`Universit\"at der Bundeswehr M\"unchen` is recognisably a school.
- Honest denials pass in English and German.
- The triple-list cadence hint knew only English "and", so it silently did
nothing on every German package. Advisory only, and now labelled as such.
Verification
- The six counter-proofs from the report are caught: 9 errors on one synthetic
document, where the old scanner found none.
- All six packages built under current rules scan clean — SBB, NVIDIA, RUAG,
Kdo Cy, Citadel, Aker BP. Four false positives of my own were found and fixed
on the way there; each is now a regression test.
- 13 older packages do report findings. Those look like genuine historical
violations and are deliberately NOT fixed here: F17 governs archives and they
must not be silently rewritten.
- `tests/test_document_scanner.py` added. Full suite 31/31 pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
Checkpoint for the 2026-09-11 project review remediation. Work by a previous
agent that ran out of context; committed unchanged as a rollback point before
the remaining findings land on top of it.
F01 — the two agent directories had drifted into different processes
- Six shared workflows under `resume_builder/reference/workflows/`; both
`.agents/skills/` and `.claude/skills/` are now thin entrypoints that route
to the same file instead of carrying full copies.
- The `.claude` copies were the stale side: fixed bullet line variants and
character budgets that the newer process had already dropped. Removing them
is the point of the change, not collateral.
- Parity/link regression test added; corrected the top-level file map, which
pointed at a directory that does not exist.
F02 — application status was stored in four places and disagreed
- New registry `job_scout/state/applications.json` (26 records) with
`application_records.py` (schema, validation, transactional write) and
`application_tracker.py` (add/update, no quota).
- AGENTS.md and CLAUDE.md no longer keep their own status tables; both point
at `current_applications.md`, generated from the registry.
- Interview-reached is now independent of outcome, so a withdrawal after an
interview can record both facts. The old tables are preserved verbatim in
`job_scout/state/history/application_status_before_2026-09-11.json`.
Verification: `python -m unittest discover -s tests -v` — 18/18 pass.
Spot-checked that the detailed SBB and Kdo Cy notes survived the migration
into the registry rather than being flattened.
Known unresolved, deliberately not invented (see FIX_PROGRESS.md):
Aker BP's application date and its Adjacent-despite-79 classification.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
Scout run 2026-09-04 (36 companies, 778 eligible) plus the NVIDIA package it
surfaced, and the tooling and policy fixes found along the way.
Application
- NVIDIA Senior DevOps Engineer, Zurich (JR2024256): submitted 2026-09-05.
Evidence Fit 64/100 Stretch, hard gate FAIL x2, channel Weak. Sent on an
explicit user override with the working model unresolved, so hybrid-vs-onsite
is a live screening topic. 2pp resume + 1pp cover letter, both validators
PASS, 0 boxes, 0 Tier 1 findings open.
Policy
- Drop the 7 Core / 2 Adjacent / 1 Stretch cohort caps. They had no derivation
and were overridden whenever they bound, and the cohort was confounded: it
tested fit class while holding channel constant at Weak across all six
applications. Keep the recording, drop the rationing.
- Channel replaces the slot budget as the rationed variable: no application
goes out cold when a named contact is published and reachable.
- Propagated through shared_ops, session_file_template, cohort_tracker
(counts, never counts-against-a-target) and application_cohort.json.
Tool fixes
- fetch_workday emitted 404 URLs for every Workday company (NVIDIA, Novartis,
Equinor): externalPath is site-relative and needs the locale + site prefix.
6/6 short-form 404, 3/3 long-form 200. 773 dead links repaired across 42
archived reports.
- find_decision_url silently de-linked decisions on two boards, which is why
ruled-out roles kept resurfacing as undecided. RUAG rotates its UUID on
repost; BIS migrated its vacancy URL scheme, orphaning 5 decisions including
a live application. Fixed as a two-tier match, not a slug key -- slugs
collide (two live RUAG reqs shared one).
Knowledge base
- claims.json: add Bash / shell scripting, the third canonical gap of this
shape after Ansible and Linux administration.
- bundle_data_platform: BS-4 was framed as a delivered observability stack over
what claims.json calls a proof of concept -- the defect the 2026-08-21 sweep
was told to look for.
- CLAUDE.md and AGENTS.md: correct the RUAG Data Lakehouse shortlist claim,
which the JD does not support and which both files still asserted.
- resume_template: comment-guard the missing babel/ngerman language block.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QFb8tTCig5r1KzkQiNXcYt
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
ECTS grade B is the next 25% after the top 10%, so the accurate phrasing
is 'top 35%'. The record's original value was right; the 'top 30%'
considered yesterday was the error, now removed rather than left as an
open question.
The field also now says never to narrow B to a point estimate. B is a
band, and quoting 'top 30%' or 'top 25%' overstates the standing - the
kind of small, checkable claim that costs credibility for no gain.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
A Citadel application form asked for GPA and neither degree's
Abschlussnote existed anywhere in claims.json - only the M.Eng. thesis
grade. The single lead was an old CV extraction whose own provenance
note disclaims it and which already carries a known error, so it was not
safe to convert from. User confirmed both directly: M.Eng. 1.6 and
B.Eng. 2.4 on the German 1.0-4.0 scale.
US 4.0 equivalents recorded via the modified Bavarian formula, which
simplifies to 5.0 - G: 3.4 and 2.6. Both fields carry usage rules,
because a converted grade is easy to misuse. They are for application
forms and credential checks only, never to be presented as a natively
awarded GPA, and the German scale must always be stated alongside -
particularly for the bachelor, where the conversion makes a solid "gut"
read weaker to a US audience than it is.
Also flagged a percentile that does not agree with itself. The relative
grade is ECTS B, but this record said top 35%, the user said top 30%,
and ECTS B is formally the next 25% after the top 10%. Rather than pick
one, the field now says to check the certificate and notes that quoting
"ECTS grade B" alone is always safe. A specific percentile on an
application is exactly the kind of small number that a credential check
can contradict.
New grade_output_rule: neither grade belongs on a resume or in a cover
letter by default. Industry resumes omit grades, and the thesis 1.0 is
the only figure worth surfacing where academic performance is valued.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
Cover letter: 1 page, 270 words, 3 paragraphs, validator PASS. Carries
the one thing the resume structurally cannot - why a Swisscom data
engineer credibly wants a research-platform seat at a market maker,
which against an ex-FAANG field is the main differentiator.
Deliberately uses no external hooks. cl_reference.md says to omit an
unnecessary hook rather than spend words proving company familiarity, so
the only hook is the JD's own language, scraped verbatim and first-party.
No named executives: nothing to verify, and nothing that reads as
name-dropping. The letter also states the R1 gap plainly rather than
hiding it, because a technical reviewer will find it in the first
question anyway and owning it is stronger than being caught by it.
PP-1 appears with its personal-project label and an explicit "I make no
claims for its results".
Separately, loading the bundles for this letter surfaced two live scope
traps. The 2026-08-21 correction that fixed the SW-1 violation in
bundle_data_engineer.md ended with "check the other four bundles for the
same pattern". That sweep was never done, and two of them carried it:
bundle_data_platform.md - the S5 cover-letter hook read "migrating
Swisscom's legacy ETL stack to a cloud-native AWS platform", and its
narrative thread said "migrating an entire ETL infrastructure". Both
pair a full-ownership framing with a company-scale object, which
claims.json SW-1 forbids outright.
bundle_ml_ai_engineer.md - the SW-1 reframing row read "Built
cloud-native data infrastructure on AWS ... the scalable data layer",
which is both a full-ownership verb on an org-scale object and an
unverified scale claim.
Both rewritten to the scoped form with inline scope warnings, matching
the data_engineer fix. bundle_analytics_engineer.md and
bundle_semiconductor.md were checked and are clean.
These were loaded traps: any future cover letter built from either
bundle would have started from a sentence claims.json forbids.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
claims.json had zero hits for trading, finance or quant, so a real
capability could not legally reach any document: the file is the
highest-authority source and nothing outside it is claimable. Surfaced
while assessing the Citadel Securities Platform Engineer req (Zurich),
where domain fluency is exactly what was missing.
PP-1 is the self-built investing/signal platform: US-equity price,
fundamental and LLM-assisted sentiment ingestion, a long-only
cross-sectional residual 12-1 momentum book with ATR stop/trail and max
15 concurrent names, scheduled scan and backtest pipelines, web
dashboard and Telegram alerts. PP-2 is the Udacity AI for Trading
nanodegree. Two allowed-with-context skills reference both.
Written defensively, because this is the kind of entry a later run
inflates. Each carries an explicit forbidden list: no PnL, Sharpe,
return or backtest figure may EVER be quoted (none is verified); PP-1 is
single-user and self-hosted, so never distributed, scalable, production
or multi-user; neither implies professional quantitative, trading or
finance experience; the nanodegree is never an academic or quant
credential. Legitimate use is self-directed domain fluency plus an
end-to-end ingestion/backtest/alerting build outside work.
PP-1 is also the one claim where full-ownership verbs are correct - it
is genuinely solo, unlike the employer work that Scope Discipline
governs. Stated in the scope so the two rules do not collide later.
JSON valid, validator PASS, 9/9 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
An audit of all 18 packages in output/ (368 bullets) found one rhythm
running through every document: 45% of bullets used the same "X, Y and
Z" triple, and the SBB package reached 85% - 11 of 13 bullets, every
Swisscom and Bosch line - plus two adjacent bullets both opening
"Build and...".
This is a style finding, not a truth finding. Every bullet was accurate.
The corpus is clean on the axes that actually signal generated text: no
AI vocabulary (0 hits for leverage/spearheaded/robust/passionate and 56
others across 35 documents), prose em-dashes at 0.08/bullet, and PDF
metadata carrying nothing but MiKTeX pdfTeX with empty Author/Title
(0 AI tokens and 0 generator-term leaks across 69 PDFs). What is left is
cadence: ten bullets sharing one three-beat rhythm read as machine-made
even when nothing in them is false.
Guarded deliberately so it cannot do harm. cadence_checks() emits WARN
and never ERROR, the critique deduction caps at 1 point, and both the
reference and the docstring state that no claim, scope or hedged verb
may be bent to satisfy rhythm. An anti-monotony rule with teeth would be
worse than the problem - it would pressure a future run into loosening a
scoped claim to vary a sentence.
Thresholds are calibrated on the corpus, not guessed. Position length
spreads are bimodal (1-9 words, then 15-17), so the check flags a spread
of <=4, the tight tail at ~28% of positions; the first draft used <=6
and flagged the median. Also fixed the opening-verb extractor, which
read \textbf{Owned ...} as the word "textbf" and produced six false
positives on one document. Per-package warnings now run 0-3.
Docs: resume_reference.md 7a + verification step, critical_rules.md 7a,
critique_framework.md mechanics row, CLAUDE.md corrections log.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
13 bullets, 6 skills lines, International Tech profile in English with an
explicit Languages line naming German as mother tongue (user instruction).
Framing leads on operate-and-own — Component Ownership with on-call and
governance answers the JD's "Betrieb" and "Verantwortung für Qualität und
Nachhaltigkeit" — and carries the Bosch industrial sensor-data thread
(defect records, wafer inspection images, PCM parameters) against the
role's vorausschauende-Wartung purpose. GenAI/LLM material dropped.
Two deviations from the approved 11-bullet plan, both deliberate:
Fraunhofer keeps one combined bullet rather than zero, because dropping the
role opens an unexplained 21-month gap between Vizrt and Bosch; and BS-1 is
added as a fifth Bosch bullet, HIGH priority in the bundle and directly
relevant to an employer running a 24/7 network.
Kept the guarded page break after testing the natural flow: without it page 1
fills, but two Bosch bullets land on page 2 with no visible employer header.
Hierarchy beats page-fill, and page-fill quotas were removed on 2026-07-27.
Gates: canonical validator PASS (0 warnings), forbidden-token scan PASS (none
of the seven non-canonical JD tools present), scope-discipline scan PASS,
compile PASS at exactly 2 pages, both pages visually inspected. SW-1 and SW-7
bullets also read by eye against their claims.json forbidden lists.
Not submitted — held pending the Anforderungsniveau K comp answer.
Also fixes a KB defect found during generation: bundle_data_engineer.md §S5's
cover-letter hook read "leading the migration of our legacy stack", a
full-ownership verb on a company-scale object that contradicts claims.json
SW-1 and its own narrative thread. Rewritten, warned inline, and recorded in
the CLAUDE.md corrections log. The other four bundles are unchecked.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpMtWFtYkGkjSMShuTgXiB
Explore SDU Center for Energy Informatics PhD, Theme 2 (Predictive
Maintenance and Asset Management of Smart Energy Networks), Odense DK,
deadline 2026-08-20. JD scraped live via Playwright.
Verified the master's thesis against the source PDF rather than the
stored title alone:
- Vibration-based condition monitoring of CNC machine tools; features
are the dimensionless waveform, peak, pulse, margin and kurtosis
indices.
- Implemented a hybrid of rule-based reasoning and a 7-10-3 ANN.
- Evaluation measured throughput and latency, not model accuracy:
~500 SPS pipeline against 72.9 kSPS sensors.
- Corrects an earlier note in the same session: PSO was surveyed only
and never implemented. Recorded under thesis_limits alongside the
absence of real operational data and accuracy figures.
Also records the ECTS relative grade (B, top 35%), the existence of
English-language transcripts, and the concrete Bosch sensor-data types
(defect management records, wafer inspection images, PCM electrical
parameters) under BS-2.
Adds the enquiry email sent to Prof. Bo Norregaard Jorgensen, which
asks whether an industry candidate is viable and whether non-academic
letters of recommendation are accepted.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Aker BP ASA — Data Product Architect (FINN 469067315): archive the finalized
resume/CL sources, JD, session and critique. Submitted 2026-07-30 ahead of the
2026-08-02 deadline; logged as applied in the scout decision log and marked
SUBMITTED in Active Sessions.
KB: record Atlassian Compass as Swisscom's metadata/catalogue platform for data
products and lineage (user-confirmed 2026-07-29). Practitioner use only —
claims.json forbids claiming administration, rollout or ownership, and it is
explicitly not a substitute claim for Purview, Collibra or Alation.
Also: close out the Google Business Home session (no interview), extend the job
scout, and allow the job-board domains used during the Aker BP research.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Add BIS Basel and NATO JWC Stavanger application output (resume/CV, cover letter,
session file, critique) plus the Bundeswehr experience file backing the NATO
package; update session status tables in AGENTS.md/CLAUDE.md; record two new
Bash allowlist entries for the job scout venv. tmp/ is scratch working files,
now gitignored.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
BS-5 was a thin "C# extensions" note; now records the verified reality
(Playwright scrape of community.spotfire.com, 2026-06-15): co-ownership
of Bosch's Spotfire analytics platform and the TAF 2022 co-presentation
"Understanding Spatial Variability in Semiconductor Products with
Spotfire Map Charts". Reframing bumped to MED-HIGH for BI-bridged JDs;
new 1L/2L variants. First consumed by the Microsoft ISE package (merged
BS-3+BS-5 bullet; TAF talk reserved for the CL).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add the JD Integrity section to shared_ops (no reconstructed/inferred JDs;
WebFetch is JS-blind on careers boards; scrape JS-gated postings via the
job_scout Playwright venv; STOP and ask if the real text is unobtainable).
Wire the rule into /make-resume and /critique. Allow cisco/bkw WebFetch.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add postdoc bullets: unfolding pathways, mentorship (6 total)
- Add PhD bullet: force field benchmarking (4 total)
- Add 2 more publications (7 total) and 1 more award (4 total)
- Add Selected Presentations section (5 entries)
- Fix skill line wrapping — all lines fit single rendered line
- README.md: rewritten as landing page (~160 lines) — problem/solution
hook, "what makes this different", example output links, "try it first"
fast path, streamlined quickstart
- DOCS.md: new reference doc with architecture, concepts, customization
tables, design decisions, and FAQ (moved from README)
- Example output: compiled resume + cover letter PDFs for Dr. Jordan Chen
(fictional) applying to Whitfield University faculty position
- Example .tex sources in resume_builder/examples/output/
- GitHub repo description and topics updated
- cl_reference.md: mandatory web-search verification for all CL hooks
- make-cl/SKILL.md: hook verification gate before presenting CL draft
- critique/SKILL.md: step 8b paper hook verification (Tier 1 if wrong)
- shared_ops.md: copy JD into output folder during Phase 0
- shared_ops.md: rename final PDFs to clean names at finalization
A 3L first bullet in the first experience position overflows page 1,
wasting prime real estate. Updated resume_reference.md (Page Fill
Budgets), critical_rules.md (Budget Reminder), cv_template.tex
(comment block), and /make-resume SKILL.md (Phase 1 checklist).
Co-Authored-By: Akhil Peeketi <akhil@lanl.gov>
- Add ai_fingerprint_rules.md with banned words, structural rules, and
12-item post-gen checklist
- Fix Fellowships/Honors template format: --- to period separator
- Fix Publications under-review template format
- Update all 4 skills to load fingerprint rules during generation
- Add AI scan section to critique framework
- Update resume_reference and cl_reference with em-dash limits
- Reduce em-dashes in example files
Co-Authored-By: Akhil Peeketi <peeketiakhilreddy@gmail.com>