Skip to content

List the shape inventory per name order (3.0, 4h) - #974

Merged
derek73 merged 4 commits into
masterfrom
feat/v3-4h-shape-inventory
Oct 31, 2026
Merged

derek73 merged 4 commits into
masterfrom
feat/v3-4h-shape-inventory

Conversation

@derek73

@derek73 derek73 commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Sub-phase 4h of #754: the shape inventory per order (#469). This lists the written arrangements each name_order is read in, each with what the tree reads today. No reading moves. It also records #938 as declined, decided in chat on a survey of real family-first names.

What changes

  • tools/differential/shapes.py gains ARRANGEMENTS. It has 104 rows: 36 under the default order, 38 under FAMILY_FIRST and 30 under FAMILY_FIRST_GIVEN_LAST. Each row has:
    • its notation and a name written in it;
    • the positions it instantiates;
    • every role that is not empty, and each ambiguity kind;
    • where a person would not read the name that way, a mark: accepted (the document that decided the reading) or misread (an open issue).
  • POSITIONS covers these, for every order:
    • a title at the front, between the family and the given name (family-first orders only), at the end, and after a full head's comma;
    • a suffix without a comma, before one and after one;
    • the comma heads (full, one-word, empty);
    • a middle name, a particle, a nickname;
    • nameparser/AGENTS.md's sweep items: a nickname-only head, a connective and a particle surname before a comma, two title-particles at the head, a dual in a title run, a trailing title after an empty head, a roman numeral, dotted and undotted suffixes, a period-shape title, and an NFD letter.
  • Shape model. Each order still has one Shape, and each arrangement names the shape it is written under, inheriting its order and min_baseline. That leaves the corpus tag, build_conventions_corpus._shape_for, cases._SHAPE_IDS and compare.py's skip untouched. Under a family-first order, family-comma rows are tagged 4 or 5 for their order, and the shapes.py docstring says so.
  • tests/v2/test_shape_inventory.py checks:
    • each row's roles and ambiguity kinds, read under its order;
    • that each order covers every position it has a slot for;
    • each position the text can show against the text (a comma position needs a comma; nfd needs a text that NFC changes);
    • that every mark cites something that exists.
  • Marked rows are pinned to their current reading, not marked xfail. A non-strict xfail would let a change to the row pass unnoticed.
  • Negative control: under the default order, 49 of the 68 family-first rows fail. Of the 19 that pass, 15 hold a family comma and 4 lay out no name word by order.
  • Corpus and snapshot. corpus_shapes.jsonl grows from 300 to 395 lines. The snapshot gains 80 entries and changes none.

#938 declined

The decision is recorded in decisions/H5's (the trailing title run) 2026-10-30 #938 entry, with the survey figures and their dates and samples. Real family-first names write the title in front:

  • Hungary, 2024 municipal candidates: 37,250 names, 0 with a title between the family and the given name.
  • Japan, Kantei English pages: 16 of 16 in front.
  • Vietnam, Assembly candidate cards: 52 of 52 in front.
  • JRC-Names: 11,558 romanized CJK spellings, no real titles.

CLDR's 50 of 70 is a template artefact.

The eight rows in #938's shapes are now accepted = "H5", as is John Smith Prof:

Order Input Reads
FAMILY_FIRST Wang Dr. Xiaoming · Wang Dr Xiaoming · Wang Insp. Xiaoming given the title, middle Xiaoming
FAMILY_FIRST Brühl Prof. Dr. Ada Cornelia given Prof., middle Dr. Ada Cornelia
FAMILY_FIRST Wang Xiaoming Senator middle Senator
FAMILY_FIRST_GIVEN_LAST Nguyen Dr. Thi Mai · Nguyen Insp. Thi Mai middle Dr. Thi · Insp. Thi
FAMILY_FIRST_GIVEN_LAST Nguyen Thi Mai Senator given Senator, middle Thi Mai

The usage.rst paragraph after forms 4 and 5 now states the title-in-front convention as the supported reading.

Open, in the 4h entry:

  • The Hungarian title after a married -né word (Bakainé dr. Korbács Melinda): 102 of 37,250 names, all misread today. It is a question for a future hu pack.
  • Unweighed, so unmarked: Vega y Lopez Jr., PhD Jones under the family-first orders (given y or Lopez), and an ambiguous particle opening a family-first name (van Gogh Vincent reads family van).

Checks

  • uv run pytest: 33,883 passed.
  • -n0 -m serial: 42 passed.
  • mypy and ruff are clean.
  • sphinx-build -b doctest is clean.
  • The design-docs reviewer's first-round findings were fixed in the second commit. The independent review's points 1–8 are fixed in the third.
  • The second review is fixed in the fourth commit:
    • every position is now held to the row's text by a predicate, and both reviewer mutations fail;
    • marks are decisions keys only: van Gogh Vincent, du Ménil Thi Mai and the family-first Vega rows are unmarked and listed as unweighed, and the default Vega row is accepted="C1";
    • H5's Declined entry carries its own Recompute recipe;
    • the RFC states the decline.

🤖 Generated with Claude Code

derek73 and others added 2 commits October 30, 2026 21:42
tools/differential/shapes.py gains ARRANGEMENTS: the written
arrangements each order is read in (a title at the front, between the
family and the given name and at the end; a suffix without, before
and after a comma; the four comma shapes; a middle, a particle, a
nickname), each pinned to what the tree reads today. Six rows, the
title between or bare after the family under a family-first order,
are marked misread for #938, which decides them; their readings are
recorded, not changed.

A shape stays one skeleton per order and comma family, so the corpus
tag, _shape_for and compare.py's min_baseline skip are untouched.
tests/v2/test_shape_inventory.py reads every row under its order and
holds each order to cover every position it has a slot for. The
arrangements join corpus_shapes.jsonl; the snapshot gains 45 entries
and no existing reading moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The family-first orders have one shape for every comma family, so
their family-comma rows carry the order, not the notation's comma
(shapes.py docstring, the entry). The bare trailing title is H5's
stated reading, not a cost, and `van Gogh Vincent` under FAMILY_FIRST
is held by no rule's statement, now listed as unweighed. usage.rst
keeps form 1's credential exception for a bare trailing title, and
the RFC row narrows the misread rows to the title between and bare
after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added this to the 3.0 milestone Oct 31, 2026
@derek73 derek73 self-assigned this Oct 31, 2026
derek73 and others added 2 commits October 30, 2026 22:06
#938 is declined on a survey of real family-first names, which write
the title in front (decisions/H5's 2026-10-30 #938 entry, with the
measurement), so its rows are accepted readings rather than misread
ones. A row now carries `accepted` (the document deciding its
reading) or `misread` (an open issue), and the kinds it reports; the
test pins both, checks each position the text can show, and holds
each mark to a file that exists.

The inventory gains 40 rows across the three orders for
nameparser/AGENTS.md's sweep items (a nickname-only head, connective
and particle surnames before a comma, title-particles at the head, a
dual in a title run, a trailing title after an empty head, a title
after a full head's comma, a numeral, dotted and undotted suffixes, a
period-shape title, an NFD letter), each with its current reading.
The snapshot gains 35 more entries and no reading moves. The
Hungarian `-né dr.` shape is recorded as Open for a future hu pack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The second review found that a row's positions were checked against
its text only for a comma, so a mislabelled row still counted as
coverage. Every position now has a vocabulary-read text predicate
(a roman-numeral word, a one-word head counted as rules/C3 counts,
an abbreviation shape the vocabulary does not list, and so on), and
both reviewer mutations now fail. Vega y Lopez, Juan is relabelled a
full head by that count.

A mark is a decisions key only: the default Vega y Lopez Jr. row is
accepted by decisions/C1's #613 entry, and the rows no decision weighs
(van Gogh Vincent, du Ménil Thi Mai, the family-first Vega rows) carry
none and are listed as unweighed. decisions/H5's #938 entry gains a
Recompute recipe in place of the untracked survey citation; the RFC's
shapes passage and render note and decisions/vocabulary-model's
render entry state the decline. The negative control is re-taken on
the final grid (49 of 68) beside the first grid's (31 of 40).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73
derek73 merged commit 4ebb51d into master Oct 31, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant