Skip to content

fix(extraction): relax records-sentinel gate to a +30 score bonus#88

Merged
dongwhee merged 1 commit into
developfrom
fix/sentinel-gate-bonus
Jul 6, 2026
Merged

fix(extraction): relax records-sentinel gate to a +30 score bonus#88
dongwhee merged 1 commit into
developfrom
fix/sentinel-gate-bonus

Conversation

@dongwhee

@dongwhee dongwhee commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fix A of the selector oracle-gap diagnostic: the hard records-sentinel filter (any repeating-sibling group → only sentinel-bearing candidates selectable) made beautifulsoup win by forfeit on 231/1,497 WCXB pages — 52.8% of the measured 0.068 oracle gap. Replaced with a single max() over all candidates where sentinel-bearing candidates receive SENTINEL_BONUS = 30.0 when records are present (stored score stays raw; sentinel-driven record-atomic chunking still wins all realistic ties).

Bonus calibration — measured, not guessed

  • Offline sweep (B ∈ {0,5,10,15,20,30,50,∞} over 1,497 pages): B=10 was the offline winner (+0.0146) but failed the aladin_bestsellers parity hard gate end-to-end, as did B=15 — the measured non-sentinel-vs-sentinel score gap on that live record page is 15.84 (rs-trafilatura 145.78 vs beautifulsoup 129.95, query-dependent).
  • B=30 keeps a 14-point margin against live content drift at nearly the same sweep gain as B=20 (+0.0037 vs +0.0046) with zero page-type regressions.

Gates (B=30)

Gate Result
Parity (record cases aladin_bestsellers / wanted_jobs / hada_news = hard gate) 15/15
agent_patterns coding shard 24/24
WCXB combined F1 0.814 → 0.818 (+0.004, matches offline prediction)
Unit tests (extraction/records/chunking) 98 pass

Diagnostic + sweep: notes/selector-oracle-gap-diagnostic.md (local). Together with #86, the selector oracle gap is now 0.809 → 0.818 of a 0.877 ceiling.

🤖 Generated with Claude Code

The hard filter (any records → only sentinel-bearing candidates
selectable) caused beautifulsoup to win by forfeit on 231/1497 WCXB
pages — 52.8% of the measured selector oracle gap (notes/
selector-oracle-gap-diagnostic.md). Replaced with a single max() over
all candidates where sentinel-bearing candidates get SENTINEL_BONUS
when records are present; stored score stays raw.

Bonus calibration was measured, not guessed:
- Offline sweep over 1,497 pages: B=10 (+0.0146) and B=15 (+0.0056)
  pass per-type gates offline, but BOTH fail the aladin_bestsellers
  parity hard gate end-to-end — the measured non-sentinel-vs-sentinel
  gap on that page is 15.84 (rs-trafilatura 145.78 vs beautifulsoup
  129.95, query-dependent).
- B=30 keeps a 14-point margin against live drift at nearly the same
  gain as B=20 (+0.0037 vs +0.0046) and zero page-type regressions.

Gates at B=30: parity 15/15 (aladin/wanted/hada record cases intact),
coding shard 24/24, WCXB 0.814 -> 0.818 (+0.004, matches offline
prediction). 98 unit tests (extraction/records/chunking) pass.
@dongwhee dongwhee merged commit 035c914 into develop Jul 6, 2026
3 of 4 checks passed
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