Ships the translation accept/reject gate to production.
Interpreter now returns a real per-detection confidence (source stays "auto"), so curator can reject the mis-detections it was previously storing blindly — e.g. a short English title mis-labelled as German and rewritten into the archive.
The gate consumes only Interpreter's own reported detection — curator does no language detection of its own (Scribe rule 133). A field is stored when the engine actually translated it and either the detected language is CJK (script-detected, trusted outright — ja/ko/zh incl. pure-kanji Japanese that lands as zh ~0.75) or the reported confidence clears the latin-script floor _MIN_LATIN_CONFIDENCE = 0.80. A latin detection below the floor keeps the original and marks the post handled; a missing confidence fails open.
Floor calibrated 2026-07-09 against fresh probes once Interpreter emitted real langdetect: genuine German at 1.0, a correctly-detected-but-ambiguous latin string at 0.86 → floor set to 0.80 (below that band). Real langdetect also fixed the original mis-flag at the source, so this floor is a safety net, not the primary fix.
Commits:
7ddf942 feat(translation): accept/reject gate on Interpreter's detection confidence
6ab7fd5 tune(translation): set latin acceptance floor to 0.80
Tests: pinned interpreter-client test asserts source stays "auto"; new pure-unit gate tests (CJK trusted / latin floor / case-insensitive / fail-open) in the fast lane; end-to-end reject-low-latin, accept-high-latin, accept-low-cjk sweeps. CI green on dev tip (run 2089).
Post-merge ops: curator :latest redeploy activates the gate; then press "Translate now" once to drain the untranslated backlog.
Ships the translation accept/reject gate to production.
Interpreter now returns a real per-detection confidence (source stays `"auto"`), so curator can reject the mis-detections it was previously storing blindly — e.g. a short English title mis-labelled as German and rewritten into the archive.
The gate consumes **only** Interpreter's own reported detection — curator does no language detection of its own (Scribe rule 133). A field is stored when the engine actually translated it **and** either the detected language is CJK (script-detected, trusted outright — ja/ko/zh incl. pure-kanji Japanese that lands as zh ~0.75) **or** the reported confidence clears the latin-script floor `_MIN_LATIN_CONFIDENCE = 0.80`. A latin detection below the floor keeps the original and marks the post handled; a missing confidence fails open.
Floor calibrated 2026-07-09 against fresh probes once Interpreter emitted real langdetect: genuine German at 1.0, a correctly-detected-but-ambiguous latin string at 0.86 → floor set to 0.80 (below that band). Real langdetect also fixed the original mis-flag at the source, so this floor is a safety net, not the primary fix.
Commits:
- `7ddf942` feat(translation): accept/reject gate on Interpreter's detection confidence
- `6ab7fd5` tune(translation): set latin acceptance floor to 0.80
Tests: pinned interpreter-client test asserts `source` stays `"auto"`; new pure-unit gate tests (CJK trusted / latin floor / case-insensitive / fail-open) in the fast lane; end-to-end reject-low-latin, accept-high-latin, accept-low-cjk sweeps. CI green on dev tip (run 2089).
**Post-merge ops:** curator `:latest` redeploy activates the gate; then press "Translate now" once to drain the untranslated backlog.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01CgZP9v2otxVJymiYsnVuMy
Interpreter now returns a real per-detection confidence (source stays "auto"),
so curator can reject the mis-detections it was blindly storing — e.g. a short
English title mis-labelled as German and rewritten into the archive.
The gate consumes ONLY Interpreter's own reported detection — curator does no
language detection of its own (Scribe rule 133): a field is stored when the
engine actually translated it AND either the detected language is CJK
(script-detected, reliably high — ja/ko/zh trusted outright, incl. pure-kanji
Japanese that lands as zh ~0.75) or the reported confidence clears a
latin-script floor (_MIN_LATIN_CONFIDENCE = 0.90). A latin detection below the
floor keeps the original and marks the post handled; a missing confidence fails
open. The client already sent source="auto" and parsed confidence, so this is
purely the gate + tests.
Tests: pinned interpreter-client test now asserts source stays "auto"; new
pure-unit gate tests (CJK trusted / latin floor / case-insensitive / fail-open)
in the fast lane; end-to-end reject-low-latin, accept-high-latin,
accept-low-cjk sweeps.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgZP9v2otxVJymiYsnVuMy
Calibrated against fresh probes once Interpreter returned real langdetect
confidence: genuine German detected at 1.0, a correctly-detected but ambiguous
latin string at 0.86. Set _MIN_LATIN_CONFIDENCE to 0.80 (below that band) so
legitimate ambiguous non-English still translates while genuinely-unsure guesses
are rejected. Real langdetect also fixed the original mis-flag at the source, so
this floor is a safety net, not the primary fix. Pin 0.86-accepted in the gate
test to guard against bumping the floor back up.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgZP9v2otxVJymiYsnVuMy
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ships the translation accept/reject gate to production.
Interpreter now returns a real per-detection confidence (source stays
"auto"), so curator can reject the mis-detections it was previously storing blindly — e.g. a short English title mis-labelled as German and rewritten into the archive.The gate consumes only Interpreter's own reported detection — curator does no language detection of its own (Scribe rule 133). A field is stored when the engine actually translated it and either the detected language is CJK (script-detected, trusted outright — ja/ko/zh incl. pure-kanji Japanese that lands as zh ~0.75) or the reported confidence clears the latin-script floor
_MIN_LATIN_CONFIDENCE = 0.80. A latin detection below the floor keeps the original and marks the post handled; a missing confidence fails open.Floor calibrated 2026-07-09 against fresh probes once Interpreter emitted real langdetect: genuine German at 1.0, a correctly-detected-but-ambiguous latin string at 0.86 → floor set to 0.80 (below that band). Real langdetect also fixed the original mis-flag at the source, so this floor is a safety net, not the primary fix.
Commits:
7ddf942feat(translation): accept/reject gate on Interpreter's detection confidence6ab7fd5tune(translation): set latin acceptance floor to 0.80Tests: pinned interpreter-client test asserts
sourcestays"auto"; new pure-unit gate tests (CJK trusted / latin floor / case-insensitive / fail-open) in the fast lane; end-to-end reject-low-latin, accept-high-latin, accept-low-cjk sweeps. CI green on dev tip (run 2089).Post-merge ops: curator
:latestredeploy activates the gate; then press "Translate now" once to drain the untranslated backlog.🤖 Generated with Claude Code
https://claude.ai/code/session_01CgZP9v2otxVJymiYsnVuMy