Skip to content

i18n: Opus round 26 (134 files) + 88 fixes + fix unreproducible Tier-4 rubric - #398

Merged
JanLahmann merged 2 commits into
mainfrom
i18n/opus-round26-review
Jul 17, 2026
Merged

i18n: Opus round 26 (134 files) + 88 fixes + fix unreproducible Tier-4 rubric#398
JanLahmann merged 2 commits into
mainfrom
i18n/opus-round26-review

Conversation

@JanLahmann

Copy link
Copy Markdown
Owner

Round 26

Tier-4 Opus deep-review, seed 20260711 (--max-leaks 2 --drift-focus --per-locale 8 --exclude-reviewed), 1237-file unreviewed pool. 134/134 reviewed, 0 errors. Coverage 3155 → 3289 / 7276 (45.2%).

Verdicts: PASS 46 / MINOR 63 / FAIL 25 — far off rounds 23–25 (~105/27/2). That anomaly is what this PR ultimately explains.

88 fixes (17 locales)

All non-PASS findings remediated by Sonnet: 88/88 FIXED, 0 could_not_fix. A 5-way adversarial gauge (each skeptic told to refute, defaulting to refuted) returned 5/5 real, 0 refuted, so the findings were trustworthy even though their severity labels were not.

Representative:

  • tl sinasakal (strangling the next generation) → sinasanay (training) — fluent, grammatical, and a total inversion
  • ar الرمز الغليظ ("thick code") → transliterated رمز الغروس, restoring the gross = 144 wordplay that motivates [[144,12,12]]
  • ar hedging restored on "should explain"; duplicate untranslated EN bullet removed

Gates: lint 0/88 fail · 0 source-hash edits · 17/17 locales 0-stale/0-critical · known-mistranslations 0 · wrong-language 0 · smart-quotes-in-JSX 0 · docusaurus build PASS on all 17 locales.

The rubric fix (the important part)

The Tier-4 verdict was not reproducible, because the prompt contradicted itself. Under --drift-focus:

  • preamble: an isolated awkward phrase in a meaning-faithful file "is a PASS"; "do NOT spend your read hunting leaks/polish/consistency"
  • DEEP CHECKS: "flag translationese, calqued English syntax, stiff/robotic phrasing — even when grammatically correct"
  • rubric: MINOR_ISSUES = exactly those non-misleading slips; FAIL = "any ... wrong domain terminology"

Both were live at once, so the verdict depended on which half the agent followed.

Measured on 20 byte-identical files (0 changed since round 25, 0 overlap with the fixes above):

Instruction set Result
preamble live (round 25, Jul 5) 20/20 PASS
preamble absent (same files, today) 1 PASS / 12 MINOR / 7 FAIL

~95 points of swing on identical bytes.

Fix: one discriminator — would this MISLEAD a learner?

  • FAIL = yes: drift/inversion/hallucination, a term that teaches a false concept, raw MT throughout
  • MINOR = no, but a native editor would still change it: calque, imperfect-but-recognizable term, within-file split, dropped qualifier, register slip
  • PASS = no, and nothing an editor would change

Plus binding calibration rules that stop silent re-scaling (a single imperfect term is MINOR never FAIL; within-file inconsistency is MINOR however often it recurs unless the concept becomes unidentifiable; stiffness never FAILs alone; defensible word-choice is not a defect). The focus note now defers to the rubric instead of overriding it.

Validation: two identical replicas under the fixed rubric

Metric Result
A vs B agreement 12/14 (86%)
FAIL reproduced in both 1/1 (100%)
Disagreements 2, both at the PASS↔MINOR boundary

The signal we act on (FAIL) is now stable; residual noise is confined to the marginal PASS/MINOR call.

Consequence for the metric

PASS now means "screened, no misleading defect found" — not "certified clean." The 3,201 historical PASS verdicts were graded under the ambiguous rubric and are not comparable to post-merge verdicts. Per maintainer decision we are not re-reviewing them; fresh rounds target the ~4,000 unreviewed files instead.

