Three issues: say the right thing, to the right reader, in their language - #95
Merged
Merged
Conversation
Closes #62. U+0131 sat in the lookalike table under "Latin letters that are not the ASCII one they look like", and flagged Fazil, Kibris, Riza and Komandolari -- with their real spelling -- in a Spanish article about a Turkish organisation. The one check this project presents as a fact rather than a judgement was stating a false one, and doing it to proper names from a third language, which is the exact harm the calibration page exists to measure. The table's own comment already had the right principle -- accented Latin letters are absent because "a" and "n" are ordinary Spanish -- but it had been applied only to the two languages we ship. So the line is not "Latin or not" but whether the character is a letter of some living alphabet. The three remaining entries survive it as IPA symbols, which no orthography writes prose with. Measured before changing anything: U+0131 occurs in 1 of the 371 texts we hold, and that one is Turkish names. The IPA three occur in none. With a base that thin, a multi-signal heuristic would be fitted to a single document, so this applies the stated principle instead. The cost, stated plainly: a substitution swapping i for dotless i is no longer caught. Never observed, and this check errs toward a missed artifact over a false accusation -- the direction IsEmojiLike already states. Verified by mutation: the new test fails with the entry restored. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
…e text Closes #88. Both state facts about the file rather than judgements of its prose, and everything they say is addressed to whoever is reading: U+00A0 is U+00A0 in every language, and "ask the writer how this document was produced" is an instruction, not commentary. They took the analysed text's rule pack, so an English teacher opening a Spanish essay got the panel's chrome in English and its body in Spanish. #36 settled this for the evidence report in August. These two kept the older behaviour, in the web app, the desktop, the Word pane and the CLI alike. Analyze() gains an optional readerLanguage. Null follows the text, so every caller that never heard of this keeps the behaviour it had; the surfaces with an interface of their own now pass it. Findings are deliberately untouched: a finding quotes the text and argues about it, and a Spanish tell explained in Spanish is the useful form. Batch and the live rewriter read only numbers off the result, so they are left alone rather than changed for symmetry. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
…Spanish Closes #77. Two defects, and only the first was in the issue. The CLI built its ReportOptions without ever setting InterfaceLanguage, so report.es.json was unreachable from a command line whatever you passed. It now follows --reader-lang, defaulting to the analysed language. That one option also carries the reader's language into the analysis, which is #88's CLI surface: two flags that must always agree would be a trap, so there is one. Then the report came out half English. report.es.json carried 39 of the 76 blocks: the mandatory core was current -- and tested -- but completeness was never checked, so a Spanish report opened in Spanish and said "Este bloque aun no esta traducido" six times. The other 37 are translated here, matching the register the file already uses (usted, and the project's established terms: oraciones, variabilidad, punto de codigo, senales). Worth recording: the existing test asserted the markers were *present*. It had pinned the symptom as the specification, and it is the reason nothing failed while half the report was English. It now asserts the opposite, keeps the announcement invariant for whenever a block does fall back, and a new guard requires every block the report can print to exist in Spanish. Verified: the report the issue's own command produces carries zero fallback markers. 441 tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
Today's other lesson was that an option nobody wrote down is an option the next reader does not have. The README's CLI block and SKILL.md both list the flags; this adds the new one and the distinction it turns on -- --lang is the text, --reader-lang is the person reading. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three issues from the open list, all of the same family: what the product says to the person reading it. None moves the published number, none needs the committee.
#62 — Turkish is not a disguise
U+0131 DOTLESS Isat in the lookalike table and flagged Fazıl, Kıbrıs, Rıza, Komandoları — spelled correctly — in a Spanish article about a Turkish organisation. The one check this project presents as a fact rather than a judgement was stating a false one, about proper names from a third language.Measured before changing anything, as the rule pack policy requires: U+0131 occurs in 1 of the 371 texts we hold, and that one is Turkish names. The three IPA entries occur in none. With a base that thin, the issue's proposed three-signal heuristic would have been fitted to a single document.
So instead this applies the principle the table's own comment already stated — accented Latin letters are absent because á and ñ are ordinary Spanish — which had only ever been applied to the two languages we ship. The line is not "Latin or not" but is this a letter of some living alphabet. The remaining three survive it as IPA symbols, which no orthography writes prose with.
The cost, stated plainly: a substitution swapping
iforıis no longer caught. Never observed, and this check errs toward a missed artifact over a false accusation — the directionIsEmojiLikealready states.#88 — the scan speaks to the reader
U+00A0isU+00A0in every language, and "ask the writer how this document was produced" is an instruction, not commentary. Both the character scan and the citation cross-check took the analysed text's pack, so an English teacher opening a Spanish essay got the chrome in English and the body in Spanish. #36 settled this for the evidence report in August; these two kept the older behaviour everywhere — web, desktop, Word pane, CLI.Analyze()gains an optionalreaderLanguage. Null follows the text, so every existing caller is unchanged. Findings are deliberately untouched: a finding quotes the text and argues about it.#77 — a Spanish report, and one that is actually Spanish
Two defects, and only the first was in the issue.
InterfaceLanguage, soreport.es.jsonwas unreachable from a command line. It now follows--reader-lang.report.es.jsoncarried 39 of 76 blocks — the mandatory core was current and tested, but completeness never was. The other 37 are translated here, in the register the file already uses.Worth flagging: the existing test asserted the fallback markers were present. It had pinned the symptom as the specification, which is why nothing failed while half the report was English. It now asserts the opposite, keeps the announcement invariant for whenever a block does fall back, and a new guard requires every printable block to exist in Spanish.
Verification
--reader-lang en→ English summary, default → Spanish. Unchanged by default.One deliberate deviation: #77 proposed
--report-lang. Since #88 gave the CLI a second thing that needs the reader's language, two flags that must always agree would be a trap — there is one, named for what it means.🤖 Generated with Claude Code
https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF