Skip to content

The agent judges identity by written rules, and a labeled set says whether it did (0025 decision 10) - #457

Merged
WaylandYang merged 6 commits into
devfrom
feat/governor-agrees-with-labels
Sep 6, 2026
Merged

WaylandYang merged 6 commits into
devfrom
feat/governor-agrees-with-labels

Conversation

@WaylandYang

@WaylandYang WaylandYang commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Follows #446. Adds decision 10 to record 0025 (Governance reads the ledger before it decides); the status line, the new decision with its table, and the README row are updated.

The labeled set and the harness

  • scripts/bench/truth/ai-timeline.duplicates.json: every pair the resolver raised on one governed import of eight interlocking articles (615 pairs, 411 distinct name pairs), labeled by hand from each side's facts and source passages: same, different, or unknown where no reader could tell either. Keyed by the two names, either order, case-insensitive.
  • scripts/bench/govern.mjs: --fresh imports and scores; --kb <id> resets a base's agent decisions without going through the API (the API would leave merge.revert in the ledger, which the next run would read as precedent), runs the governor, and scores: decided on its own, agreed with the labels, wrong merges, wrong keeps, left for people, moot after a merge. About twenty-five minutes per run on the bench base. Documented in scripts/bench/README.md.

What the labels changed

  • IDENTITY_RULES, one text read by both prompts: a version, tier, division, subsidiary or legal entity added at the end of a name is a different thing; a phrase containing a name is not the name; a list is not its members; a common noun is not a proper name; a front qualifier dropped, a corporate suffix, a surname for a full name, a parenthetical acronym are the same thing; a different type label, a missing fact, a different partner or role is not a contradiction.
  • Two rules the model cannot argue with. name_shape (identical, abbreviation, suffix, version, extension, phrase, unrelated): a same verdict on a version or a phrase is never applied on its own. type_family folds the extractor's labels into person, organization, place and event; only a difference across families is a conflict, so Organization against Corporation no longer blocks a merge and Person against Organization still does.
  • Identical names whose labels fall in one family are shown to the model with one label; a different verdict on identical, compatible names gets the tool loop's second look before it is applied.

Measured on the same 589 pairs, reset and re-run after each change

run decided on its own agreed with the labels wrong merges wrong keeps left for people wall clock · loop calls
before (gate of 2026-09-06) 67% 91% 1 35 186 alongside the 63 min import · 301
rules, shapes and families 86% 95.3% 6 18 14 26 min · 42
acronyms, surnames, two-word tails 98.5% 96.3% 6 12 8 22 min · 12
one label for identical names, second look on a split 98.2% 97.3% 4 9 9 22 min · 15
one label only within one family (shipped) 97.9% 96.9% 4 11 11 25 min · 46

Wall clock is for 589 pairs with the model capped at three concurrent calls; about twenty-five pairs a minute, one batch call per cluster of up to twelve pairs (roughly sixty per run) plus the loop calls shown.

The last two differ by the model's run-to-run noise; the shipped version keeps the extractor's labels wherever they carry information, because the run before it merged a periodical into a service. Of the four wrong merges, two follow a precedent left by a simulated person accepting proposals blindly, which is the ledger working as designed on a bad decision. What still disagrees is mostly judgment (whether "Claude Mythos 5" is "Claude Mythos"), and the share left for people does not go to zero on purpose: the version and phrase rules hold back a few right merges to stop dozens of wrong ones, and a record with no facts cannot be settled by anyone.

Verified

Unit tests for the shapes, the families, and the gate with them; the prompt-shape tests; the governor's real-database test. Four full runs on the bench base as above.

🤖 Generated with Claude Code

WaylandYang and others added 6 commits September 7, 2026 03:44
…says whether it did

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
…a moot bucket in the score

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
…em gets a second look

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
…and the labeled set

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant