Commit Graph
59 Commits
Author SHA1 Message Date
dennisthiessenandClaude Opus 5 ec5be5f2ed feat(citadel): Phase 0 for Citadel Securities Platform Engineer, Zurich
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
2026-08-25 23:24:02 +02:00
dennisthiessenandClaude Opus 5 b97dec978a feat(kb): add trading-domain evidence as PP-1 and PP-2
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
2026-08-25 23:18:18 +02:00
dennisthiessenandClaude Opus 5 92a81a7dcb feat(resume): check bullet cadence variety, warn-only
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
2026-08-25 09:38:19 +02:00
dennisthiessenandClaude Opus 5 af7189a93d chore(scout): version the application cohort tracker
application_cohort.json was caught by the blanket job_scout/state/*
ignore, so the cohort slot record (core/adjacent/stretch mix and every
application's fit class, evidence fit, hard gate and outcome) existed
only on one machine. decisions.json escaped the same rule only because
it had been tracked before the rule was added - an accident of history,
not a decision.

Both files are durable application history and belong in the repo. The
churny scan state (seen_jobs.json, last_scrape.json) stays ignored, as
does reports/ - all of it is regenerable by re-running the scout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
2026-08-25 09:08:14 +02:00
dennisthiessenandClaude Opus 5 e53abd4ff6 chore(log): submit SBB, close Snowflake, correct Norway lane framing
Application log updates from the 2026-08-24 scout run and the days after.

SBB Data Engineer (Asset Management, Bern, job 103755): SUBMITTED
2026-08-25. Consumes Core slot 2/7 in evidence-first-2026-01. Submitted
with the Anforderungsniveau K comp question still unresolved, against
the channel plan and the critique's closing advice, so the K band, the
design-vs-build-and-run scope question and the Kidz Care rate are now
screening-call topics rather than pre-cleared facts. Next action changed
from "call then submit" to "prep an interview brief". The stale pointer
to an /edit-resume Tier 1 fix is removed - that fix landed 2026-08-21.

Snowflake Sr SWE Enterprise (Observe): CLOSED - NO RESPONSE at 80 days
silent, past the longest real disposition in the log (Equinor, 79).
Recorded as closed_no_response, deliberately NOT as a rejection: none
was ever received, so it must not enter rejection statistics or read as
a document-quality signal. Pre-dates the cohort, so no slot is freed.
An ~86/100 package - the highest in the log - drawing no reply at all is
the strongest evidence yet that the constraint is channel, not documents.
Unblocks the Observe Metrics Platform req, which was paused only to
avoid stacking a second cold application on the same org.

Norway lane: corrected a false "closed" framing that had propagated into
the Equinor row and was used to dismiss Norwegian rows in the scout
readout. The lane is OPEN but selective. The gates are norsk working
language and NO security clearance - NOT compensation: the 180k bar is
CH-only and explicitly does not apply to Norway. Equinor, Telenor and
NATO JWC stay in the scout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK
2026-08-25 09:07:07 +02:00
dennisthiessenandClaude Opus 5 73336cc4f9 feat(sbb): critique the package and apply its Tier 1 fix
Critique per critique_framework.md: hard gate PASS, Evidence Fit 79/100
(Core, unchanged — a document cannot move candidate-role fit), Document
Quality 90/100, Channel Weak but uniquely upgradeable. Claim audit clean
across all 13 bullets; no Tier 1 truth findings.

The skill's own spec asks for a single 8-dimension score including a
Publications weight, which contradicts critique_framework.md and CLAUDE.md
("never collapse them into one optimistic score"). Followed CLAUDE.md and
recorded the conflict — the skill definition looks stale relative to the
July rewrite.

Tier 1 finding and fix: the JD names Abfrageleistungsoptimierung in a
required line and the document had zero occurrences of "query", despite
canonical support sitting in BS-2's 3L variant. BS-2 now reads "tuning
query performance for analysis teams working with…" and the Pipelines
skills line gains "query performance tuning". Also surfaced "agile" in
SW-3, whose canonical 2L variant records "in an agile DevOps team" and
whose absence left the JD's second required line unaddressed.

Deliberately NOT applied: the API term. claims.json SW-7 records only
"onboard source systems" and SW-2's ingestion is Oracle to Kafka, so
adding it would be vocabulary substitution rather than evidence. Left
open pending user confirmation.

Re-verified after the edit: validator PASS, forbidden-token scan PASS,
compile PASS at 2 pages, both pages re-rendered and inspected. Longest
bullet 34 words, still under the flag threshold. Document Quality 90 to
92 on relevance/terminology.

Still not submitted — held pending the Anforderungsniveau K comp answer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpMtWFtYkGkjSMShuTgXiB
2026-08-21 17:09:27 +02:00
dennisthiessenandClaude Opus 5 a64661e42a feat(sbb): 2-page English resume for SBB Data Engineer, Bern
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
2026-08-21 16:56:48 +02:00
dennisthiessenandClaude Opus 5 787a1d937e feat(sbb): Phase 0 for SBB Data Engineer, Asset Management, Bern
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
2026-08-21 16:33:39 +02:00
dennisthiessenandClaude Opus 5 8a30c68c95 fix(scout): key decision lookups by stable job ID, not raw URL
Boards rewrite their own URLs between runs, so a decision recorded under one
URL was lost the next time the same req appeared. Amazon truncates the job
slug to a fixed width and that width changed, which silently resurfaced the
already-skipped Principal Delivery Consultant req at score 7 in the 08-21 run.

Adds _decision_key(): "<host>#<req-id>" via per-board ID patterns, falling
back to a normalized path. Host-scoping is deliberate — a wrong ID match can
never mark a role decided at a different company. Also collapses genuine
duplicates: Workday's /apply suffix, PostFinance's per-locale URLs, Apple's
?team= and /locationPicker variants, the same NVIDIA req under two locations.

The log file stays URL-keyed (it is hand-edited and the URL is the readable
part); lookups go through index_decisions(). --decide now updates an existing
entry when the job is already logged under a drifted URL instead of adding a
second row.

Verified against all 955 URLs in the decision log plus the 2026-08-21 report:
4 groups collapse, each inspected and correct, no false merges.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpMtWFtYkGkjSMShuTgXiB
2026-08-21 16:33:27 +02:00
dennisthiessenandClaude Opus 5 2fadfdb8eb feat(scout): probe four unverified boards — add CERN, NCIA to manual check
Probed CERN, Swiss Post, NATO NCIA and SIX Group. Two actionable results:

- CERN: SmartRecruiters board "CERN", 66 live Geneva postings with real
  engineering (Deep Learning Developer, ML Engineer NGT, Full-stack SWE, Data
  Storage R&D Engineer). Added — the adapter already existed. Two standing
  caveats recorded in the entry: Geneva is ~1h50 from Bern so a 2-3 day hybrid
  is not viable without relocation, and CERN grades sit below the 180k bar.
- NATO NCIA: nato.int is Cloudflare-blocked to headless browsers. Moved to
  MANUAL_CHECK beside Oracle, with a note that NCIA is a separate pipeline from
  the JWC Stavanger reqs the `nato` adapter returns.

Not added, documented instead:
- Swiss Post: real board is job.post.ch (SuccessFactors CSB), scrapable via
  a[href*='/job/']. The only tech role on page 1 was served from the PostFinance
  sub-board, which is already covered. Paginated, so this is page-1 evidence
  only, not a whole-board verdict.
- SIX Group: SAPUI5 SPA backed by a legacy DWR RPC endpoint
  (careerJobSearchControllerProxy.getInitialJobSearchData.dwr). Scrapable in
  principle, brittle in practice; job rows did not render into readable text.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 18:28:45 +02:00
dennisthiessenandClaude Opus 5 cbb713ba7d chore(aws-fde): NO-GO at Phase 0 gate — 69/100 below the fit bar
User declined at the gate: 69 is not a strong enough fit to spend a package on.
Consistent with revealed behaviour — every application actually submitted scored
77.5-89; nothing below 75 has ever been sent.

No cohort slot consumed (Adjacent stays 1/2). No bullets written, no resume, no
cover letter. Phase 0 analysis retained in the session file in case a
better-fitting AWS req appears.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 13:02:54 +02:00
dennisthiessenandClaude Opus 5 cc109524f8 feat(aws-fde): Phase 0 for AWS Senior Forward Deployed Engineer, Zurich
Verbatim JD (amazon.jobs 10504263, posted 2026-08-17) retrieved via Playwright
and stored with the session.

Evidence Fit 69/100, Adjacent. All four Basic Qualifications are Direct, so the
minimum-qualification gate passes. Disclosed rather than buried: forward
deployment is the title-defining capability and is a Gap - SW-4, VZ-1 and
global_forbidden_output_patterns all forbid "customer-embedded delivery", and
application_strategy lists strategic-account FDE as a Stretch target. Scored
Adjacent because AWS's published minimum bar is pure software engineering and
the org is seven weeks old, hiring builders at volume.

Assets: AWS is the evidenced cloud (claims.json forbids GCP output), and Kiro -
named in the JD - is in the verified GenAI toolchain.

CL decision YES. Would consume the last Adjacent cohort slot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 12:58:39 +02:00
dennisthiessenandClaude Opus 5 e09437dc27 chore(pipeline): close SDU + Google FDE III, triage 5 JDs, drop Louis Dreyfus
Pipeline:
- SDU PhD: closed, not proceeding. Prof. Jørgensen never replied to the
  2026-08-02 enquiry; user dismissed it two days before the 2026-08-20 deadline.
- Google FDE III GTM: closed, not proceeding after two Google rejections. The
  bar for a third attempt is now a very strong fit; this was Adjacent with an
  agent-orchestration gap. Frees the Adjacent cohort slot (back to 1/2).

JD triage — 5 pulled and read, 1 survives:
- SHORTLIST AWS Senior FDE Zurich: all four basic quals pass and AI/agentic is
  preferred-only, unlike the Google Senior Staff FDE where vector DB + RAG were
  minimum quals. AWS is the evidenced cloud; JD names Kiro, which he uses.
- SKIP AWS ProServe Bern (clinical pharma domain gate), AWS Principal Delivery
  Consultant (8+ yrs architecture leadership + VP+ exec comms), GitLab FDE EMEA
  (Ruby/Go hard gate), MS 200044133 (title says FDE Data Scientist, quals are
  BGP/MPLS/SD-WAN network engineering — mislabelled req).

Roster:
- Dropped Louis Dreyfus: 300 roles, all Brazil/India/Bulgaria ops, zero Swiss.
- Kept MET Group: its "0 eligible" was a filter artifact; exclusion mode reveals
  real Baar/Zug commodity-trading roles.
- Kept Equinor/Telenor/NATO. Memory corrected: the Norway lane is selective, not
  closed — the user still wants very good Norwegian roles.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 12:16:45 +02:00
dennisthiessenandClaude Opus 5 3bb6baa1b3 chore(scout): remove temp probe output files
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 11:17:40 +02:00
dennisthiessenandClaude Opus 5 aad69745e7 chore(scout): remove temp probe scripts committed by mistake
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 11:17:34 +02:00
dennisthiessenandClaude Opus 5 284407cd23 fix(scout): repair Roche/Apple, add Amazon+Axpo, make title filtering fail-open
Scraper fixes:
- Roche: new fetch_phenom adapter (Phenom refineSearch). The old playwright scrape
  of ?locationsearch=Switzerland harvested recommendation-widget cards (Shanghai,
  Kyiv, Bogota) while the page reported no-results. 0 -> 88 CH-eligible roles.
- Apple: dropped default_location "Switzerland", which relabelled US "Various
  Locations" postings as Swiss (84 phantom CH rows over 4 runs). Now honestly 0.
- Meta: NOT broken — metacareers reports "1 Items" for Zurich. Comment added so it
  is not "fixed" again.

New boards:
- Amazon/AWS (fetch_amazon): 32 CH roles incl. a Zurich AWS FDE req and a Bern
  ProServe Cloud Architect. AWS is the evidenced cloud; claims.json forbids GCP.
- Axpo (teamtailor via base_url + pagination): 461 roles, opens the energy lane.
  Locations read from schema.org jobLocation with ISO alpha-2 expanded, so
  Madrid/Milan/Warsaw roles are not marked Swiss. Telenor benefits too.

Title filtering now has two explicit modes. Inclusion allowlists fail closed and
hide unanticipated good-fit roles, so they are now used only where volume forces
it (>~200 roles). Everything else uses the shared, board-agnostic
NOISE_TITLE_EXCLUDE, which fails open and leaves the final call to the scorer and
the reviewer. Palantir stays unfiltered per its existing documented rationale.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 11:17:24 +02:00
dennisthiessenandClaude Opus 5 082a1d250c docs(scout): roster review — broken scrapers, dead lanes, verified adds
Analysis of the 34-company roster against 4 recent runs and 253 decisions.
No COMPANIES changes.

Findings: Roche/Meta/Apple silently scrape garbage (non-CH rows, 1 intern,
internships-only) — same silent-failure class as the dbt Labs 404; seven boards
have no _title_filter; MET+LDC yielded 0 eligible across 1,464 scrapes.

Verified adds: Amazon/AWS (32 CH roles incl. a Zurich AWS FDE req, and AWS is
the evidenced cloud where GCP is forbidden) and Axpo (Teamtailor custom domain,
400 roles incl. Forward Deployed AI Engineer, opens the named energy lane).

Verified negative: Coinbase proper has 2 EMEA-remote non-eng roles; the
remote-EU data-infra tier is geo-banded below the comp bar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 10:46:23 +02:00
dennisthiessenandClaude Opus 5 c206563b59 chore(scout): drop Coinbase Ventures getro board
The board never carried Coinbase's own roles — only Getro portfolio companies.
Across ~3 months it surfaced 3 distinct CH-eligible roles, all from Ashby
(recruiting software, ruled out 2026-07-28) and all decided "skip". Since the
Ashby exclusion it has returned 0 jobs on every run, surfacing a false error
line in each report.

Entry replaced with a "Dropped:" note per the file's convention. fetch_getro is
retained (no caller) since it generalises to any Getro collection id.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 10:34:58 +02:00
dennisthiessenandClaude Opus 5 7b45d41ed8 fix(scout): repoint dead dbt Labs board at Fivetran after merger
The "dbtlabsinc" Greenhouse board started returning 404, silently dropping
a target company from every scan. getdbt.com/careers now redirects to a page
serving Fivetran's Greenhouse listings (gh_jid links) — the two companies
merged, so the roles live on board "fivetran" (239 jobs, 10 title matches).

Renamed the entry id dbtlabs -> fivetran and cleared the stale seen-state key.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 10:30:35 +02:00
dennisthiessenandClaude Opus 5 94913a004a chore(pipeline): record Equinor and Microsoft ISE rejections, add Google FDE III Phase 0
Equinor Manager / AI Architect (JR106747): REJECTED 2026-08-14, no interview.
79 days from submission (2026-05-27) to disposition, the longest turnaround
recorded. Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27),
so it does not free an Adjacent cohort slot. Norway lane now reduced to the
open Aker BP application.

Microsoft Senior SWE, ISE Zurich (200040836): REJECTED 2026-08-11, no
interview, ~39 days. The separate Principal FDE req 200043897 is a different
pipeline and remains open.

Also carries forward uncommitted work from the 08-07 / 08-11 sessions:
- Google FDE III, Cloud GTM (78350205438567110) Phase 0 session file and
  scraped JD; Adjacent, Evidence Fit 67/100, hard gate PASS.
- Scout skip decisions: BIS jr100411 (platform admin, not data eng), two
  Google reqs gated on a C++ minimum qualification, and the FDE III
  Generative AI sibling req confirmed taken down.
- settings.local.json: allow the job_scout venv python invocation.

Every closed application to date has been Channel Weak with no interview.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 22:32:33 +02:00
dennisthiessenandClaude Opus 5 239129b37e feat(sdu): add SDU PhD enquiry, verify thesis claims from source
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>
2026-08-02 23:09:30 +02:00
dennisthiessenandClaude Opus 5 f1095a062f feat(applications): archive Aker BP package, add Compass evidence, extend scout
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>
2026-08-01 10:18:07 +02:00
dennisthiessen a22c6ff597 feat(resume): add Google Business Home application package 2026-07-27 20:21:09 +02:00
dennisthiessen fe5f24704f feat: rebuild evidence-first application workflow 2026-07-27 17:56:15 +02:00
dennisthiessen c24892f381 Mark QuantCo Cloud Engineer as rejected in decision log.
Aligns scout state with Active Sessions (rejected 2026-06-15, no interview).
2026-07-18 21:38:34 +02:00
dennisthiessen 43f4b88c5b Improve job scout location policy, reliability, and add NATO Taleo.
Tighten eligibility to CH/DK/Europe-remote (Equinor Norway-only, NATO DK+NO), add Taleo adapter, parallel API fetches, atomic state writes, and empty-board warnings. Log NATO AI Engineer as applied and Architect as skip.
2026-07-18 21:33:06 +02:00
dennisthiessenandClaude Sonnet 5 d0525cc437 chore(applications): archive BIS + NATO submitted packages, ignore tmp/
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>
2026-07-18 21:03:45 +02:00
dennisthiessenandClaude Sonnet 5 3ad39117d6 feat(job_scout): add Equinor/BFH, fix Windows SSL cert errors, tighten remote-location matching
Equinor (Workday) and BFH (Bern, playwright) wired up as new sources; artificial
intelligence/analytics-engineer keywords added so int'l-org listings (BIS) stop scoring
as noise. certifi-backed SSL context works around Workday certs failing verification
against a stale Windows root store.

location_matches() previously treated "remote + any single named EU country" as
CH-eligible, which let single-country residency-locked listings (e.g. Databricks'
"Remote - United Kingdom") pass as if they were open EU-wide. Now requires either a
pan-regional keyword (Europe/EMEA/Global/Worldwide) or 2+ distinct countries named.
Denmark is carved out as its own always-on relocation category (on-site or remote,
any company), replacing the previous Databricks-only opt-in.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 21:01:03 +02:00
dennisthiessen 9645dbca8d Add PostFinance to job scout 2026-07-10 23:19:22 +02:00
dennisthiessenandClaude Fable 5 b4fe2505ef chore(repo): Codex skills mirror, scout scratch-dump ignores, allowlist
- AGENTS.md + .agents/skills/: Codex-compatible mirror of the CLAUDE.md
  instructions and the .claude skill set.
- .gitignore: ignore job_scout/jd_*.txt and *_verify.txt one-off
  Playwright scrape dumps (applied JDs are archived in JDs/ + output/).
- settings.local.json: permission allowlist churn from recent sessions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:52 +02:00
dennisthiessenandClaude Fable 5 e286c6a9bb docs(applications): Google DE interview prep brief + STAR stories
Prep materials for the Google Senior Data Engineer (Merchant Data
Science) process after passing the Hiring Assessment 2026-06-20:
interview prep brief + STAR story bank alongside the session files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:43 +02:00
dennisthiessenandClaude Fable 5 127e2dbf87 feat(job_scout): score the forward-deployed/field/resident lane
Adds positive keywords (forward deployed, field engineer, resident
architect/engineer, customer engineer) and title-filter entries so
vendor deploy-to-customer roles surface — the lane matched to
user_international_mobility (intl scope from Bern, travel-OK, no
relocation). Bare "resident" stays title-filter-only to avoid
re-opening the pre-sales-SA overscoring trap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:42 +02:00
dennisthiessenandClaude Fable 5 23e2185aa0 chore(kb): upgrade BS-5 to verified TAF 2022 Spotfire platform ownership
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>
2026-07-03 13:58:42 +02:00
dennisthiessenandClaude Fable 5 2ee509bb34 feat(applications): submit Microsoft ISE Senior SWE Zürich (2026-07-03)
Microsoft — Senior Software Engineer, Industry Solutions Engineering
(ISE), Zürich, req 200040836. Applied 2026-07-03, ~7 days after posting.

- Package: 2pp resume (18 bullets) + 1pp CL (299 words), critiqued to
  85.8/100 (Pass 2). Same-day cycle: verbatim Eightfold JD fetch ->
  build -> critique 83.3 -> Tier 1+2 fixes -> 85.8 -> submit.
- Fixes applied: "model evaluation" completes the JD's RQ triple
  verbatim; open-source stack labeled in skills; summary gains LLM +
  cross-functional, on-call bound to Component Owner (precision).
- CL hooks all web-verified: ISE Engineering Fundamentals Playbook,
  SharePoint-permissions-to-RAG blog, USD 400M Swiss datacenter.
- Logs 'applied' in job_scout decisions.json, flips the CLAUDE.md
  Active Sessions row to SENT, archives the JD under JDs/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:58:28 +02:00
dennisthiessenandClaude Fable 5 ad5422acb0 chore(applications): Kraken SRE rejected; Google DE advanced to Hiring Assessment
2026-06-17 status updates:
- Kraken (Payward) SRE, AI Agents -> CLOSED, REJECTED (no interview).
  Honest infra/SRE gaps (Terraform, SRE title, agent frameworks) the
  likely filter. decisions.json -> rejected.
- Google Senior Data Engineer -> ADVANCED. Resume cleared recruiter
  screen; invited to ~30-min Google Hiring Assessment (work-styles/SJT).
  Open item at recruiter stage: clarify L4/L5 + comp clears 180k+.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-17 13:53:09 +02:00
dennisthiessenandClaude Fable 5 cad2c230eb feat(applications): submit Google Sr Data Engineer + Kraken SRE AI Agents (2026-06-15)
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>
2026-06-15 19:57:18 +02:00
dennisthiessenandClaude Opus 4.8 d0350ca668 chore(job_scout): log Snowflake Sr SWE Enterprise as applied
Records the 2026-06-06 application (Observe by Snowflake, ~86/100) in the
decision log so it stops resurfacing as a new match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:53:49 +02:00
dennisthiessenandClaude Opus 4.8 b4b5e3fbe1 chore(resume): shelve Isovalent Data Engineer package (role pulled, ~86/100)
Finalized package retained for reuse; role closed (Cisco scrape 2026-06-02:
not on board, Recruitee link dead). PDFs/build artifacts gitignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:46:11 +02:00
dennisthiessenandClaude Opus 4.8 d576254971 docs(skills): enforce JD integrity — real posting verbatim + Playwright recipe
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>
2026-06-06 20:46:10 +02:00
dennisthiessenandClaude Opus 4.8 7ed9e5b615 feat(job_scout): add data-infra adapters + Oracle manual-check
Add Databricks, Snowflake, Datadog, Elastic, dbt Labs (greenhouse/ashby,
title-filtered). Snowflake slug surfaced the Zürich Observe SWE role.
HashiCorp dropped (IBM acquisition killed public boards); Oracle moved to
MANUAL_CHECK (ORC SPA resists scraping; REST endpoint documented in code).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:46:10 +02:00
dennisthiessenandClaude Opus 4.8 dd2f0308c5 feat(resume): Snowflake Sr SWE Enterprise (Observe) package (sent, ~86/100)
Observability-spine framing: Bosch telemetry/observability PoC promoted to
lead, Swisscom Iceberg lakehouse + on-call/RCA. Real Ashby JD (verbatim).
Tier 1+2 critique fixes applied; Vizrt low-latency skipped per user.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 20:44:30 +02:00
dennisthiessenandClaude Opus 4.8 09316a73cf feat(resume): QuantCo Cloud Engineer package (sent, ~82/100)
- Full resume + cover letter + critique for QuantCo Cloud Engineer (Zürich)
- Applied Tier 1+2 critique fixes: corrected education dates, hedged Data
  Mesh ownership, sharpened tagline/summary, added SRE token
- Mark QuantCo Cloud Engineer + Equinor as sent in trackers
- decisions.json: QuantCo Cloud Engineer -> applied

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:40:40 +02:00
dennisthiessenandClaude Opus 4.8 8a5955c0a8 feat(job_scout): decision log + report annotations
Track per-job decisions across runs so we don't re-evaluate roles.

- state/decisions.json (keyed by URL: company/title/decision/note/date), now
  git-tracked while seen_jobs.json stays local
- --decide "<url>" <status> [note] records a decision; --hide-decided gives an
  undecided-only view; report tags each role inline with its decision
- usage docstring updated
- seed 18 decisions (9 shortlist, 7 skip, 1 paused, 1 maybe); flags Google Staff
  FDE GenAI as the paused prior session

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:30:49 +02:00
dennisthiessenandClaude Opus 4.8 da66443aa8 feat(job_scout): add 6 Swiss/EU companies, new adapters, and scan-stats table
Automate Palantir, QuantCo, Swissgrid, RUAG, SBB, BKW (drop BFH/Dialectic);
25 companies automated, 0 manual.

- adapters: lever (Palantir/QuantCo), generic json (Swissgrid), sbb, bkw
- fetch_playwright: optional ?page=N pagination (page_param/max_pages) for RUAG
- location_matches: treat pan-EU "Europe"/"EMEA" postings as eligible
- per-company _score_floor so pre-filtered German-language boards stay visible
- POSITIVE_KEYWORDS: add data scientist / data science (medium)
- report: scan-stats table (scraped / CH-remote / match>=2 / newest / time) + totals

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:15:22 +02:00
dennisthiessenandClaude Opus 4.7 49ba42138d chore(job_scout): drop Sygnum, Vitol, ClickHouse (Glassdoor culture/comp red flags)
- Sygnum: 3.4 / 51% recommend, comp 2.3/5 (structurally below 180k bar)
- Vitol: 3.5 / 55% recommend, grueling-hours/blame-culture flag, WLB 2.5
- ClickHouse: 3.3 / 36% recommend, WLB 2.6, multiple toxic-culture reviews

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 16:20:34 +02:00
dennisthiessenandClaude Opus 4.7 0c098daadf feat(job_scout): score devops/cloud/platform + technical-architect roles
Add positive keywords for the core DevOps/data-platform/cloud lane and
technical-architect titles (cloud/data/platform architect) that previously
scored 0 and surfaced only via the generic "senior" term. Rebalances rankings
so hands-on engineering roles aren't buried under pre-sales "Solutions
Architect" + crypto keyword stacking.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 15:46:14 +02:00
dennisthiessenandClaude Opus 4.7 54d8ec7a5e chore: add Swisscom SW-7 data mesh achievement, Google FDE drafts, scout perms
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 14:25:23 +02:00
dennisthiessenandClaude Opus 4.7 f00b9df59d fix(equinor): correct education dates on resume
B.Eng. Oct 2009-Oct 2012, M.Eng. Apr 2012-Oct 2013 (overlap intentional).
Log correction in config.md KB Corrections.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:42:48 +02:00
dennisthiessenandClaude Opus 4.7 e61c4bac6d feat(equinor): tailored AI Architect resume + cover letter package
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>
2026-05-27 20:58:58 +02:00
dennisthiessenandClaude Opus 4.7 1e83966049 fix(job_scout): word-boundary keyword matching + title-weighted scoring
Two scoring bugs inflated the rankings:
- Substring matching: 'rag' matched sto[rag]e / tet[rag]on, 'intern'
  matched inte[rnal], 'lead' matched [lead]ership. Roche's staff
  restaurant and Cisco Tetragon roles scored as fits. Now keywords must
  not be flanked by alphanumerics (c#/.net/c++ keep matching).
- Body boilerplate: every Kraken post mentions crypto/blockchain/trading,
  so sales/PM/design roles scored as high as engineering ones. Title
  matches now score full weight, body-only matches half (min 1);
  negatives still count fully anywhere.

Strong-fit count drops 13 -> 5; the bogus 'intern' negatives and rag
false positives are gone. Shared _kw_in() also backs the title filter.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 21:37:00 +02:00
dennisthiessenandClaude Opus 4.7 74dcc244b8 feat(job_scout): add trading/quant-finance scoring keywords
Dennis is interested in trading roles (energy/finance/crypto), but the
scorer had no terms for them, so trading-tech roles scored 0 and got
buried. Add a trading/quant cluster (trading, trader, quant, market
data, low-latency, FIX protocol, brokerage, commodity, execution) plus
singular "solution architect" and adjacent stack (C#, .NET).

Bitcoin Suisse's Solution Architect Trading now scores 4 (medium) on
title alone, up from 0.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:15:18 +02:00
dennisthiessenandClaude Opus 4.7 b44360f99a feat(job_scout): automate Bitcoin Suisse via onlyfy adapter
Bitcoin Suisse's careers page is a JS-rendered Next.js SPA, but the
underlying onlyfy.jobs ATS exposes a plain HTML job list at
candidate/job/ajax_list (title + location per card). Add an onlyfy
adapter that parses it — no headless browser needed. Surfaces the 3
current Zug roles correctly (CH filter + pre-dedup location filtering
keep the Swiss posting over its Bratislava/Copenhagen cross-posts).

MANUAL_CHECK is now empty (all 22 target companies automated), so the
report's manual-check section is suppressed when the list is empty.
Coverage notes updated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:06:31 +02:00
dennisthiessenandClaude Opus 4.7 f4d2c6c969 chore(job_scout): drop AMINA Bank from MANUAL_CHECK (poor Glassdoor)
AMINA Bank rates poorly on Glassdoor and isn't worth tracking. Remove
its manual-check entry, leaving Bitcoin Suisse as the only manual source.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:50:38 +02:00
dennisthiessenandClaude Opus 4.7 913a5de5ac chore(job_scout): drop Coinbase from MANUAL_CHECK (hiring freeze)
Coinbase cut ~14% of staff and is not actively hiring; remove its
manual-check entry. The getro Coinbase Ventures source covers portfolio
companies only, not Coinbase itself, so Coinbase is now off the radar
until they reopen. Now 2 manual sources (AMINA, Bitcoin Suisse).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:48:56 +02:00
dennisthiessenandClaude Opus 4.7 cb27fa3ecf feat(job_scout): add getro adapter for Coinbase Ventures web3 network
Add a getro adapter (POST JSON search API) and wire up the Coinbase
Ventures portfolio talent network (collection 1625), CH + eng-title
filtered. Note this covers portfolio companies (Ashby, Notion, VALR,
World, ...), not Coinbase itself, which doesn't list on its Ventures
board — Coinbase-the-employer stays in MANUAL_CHECK.

Also clean up stale comments: drop Sonova (MedTech, off-thesis, dead
scrape) from MANUAL_CHECK, remove the dangling BIS comment now that
BIS is automated via rss, and refresh the adapter-coverage notes and
module docstring to the current 21-automated / 3-manual state.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:47:29 +02:00
dennisthiessenandClaude Opus 4.7 1331a7f1f5 feat(job_scout): add RSS adapter, automate BIS vacancies
- Generic RSS/RDF feed parser (handles RSS 1.0 namespaced items + RSS 2.0)
- BIS (Bank for International Settlements, Basel) promoted from manual-check
  to an automated source via its vacancies RSS feed — commutable from Bern,
  salary net of Swiss tax. Scout now 20 automated + 4 manual-check.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 09:55:50 +02:00
dennisthiessenandClaude Opus 4.7 3b07c4b900 feat(job_scout): expand to 19 companies + new adapters, filters, dedup
- New SmartRecruiters adapter (EU energy/commodity firms)
- Add data-infra US tech (Confluent/GitLab/ClickHouse/Grafana) and
  commodity/energy traders (MET Group/Vitol/Louis Dreyfus)
- Headless stealth (navigator.webdriver mask + chrome fingerprint) — unblocks
  Google; also enabled Meta and Cisco scraping
- Tight title prefilter + title-only scoring + cross-region dedup so
  high-volume all-remote boards don't flood the report
- Remove Canonical (below-market pay, poor culture) and IBM Research
  (research-scale pay below bar; weak data-eng fit) per reputation review

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 12:38:35 +02:00
dennisthiessenandClaude Opus 4.7 eeec77b1e3 feat: add job_scout — automated CH job-board scraper for target companies
Pulls fresh postings from the quarterly target-company list, filters by Swiss
location / EU-remote eligibility, scores fit against profile keywords, tracks
seen jobs, and writes a markdown report.

Adapters (13 companies automated):
- Workday: NVIDIA, Novartis
- Ashby: Kraken, OpenAI
- Greenhouse: Anthropic
- PCSX (Eightfold): Microsoft
- WordPress AJAX: Sygnum
- Playwright (headless + stealth): Google, Apple, Meta, Roche, Cisco, IBM

4 companies (Sonova, Coinbase, AMINA, Bitcoin Suisse) resist automation
(server-side bot blocks / JS widgets) and surface as a manual-check checklist.

venv, reports/, and state/ are gitignored; only scout.py + requirements.txt
are tracked.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 10:12:27 +02:00
dennisthiessen 1fde4c6b34 first commit 2026-05-21 11:07:51 +02:00