⚠️ One open flag: under the fixed rubric, 1/14 previously-PASS files (ja/measuring-computational-cost.mdx) is FAIL-grade. Small sample, but if it generalizes it implies ~200 misleading defects sitting in the PASS set. Noted for a future decision, not actioned here.

🤖 Generated with Claude Code

JanLahmann and others added 2 commits July 17, 2026 12:58
…0711)

Tier-4 Opus deep-review round 26: 134 files, seed 20260711
(--max-leaks 2 --drift-focus --per-locale 8 --exclude-reviewed) over a
1237-file unreviewed pool. 134/134 reviewed, 0 agent errors.

Verdicts: PASS 46 / MINOR_ISSUES 63 / FAIL 25.
Opus coverage 3155 -> 3289 of 7276 (45.2%).

NOTE: this round's issue rate (88/134 = 66%, FAIL 19%) is far above
rounds 23-25 (~24%, FAIL ~2%) under identical tooling. Ruled out:
prompt/sampler drift (unchanged since #370), section composition (r25
had 51/136 course files vs r26 52/134), and model change (r25 review
runs wf_da53329c-274 / wf_6585cd4e-1a4 both ran claude-opus-4-8, same
as r26). Cause still unexplained -- findings are being gauged before
any remediation is scaled.

Also commits the round 22-25 review JSONs (opus-20260703..20260710),
which were never committed even though their verdicts were recorded
into status.json. The June review JSONs are tracked; this restores the
audit trail to that convention.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… rubric

FIXES (88 files, 17 locales, Sonnet, 88/88 FIXED, 0 could_not_fix):
Every non-PASS finding from round 26 (seed 20260711). A 5-way adversarial
gauge gave 5/5 findings real (0 refuted), so all 88 were remediated.
Representative: tl "sinasakal" (strangling) -> "sinasanay" (training);
ar "الرمز الغليظ" (thick code) -> transliterated "رمز الغروس", restoring the
gross=144 wordplay behind [[144,12,12]]; ar hedging restored on "should
explain"; a duplicate untranslated EN bullet removed.

Gates: lint 0/88 fail; 0 source-hash edits; 17/17 locales 0-stale/0-critical;
known-mistranslations 0; wrong-language 0; smart-quotes-in-JSX 0; docusaurus
build PASS on all 17 locales.

RUBRIC FIX (.claude/workflows/opus-deep-review.js):
The Tier-4 verdict was not reproducible because the prompt contradicted
itself. Under --drift-focus the preamble said an isolated awkward phrase in
a meaning-faithful file "is a PASS" and told the agent not to hunt
polish/consistency, while the DEEP CHECKS ordered it to flag translationese
and the rubric defined MINOR_ISSUES as exactly those non-misleading slips and
FAIL as "any ... wrong domain terminology". Both instructions were live at
once, so the verdict depended on which half the agent followed.

Measured on 20 byte-identical files (0 changed since round 25):
  preamble live  -> 20/20 PASS   (round 25, 2026-07-05)
  preamble absent -> 1 PASS / 12 MINOR / 7 FAIL
i.e. the two halves disagree by ~95 points on the same bytes.

Fix: one discriminator -- "would this MISLEAD a learner?". FAIL = yes
(drift/inversion/hallucination, a term that teaches a false concept, raw MT
throughout); MINOR = no, but a native editor would still change it (calque,
imperfect-but-recognizable term, within-file split, dropped qualifier,
register slip); PASS = no, and nothing an editor would change. Binding
calibration rules stop silent re-scaling: a single imperfect term is MINOR
never FAIL; within-file inconsistency is MINOR however often it recurs unless
the concept becomes unidentifiable; stiffness/calques never FAIL alone;
defensible word-choice is not a defect. The focus note now explicitly defers
to the rubric instead of overriding it.

