fix(scout): English-only requirement reads ENGLISH OK; triage 2026-10-22 decisions

- classify_language_requirement: an ad stating only an English requirement
  ("communication and presentation skills in English") with no Norwegian
  requirement now reads english_ok. Checked after the Norwegian patterns, so
  "fluent English and Norwegian" still reads norwegian_required. Nordic
  Semiconductor's ads read UNCLEAR in the first Norway run.
- Decisions from the 2026-10-22 run: Nordic Embedded Software Test Automation
  Engineer `maybe` (embedded/Bluetooth experience required, coursework only -
  the Kongsberg gate); Nordic ATE Test Engineer `skip`; RUAG Senior DevOps
  Engineer C5I repost `skip` ("Swiss citizenship required"; a different role
  from the July shortlist, whose note is carried into the new row).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
dennisthiessenandClaude Opus 5.5 committed 2026-10-22 09:42:47 +02:00
1 parent 92c3c005b4
commit eee608a213
2 files changed
+35 -8

No files matched your search

+14 -1
View File
@@ -1985,6 +1985,15 @@ _LANG_NORWEGIAN_REQUIRED = [re.compile(p, re.I) for p in (
r"norwegian\s+(?:language\s+)?(?:is\s+)?(?:required|mandatory|a\s+requirement|essential)", r"norwegian\s+(?:language\s+)?(?:is\s+)?(?:required|mandatory|a\s+requirement|essential)",
r"(?:must|need\s+to|required\s+to)\s+(?:\w+\s+){0,4}(?:norwegian|scandinavian)", r"(?:must|need\s+to|required\s+to)\s+(?:\w+\s+){0,4}(?:norwegian|scandinavian)",
)] )]
# An ad that states only an English requirement ("communication and presentation skills in
# English", Nordic Semiconductor 2026-10-22). Checked only AFTER no Norwegian requirement was
# found, so "fluent English and Norwegian" still reads as Norwegian required.
_LANG_ENGLISH_STATED = [re.compile(p, re.I) for p in (
r"(?:communication|presentation|written|spoken|verbal|language)\s+(?:and\s+\w+\s+)?skills?\s+in\s+english",
r"(?:fluent|fluency|proficien\w*|excellent|good|strong)\s+(?:\w+\s+){0,2}(?:in\s+)?english",
r"english\s+(?:is\s+)?(?:required|a\s+must|mandatory)",
r"(?:gode|god|flytende|svært\s+gode)\s+(?:\w+\s+){0,3}engelsk",
)]
# A "Norwegian" that belongs to clearance or citizenship wording is not a language demand. # A "Norwegian" that belongs to clearance or citizenship wording is not a language demand.
_LANG_FALSE_CONTEXT = re.compile( _LANG_FALSE_CONTEXT = re.compile(
r"clearance|klarering|statsborger|citizen|myndighet|authorit|armed\s+forces|forsvar", re.I) r"clearance|klarering|statsborger|citizen|myndighet|authorit|armed\s+forces|forsvar", re.I)
@@ -2025,7 +2034,11 @@ def classify_language_requirement(text, work_language_tags=None):
if result["lang"] == "norwegian_required": if result["lang"] == "norwegian_required":
break break
else: else:
if tags and all(t.startswith("engelsk") or t == "english" for t in tags): stated = next((m for p in _LANG_ENGLISH_STATED if (m := p.search(text))), None)
if stated:
result.update(lang="english_ok",
evidence=_snippet(text, stated) + " (English stated, no Norwegian requirement)")
elif tags and all(t.startswith("engelsk") or t == "english" for t in tags):
result.update(lang="english_ok", evidence="NAV work-language tag: English only") result.update(lang="english_ok", evidence="NAV work-language tag: English only")
elif tags: elif tags:
result["evidence"] = f"no requirement sentence found; NAV tag: {', '.join(tags)}" result["evidence"] = f"no requirement sentence found; NAV tag: {', '.join(tags)}"
+21 -7
View File
@@ -146,13 +146,6 @@
"note": "TOP CANDIDATE 2026-07-03 run. ISE = MSFT forward-deployed org (ex-CSE): co-engineering with strategic customers. IC4, published base CHF 146.2-245.9k clears bar; German explicitly beneficial; travel up to 25%; AI/LLM reqs are integration-side (RAG, prompt eng, model monitoring) not model-building. Zürich hybrid from Bern. | SENT 2026-07-03 (resume+CL finalized, 85.8/100). REJECTED 2026-08-11, no interview (~39 days after submission). Separate Microsoft req 200043897 (Principal FDE, German-speaking, Zürich) remains open and is unaffected.", "note": "TOP CANDIDATE 2026-07-03 run. ISE = MSFT forward-deployed org (ex-CSE): co-engineering with strategic customers. IC4, published base CHF 146.2-245.9k clears bar; German explicitly beneficial; travel up to 25%; AI/LLM reqs are integration-side (RAG, prompt eng, model monitoring) not model-building. Zürich hybrid from Bern. | SENT 2026-07-03 (resume+CL finalized, 85.8/100). REJECTED 2026-08-11, no interview (~39 days after submission). Separate Microsoft req 200043897 (Principal FDE, German-speaking, Zürich) remains open and is unaffected.",
"date": "2026-07-03" "date": "2026-07-03"
}, },
"https://jobs.ruag.ch/offene-stellen/senior-devops-engineer-c5i/3b3093ab-badc-4e95-8166-0f6ee32c18d0": {
"company": "RUAG (Thun/Bern)",
"title": "Senior DevOps Engineer C5I",
"decision": "shortlist",
"note": "Bern-local WLB-exception tier. English-first (German a plus); Linux/Docker+K8s/Python/GitLab CI/Prometheus-Grafana-ELK = core DevOps lane; analytics-platform ops for Army Cyber Command (C5I, 260p unit, DevSecOps). No citizenship gate in JD (only criminal-record/debt excerpts) but verify clearance as German citizen. Comp likely lateral (market + 13th month) — local tier has relaxed bar. Contact: recruiting-c5i@ruag.ch.",
"date": "2026-07-03"
},
"https://job-boards.greenhouse.io/gitlab/jobs/8522408002": { "https://job-boards.greenhouse.io/gitlab/jobs/8522408002": {
"company": "GitLab", "company": "GitLab",
"title": "Forward Deployed Engineer - Germany (Staff)", "title": "Forward Deployed Engineer - Germany (Staff)",
@@ -2887,5 +2880,26 @@
"decision": "applied", "decision": "applied",
"note": "USER DECISION: SUBMITTED 2026-10-21 via Google Careers, cold (no referral). Evidence Fit 70, fit class Stretch, hard gate PASS, Document Quality ~86 (post-edit estimate; critique scored 84 before the last edit). Package: output/Google_Staff_SWE_Shopping_Graph/. Registry id app-google-staff-shopping-graph-102064172115600070.", "note": "USER DECISION: SUBMITTED 2026-10-21 via Google Careers, cold (no referral). Evidence Fit 70, fit class Stretch, hard gate PASS, Document Quality ~86 (post-edit estimate; critique scored 84 before the last edit). Package: output/Google_Staff_SWE_Shopping_Graph/. Registry id app-google-staff-shopping-graph-102064172115600070.",
"date": "2026-10-21" "date": "2026-10-21"
},
"https://jobs.ruag.ch/offene-stellen/senior-devops-engineer-c5i/cd0c7781-211e-46db-bfba-3fa3c2dd50e4": {
"company": "RUAG (Thun/Bern)",
"title": "Senior DevOps Engineer C5I",
"decision": "skip",
"note": "Claude triage 2026-10-22, JD read (reports/2026-10-22-fit-sources/ruag_senior_devops_c5i.txt). DIFFERENT ROLE from the 2026-07-03 shortlisted req of the same title (3b3093ab, analytics-platform ops, since closed): this one runs self-hosted email/groupware/collaboration services on an on-prem private cloud (LDAP/OIDC, Terraform+Ansible, Kubernetes), Bern. Hard gate: 'Swiss citizenship required' - he is a German citizen. Also 'Experience with self-hosted email, groupware or collaboration platforms' is personal-only (PP-3 mail/Nextcloud server) and Terraform is forbidden. Superseded row note (July): shortlist, Bern-local WLB tier, Linux/Docker/K8s/Python/GitLab/Prometheus-Grafana-ELK DevOps lane, no citizenship gate in THAT JD.",
"date": "2026-10-22"
},
"https://careers.nordicsemi.com/jobs/8483837-embedded-software-test-automation-engineer": {
"company": "",
"title": "",
"decision": "maybe",
"note": "TRIAGE 2026-10-22 (JD read, reports/2026-10-22-fit-sources/nordic_embedded_sw_test_automation.txt), NOT a user decision. Nordic Semiconductor, Oslo or Trondheim; English working language ('communication and presentation skills in English'); employer rated GOOD (Glassdoor 4.0/103). CI/CD for a multi-platform Bluetooth stack: Python strong - Direct; Jenkins + Docker + CI/CD pipelines - Direct (FC-1, BS-6, VZ-2, SW-3 historical); Grafana/monitoring + database - Adjacent (BS-4 PoC); Bash tooling Direct; Groovy named in duties - forbidden. HARD GATE: required 'Experience in embedded software development, especially within Bluetooth stack or other wireless protocol projects' and 'embedded development kits' - ED-1 coursework only. Same gate the user overrode for Kongsberg Seatex (2026-10-08). User's call.",
"date": "2026-10-22"
},
"https://careers.nordicsemi.com/jobs/8411130-ate-test-engineer": {
"company": "",
"title": "",
"decision": "skip",
"note": "Claude triage 2026-10-22, JD read (reports/2026-10-22-fit-sources/nordic_ate_test_engineer.txt). Chip production test: 'Proven track record in high frequency, mixed-signal, digital and analog test development and execution' and 'Automated Test Equipment (ATE) Test Development in high volume manufacturing' - Gap. Bosch fab data analysis is adjacent domain, not ATE test development.",
"date": "2026-10-22"
} }
} }