From af7189a93d1157bd02b170a4a5d9e354ac41df12 Mon Sep 17 00:00:00 2001 From: Dennis Thiessen Date: Tue, 25 Aug 2026 09:08:14 +0200 Subject: [PATCH] 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 Claude-Session: https://claude.ai/code/session_01MHtzyTKBcg6BWhD5qFegtK --- .gitignore | 5 ++- job_scout/state/application_cohort.json | 51 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 job_scout/state/application_cohort.json diff --git a/.gitignore b/.gitignore index b4af57c..ce92899 100644 --- a/.gitignore +++ b/.gitignore @@ -24,8 +24,11 @@ __pycache__/ job_scout/.venv/ job_scout/reports/ job_scout/state/* -# ...but track the decision log (job application history), not the churny seen-state +# ...but track the durable application records, not the churny seen-state: +# decisions.json — per-posting decision log (applied/skip/shortlist/closed) +# application_cohort.json — cohort slot tracker (core/adjacent/stretch mix) !job_scout/state/decisions.json +!job_scout/state/application_cohort.json # One-off job-board data pulls (debug artifacts) *_jd.json diff --git a/job_scout/state/application_cohort.json b/job_scout/state/application_cohort.json new file mode 100644 index 0000000..b0f9e9a --- /dev/null +++ b/job_scout/state/application_cohort.json @@ -0,0 +1,51 @@ +{ + "cohort_id": "evidence-first-2026-01", + "status": "active", + "started": "2026-07-27", + "target_mix": { + "core": 7, + "adjacent": 2, + "stretch": 1 + }, + "definitions": { + "core": "Evidence Fit 75+ and no hard-gate failure", + "adjacent": "Evidence Fit 60-74, no required Gap, normally at most one serious preferred gap", + "stretch": "Evidence Fit below 60 or a defining responsibility is only Adjacent" + }, + "applications": [ + { + "company": "Google", + "role": "Software Engineer III, Business Home", + "application_date": "2026-07-27", + "fit_class": "core", + "evidence_fit": 89.0, + "hard_gate": "pass", + "channel": "weak", + "outcome": "rejected_no_interview" + }, + { + "company": "Aker BP ASA", + "role": "Data Product Architect - AI-ready Data Products", + "application_date": "2026-07-29", + "fit_class": "adjacent", + "evidence_fit": 79.0, + "hard_gate": "pass", + "channel": "weak", + "outcome": "applied", + "submitted": "2026-07-29" + }, + { + "company": "SBB", + "role": "Data Engineer (m/w/d), Asset Management Infrastrukturanlagen, Bern", + "job_id": "103755", + "application_date": "2026-08-25", + "fit_class": "core", + "evidence_fit": 79.0, + "hard_gate": "pass", + "channel": "warm_contact_published", + "outcome": "applied", + "submitted": "2026-08-25", + "open_risk": "Anforderungsniveau K is a capped GAV band, figures not public; seat may read lateral or below current Staff + Component Owner scope." + } + ] +} \ No newline at end of file