{ "schema_version": 1, "last_verified": "2026-08-27", "authority": { "description": "Machine-readable source of truth for all future application documents.", "precedence": [ "canonical claims", "config corrections", "verified references", "experience files", "bundles" ], "raw_extractions_are_immutable": true, "historical_outputs_are_never_sources": true }, "identity": { "name": "Dennis Thiessen", "degree_suffix": "M.Eng.", "email": "dennis@thiessen.io", "phone": "+41 795 955 585", "location": "Bern, Switzerland", "linkedin": "linkedin.com/in/dennis-thiessen", "citizenship": "German citizen (EU)", "swiss_permit": "B residence permit", "swiss_work_authorization": "Authorized to work in Switzerland; no visa or employer sponsorship required", "work_authorization_source": "User-confirmed 2026-07-27", "resume_usage": "Work authorization is optional in the header; mention the B permit or no-sponsorship status when it resolves recruiter uncertainty or the application asks for it", "languages": { "German": "native", "English": "fluent", "Norwegian": "basic", "Russian": "basic" }, "forbidden_personal_data": [ "date of birth", "marital status", "gender", "children" ] }, "education": [ { "id": "EDU-MENG", "degree": "M.Eng. Computer Aided Engineering", "display_focus": "Software Design & Engineering", "institution": "Universitat der Bundeswehr Munchen", "start": "2012-04", "end": "2013-10", "thesis_institution": "Tongji University, Shanghai", "thesis_title": "Development of a Web-Based Remote Fault Diagnosis System", "final_grade": "1.6 (German scale, 1.0 best / 4.0 lowest pass) -- user-confirmed 2026-08-26", "final_grade_us_4pt_orientation_only": "3.4 -- modified Bavarian formula, US = 1 + 3*(4.0-G)/(4.0-1.0), which simplifies to 5.0 - G. Use ONLY when a form demands a 4.0-scale GPA; always state the German scale alongside it. Never present as a natively-awarded GPA. ORIENTATION AID, NOT A CANONICAL QUALIFICATION and NOT a recognised conversion: the modified Bavarian formula converts FOREIGN grades INTO the German system, so inverting it to produce a US GPA is not an accepted method, and the TUM source describes even its forward calculator as orientation only. The canonical fact is `final_grade` on the German scale. Supply this only when a specific recipient demands a 4.0-scale GPA; if that recipient publishes its own method, use THEIRS and record which was used. Demoted 2026-09-11, review finding F10.", "thesis_grade": "1.0", "thesis_relative_grade": "ECTS grade B; official certificate on file. B is formally the next 25% after the top 10%, i.e. the 10-35% band -- so the correct and safe phrasing is 'top 35%' (user-confirmed 2026-08-26). Do NOT write 'top 30%' or 'top 25%': B is a band, not a point, and narrowing it overstates the standing. The original 'top 35%' in this record was correct; a briefly-considered 30% was the error.", "thesis_methods": "Verified against the thesis PDF 2026-08-02. Domain: vibration-based condition monitoring of CNC machine tools (piezoelectric accelerometers on spindle, tool rest, lathe body). Features: speed, load and the dimensionless waveform, peak, pulse, margin and kurtosis indices. Surveyed CBR, PSO, RBR and ANN; SELECTED a hybrid of rule-based reasoning (interpretable thresholds) plus a 7-10-3 feed-forward ANN (faultstates green/yellow/red) to handle noisy data that static rules cannot classify. Extensible plug-in architecture for swappable diagnosis methods and data collectors. Java/GWT client-server on MySQL. Evaluation measured throughput and latency, NOT model accuracy: the pipeline sustained ~500 samples/s against tri-axial vibration sensors delivering 72.9 kSPS, so the thesis concluded data reduction, filtering or batch scheduling is required for real-time use.", "thesis_limits": "PSO was SURVEYED ONLY and NOT used in the implementation -- never claim it as an applied method. No real operational data: training data came from a cited thesis, test data was modified plus a random generator. No model-accuracy figures exist. Back-propagation retraining was listed as future work, not implemented. Frame as a methods prototype/framework, never as a validated production predictive-maintenance system.", "transcripts_language": "English-language originals available for B.Eng. and M.Eng." }, { "id": "EDU-BENG", "degree": "B.Eng. Information and Telecommunication Technologies", "institution": "Universitat der Bundeswehr Munchen", "start": "2009-10", "end": "2012-10", "final_grade": "2.4 (German scale, 1.0 best / 4.0 lowest pass) -- user-confirmed 2026-08-26", "final_grade_us_4pt_orientation_only": "2.6 -- modified Bavarian formula (5.0 - G). Supply ONLY when a form requires a bachelor GPA; leave blank where optional. Always state the German scale alongside it, because the conversion makes German degrees read weaker to a US audience than they are: 2.4 is a solid 'gut'. Never present as a natively-awarded GPA. ORIENTATION AID, NOT A CANONICAL QUALIFICATION and NOT a recognised conversion: the modified Bavarian formula converts FOREIGN grades INTO the German system, so inverting it to produce a US GPA is not an accepted method, and the TUM source describes even its forward calculator as orientation only. The canonical fact is `final_grade` on the German scale. Supply this only when a specific recipient demands a 4.0-scale GPA; if that recipient publishes its own method, use THEIRS and record which was used. Demoted 2026-09-11, review finding F10.", "grade_output_rule": "Neither degree grade goes on the resume or in a cover letter by default. Industry resumes omit grades; the M.Eng. thesis grade 1.0 is the only figure worth surfacing, and only where academic performance is genuinely valued. These fields exist for application-form GPA questions and credential checks. The German grades are the canonical facts; the *_orientation_only conversions are neither canonical nor a recognised method and must never be presented as an awarded GPA (F10, 2026-09-11)." } ], "employment": [ { "id": "SWISSCOM", "employer": "Swisscom (Schweiz) AG", "location": "Bern, Switzerland", "display_title": "Staff Data, Analytics & AI Engineer", "start": "2023-10", "end": "present", "title_history": [ { "title": "Senior Data, Analytics & AI Engineer", "start": "2023-10", "end": "2025-04" }, { "title": "Staff Data, Analytics & AI Engineer", "start": "2025-04", "end": "present" } ] }, { "id": "BOSCH", "employer": "Robert Bosch Semiconductor Manufacturing Dresden GmbH", "location": "Dresden, Germany", "official_title": "Engineer / Senior Engineer, Data Analysis", "display_title": "Senior Data Engineer, Data Analysis", "display_title_note": "experience_bosch.md sanctions title flexibility for this role: '(Senior) Data Engineer' or '(Senior) Data Analysis Engineer' depending on the JD. 'Senior Data Engineer, Data Analysis' is the user's own preferred wording, confirmed 2026-08-27. official_title stays the formal combined string on the Zeugnis.", "start": "2020-02", "end": "2022-12", "title_history": [ { "title": "Data Engineer, Data Analysis", "start": "2020-02", "end": "2021-01" }, { "title": "Senior Data Engineer, Data Analysis", "start": "2021-01", "end": "2022-12" } ], "title_history_source": "LinkedIn-confirmed, recorded in experience_bosch.md; user-confirmed 2026-08-27 while reviewing the RUAG C5I resume. Added because claims.json previously carried only the combined official_title with no promotion date, which made a Swisscom-style 'Beforderung ' line unwritable from the canonical file alone." }, { "id": "FRAUNHOFER", "employer": "Fraunhofer-Center for Maritime Logistics and Services CML", "location": "Hamburg, Germany", "official_title": "Wissenschaftlicher Mitarbeiter", "display_title": "Research Software Engineer", "start": "2018-09", "end": "2019-10" }, { "id": "VIZRT", "employer": "Vizrt", "location": "Bergen, Norway", "official_title": "Test Automation Engineer", "display_title": "Test Automation / DevOps Engineer", "start": "2017-07", "end": "2018-05" }, { "id": "GENERALI", "employer": "Generali Deutschland Informatik Services GmbH", "location": "Hamburg, Germany", "display_title": "IT Consultant", "start": "2015-05", "end": "2017-06" }, { "id": "CAPGEMINI", "employer": "Capgemini Deutschland GmbH", "location": "Hamburg, Germany", "display_title": "Software Engineer", "start": "2014-11", "end": "2015-05" }, { "id": "BUNDESWEHR", "employer": "Bundeswehr (German Armed Forces)", "location": "Germany", "display_title": "Officer Candidate / Officer (Second Lieutenant at separation)", "start": "2008-07", "end": "2014-11", "source": "User confirmation 2026-07-10; thiessen_linkedin_profile.md", "last_verified": "2026-08-27" } ], "evidence_schema": { "added": "2026-09-11", "why": "Review finding F08. Only one of 26 claims carried structured evidence fields, so recency and reference checks could not run automatically. This block defines the fields; `evidence` on each claim carries the values.", "fields": { "source": "Where the claim comes from (user confirmation, a document, a URL), or 'unrecorded'.", "ownership": "Whose work this is: individual | component | contributor | team-role | personal-project, or 'unrecorded'." }, "rules": [ "'unrecorded' is a legitimate, queryable value. It means nobody wrote it down - NOT that the claim is unevidenced. Most claims carry evidence in their free-text scope.", "Never infer a date, a source or an ownership class to fill a field. Ask the user and record the answer.", "Filling these fields does not weaken the free-text scope, allowed_verbs or forbidden lists; those remain authoritative for wording." ], "employer_attribution_note": "last_verified was REMOVED on 2026-09-11 at the user's instruction: \"wofuer brauchst du ueberhaupt ein Datum? Es reicht doch wenn es passend zum Arbeitgeber zugeordnet ist.\" That is sound - every claim carries an employer through its ID prefix (SW/BS/FC/VZ/GN/PP/BW), and for closed employers the facts do not move, so a recency date measured nothing. What remains is provenance: `source` and `ownership`. Do not reintroduce a date field without a reason that is not recency-for-its-own-sake." }, "claims": [ { "id": "SW-1", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Primary engineer for pipelines in owned Fulfillment and Product Analysis domains; contributor to the wider company migration.", "allowed_verbs": [ "migrated", "implemented", "contributed" ], "forbidden": [ "led the migration of the legacy warehouse", "sole technical lead", "migrated the company warehouse", "owned the full migration" ], "metrics": "unverified" }, { "id": "SW-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Component Owner for business-critical Fulfillment ETL pipelines, including operation, data quality, governance, incidents and on-call obligations.", "allowed_verbs": [ "own", "operate", "maintain", "serve" ], "metrics": "unverified" }, { "id": "SW-3", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Build and operate Python data applications on Kubernetes with GitLab CI/CD within the team environment.", "allowed_verbs": [ "build", "deploy", "operate" ], "metrics": "unverified" }, { "id": "SW-4", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Deliver data products, dashboards and analyses with internal B2B stakeholders and product owners; not external consulting or strategic-account delivery.", "allowed_verbs": [ "deliver", "translate", "partner", "support" ], "forbidden": [ "customer-embedded delivery", "strategic customer delivery", "C-suite advisor" ], "metrics": "unverified" }, { "id": "SW-5", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Mandatory rotating team Security Champion role for 2025/2026 only; not an award, certification or multi-year distinction.", "allowed_verbs": [ "serve" ], "forbidden": [ "3 consecutive years", "2023-2026", "Security Champion x3", "owning DevSecOps compliance" ], "metrics": "100 hours of training and an assessment are source-backed; use only when relevant" }, { "id": "SW-6", "evidence": { "source": "user confirmation 2026-09-11", "ownership": "individual - hands-on use" }, "scope": "Hands-on PySpark use at Swisscom (user-confirmed 2026-09-11).", "allowed_verbs": [ "use", "develop", "process" ], "metrics": "unverified - no scale or performance figures exist for this work. That is the ONLY caveat; it does not qualify the PySpark experience itself, which is production-current in skills. The scope line used to carry this caveat as well, which read as doubt about the skill rather than about the numbers." }, { "id": "SW-7", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Build governed data products and onboard sources within Swisscom's company-wide Data Mesh; never claim ownership or construction of the shared mesh/platform. Atlassian Compass is the metadata/catalogue platform used for data-product metadata and lineage (user-confirmed 2026-07-29); Dennis uses it as a practitioner and does not administer or own the tooling.", "allowed_verbs": [ "build", "model", "onboard", "contribute", "document", "maintain" ], "forbidden": [ "built a Data Mesh", "built the Data Mesh", "built AWS Data Mesh", "own the AWS data platform", "own the data platform", "own Atlassian Compass", "administered Compass", "rolled out Compass" ], "metrics": "unverified" }, { "id": "SW-8", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Configured domain-grounded LLM assistants in a Swisscom-owned web interface by selecting available models and supplying curated knowledge. Separate exposure includes LiteLLM API use, custom GPTs, Copilot and Kiro.", "allowed_verbs": [ "configured", "used", "integrated" ], "forbidden": [ "built production LLM systems", "deployed LLM systems", "built LangChain", "agent orchestration", "formal LLM evaluation", "fine-tuned models" ], "metrics": "unverified" }, { "id": "BS-1", "evidence": { "source": "user clarification 2026-09-11 on the 24/7 operating constraint; Ansible scope user-confirmed 2026-08-27", "ownership": "individual - integration and operation; model development is NOT his" }, "scope": "Designed and executed integration of containerized ML inference into a 24/7 semiconductor production environment; model-development ownership is not established. Toolchain includes Docker, Kubernetes and Ansible - Ansible use at Bosch was intensive (user-confirmed 2026-08-27) and extended to configuration management and infrastructure automation beyond this single integration, making it standalone Infrastructure-as-Code evidence. OPERATING CONSTRAINT, user-clarified 2026-09-11: the fab runs continuously, and a defect in the software could in the worst case halt production - an outcome that must never occur. That is a FAILURE-CONSEQUENCE constraint (blast radius of a bug), NOT a deployment-window constraint. Write it as 'a defect could have stopped production' or 'software whose failure would have halted a continuously operating fab'.", "allowed_verbs": [ "integrated", "containerized", "deployed", "orchestrated" ], "forbidden": [ "trained the image classification model", "owned the full ML lifecycle", "a production line that could not be stopped for a deployment", "could not be stopped for a deployment" ], "metrics": "qualitative reduction in manual classification is source-backed; exact amount unverified" }, { "id": "BS-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Developed data services in Python, Java and C# over Oracle and Hadoop/Impala for internal analysis teams. Data types worked on (user-confirmed 2026-08-02): semiconductor fab sensor and process data -- defect management records, wafer inspection images, and electrical parameters from Process Control Monitoring (PCM). Relevant as genuine industrial sensor/asset-data experience. Bosch development was PRIMARILY PYTHON, with some Java and KOTLIN (backend, Ansible plugins, extensions) and C# for Spotfire plugins (user-confirmed 2026-09-11).", "allowed_verbs": [ "developed", "built" ], "metrics": "unverified" }, { "id": "BS-3", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Confirmed Application Owner responsibilities for analytics applications and upstream pipelines, including SLOs, vendors, training and documentation. Named systems (user-confirmed 2026-09-11): TECHNICAL Application Owner for the KLA Defect Management System (DMS) and for TIBCO Spotfire - see BS-5.", "allowed_verbs": [ "served", "owned", "managed", "defined" ], "metrics": "unverified" }, { "id": "BS-4", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Built an ELK/Kafka anomaly-detection proof of concept and monitoring; not a company-wide observability platform.", "allowed_verbs": [ "built", "implemented", "validated" ], "forbidden": [ "built the observability platform", "enterprise observability platform" ], "metrics": "unverified" }, { "id": "BS-5", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Co-owned the TIBCO Spotfire environment, built C# extensions and co-presented at TIBCO Analytics Forum 2022. He was TECHNICAL Application Owner for Spotfire and for the KLA Defect Management System (DMS) (user-confirmed 2026-09-11) - technical ownership, not people management or vendor-side ownership.", "allowed_verbs": [ "co-owned", "built", "co-presented" ], "metrics": "unverified" }, { "id": "BS-6", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Administered and automated the Linux server estate underpinning fab analytics and ML workloads at Bosch (2020-2022): ML platform hosts, Docker hosts, backend services and the Ansible control path. Developed Ansible extensions, including a credential plugin that retrieved secrets from a password keystore and cached them locally to cut lookup volume and improve scalability and performance. Playbooks were version-controlled in Git and executed push-style from Jenkins/GitLab pipelines. User-confirmed 2026-08-27.", "allowed_verbs": [ "administered", "automated", "developed", "extended", "operated", "built" ], "forbidden": [ "owned the fab's infrastructure", "ran the datacenter", "SRE role or title", "GitOps", "any server-count, uptime, SLA or scale figure - none is verified" ], "metrics": "none verified; the credential-caching plugin reduced keystore lookups, amount unquantified" }, { "id": "FC-1", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Set up Jenkins CI/CD and contributed to SCEDAS development and maintenance. Development at Fraunhofer was in C# (user-confirmed 2026-09-11); no language was recorded here before.", "allowed_verbs": [ "set up", "developed", "maintained" ], "metrics": "unverified" }, { "id": "FC-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Contributed ML/NLP components to ARTUS; no publication or model-training ownership.", "allowed_verbs": [ "contributed", "implemented", "supported" ], "forbidden": [ "led ARTUS", "trained the speech model" ], "metrics": "unverified" }, { "id": "FC-3", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Developed containerized microservices for the MISSION research platform. Fraunhofer development was in C# (user-confirmed 2026-09-11).", "allowed_verbs": [ "developed", "built" ], "metrics": "unverified" }, { "id": "VZ-1", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Contributed Python and C++ engineering to a distributed video-transcoding backend. Named broadcasters are product context, not direct delivery claims. Language split (user-confirmed 2026-09-11): PYTHON for the wrapper, C++ for the transcoding engine (FFmpeg). See feedback_cpp_emphasis - do not oversell C++; Python and Java are the stronger languages.", "allowed_verbs": [ "developed", "engineered", "contributed" ], "forbidden": [ "for CNN, BBC and Al Jazeera", "delivered to CNN", "customer-embedded" ], "metrics": "unverified" }, { "id": "VZ-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Developed automated audio/video integration tests and connected quality gates to CI/CD.", "allowed_verbs": [ "developed", "automated", "integrated" ], "metrics": "unverified" }, { "id": "GN-1", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Introduced BDD through a proof of concept and held technical responsibility for test automation, training and Jenkins jobs.", "allowed_verbs": [ "introduced", "owned", "trained", "administered" ], "metrics": "unverified" }, { "id": "GN-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Developed UIPath RPA proofs of concept and acted as an internal contact.", "allowed_verbs": [ "developed", "served" ], "metrics": "unverified" }, { "id": "GN-3", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Developed Java/J2EE workflow application features and contributed to integration proofs of concept.", "allowed_verbs": [ "developed", "contributed", "migrated" ], "metrics": "unverified" }, { "id": "BW-1", "evidence": { "source": "User confirmation 2026-07-10; thiessen_linkedin_profile.md", "ownership": "Individual service and completed training." }, "scope": "Completed officer candidate training and officer school during six years of service in the German Armed Forces (Bundeswehr), leaving service as Second Lieutenant. This establishes military and organisational context only; no technical military role, command scope, deployment, NATO service or clearance is established.", "ownership": "Individual service and completed training.", "allowed_verbs": [ "completed", "served", "left service" ], "forbidden": [ "current or former security clearance", "NATO service", "combat role or deployment", "technical AI, ICT or cyber work for the military", "command responsibility or leadership outcomes not explicitly verified" ], "metrics": "Six years of service and separation as Second Lieutenant are verified; no performance or command-scope metric is established.", "source": "User confirmation 2026-07-10; thiessen_linkedin_profile.md", "last_verified": "2026-08-27" }, { "id": "PP-1", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "PERSONAL PROJECT (user-supplied 2026-08-25), not professional work. A self-hosted, single-user investing/signal platform Dennis built for himself: ingests daily US-equity prices, fundamentals and sentiment (LLM-assisted); runs one long-only cross-sectional momentum book (top-quintile residual 12-1 momentum, ATR stop/trail, max 15 concurrent names) through scheduled scan and backtest pipelines; surfaces gated setups in a web dashboard plus Telegram alerts. Legitimate use: evidence of self-directed trading-domain fluency and of an end-to-end ingestion/backtest/alerting build outside work. Full-ownership verbs ARE correct here -- unlike his employer work, this is genuinely solo.", "allowed_verbs": [ "built", "developed", "designed" ], "forbidden": [ "any trading track record, PnL, return, Sharpe or backtest performance figure -- none is verified and none may ever be quoted", "calling it distributed, scalable, production or multi-user -- it is single-user and self-hosted", "implying professional quantitative, trading, finance-domain or investment-management experience", "presenting it as employer work or omitting that it is a personal project" ], "metrics": "unverified" }, { "id": "PP-2", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "Udacity 'AI for Trading' Nanodegree, completed self-study (user-supplied 2026-08-25). Covers quantitative trading fundamentals -- factor construction, alpha signals, backtesting. Pairs with PP-1 as the formal half of self-directed domain grounding.", "allowed_verbs": [ "completed" ], "forbidden": [ "listing it as an academic degree, professional certification or quant credential", "presenting it as equivalent to quantitative research or trading experience", "using it to qualify for quant, trader, researcher or portfolio-management roles" ], "metrics": "unverified" }, { "id": "PP-3", "evidence": { "source": "unrecorded", "ownership": "unrecorded" }, "scope": "PERSONAL PROJECT (user-supplied 2026-08-27), not employer work. A self-hosted Debian server Dennis has operated for ~10 years and administers and hardens himself, running nginx, a mail server, Nextcloud, a VPN server, Docker services and Bitwarden. This is the primary evidence for hands-on Linux administration, system hardening and security configuration, and it is current and continuous - unlike the Bosch Linux work, which ended in 2022. User states he genuinely enjoys this kind of work, including physical infrastructure.", "allowed_verbs": [ "operate", "administer", "harden", "run", "maintain", "self-host" ], "forbidden": [ "calling it enterprise, production, multi-user or business-critical infrastructure", "implying professional SRE, sysadmin or hosting employment", "any uptime, availability, SLA, user-count or scale figure - none is verified", "presenting it as employer work or omitting that it is self-hosted and personal", "using it as evidence of datacenter or physical-infrastructure experience" ], "metrics": "none; ~10 years of continuous operation is the only quantity, and it is self-reported" } ], "skills": [ { "name": "Python", "evidence": "production-current", "output": "allowed" }, { "name": "SQL", "evidence": "production-current", "output": "allowed" }, { "name": "PySpark", "evidence": "production-current", "output": "allowed" }, { "name": "Kafka", "evidence": "production-current", "output": "allowed" }, { "name": "Airflow", "evidence": "production-current", "output": "allowed" }, { "name": "AWS", "evidence": "production-current", "output": "allowed" }, { "name": "CloudFormation", "evidence": "production-current", "output": "allowed" }, { "name": "Atlassian Compass", "evidence": "production-current", "output": "allowed", "note": "Metadata/catalogue platform for data-product metadata and lineage at Swisscom (user-confirmed 2026-07-29). Practitioner use only — do not claim administration, rollout or ownership. Satisfies 'or similar metadata/catalogue platform' phrasing; is NOT a substitute claim for Purview, Collibra or Alation, which remain unevidenced." }, { "name": "Kubernetes", "evidence": "production-current-and-historical", "output": "allowed" }, { "name": "Ansible", "evidence": "production-historical", "output": "allowed", "note": "User-confirmed 2026-08-27: worked intensively with Ansible at Bosch (2020-2022) for configuration management and infrastructure automation, including the BS-1 ML-inference orchestration. Was absent from claims.json despite already appearing in experience_bosch.md BS-1 bullet variants. Counts as genuine Infrastructure-as-Code evidence alongside CloudFormation. Does NOT by itself license claiming Terraform (still unverified) or GitOps as a named practice (see gitops_pending)." }, { "name": "Linux administration", "evidence": "production-historical-and-personal-current", "output": "allowed", "note": "User-confirmed 2026-08-27 and previously ABSENT from claims.json entirely. Professional: at Bosch (2020-2022) Linux servers carried everything - ML platform, Docker hosts, backend services, Ansible control - and he administered and automated them (see BS-6). Personal and current: a self-hosted Debian server he has run and hardened for ~10 years (see PP-3). Hardening and security configuration evidence leans on the personal side; say so rather than implying an employer mandate. Does NOT license claiming datacenter/physical infrastructure work, which remains a genuine gap." }, { "name": "Bash / shell scripting", "evidence": "production-historical-and-personal-current", "output": "allowed", "note": "User-confirmed 2026-09-05 and previously ABSENT from claims.json entirely - the third gap of this shape after Ansible and Linux administration (both 2026-08-27). Evidence basis is the same as Linux administration: professional at Bosch 2020-2022 administering and automating the Linux server estate and the Ansible control path (BS-6), and personal and current on the self-hosted Debian server run for ~10 years (PP-3). Scope is ordinary operational shell work - scripting, automation glue and system administration. Does NOT license Groovy, which stays unverified and forbidden, and does NOT license any claim of systems-programming or kernel-level work." }, { "name": "Docker", "evidence": "production-current-and-historical", "output": "allowed" }, { "name": "Java", "evidence": "production-historical", "output": "allowed-with-context" }, { "name": "C#", "evidence": "production-historical", "output": "allowed-with-context" }, { "name": "C++", "evidence": "production-historical-limited", "output": "allowed-with-context" }, { "name": "JavaScript", "evidence": "production-historical-limited", "output": "allowed-with-context" }, { "name": "LiteLLM", "evidence": "hands-on-current", "output": "allowed-with-context" }, { "name": "custom GPTs", "evidence": "hands-on-current", "output": "allowed-with-context" }, { "name": "Kiro", "evidence": "hands-on-current", "output": "allowed-with-context" }, { "name": "Copilot", "evidence": "hands-on-current", "output": "allowed-with-context" }, { "name": "quantitative/systematic trading concepts", "evidence": "coursework-and-personal-project", "output": "allowed-with-context", "note": "Udacity AI for Trading nanodegree (PP-2) plus the self-built momentum platform (PP-1): factor construction, cross-sectional/residual momentum, ATR stops, backtesting. Self-directed only — NO professional quant, trading or finance experience. Never list under a Professional Experience skills line without the personal-project context, and never as a quant qualification." }, { "name": "backtesting", "evidence": "personal-project", "output": "allowed-with-context", "note": "PP-1 scheduled backtest pipelines, personal scale. Never quote a result or performance figure." }, { "name": "TensorFlow/Keras", "evidence": "certification", "output": "certification-context-only" }, { "name": "PyTorch", "evidence": "certification", "output": "certification-context-only", "note": "IBM AI Engineering Professional Certificate (Coursera, 4 Jun 2020) includes the course \"Deep Neural Networks with PyTorch\"; certificate PDF verified 2026-08-27. Same footing as TensorFlow/Keras: certification context only, never presented as production or project experience." }, { "name": "TypeScript", "evidence": "unverified", "output": "forbidden" }, { "name": "FastAPI", "evidence": "unverified", "output": "forbidden" }, { "name": "Flask", "evidence": "unverified", "output": "forbidden" }, { "name": "Django", "evidence": "unverified", "output": "forbidden" }, { "name": "LangChain", "evidence": "never-used", "output": "forbidden" }, { "name": "LangGraph", "evidence": "never-used", "output": "forbidden" }, { "name": "LlamaIndex", "evidence": "never-used", "output": "forbidden" }, { "name": "formal model evaluation", "evidence": "unverified", "output": "forbidden" }, { "name": "LLM fine-tuning", "evidence": "unverified", "output": "forbidden" }, { "name": "Azure", "evidence": "unverified", "output": "forbidden" }, { "name": "GCP", "evidence": "unverified", "output": "forbidden" }, { "name": "Terraform", "evidence": "unverified", "output": "forbidden" }, { "name": "GitOps", "evidence": "pending-user-clarification", "output": "forbidden", "note": "RESOLVED 2026-08-27, and the answer is NO. User confirmed: Ansible playbooks lived in Git, but execution was PUSH-based out of Jenkins/GitLab pipelines - there was no pull-based reconciliation agent (Argo CD, Flux). That is version-controlled, CI-driven infrastructure automation, not GitOps. The word stays forbidden in every document. The SUBSTANCE is writable and should be written: 'versionskontrollierte Infrastrukturautomatisierung mit Ansible aus Git, ausgefuehrt ueber Jenkins-/GitLab-Pipelines'. The Kdo Cy JD names 'Pull-GitOps' explicitly, so precision here is an asset, not a loss." }, { "name": "Groovy", "evidence": "none", "output": "forbidden", "note": "Named in the NVIDIA JD alongside Bash and Python. Bash was confirmed and added 2026-09-05; Groovy was explicitly NOT - it stays unverified. Registered as a skill 2026-09-11 (review finding F05) so the document scanner can actually catch it: it was previously absent from claims.json entirely, which meant 'forbidden' existed only in prose and nothing enforced it." }, { "name": "Snowflake", "evidence": "none", "output": "forbidden", "note": "Repeatedly named in target JDs (SBB, Snowflake Inc. reqs). The honest substitution is Teradata, Oracle, Redshift and Athena/Iceberg - see the SBB session file. Registered 2026-09-11 (review finding F05) for the same reason as Groovy. Note this forbids CLAIMING the skill; naming Snowflake as an employer or as a JD requirement in prose is not a claim, and the negation guard in the scanner allows an honest 'no Snowflake experience'." }, { "name": "Kotlin", "evidence": "production-historical", "output": "allowed-with-context", "context": "Bosch 2020-2022: backend services, Ansible plugin work and extensions, alongside Python as the primary language and some Java.", "note": "Added 2026-09-11 on user confirmation. Was absent from claims.json entirely, so it was unwritable under the evidence-first rule - the FOURTH real skill found missing this way, after Ansible and Linux (both 2026-08-27) and Bash (2026-09-05). Same systemic lesson: ask about the stack explicitly rather than trusting this file to be complete. (Groovy and Snowflake, registered the same day, are NOT instances of this pattern - they are skills he does NOT have, registered as `forbidden` so the document scanner could catch them.)" } ], "global_forbidden_output_patterns": [ "petabyte scale", "petabyte-scale", "own the AWS data platform", "LangChain-based", "customer-embedded delivery", "formal model evaluation", "3 consecutive years" ], "document_exclusions": [ { "term": "Capgemini", "scope": "every resume, CV and cover letter", "reason": "Standing user preference: six months only (Nov 2014 - May 2015); the user does not want the short-stay impression. The resulting gap in the visible chronology is INTENTIONAL and must never be 'fixed' or explained away. The visible record starts at Generali, May 2015, which is also what any 'over ten years' tenure wording is measured against.", "applies_to_documents_only": true, "note": "This is a DOCUMENT rule, not a conversation rule. If an interviewer asks directly what the first civilian role was, naming it plainly is correct - declining to name a former employer reads worse than a six-month stay.", "source": "User-confirmed 2026-08-27 after it regressed into the RUAG C5I draft; given a canonical home 2026-09-11 (review finding F05), having previously lived only in memory and config.md." } ] }