Consequence: PASS means "screened, no misleading defect found", NOT
"certified clean" -- the 3,201 historical PASS verdicts were graded under the
ambiguous rubric and are not comparable to verdicts made after this commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@JanLahmann

Copy link
Copy Markdown
Owner Author

Reproducibility test completed (was 14/20, now 20/20)

The 6 files lost to a session limit have been re-run in both replicas. Final numbers, two independent replicas over the same 20 byte-identical files under the fixed rubric:

Metric Result
Verdict agreement 18/20 = 90%
FAIL sets identical (1/1 — ja/measuring-computational-cost.mdx)
Tally, replica A 2 PASS / 17 MINOR / 1 FAIL
Tally, replica B 2 PASS / 17 MINOR / 1 FAIL
Disagreements 2, both PASS↔MINOR (cs/serverless-run-first-workload, es/noise-learning)

The signal we act on is now 100% stable. Residual noise (~10%) is confined to the marginal "would an editor bother changing this?" call, which is an inherent judgement boundary rather than a prompt defect. So a single PASS/MINOR label still shouldn't be treated as authoritative — but FAIL is trustworthy, and that's what drives remediation.

Sharpens the open flag

Same 20 files, three graders:

Grader Result
Round 25 (preamble-dominant) 20 PASS / 0 / 0
Round 26-era rubric (preamble absent) 1 PASS / 12 MINOR / 7 FAIL
Fixed rubric (both replicas) 2 PASS / 17 MINOR / 1 FAIL

The fixed rubric lands exactly where it should — between two artifacts. Real issues surface as MINOR; FAIL is reserved for genuinely misleading defects.

But note what it says about the PASS label: of 20 files round 25 certified PASS, only 2 are genuinely clean. Extrapolated over ~3,201 PASS verdicts that implies roughly 160 FAIL-grade (misleading) defects and ~2,700 MINOR-grade sitting behind the label. n=20, so the FAIL rate is 5% ±5.

This is the strongest evidence yet that PASS never meant "clean" — consistent with the "screened, not certified" decision, and it makes a future ~100-file audit of the PASS set worth considering if the label ever needs to carry weight.

@JanLahmann
JanLahmann merged commit bfb4b74 into main Jul 17, 2026
2 checks passed
@JanLahmann
JanLahmann deleted the i18n/opus-round26-review branch July 17, 2026 14:36
JanLahmann added a commit that referenced this pull request Jul 18, 2026
First full deep-review round on the reproducible post-#398 rubric.
Seed 20260712, --max-leaks 2 --drift-focus --per-locale 8 --exclude-reviewed,
1103-file pool, 16 locales (de exhausted its --max-leaks 2 pool).

Verdicts: PASS 45 / MINOR 80 / FAIL 3. The 2.3% FAIL rate confirms the
rubric fix on a fresh sample — vs round 26's 19% under the ambiguous rubric,
same corpus. Coverage 3289 -> 3417 of 7276 (47%).

