Skip to content

Festival person-link reimport rollout (waves) — execute the #873 repair #1104

Description

@holden

Executes the reimport repair from #873 (the empty-payload festival person-links). Tracked separately so we can run it in monitored waves and log progress. Parent context: #873 (root cause + diagnosis), #1101 §3 (the code fix), #1090 Phase 3a (surface-area).

Why this exists

#873's gap is ~100% empty-payload nominations (details: {nominee_names: nil, person_imdb_ids: []}) written before the scraper↔worker shape fix. The resolver recovers 0 from them — they need re-import (re-scrape → repopulate details → resolve). The code fix (#1101 WS3: create_nomination now always patches empty details even when person resolution misses) is deployed and validated. This issue drives the re-imports.

✅ Validated — Wave 0 (2026-06-09)

Golden Globes 2016 / 2017 / 2018 re-imported → HFPA resolved 179 → 277 (+98), empty-payload 2,785 → 2,682. (2018 hit a transient Crawlbase HTTP 520, recovered on retry.) Confirms the path: re-scrape repopulates details + resolves person_ids (incl. the Christian Slater Golden Globe links that spawned #873).

Full scope — empty-payload person-tracked nominations by org

Org source_key empty noms years
Golden Globes (HFPA) golden_globes 2,682 80
BAFTA tbd 1,786 74
Critics Choice (CCA) tbd 1,165 30
SAG tbd 689 28
NYFF tbd 603 52
Cannes (CFF) tbd 385 73
Venice (VIFF) tbd 259 79
Berlin (BIFF) tbd 94 53
Locarno (LFF) tbd 69 31
Sundance (SFF) tbd 35

(~7.7k+ total — the remainder of the #873 ~10k after Wave 0.)

Mechanism

  • Enqueue Cinegraph.Workers.UnifiedFestivalWorker per (festival_key, year) (scraping queue, max_attempts: 3 → transient Crawlbase 520s retry; 404/403 cancel cleanly). On the eval node, insert oban_jobs rows directly (Oban is stripped there); the web node runs them.
  • Each year re-scrapes IMDb via Crawlbase (JS mode — 403/520-prone), upserts ceremony.data, repopulates empty details, and resolves person_ids.
  • After each wave: re-run Cinegraph.Maintenance.ResolvePersons.run if needed, then Cinegraph.Health.AwardPersonLinkage.audit(org:) to measure the delta.

Wave plan

  1. Golden Globes (validated org) by year-batches: Wave 0 ✅ (2016–18) · Wave 1 (2001–2015) · then 1944–2000.
  2. BAFTA → CCA → SAG → NYFF → Cannes → Venice → Berlin → Locarno → Sundance → … (resolve each org's source_key at wave time).
  • Batch size ~15 years/wave to monitor Crawlbase success rate + cost before committing the next.

Closure

Closes the reimport portion of #873 when: every org's empty-payload nominations are repopulated, the resolver has run, and person_required_nomination_missing_person drift → green. #873 stays open until then.

Progress log

  • Wave 0 ✅ 2026-06-09 — GG 2016/2017/2018 → +98 resolved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions