Skip to content

Part 4 (LANDS): artist-decomposed identification module + HOLD #B prep - #83

Merged
WilfordGrimley merged 1 commit into
masterfrom
claude/part4-lands-module-hold-b
Jul 18, 2026
Merged

Part 4 (LANDS): artist-decomposed identification module + HOLD #B prep#83
WilfordGrimley merged 1 commit into
masterfrom
claude/part4-lands-module-hold-b

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Summary

  • Builds Part 4 (LANDS) per docs/features/catalog-completion-plan.md's spec: artist-decomposed identification for names whose candidate count blocks the normal phash engine (basic lands + any over-cap name).
  • Mirrors Part 3's exact shape: dry_run=True default, run_id, PilotRunLedger lifecycle, verify_zero_resolutions gate after any real write, --write gate on the management command.
  • Confidence-tier split (0.85 singleton / 0.8 tiebreak) owner-clarified since the plan doc's "artist+art agree" vs "art-within-artist" phrasing was genuinely ambiguous - full reasoning in the module docstring.
  • Caught and fixed two real bugs during review: an artist-extraction-rate denominator bug (was dividing by sampled instead of fetch_attempted, which would have diluted the rate with budget-exhausted skips) and an OCR-confidence recomputation bug (was deriving confidence from .detail truthiness instead of using EngineVote.confidence directly).
  • 16 new tests (synthetic fixtures, no network), all passing. Full suite: 862 passed, 130/130 snapshots, only pre-existing known-bucket failures (moxfield x2, test_sources.py fixture-path x2), unrelated to this change.
  • ruff/isort/black/mypy/prettier all clean via the real pre-commit hook set.

HOLD #B - still open

The real volume-check numbers (land-pool size, artist-extraction rate on a 300-card sample, per-name candidate counts pre/post artist filter) require running manage.py local_lands_identify (dry-run, the default) against the real production database. This session doesn't have that access (same denial class as earlier Docker/DB access attempts this session) - not re-attempted a fourth way. The command is built, tested, and ready for whoever has that access to run.

Test plan

  • pytest cardpicker/tests/test_local_lands_identify.py - 16/16 pass
  • pytest cardpicker/tests/ (full suite) - 862 passed, only known-bucket failures
  • pre-commit run --files <changed> - ruff/isort/black/mypy/prettier all clean
  • HOLD #B's real dry-run against production data - needs DB access this session doesn't have

Generated with Claude Code

…command + tests

Builds the module per docs/features/catalog-completion-plan.md's Part 4
spec, mirroring Part 3's exact shape (dry_run default, run_id, ledger,
verify_zero_resolutions gate). Confidence-tier split owner-clarified.
16 new tests pass; full suite otherwise unchanged (862 passed, known
buckets only). HOLD #B's real volume-check numbers still need someone
with production DB access to run - this session doesn't have it (same
denial class as earlier Docker/DB attempts this session).
@WilfordGrimley
WilfordGrimley merged commit 1d28b60 into master Jul 18, 2026
3 of 4 checks passed
@WilfordGrimley
WilfordGrimley deleted the claude/part4-lands-module-hold-b branch July 18, 2026 19:32
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