Repository navigation
Read Wing as a given name outside a title phrase, after a comma too (#752, phase 2j) - #896
Merged
Merged
Conversation
…752, phase 2j) The first title batch of phase 2j. `wing` gains a dated given reading, which puts it in TITLES_AMBIGUOUS beside TITLE_MODIFIERS. Phase 2i's decision 10 already read a lone `Wing` at the head of the name as the given name; a word in both sets is read by the head's modifier test in every part, so the reading reaches the two sites decision 10 left as listed. After a comma `Lau, Wing Kai` reads given 'Wing', middle 'Kai', where 1.4.0 through 2.6.0 read title 'Wing'; ending the name `John Smith Wing.` reads family 'Wing.', as 1.4.0 through 2.2.0 did, where 2.3.0 through 2.6.0 read a title. `Lau, Wing Commander` and `Wing Commander Lau` keep the title; `John Smith, Wing` reverses as `John Smith, Dean` does. rules/H9 amended (a Precedence bullet for a word in both sets, Accepted costs `The Hon. Wing Lau` and `John Smith Wing. Jr.`, its former example moved to `Hudson, Rock`, its Signal line widened to the run); decisions/H9 and decisions/vocabulary-model carry the dated entry and the measurement (FEC 14 fixed, committed 1, PSC/ctgov/tse/pairs 0). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
Merged
Merged
derek73
added a commit
that referenced
this pull request
Oct 27, 2026
…nce and usage in one run Phase 2j (#896 through #912) rewrote about ten probe scripts each batch: a shape grid, corpus incidence counts, a usage lookup. #913 lists about 22 more words for rules/H9 (the title phrase), so the probes become a committed tool. - grid: the word in 25 shapes (a head, behind a title or a style, after a family comma, after a full name and a comma, past a second comma, trailing with a period, the article epithet, its own title phrase), each in three cases and under all three name orders; with --base only the rows the trees read differently. - corpora: in every fetched local corpus, the names opening with the word or opening the part after a comma with it, counted by reading (title, given, other). Counts only: no name is printed. - usage: name_usage.py --no-wikidata --json's row. - --rank orders words by the corpus names that open with the word and read it as the title, the triage #913 asks for, with no head change. Each tree is read in a child process of its own, which refuses a nameparser imported from outside its tree (snapshot.check_source). snapshot.read's spawn pool becomes snapshot.parallel, shared by the child and, in the next commits, the agreement score and pairs views. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
derek73
added a commit
that referenced
this pull request
Oct 27, 2026
…nce and usage in one run Phase 2j (#896 through #912) rewrote about ten probe scripts each batch: a shape grid, corpus incidence counts, a usage lookup. #913 lists about 22 more words for rules/H9 (the title phrase), so the probes become a committed tool. - grid: the word in 25 shapes (a head, behind a title or a style, after a family comma, after a full name and a comma, past a second comma, trailing with a period, the article epithet, its own title phrase), each in three cases and under all three name orders, folded where cases or orders read alike; with --base only what moved. For sheikh against its pre-#912 base that is 120 lines. - corpora: in every fetched local corpus, the names opening with the word or opening the part after a comma with it, counted by reading (title, given, other). In psc-individuals, the names opening with the word are also counted by the box the filer typed it into. Counts only: no name is printed. A corpus not fetched is named, and a damaged one ends the run. - usage: name_usage.py --no-wikidata --json's rows. - --rank, the triage #913 asks for, with no head change: the title readings at both positions, beside the PSC title-box and forename-box filings, ordered by the forename share. A title-box filing is a real title, which the move would cost. A forename-box filing is a given name the title reading takes, which the move gives back. On 2026-10-27: sir 277 / 8, sheikh 13 / 32, the 13 being the agreement records #912 moved away from agreeing. Each tree is read in a child process of its own, the two run at once, and each refuses a nameparser imported from outside its tree (snapshot.check_source). snapshot.read's spawn pool becomes snapshot.parallel, shared by the child and, in the next commits, the agreement score and pairs views. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
derek73
added a commit
that referenced
this pull request
Oct 27, 2026
…nce and usage in one run Phase 2j (#896 through #912) rewrote about ten probe scripts each batch: a shape grid, corpus incidence counts, a usage lookup. #913 lists about 22 more words for rules/H9 (the title phrase), so the probes become a committed tool. - grid: the word in 25 shapes (a head, behind a title or a style, after a family comma, after a full name and a comma, past a second comma, trailing with a period, the article epithet, its own title phrase), each in three cases and under all three name orders, folded where cases or orders read alike; with --base only what moved. For sheikh against its pre-#912 base that is 120 lines. - corpora: in every fetched local corpus, the names opening with the word or opening the part after a comma with it, counted by reading (title, given, other). In psc-individuals, the names opening with the word are also counted by the box the filer typed it into. Counts only: no name is printed. A corpus not fetched is named, and a damaged one ends the run. - usage: name_usage.py --no-wikidata --json's rows. - --rank, the triage #913 asks for, with no head change: the title readings at both positions, beside the PSC forename-box and title-box filings and the forename box over the two (28/34), ordered by the forename box's count, since a count cannot be rebuilt from a share. A title-box filing is a real title, which the move would cost. A forename-box filing is a given name the title reading takes, which the move gives back. On 2026-10-27: sir 277 / 8, sheikh 13 / 32, the 13 being the agreement records #912 moved away from agreeing. Each tree is read in a child process of its own, the two run at once, and each refuses a nameparser imported from outside its tree (snapshot.check_source). snapshot.read's spawn pool becomes snapshot.parallel, shared by the child and, in the next commits, the agreement score and pairs views. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
derek73
added a commit
that referenced
this pull request
Oct 27, 2026
…_report.py, --jobs, alike, measure.py) (#917) * Add tools/vocab/word_report.py: a word's H9 shape grid, corpus incidence and usage in one run Phase 2j (#896 through #912) rewrote about ten probe scripts each batch: a shape grid, corpus incidence counts, a usage lookup. #913 lists about 22 more words for rules/H9 (the title phrase), so the probes become a committed tool. - grid: the word in 25 shapes (a head, behind a title or a style, after a family comma, after a full name and a comma, past a second comma, trailing with a period, the article epithet, its own title phrase), each in three cases and under all three name orders, folded where cases or orders read alike; with --base only what moved. For sheikh against its pre-#912 base that is 120 lines. - corpora: in every fetched local corpus, the names opening with the word or opening the part after a comma with it, counted by reading (title, given, other). In psc-individuals, the names opening with the word are also counted by the box the filer typed it into. Counts only: no name is printed. A corpus not fetched is named, and a damaged one ends the run. - usage: name_usage.py --no-wikidata --json's rows. - --rank, the triage #913 asks for, with no head change: the title readings at both positions, beside the PSC forename-box and title-box filings and the forename box over the two (28/34), ordered by the forename box's count, since a count cannot be rebuilt from a share. A title-box filing is a real title, which the move would cost. A forename-box filing is a given name the title reading takes, which the move gives back. On 2026-10-27: sir 277 / 8, sheikh 13 / 32, the 13 being the agreement records #912 moved away from agreeing. Each tree is read in a child process of its own, the two run at once, and each refuses a nameparser imported from outside its tree (snapshot.check_source). snapshot.read's spawn pool becomes snapshot.parallel, shared by the child and, in the next commits, the agreement score and pairs views. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Score and read the spelling views in workers, and keep a base for the alike view local_agreement.py's score and local_corpora.py's pairs --agreement and groups views parsed every name in one process. They now read through snapshot.parallel with --jobs (default every CPU), and its workers abort the run where one imported another nameparser. Measured 2026-10-27 on 12 CPUs, each output byte-identical before and after: psc-individuals 88.9s -> 15.4s, groups jrc-names 55.6s -> 11.8s, pairs tse-donors --agreement 52.1s -> 15.8s. New `alike SOURCE --base <checkout>` view: whether each person's spellings read alike (jrc-names persons, nepal-candidates romanized and Devanagari pairs, tse-donors filed and registry pairs), and how many now read alike and now apart against the base. That replaces phase 2j's scratch pairs script, which parsed the base again for every commit. The base's flags are kept under alike/, keyed by the fetch, the base package's digest, the interpreter and the view's code (alike_fingerprint, its hand-kept list guarded like _FOLD_CODE). They are published only once whole and once the digest, taken again, is unchanged. A key names no one. plant_corpus now carries the real source's corpus_keys, so a nepal corpus planted for a --base child passes the child's key check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add tools/differential/measure.py: every corpus check of a change, in sequence, with one summary Each phase 2j batch spent about ten minutes on a hand-written measure.sh. measure.py --base <checkout> runs the same steps one at a time, each but cldr_agreement.py parallel inside itself: - the committed snapshot and cldr_agreement.py, against the records committed on the branch; - snapshot.py --local --base for every fetched corpus; - local_agreement.py psc-individuals --base; - local_corpora.py alike --base for every fetched source that pairs spellings. The summary labels each step with what it compared against, names the local corpora that are not fetched, and fails a run in which no step read --base. Each step's whole output goes to a file under --out (by default the tools' cache, since a local snapshot lists moves by name). summary.txt keeps each step's unindented lines: the first few, the last ones (where the verdicts are) and any "not measured" line. It never keeps the indented ones, where the tools list names. Output is read as bytes and cut at "\n" only, and snapshot.grouped escapes a line break inside a name, so no part of a name reaches the left edge. Every tool refuses with SystemExit("message"), which exits 1 like a move, so each step runs through measure's --step wrapper. The wrapper turns a message exit or an uncaught exception into exit 2, and prints a crash's traceback indented below a line naming only its type. On 2026-10-27, against a base whose package differed only in a README, it ran 14 steps in 368s on 12 CPUs, each base recorded for the first time. AGENTS.md's "Adding a word to the vocabulary" and the vocabulary README point at word_report.py and measure.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 27, 2026
Closed
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.
The first title batch of phase 2j (#752):
winggains a datedgivenreading, so it is a title only inside a title phrase wherever it stands.What changes
Phase 2i's decision 10 already reads a lone
Wingat the head of a name as the given name (Wing Lau,Mr Wing Lau), so what was left forwingis the two places decision 10 reads a modifier as listed: after a comma, and ending the name. A word that is both a modifier and a possible given name is read by the head's modifier test in every part (a title only with a head title after it in its run,ofafter it, or in the object ofoforthe):Lau, Wing KaiWing, givenKaiWing, middleKaiLau, WingWingWingJohn Smith Wing.Wing.(2.3.0–2.6.0; 1.4.0–2.2.0 family)Wing.Lau, Wing CommanderWing CommanderWing Commander LauWing CommanderAlone after a comma
wingreads asdeanhas since phase 2i, including the cost decision 10 measured for role words:John Smith, Wingreverses to givenWing, familyJohn Smith, asJohn Smith, Deandoes. Accepted because the listing form is what writes the word there: of FEC's 22 names writingWINGafter a comma, the 14 opening the part with it are allFAMILY, WING …, and ctgov writes none. Elsewhere the two follow different tests (a twin grid read 1,854 of 8,820 texts differently), sowingis not a template for the contested titles. No listed phrase holdswing, so nothing is reported (Wing Laustays silent).Pinned as rows, all as master read them, none written by a corpus name:
LAU, WING MRkeeps titleWING MR(the modifier test takes a salutation as its head), whereLAU, DEAN MRgives givenDEAN.The Hon. Wing Laukeeps titleThe Hon. Wing(object ofthe), andJohn Smith Wing. Jr.keeps titleWing.(H2's shape reads the dotted suffix as a head;John Smith Wing. MDgives familyWing.).Measured
Against master
12384fae, py3.11, every local corpus with--base; counts and token shapes only.AA, WING7,AA, WING AA…6,AA, WING A. MR.1.Lau, Wing, plus 6 new rule examples.wing's 25 fixes.Wingafter a comma.Docs
Hon. Wing Laukeeps givenWing).Hudson, Rock, and two Accepted costs are added (above).Lau, Wingcost, and the Standing line amended.Wingexception.modifierkind;title_readings,Lexicon.title_modifiersandconfig.titles.TITLE_MODIFIERSdocstrings, which said every modifier is in TITLES.Checks
uv run pytest(26,335 passed),-n0 -m serial,--python 3.15, mypy, ruff,sphinx-build -b doctest. The design-docs review (two rounds) ran a 26,460-parse shape grid; its findings (undersold reach, the reversal, the both-sets precedence, stale prose, then an overclaimed "reads as dean" and the dotted-suffix spelling) are fixed in this commit.Refs #752, #853
🤖 Generated with Claude Code