feat(translation): acceptance gate on Interpreter detection confidence (#1376) #208

Merged
bvandeusen merged 2 commits from dev into main 2026-07-09 17:58:22 -04:00
Owner

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.ai/code/session_01CgZP9v2otxVJymiYsnVuMy

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
bvandeusen added 2 commits 2026-07-09 17:58:16 -04:00
feat(translation): accept/reject gate on Interpreter's detection confidence (#1376)
CI / lint (push) Successful in 2s
CI / frontend-build (push) Successful in 18s
CI / backend-lint-and-test (push) Successful in 28s
CI / integration (push) Successful in 3m46s
7ddf94220d
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
tune(translation): set latin acceptance floor to 0.80 (#1376)
CI / lint (push) Successful in 3s
CI / frontend-build (push) Successful in 21s
CI / backend-lint-and-test (push) Successful in 31s
CI / integration (push) Successful in 3m42s
6ab7fd5c7f
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
bvandeusen merged commit ca6d26d236 into main 2026-07-09 17:58:22 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledCurator#208