Order declarations are authoritative: #471 declined, #384 on option 1 with the rotations gated - #517
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #517 +/- ##
=======================================
Coverage 98.66% 98.67%
=======================================
Files 45 45
Lines 3232 3234 +2
=======================================
+ Hits 3189 3191 +2
Misses 43 43 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
on option 1 A name order is a property of the data source, not of a string: the caller declares it to match how their records are written, and the declaration outranks any string-level inference. rules.md's Name order Background states that once, and two open questions rest on it. #471 DECLINED: a never-given particle marks where a surname BEGINS, so the fold takes the rest of the name: `de la Torre Vega` is a surname-only string read right and `de la Cruz Juan Carlos` is a family-first listing read under the wrong order, whose remedy is the declaration or the family comma. P1's reach paragraph says so and carries both faces as examples. This supersedes the reason the 2026-08-17 P1 entry gave for the same outcome, and answers the #364 entry's "nothing ever argued for takes everything". #384 on option 1: the ru and tr_az patronymic rotations exist to restore the default reading from a family-first listing, so under a declared family-first order they stand down and position decides. The code did not do that on its own -- the rotation reads whatever word sits in the family slot, which under FAMILY_FIRST is the first word -- so the next commit gates it on the order assign read; this entry records the decision and the measured gap. The divergent row (ru + FAMILY_FIRST on natural-order input) is the declaration being honored and is recorded as Accepted, pinned by a tests/v2/test_locales.py row because a rules.md example line takes one annotation, a pack or an order, never both. Options 2 and 3 are Declined with reasons. No parse changes and no release-note bullet. The new P1 example joins the contract corpus (corpus_rules.jsonl, 250 -> 251 names) and, at the 1.4.0 baseline only, the already-recorded initials-view class fix(initials-per-word) a particle chain inside a name part, beside de la Cruz Juan Carlos -- so the 1.4.0 intentional count goes 367 -> 368 and that rule's recorded claim is 108 names with its new digest. Gate: 368 / 263 / 175 / 37, 0 unexplained. Closes #471 Closes #384 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… family-first order rules.md#O1/#O2 exist to RESTORE the given-first reading a family-first listing hides. The code tested the word in the FAMILY slot regardless of the order assign read, so under FAMILY_FIRST -- where that slot holds the FIRST word -- a patronymic-derived surname fired the rotation: ru + FAMILY_FIRST read "Мицкевич Адам Юзеф" as family 'Адам' where plain FAMILY_FIRST reads family 'Мицкевич'. The rotations now apply only when the read order is the default given-first one (`state.order`, not policy.name_order, for the reason the P1 fold gives). No corpus name moves at any baseline, and the corpus swept under both packs with FAMILY_FIRST declared shows no difference either -- the corpora hold no three-word name whose first word carries a patronymic ending. Pinned by the firing control. Refs #384 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Three review agents on the whole PR. The order Background is narrowed to what the code can implement -- a declared FAMILY-FIRST order outranks the shape; an explicit GIVEN_FIRST is the default and cannot be told apart from it -- and the two decisions.md restatements become citations. The #470 citation is corrected (closed not-planned 2026-09-02, and it decided that prose in an Accepted clause is the right home, not a workaround); the option-3 decline is scoped to listings carrying the trace; the capability-claim lesson is attributed to AGENTS.md axis 10; the zero-movers reason covers the Turkic trigger too; the gate's unwitnessable conditions are recorded as such. The gate becomes a module-level helper so a reachability probe can patch it back to the ungated condition and demand the 2.2.0 readings return -- without it a refactor that stops the rotation reaching family-first placement leaves all five stand-down rows green while asserting nothing. O2's Accepted clause gains its pin; a peeled-title parameter joins the East Slavic stand-down test. The #384 gate gets its release-note bullet: it changes what 2.2.0 does for a supported configuration, and corpus movement is not the house exemption. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
derek73
force-pushed
the
claude/471-order-declarations
branch
from
September 8, 2026 04:49
ae28204 to
0b6a792
Compare
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.
One principle, recorded once and applied twice: a
name_orderis a property of the data source, not of a string. The caller declares it to match how their records are written, and the declaration governs everything no vocabulary and no script license has already claimed (O4, W4).#471 is declined by design. Under the default given-first order a string that opens with a never-given particle is a surname whose given name is absent, and surnames may be several words — Spanish double surnames above all — so the fold takes the rest of the name:
de la Torre Vegais a surname-only string read right.de la Cruz Juan Carlosis a family-first listing under the wrong order, and the remedy is the declaration (FAMILY_FIRST already gives familyde la Cruz, givenJuan, middleCarlos) or the family comma.de la Family Family Givenversusde la Family Given Givenis undecidable under either order, which is what makes the comma the answer rather than a better heuristic. This supersedes the REASON the 2026-08-17 P1 entry gave for the same outcome ("the parser cannot see language"), not the outcome. rules.md#P1 gains the Accepted clause and two executable examples;de la Torre Vegajoins the contract corpus and, at the 1.4.0 baseline only, the already-recorded initials-view class, so that gate's intentional count goes 367 → 368 with the claim recorded.#384 resolves on option 1, and the code now matches it. The ru and tr_az patronymic rotations exist to restore the given-first reading a family-first listing hides, so under a declared family-first order the declaration decides. The design-docs review found the code was NOT scoped that way: the rotation reads whatever word sits in the family slot, which under FAMILY_FIRST is the first word, so a patronymic-derived surname fired it — ru + FAMILY_FIRST read
Мицкевич Адам Юзефas familyАдам. The rotations are now gated on the order assign read (state.order, notpolicy.name_order, for the reason the P1 fold gives). Zero corpus names move at any baseline, and the corpora swept under both packs with FAMILY_FIRST declared show no difference either; the firing controls (Мицкевич Адам Юзеф,oglu Ahmad Vali Ali) are pinned under both family-first orders with the pre-gate 2.2.0 readings recorded as the negative control. Options 2 and 3 are declined with their real costs.Gate: 368 / 263 / 175 / 37 intentional at 1.4.0 / 2.0.0 / 2.1.0 / 2.2.0, 0 unexplained, 0 radar unclassified. No release-note bullet: #471 changes no behavior, and the #384 gate moves no corpus name and no default-policy parse.
Closes #471
Closes #384
🤖 Generated with Claude Code