Skip to content

Phase 2: derive ambiguity from clashing readings and extend the gate to every reading kind #752

Closed
6 of 6 issues completed

Description

@derek73

Part of #747. Phase 1 kept the ambiguity markers as explicit flags (may_be_given, may_be_name, may_be_initial). Phase 2 derives ambiguity from clashes between readings instead, and makes the gate a property of a reading rather than a rule written per class of word. Today's gates are six separate rules, each reading its own evidence:

  • ambiguous acronyms by periods, capitals and words to spare (rules/S3, S4, S6)
  • one-letter roman numerals by a word to spare (rules/S10)
  • a title that may be the name, by the title run's floor (rules/H3)
  • particles by position (rules/P4)
  • bound given names by a word to spare (rules/P5)
  • single-letter conjunctions by case (rules/P8)

A listed word none of them reaches is read wherever its position allows, which is why fils is excluded rather than gated. The vocabulary model RFC (docs/design/vocabulary-model-rfc.md) has the overview.

This is the first phase that changes behavior, so it needs its own spec, measurements and snapshot moves.

Questions it has to answer:

  • What cue the gate reads for each kind, starting from the rules above. An acronym's cues are periods and capitals, while a lowercase generation word like fils needs another, and an initial-shaped one (H., regnal I.) has S10's count against a period, which marks a one-letter word as an initial (rules/T5).
  • Whether a reading with no reliable cue is off unless a pack turns it on (default = false, e.g. Czech st.).
  • What a gate at the FRONT of a name looks like (a title that is also a given name).
  • How readings surface on a ParsedName (the reading not taken, on the ambiguity).

Decided already (decisions/vocabulary-model): vocabulary readings settle a clash; name readings only keep the gate on; bearer counts are provenance and never compute a reading.

Activity

  1. self-assigned this
    on Oct 19, 2026
  2. 30 remaining items

  3. derek73 commented on Oct 27, 2026

    @derek73
    OwnerAuthor

    Phase 2 is done: every sub-phase of the agreed design (#881, decisions/vocabulary-model's 2026-10-23 #752 entry) has landed, each as its own PR.

    Sub-phase What PR
    design the RFC's Phase 2 section and the decisions entry #881
    2a the two name-clash markers derived from name readings #883
    2b one predicate per question: split credentials, numerals, paired initials #884
    2c, 2d credentials joined by a hyphen or a slash #887
    2e a credential split across a space (rules/S12) #891
    2f one predicate for every roman-numeral rule #886
    2g capitals settle a listed credential #895
    2h generation readings gated by kind, default = false (rules/S11) #890
    2i the title phrase (rules/H9), attaches #894
    2j titles that are names: wing #896, mahdi/bard #898, buddha/siddha/gyani #900, king #901, sultana/sultan #903, shaikh #906, prince/princess #908, sheikh and its spellings #912
    2k a given name written short over rules/H2's shape #897
    2l the bracket escape reads the derived clash (rules/S13) #899
    2m the reading not taken, as Ambiguity.alternative #902

    Two follow-ups landed beside them: #904 keeps v1's Constants().titles as 2.6.0 listed it, and #905 is a helper refactor.

    The issue's four questions:

    1. The cue each kind reads: numerals by one predicate (2b, 2f), credentials by their spelling (2c–2e) and their capitals (2g), fils by case and the count, the agnomens by the count alone (2h).
    2. A reading with no reliable cue: default = false records it and compiles to nothing; a pack turns it on (2h).
    3. A gate at the front of a name: a title with a given reading is a title only inside a title phrase, and a name word elsewhere, reported title-or-name where it opens the name, no comma marks the given name and a listed phrase holds the word (2i, then 2j's batches; decisions/H9).
    4. Surfacing: the reading not taken is Ambiguity.alternative (2m). The reading taken, Token.reading, waits for 3.0.

    The title words 2j did not reach (baron, bishop, judge, marquis and the rest) continue in #913. #918 updates the decisions Open: lines that pointed here, and records the last open question parked on this issue: two_family_names reports nothing and surfaces no alternative, since the caller declared the convention (decisions/O6).

  4. added a commit that references this issue on Oct 27, 2026
    6ae585f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

designvocabularyPer-word vocabulary model and language packs

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions