Skip to content

Separate words at the invisible separator, U+2063 - #1018

Merged
derek73 merged 2 commits into
masterfrom
fix/invisible-separator
Nov 3, 2026
Merged

derek73 merged 2 commits into
masterfrom
fix/invisible-separator

Conversation

@derek73

@derek73 derek73 commented Nov 3, 2026

Copy link
Copy Markdown
Owner

parse("John⁣Smith") now gives given John, family Smith. 1.4.0 through 2.8.0 gave a single given name, John⁣Smith (checked against the 1.4.0, 2.0.0 and 2.8.0 wheels).

What changes

Evidence

No real name holds any of the five characters: none of the 13 local corpora's raw.jsonl does, and in the committed corpora the only occurrence is rules/T1's new example. So no measured name moves; this is robustness against text pasted from documents. Found while comparing the tokenizer with dominicsayers/name_tamer's zero-width filter.

Docs

  • rules/T1 (separators, not joiners): the When, Except and Accepted wording now names the invisible separator, plus one example.
  • decisions/T1: the Standing bullet and a 2026-11-02 Log entry, with the exclusions.
  • Also updated: a release-log bullet, and the two _tokenize.py comments that described the old two-member set.

Checks

  • Full suite, mypy and ruff pass.
  • Negative control: the 3 new separator rows fail with U+2063 taken out of the set.
  • The design-docs reviewer found five small issues, all fixed:
    • the corpus-count sentence now accounts for the rule's own example, which the snapshot harvests;
    • the two stale _tokenize.py comments;
    • the hyphen bullet in rules/T1;
    • the release bullet's missing link.

🤖 Generated with Claude Code

U+2063 INVISIBLE SEPARATOR now separates under every policy as the
zero-width space and byte-order mark do (#851), so John⁣Smith reads
given John, family Smith where 1.4.0 through 2.8.0 read one given name.
Every shape #851 settled for the zero-width space holds for it.

The invisible math operators U+2061, U+2062, U+2064 and the Mongolian
vowel separator U+180E stay inside the word, recorded as excluded in
decisions/T1 with a test row each. No real name in the committed or
local corpora holds any of the five characters.

Found comparing the tokenizer with name_tamer's zero-width filter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added the bug label Nov 3, 2026
@derek73 derek73 self-assigned this Nov 3, 2026
@derek73 derek73 added this to the 3.0 milestone Nov 3, 2026
@derek73
derek73 merged commit b22063a into master Nov 3, 2026
13 checks passed
@derek73
derek73 deleted the fix/invisible-separator branch November 3, 2026 05:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant