Skip to content

feat(fix-gaps): blind Jev ids + Noul scoring, v4 validation (gate fail, stays experimental) - #68

Merged
mverab merged 6 commits into
mainfrom
feat/jev-blind-validation
Oct 16, 2026
Merged

mverab merged 6 commits into
mainfrom
feat/jev-blind-validation

Conversation

@mverab

@mverab mverab commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

v4 result (§3–§4) — GATE FAIL

  • Dataset v3 collected once (2026-10-15, 30 queries, 0 empty answers); own_source from main @ ffd5b49.
  • Evaluated once: --ids blind --prereg-sha 56ef2db. Mean AUC 0.559 [0.489, 0.637] < 0.65. Own wins × cited: tp 1, fp 5, fn 2, tn 8. Cost $0.0083.
  • Per the pre-registered consequence: JEV_VALIDATION carries the v4 numbers, status: "experimental", labels stay. Note, CLI docs and CHANGELOG updated.
  • Owner decision (2026-10-16): keep section mode experimental. Demoting already_best from a verdict to a warning goes to a separate OpenSpec change.

Summary

Implements openspec update-jev-blind-validation waves 0–1 (owner decision D2 = Noul, 2026-10-07).

  • Blind ids: Jev sees c01, c02, … ordered by sha256(query + "\n" + text). Original ids, hosts and headings never reach it. Diagnosis and verification share one id map, computed once from the original texts.
  • Noul scoring: one request per decision, with an independent Noul question per candidate. already_best / won require the best own section to score strictly above every source.
  • Report (experimental JSON, breaking): diagnosis.scores + scorer: "noul" replace probabilities / confidence; verification.score_before/after replace p_before/after. JEV_VALIDATION describes v4 with no result; the 2.2.0 figures sit under previous. The experimental flags follow JEV_VALIDATION["status"].
  • Eval = product path: eval/jev_selection calls egeo.judge.score_candidates and reads sections from own_source. Adds --ids {blind,leaky}, --prereg-sha (required for live runs; a run without it never gates) and --repo-root. Own metrics (confusion table, Wilson CI) count sections items only and never gate.
  • Mock: Noul = share of query words in the candidate (was a constant 0.9).
  • Pre-registration draft: eval/jev_selection/PREREG-v4.md + queries-v3.json (same 30 queries as v2; 16 mapped to own_source). Not registered yet.

Deviations from the plan, for review

  • Spec scenario "no question text contains own or src" is reworded to "no original id, host or heading". NOUL_INSTRUCTIONS is kept verbatim per the plan, and it contains the generic phrase "own text".
  • gating = ids == "blind" and bool(prereg_sha) (the plan has ids == "blind"), so a mock or unregistered run can never pass.
  • Scored gains model, and each per-query result records jev_model, so the returned model string is logged per request (D4).

Not done (needs the owner)

  • Approve and register PREREG-v4.md (flip its Status line; that commit's SHA is --prereg-sha)
  • The collector (~/.hermes/scripts/egeo_jev_selection_collect.py) must copy own_source into dataset items
  • §3 live steps: leak diagnostic on v2, collect v3 once, evaluate once
  • §4 outcome: JEV_VALIDATION, site/…/docs/cli.md caution box, CHANGELOG. Do not merge before §4.

Test plan

  • python -m pytest tests/ -q: 176 passed
  • openspec validate update-jev-blind-validation --strict
  • Offline mock eval on dataset v2 + real site sections (unit_counts: sections 16, page_excerpt 2)

🤖 Generated with Claude Code

https://claude.ai/code/session_016oShpRQ2da2eSmYifKqk8H

mverab and others added 3 commits October 7, 2026 08:09
…anes J1, G4, F4)

Owner decision D2 = Noul (2026-10-07). Jev now sees neutral ids c01, c02, ...
ordered by sha256(query + text), and scores every candidate with an independent
Noul question; already_best / won require the best own section to score
strictly above every source. Diagnosis and verification share one id map.

- egeo/judge.py: blind_ids, score_candidates (blind|leaky), leader; select_best removed
- egeo/jev.py: mock Noul = share of query words in the candidate (was 0.9)
- egeo/gaps.py: diagnosis scores/scorer, verification score_before/after;
  JEV_VALIDATION describes v4 with no result (2.2.0 figures under "previous");
  experimental flags driven by JEV_VALIDATION["status"]
- eval/jev_selection: product scoring path, own_source sections, --ids,
  --prereg-sha (required live; no prereg -> never gates), --repo-root,
  Wilson CI and own_wins confusion (sections only, non-gating)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016oShpRQ2da2eSmYifKqk8H
Draft only: registered when the owner approves it (Status line flips in that
commit, whose SHA becomes --prereg-sha). No live run has happened.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016oShpRQ2da2eSmYifKqk8H
This commit's SHA is the --prereg-sha for every v4 run. No live v4 run
happened before it. queries-v3.json sha256 094e056c…1718 (unchanged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016oShpRQ2da2eSmYifKqk8H
@mverab

mverab commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Pre-registration REGISTERED (owner approval 2026-10-08). --prereg-sha 56ef2db55125c691bd72c7f350ce8dc3dae31d27. queries-v3.json sha256 094e056c7ee12b4f75af36b57a8cfb5a7639f303bf526d8d03c0e2f5d4fb1718. No live v4 run before this commit.

mverab and others added 3 commits October 8, 2026 06:30
…C 0.559)

Dataset v3 collected once on 2026-10-15 (30 queries, 0 empty answers) and
evaluated once with blind ids, sections, --prereg-sha 56ef2db. Mean AUC
0.559 [0.489, 0.637] < 0.65. Per PREREG-v4 the result is final; task 4.1
(JEV_VALIDATION update + owner decision) remains.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ys experimental

Per PREREG-v4 (design D5, FAIL): JEV_VALIDATION gets the v4 numbers
(mean AUC 0.559 [0.489, 0.637], 30 queries, 2026-10-15, prereg 56ef2db)
with status "experimental" and gate_passed false. The report note, CLI
docs and CHANGELOG cite the v4 result and flag already_best as a weak
signal. Owner decision 2026-10-16: keep section mode experimental.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mverab mverab changed the title feat(fix-gaps): blind Jev ids + Noul scoring, v4 validation harness (draft until §4) feat(fix-gaps): blind Jev ids + Noul scoring, v4 validation (gate fail, stays experimental) Oct 16, 2026
@mverab
mverab marked this pull request as ready for review October 16, 2026 00:35
@mverab
mverab merged commit 8f58dda into main Oct 16, 2026
2 checks passed
@mverab
mverab deleted the feat/jev-blind-validation branch October 16, 2026 00:43
@mverab mverab mentioned this pull request Oct 16, 2026
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