Gauge: 3/3 FAILs adversarially confirmed real AND FAIL-grade (no downgrades,
unlike round 26's 4/5) — the calibrated rubric's FAILs match an independent
skeptic's "does it mislead?" bar. The three: es/visualize-circuit-timing
(fabricated recommendation + wrong link), ko/quantum-technology (gates->
circuits unit swap), pl/sqd-overview (non-negligible->negligible inversion).

Fixes: all 83 non-PASS remediated by Sonnet (83/83 FIXED, 0 could_not_fix),
16 locales. Resumed once through a session limit (batch preserved 60, the 23
re-ran cleanly after reset).

Gates: 83 files, +408/-407, 0 source-hash edits; lint clean (cs/classical-
optimizers inline-fence is the documented EN-identical false-positive, builds
fine); 16/16 locales 0-stale; known-mistranslations 0; wrong-language 0;
docusaurus build PASS on all 16 locales.

Also: workflow BATCH tuned 7->10->5->7 per user during the run (both
templates); opus-20260712-partial.json (the paused-run cache) superseded by
the full opus-20260712.json.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
JanLahmann added a commit that referenced this pull request Jul 18, 2026
* chore(translation): preserve round-27 partial cache (75/128, seed 20260712)

Round 27 was paused mid-run at 75/128 agents. The Workflow resume cache is
same-session-only, so these verdicts are extracted from the run journal
(last-wins by locale+file) into a durable, tracked JSON before the session
can end.

NOT recorded to status.json — this is a partial round, review_opus stays
untouched until the round completes. First round graded on the reproducible
post-#398 rubric.

Partial tally (75 files, 10 locales): PASS 26 / MINOR 47 / FAIL 2.

Resume options:
- same session: Workflow({scriptPath: round27-opus-wf.js,
  resumeFromRunId: wf_22840af4-9e6}) — 75 replay from cache, ~53 run live.
- new session (cache gone): re-run round27-opus-wf.js fresh (seed 20260712
  is deterministic = identical sample), OR build a tail = full sample minus
  this file's (locale,file) keys, opus-run over just the tail, merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* i18n: Opus round 27 (128 files, fixed rubric) + 83 fixes

First full deep-review round on the reproducible post-#398 rubric.
Seed 20260712, --max-leaks 2 --drift-focus --per-locale 8 --exclude-reviewed,
1103-file pool, 16 locales (de exhausted its --max-leaks 2 pool).

Verdicts: PASS 45 / MINOR 80 / FAIL 3. The 2.3% FAIL rate confirms the
rubric fix on a fresh sample — vs round 26's 19% under the ambiguous rubric,
same corpus. Coverage 3289 -> 3417 of 7276 (47%).

Gauge: 3/3 FAILs adversarially confirmed real AND FAIL-grade (no downgrades,
unlike round 26's 4/5) — the calibrated rubric's FAILs match an independent
skeptic's "does it mislead?" bar. The three: es/visualize-circuit-timing
(fabricated recommendation + wrong link), ko/quantum-technology (gates->
circuits unit swap), pl/sqd-overview (non-negligible->negligible inversion).

Fixes: all 83 non-PASS remediated by Sonnet (83/83 FIXED, 0 could_not_fix),
16 locales. Resumed once through a session limit (batch preserved 60, the 23
re-ran cleanly after reset).

Gates: 83 files, +408/-407, 0 source-hash edits; lint clean (cs/classical-
optimizers inline-fence is the documented EN-identical false-positive, builds
fine); 16/16 locales 0-stale; known-mistranslations 0; wrong-language 0;
docusaurus build PASS on all 16 locales.

Also: workflow BATCH tuned 7->10->5->7 per user during the run (both
templates); opus-20260712-partial.json (the paused-run cache) superseded by
the full opus-20260712.json.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
JanLahmann added a commit that referenced this pull request Jul 20, 2026
)

Adds CONTRIBUTING-REVIEWS.md — a self-contained recipe an external
contributor can point their own Claude Code instance at to run one
Tier-4 deep-review round of a single locale: sample, review, gauge,
fix, gate, PR. Budget-shaped (~40k tokens/file) so it soaks up spare
weekly-budget tokens and stops cleanly.

Also adds --locale to sample-deep-review.py. Without it every sample
was drawn across all 17 locales, so two contributors running rounds
concurrently would edit overlapping i18n/ subtrees. With it, a round
touches one disjoint subtree.

Contributor PRs are now structurally conflict-free: verdicts go to a
new handle-namespaced translation/reviews/opus-<seed>-<handle>.json,
fixes touch only i18n/<their-locale>/, and status.json stays a
maintainer-only merge step (--record-opus after merge).

The guide states the post-#398 single-discriminator rubric, tells the
agent to stop and report rather than launch a fix wave if FAIL rate
exceeds ~15% (the round-26 failure mode), and documents the known
lint-translation.py code-fence false positive with the
check-whether-EN-fails-identically test.


Claude-Session: https://claude.ai/code/session_019WoWgAgEkQ69MLxPSgLGaA

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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