judge-validity: validate the judge in the setting arms are scored — persist judge material by digest
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 22/100
Línea de trabajo
Start with ArmRunner.judge and the eval judge-validity command, then the arms.v1 artifact writer and its evaluation records, which currently keep only 200-character snippets. The change adds a digest-keyed judge_materials store and a --context stored option, so a first step is to read how the in-memory material store is populated during an answering run. Done means both settings appear per variant in the report, and re-judging a stored artifact resolves material from the store rather than from snippets.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
eval judge-validity checks the judge with no context. The arms run judges skill and docs arms with the arm's full treatment material in the judge's context. So the setting the skill-arm deltas come from is never validated.
That gap matters here. On 81 skill-arm answers from the perf golden set (Haiku 4.5 judge, 24 bases, deterministic degradations, one run), the same pairs were judged twice: once with the 200-character report snippet, once with the full material.
| snippet | full material | |
|---|---|---|
| mean intact score | 85.9 | 89.9 |
| pairwise accuracy, overall | 0.869 | 0.808 |
contradiction |
0.938 | 1.000 (drop +11.5, 20/24 pairs, sign p = 0.002) |
wrong_tools |
0.891 | 0.674 (+1/−6, p = 0.125) |
wrong_numbers |
0.750 | 0.722 |
Scores go up and discrimination doesn't, and it moves differently per defect. A gate that passes no context cannot see any of it.
Why the gate can't just pass the context today
The material reaches the judge from an in-memory store that lives only for the answering run. arms.v1 keeps 200-char snippets, and skill arms record no content digest. So nothing reading an artifact can rebuild what the judge saw, or prove that a rebuild matches it. That is the same limitation that makes re-judging an answers file fall back to snippets (#13 now labels such runs instead of hiding it).
Proposal
Persist the material once, by digest, and let every consumer use it.
arms.v1
+ judge_materials: {<sha256>: <text>} # one copy per distinct material
evaluations[].scores.<arm>
judge_context_source: stored | snippet_fallback
+ judge_context_sha256: <sha256> # which material this score saw
- Size. A skill arm's material is identical for every question, so it is stored once (~15k chars). Docs arms differ per question, about 15k × questions. That's about 1.2 MB for an 81-question docs arm. Acceptable, and it could be gzip-optional.
eval judge-validity --context storedreads the material for each base's arm and passes it to the scorer alongside the degraded answer. The report gets one column set per setting (no context/stored), so the two can be compared.- Re-judging becomes faithful.
ArmRunner.judgeon a loaded artifact resolves fromjudge_materials, not from snippets.snippet_fallbackremains only for pre-digest artifacts, andcross_judge/eval pairwisecan score stored arms on the same evidence. - Schema: additive. Old artifacts validate, and consumers treat a missing digest as "unknown material".
Alternatives considered
- Rebuild from the arm spec (
skill:<path>→as_context+ manifest). Works only for skill arms, can't verify the version (no digest), and does nothing for docs arms. - Run the gate inside
arms(arms --validity). Uses the exact material, but every check costs a full answering run, and it can't be re-run against a stored artifact.
Acceptance
- Gate on the perf golden set reports both settings per variant, with the length-only baseline. Expect the table above to reproduce within run-to-run spread.
- Re-judging a stored artifact with the same judge gives
judge_context_source: storedfor every non-baseline score, and its aggregates sit within run-to-run spread of the original. - Artifact size increase is reported in the PR.
🤖 Generated with Claude Code
- Lenguaje dominante
- Python
- Estrellas
- 8
- Forks
- 7
- Merge medio
- 1 d 55 min
- PR fusionados (30 d)
- 126
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de intel/dokimi
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
dependencies
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
intel/dokimi#160 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
Los mantenedores suelen responder en 1 día
-
User loop: eval engine contracts (plan/validate/compare/gate/record), 3 skills, GitHub ActionPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 18/100
intel/dokimi#121 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de intel/dokimi
Issues similares
-
Project submission:Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
slavakurilyak/awesome-ai-agents#845 ·
Los mantenedores suelen responder en 1 día
-
tests: pin that the atomic writers in utils/paths.py stage the temporary file in the target's directoryPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertodifficulty:2 enhancement good first issue
Dificultad 1/5 1-3 horas Aptitud para principiantes 92/100
MakazhanAlpamys/Soup#2178 ·
Los mantenedores suelen responder en 1 día
-
[BUG] dcg.waggr permutation p-values are folded twice, so near-zero scores get the smallest p-valuesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
scverse/rapids-singlecell#854 ·
Los mantenedores suelen responder en 1 día
-
Slang input: int8_t4_packed and uint8_t4_packed are copied into CrossGLPosiblemente ocupada @ninglinLiu la tomó hoy. Abiertoarea:frontend backend:slang bug direction:input
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
random_elements(unique=True) on an OrderedDict: ZeroDivisionError once only zero weights remain, AssertionError with use_weighting=FalsePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 13 días