Norway search (user request 2026-10-21/22: Trondheim, Bergen or similar, not Oslo)
- New location policy norway_no_oslo: keeps a role if any Norwegian location
is outside the Oslo area. Equinor and Telenor move to it.
- New `nav` adapter for the NAV national register (arbeidsplassen.nav.no):
keyword queries on a fixed request budget, paced; on HTTP 429 it stops and
returns a PARTIAL run with a warning instead of failing. Full-ad text checks
are cached in state/nav_detail_cache.json (ignored). Tested against
fixtures only: the live API was rate-limiting during the build.
- Dedicated boards where NAV was measured thin (2026-10-22: Nordic 0, DNV 2,
Equinor 2 vs ~10, NATO 0): Nordic Semiconductor (teamtailor custom domain),
DNV (new `algolia_jobs` adapter; app id/key/index read from the page each
run), Arm Trondheim (new `radancy` adapter), Microsoft Norway (pcsx).
Verified live: 7 / 6 / 7 / 6 roles outside Oslo.
- NAV rows that duplicate a dedicated board's posting are dropped
(employer alias + normalized title).
Language / citizenship check
- classify_language_requirement reads the requirement SENTENCE, not the
posting language: "norsk og/eller engelsk" is English OK, "kommunisere
godt ... på norsk og engelsk" is Norwegian required. Only an explicit
Norwegian requirement or Norwegian-citizenship requirement filters a role;
clearance is noted, never a gate. Runs on full ad text (NAV detail page,
untruncated Teamtailor/PCSX descriptions). Telenor Lead Platform Engineer
now reads NORWEGIAN REQUIRED (it read UNCLEAR on truncated text).
- Norwegian title keywords added (they all scored 0 and were never checked).
Employer reputation (user requirement 2026-10-22)
- state/employer_reputation.json (now tracked): dated Glassdoor lookups with
sources and the approved thresholds (good >= 3.8 on >= 50 reviews; ok
3.5-3.79 or thin-but-backed; avoid < 3.5; Vizrt excluded). Every report
row shows the verdict; unlooked-up employers show UNCHECKED.
Report
- Sections per region: Switzerland, Norway, Europe-remote / Denmark (user
preference); `--region=ch|no` runs one region only.
Fixes
- Microsoft links: apply.careers.microsoft.com<positionUrl>?jobId=<id>
with a host alias so all 7 logged Microsoft decisions still resolve; the
old jobs.careers.microsoft.com form redirected to a generic search page.
PCSX calls retry on 429.
CLAUDE.md corrections log: design/architecture gap (2026-10-21) and the
Microsoft link fix; the EMEA-suffix location leak stays OPEN.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Application
- Kongsberg Discovery / Seatex, Lead Engineer DevOps and Test Infrastructure
(Trondheim): resume, cover letter (+ paste text), verbatim JD, session and
critique. Submitted 2026-10-08 via EasyCruit as a deliberate cold application
on a user override of the embedded-SW hard gate (Evidence Fit 69, Document
Quality 84). Recorded in applications.json and decisions.json.
- Google Senior SWE Full Stack Commerce: session and verbatim JD from
2026-10-03 (no-go on the frontend gap, held, not submitted).
Knowledge base
- claims.json: ED-1 (embedded/robotics coursework, none since studies),
SW-9 (current unit testing, pytest), new skills (pytest, unit testing,
embedded systems (coursework), VHDL, robotics (coursework)), and Jenkins and
GitLab CI/CD registered from existing GN-1/FC-1/BS-6/SW-3 scopes.
- Earlier uncommitted KB work: 2026-09-18 Python frameworks / enterprise SaaS
clarification, 2026-10-03 data-product design / no-frontend clarification,
2026-10-06 working-model rule (3 homeoffice days baseline) in config.md and
application_strategy.md, plus related experience/bundle/taxonomy updates.
- CLAUDE.md corrections log: 2026-10-08 entry for the three canonical gaps.
Scout
- 2026-10-08 run triaged by JD read: NVIDIA DGX Cloud Senior Production
Engineer, Google SRE III Prod AI / Senior SRE / Staff Shopping Graph and
Amazon RIVR DevOps logged as maybe; GenAI FDE family, Kraken AI Platform,
PostFinance DevOps and five Kdo Cy reqs logged as skip with reasons.
Housekeeping
- .gitignore: ignore .cache/ and raw HTML page dumps under output/.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second-pass review of this session's work by another agent. It corrected several
real mistakes of mine and finished F06 gaps I had left open. Reviewed, verified
and committed as-is.
THE MISS THAT MATTERS
`job_scout/state/applications.json` — the authoritative application registry
introduced by F02 — was never actually tracked. `job_scout/state/*` in
.gitignore silently excluded it, so my checkpoint commit afdef7e claimed to add
it and did not. Only `application_cohort.json`, the GENERATED projection, was
version-controlled; the source of truth and the migration history backup were
not. .gitignore now carries explicit negations for both.
MY ERRORS, CORRECTED
- "kastellaun" was in CH_LOCATION_KEYWORDS. Kastellaun is in Rhineland-Palatinate.
I took it from a Bundeswehr reserve listing and filed it under Switzerland -
precisely the class of bug F12 existed to fix.
- The F12 fix only widened the keyword list; SmartRecruiters still discarded the
structured country, which was the concrete case the review named
(city=Baar, country=CH). The adapter now preserves it, and a COUNTRY_NAMES
mapping gives country precedence over a bare town name.
- F15 was applied to Taleo and Prospective only. Greenhouse still wrote
`updated_at` into `posted`; it now uses `published_at` and carries provenance.
- My negation guard `\b(no|not|...)\b[^.;]{0,60}$` was too loose - an unrelated
"not" within 60 characters could mask a real claim. Tightened to require the
negation to govern the term.
- F18's retirement of the macro-count rule missed "Four to six compact skills
lines" in the workflow; removed now.
F06 GAPS I LEFT OPEN, NOW CLOSED
Date-format validation on education/employment periods (the 2035-99 case named
in the review), evidence-structure validation, referential integrity on evidence
source files, and the missing-identity KeyError.
F10 TAKEN FURTHER, AND RIGHTLY
I demoted the US-GPA fields to *_orientation_only. They are now removed
entirely, with grade_output_rule saying what to do instead: use the German grade
and scale, and if a recipient requires a US GPA, use THEIR method and record it.
Keeping a number derived by a non-recognised method invites its use.
Also: the Capgemini omit-preference now sits in experience_capgemini.md itself,
alongside the instruction not to fill or explain the intentional gap.
BIS BASEL - REJECTED 2026-09-11
jr100429, applied 2026-07-10, no interview, no reason given. Recorded in the
registry with a dated event and in the decision log; the "prep interview brief
when screening lands" next action is cleared. This also settles the 2026-09-04
observation that the req had vanished from the BIS board - it was a real
rejection, not just a closed posting.
VERIFICATION I RAN MYSELF BEFORE COMMITTING
49/49 tests. Validator PASS with 0 advisory warnings. Package manifest and
registry views current. All 12 F12 location cases still correct, including
Kastellaun now rejecting. The F05 counter-proof still catches all 9 violations.
SBB, NVIDIA, RUAG and Kdo Cy resumes still scan clean. Diffs are net-additive
across every reference file - the deletions are replacements, not losses.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
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
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>
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>