Scout
- New `prospective` adapter for ohws.prospective.ch, wired up as `kdocy`
(jobs.admin.ch, filtered to Kommando Cyber). jobs.admin.ch is an S3-hosted
SPA that returns AccessDenied to any direct fetch, headless included, so the
site cannot be scraped -- but the SPA reads a public, unauthenticated API.
All 463 federal roles in ~2.4s, against RUAG's 35s Playwright scrape.
- This board is richer than any other source: Lohnklasse, application deadline,
a named contact per posting, and the full Aufgaben/Anforderungen body, so
scoring runs against the JD text rather than the title.
- Thread `deadline` through normalization, the markdown report and the JSON
dump. A board with hard deadlines needs them on the row.
- Match `verwaltungseinheit_*` by prefix: the sub-unit key is department
specific (VBS 1083398, EFD 1083364) and hardcoding one breaks reuse.
- MANUAL_CHECK entry for the Bundeswehr Reserve portal. The data is reachable
(SAP E-Recruiting OData, SearchCategory 0022) but the portal actively blocks
automation, and getting through needs UA spoofing plus masking
navigator.webdriver. Not wired up by choice -- the operator-sanctioned
Suchauftrag/job alert is the better channel. Reasoning is in the comment.
Applications
- SBB Data Engineer 103755: interviewed 2026-09-09, WITHDRAWN by the candidate
2026-09-11. Net downgrade on four axes (41h vs 40h, 25+Brueckentage vs 28+5,
3 vs 2 office days, and Anforderungsniveau K tops out ~145k against ~135k
inside a band running to ~160k -- he would enter K at its ceiling merely to
break even). The cohort's only interview, and it ended as his no, not theirs.
- Kdo Cy DevOps Engineer III: REJECTED 2026-09-10, 14 days, no interview.
Form letter with no diagnostic content. Identical on every recorded
dimension to SBB (core / 79 / gate pass / DQ 92 / weak channel) and the two
went opposite ways -- recorded as worth watching, not as evidence for the
channel thesis.
- Citadel row cleaned up: it claimed the cohort and decision-log entries were
deliberately unwritten while its own status line read SUBMITTED. Both exist.
The next-step cell still said "ask BEFORE building the package" two weeks
after submission.
Decision log
- 69 RUAG rows -> 3 undecided. 63 title/family rule-outs, each noting that it
is not a JD read, plus three that are: Test Manager C5I, System Engineer C5I,
ICT Solution Architect. Guarded against the shared F/A-18 slug so one write
could not silently swallow the other.
Note: the K->L/Kader rule is SBB-specific and was deliberately narrowed --
Anforderungsniveau is SBB's own system and does not map onto jobs.admin.ch
(Lohnklassen), RUAG or PostFinance. Thun-area employers sit outside the Bern
salary logic entirely.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
Evidence Fit 74/100, Adjacent at the top of the band, hard gate PASS
with one flagged risk. Phase 1 not started - user asked for Phase 0 only.
The stack alignment is the best in the log: zero Gaps across all seven
minimum qualifications, and all five preferred technologies (Kafka,
Kubernetes, Spark, Airflow, distributed databases) are Direct and
production-current.
What holds it at 74 is that the title-defining function splits. R2 -
ingestion, transformation, storage and lifecycle management of large
datasets - is Direct and describes SW-1/SW-7 almost word for word. R1 -
design and build the distributed research platform itself - is Adjacent,
the same authoring-vs-building shape as Aker BP, and it cannot be
written around: Scope Discipline forbids pairing a full-ownership verb
with an org-scale object, so it can only be honestly bridged.
Recorded the classification conflict rather than hiding it.
application_strategy.md says a defining responsibility that is only
Adjacent makes the role Stretch; that strict reading applies to R1. It
is filed as Adjacent because R2 is equally title-defining and is Direct,
and because Aker BP set that precedent at 79. Both cohort slots are free
either way, so the label changes nothing operationally.
Corrections the user was right about, now recorded so a later run does
not repeat them: Go is NOT a gap, because Q3 is disjunctive and Python
satisfies it outright; and a production Kafka/K8s/Spark/Airflow estate
IS a distributed system, so Q4 is Direct rather than a stretch.
Two traps written down explicitly. The $175,000-350,000 base range is a
US pay-transparency disclosure under NY law and says nothing about the
Zurich figure - it must be asked, not assumed. And the sibling reqs that
web search surfaces as closer title matches (Research Platform - Data
Platform Engineer, Research Platform Infrastructure Engineer) are dead:
404 and Cloudflare-blocked, absent from the live board. Those Built In
listings are stale.
JD saved verbatim via Playwright; WebFetch returns 403 on this host.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
Job ID 103755, posted 2026-08-20, surfaced by the 2026-08-21 scout run.
Evidence Fit 79/100 (Core, lower end), hard gate PASS. The title-defining
capability — build and operate cloud data pipelines and governed data
products — is Direct and current, unlike the AWS FDE NO-GO.
Best practical fit in the log: Bern-based, German-language, no relocation,
EU citizen plus B permit. Real strength cluster for the role's vorausschauende
Wartung purpose: Bosch fab sensor/process data, ELK/Kafka anomaly detection,
containerized ML inference, plus the condition-monitoring thesis.
Two open risks, both level and comp rather than fit: Anforderungsniveau K is
a capped GAV band whose figures are not public and must be asked, and the seat
reads lateral or below current Staff plus Component Owner scope — the same
shape declined at BKW. Level and ownership scored 9/15 for that reason.
Seven named tools are non-canonical (Snowflake, dbt, Argo Workflows, Helm,
Power BI, Spring Boot, Angular); survivable only because the JD prefixes the
stack list with "z. B.". Recorded as an accepted ATS risk, with a Phase 2
gate to keep all seven out of the generated document.
Cover letter: NO — SBB explicitly waives it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpMtWFtYkGkjSMShuTgXiB
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>
Two applications sent and finalized on 2026-06-15:
- Google - Senior Data Engineer (Merchant Data Science, Zurich), 85.5/100.
Tier-1 scope fix + both Tier-2 polish applied: re-scoped the Swisscom
migration claim in resume B2 + CL P2 (Scope-Discipline), added project-
delivery vocab (B4), and JD-exact 'distributed data processing' (B5).
- Kraken (Payward) - SRE, AI Agents (remote, CH-eligible), 87.2/100.
Finalized as-is; crypto-native + production-ML edge, honest infra gaps.
Logs both as 'applied' in job_scout/state/decisions.json and flips their
CLAUDE.md Active Sessions rows to SENT. Open item for both: confirm level
and comp clear the 180k+ all-in bar at the recruiter stage.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pass 2 critique 80.0/100 (honest-stretch reach app, converged near ceiling).
Includes accuracy fix: Swisscom Data Mesh reframed from sole-build to
company-wide migration contributed to (hedged verbs); orchestration +
reference-architecture surfaced; removed -ing bullet trailers; CL trimmed
to 300 words with matching ownership hedge.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>