Skip to content

eval: replace saturated demo-fixture gate with a falsifiable synthetic battery (FIX-13)#32

Merged
ChelseaKR merged 2 commits into
mainfrom
roadmap/fix-13-falsifiable-recommender-eval-synt
Jul 12, 2026
Merged

eval: replace saturated demo-fixture gate with a falsifiable synthetic battery (FIX-13)#32
ChelseaKR merged 2 commits into
mainfrom
roadmap/fix-13-falsifiable-recommender-eval-synt

Conversation

@ChelseaKR

Copy link
Copy Markdown
Owner

The merge-blocking eval gate ran on exactly one hand-built demo fixture
(ingest/demo.py) and scored content/hybrid at a perfect 1.0 on every
metric — trivially separable, so it could never catch a real regression
short of catastrophe.

recommender/synth.py adds a seeded, deterministic synthetic-library
generator (random.Random(seed) only, no numpy): a noisy canon/distractor
tag split, popularity anti-correlated with canon-fit, and a reader taste
profile split between theme-only discoveries and an author-loyalty
pathway. recommender/battery.py runs content/hybrid/popularity across 10
default seeds and gates on median MAP@5 uplift >= MARGIN (0.5, calibrated
with real headroom on both sides) plus a no-losing-seed guarantee, and
tracks two ablations per seed (drop curated lists; shuffle 20% of
candidate tags) that never improve content MAP.

ingest/cli.py's stacks eval now gates on the battery by default,
writing docs/audits/eval-battery.json alongside the existing (now
informational) demo-fixture report; --no-synthetic keeps the legacy path.
tests/test_synth_eval.py proves the gate is actually falsifiable: zeroing
recommender/model.py::AUTHOR_BONUS measurably narrows the median uplift
and flips passed to False. docs/audits/source-ethics.md explains the
distribution instead of citing the saturated 1.0, and
docs/ideation/02-large-scale-fixes.md marks FIX-13 done.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com


Backfill PR for a completed roadmap item (roadmap/fix-13-falsifiable-recommender-eval-synt, 1 commit(s) over main). Part of the portfolio roadmap batch.

ChelseaKR and others added 2 commits July 3, 2026 09:55
…c battery (FIX-13)

The merge-blocking eval gate ran on exactly one hand-built demo fixture
(ingest/demo.py) and scored content/hybrid at a perfect 1.0 on every
metric — trivially separable, so it could never catch a real regression
short of catastrophe.

recommender/synth.py adds a seeded, deterministic synthetic-library
generator (random.Random(seed) only, no numpy): a noisy canon/distractor
tag split, popularity anti-correlated with canon-fit, and a reader taste
profile split between theme-only discoveries and an author-loyalty
pathway. recommender/battery.py runs content/hybrid/popularity across 10
default seeds and gates on median MAP@5 uplift >= MARGIN (0.5, calibrated
with real headroom on both sides) plus a no-losing-seed guarantee, and
tracks two ablations per seed (drop curated lists; shuffle 20% of
candidate tags) that never improve content MAP.

ingest/cli.py's `stacks eval` now gates on the battery by default,
writing docs/audits/eval-battery.json alongside the existing (now
informational) demo-fixture report; --no-synthetic keeps the legacy path.
tests/test_synth_eval.py proves the gate is actually falsifiable: zeroing
recommender/model.py::AUTHOR_BONUS measurably narrows the median uplift
and flips `passed` to False. docs/audits/source-ethics.md explains the
distribution instead of citing the saturated 1.0, and
docs/ideation/02-large-scale-fixes.md marks FIX-13 done.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	docs/audits/coverage.xml
#	docs/ideation/02-large-scale-fixes.md
@ChelseaKR
ChelseaKR merged commit a823e93 into main Jul 12, 2026
5 checks passed
@ChelseaKR
ChelseaKR deleted the roadmap/fix-13-falsifiable-recommender-eval-synt branch July 12, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant