Repository navigation
Facts corroborate an identity when the profile cannot - #342
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: WaylandYang <wayland0916@gmail.com>
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.
Closes #331.
resolve_mentiondecided who a mention was from one signal: the cosine between the mention's chunk vector and each candidate's profile centroid. When that vector cannot separate two people — and after #221 it routinely cannot, because both namesakes were seeded from the same chunk — the code gave up and asked a person. The Review card it then rendered showed the twoworks_forfacts. The code was looking at the answer and handing it to a human.Now it reads them. The mention's chunk text is threaded down to
resolve_mention, and where the profile is inconclusive the facts get a turn.The evidence only runs one way
Agreement is weak evidence of same. Disagreement is evidence of nothing: someone who works at Acme and moonlights at Zenith has two
works_forvalues and is one person, and two different people can share an employer. Socorroborating_candidateonly ever answers "which candidate did the text name" — it has no way to express "this candidate is excluded", and a mismatch never demotes anyone or pushes a pair apart.Three rules keep it from over-reaching:
SIM_ATTACHandSIM_NEWare untouched, as Two namesakes with identical profiles attach a later mention by candidate order #270 asked; this adds a question asked outside the thresholds, not a change to them.Objects are picked the way
refresh_disambiguatorspicks them after #299 — ordered by whether the ontology declares a range, thenstate, thenfunctional— so the disambiguator a person sees and the clue the code uses come from the same judgement.Where it fires
Both places the profile gives up: the namesake tie #329 added, and the grey zone between
SIM_NEWandSIM_ATTACH. BelowSIM_NEWit stays out — those candidates do not even earn a review pair, and letting one string pull them in would be bypassing the threshold rather than supplementing it.Verified
Five database-backed tests in
facts_corroborate_an_identity.rs, and two of them exist to stop this feature rather than to prove it:The full suite passes against a real database, plus
cargo fmt --check,cargo clippy -D warningsandpnpm build.Not in this cut
The other half of #331 — a person split in two who is never reviewed again, because a best candidate below
SIM_NEWfiles no pair at all. That wants a queue that does not exist yet ("same name, same type, never reviewed"), and it is a different change from this one.🤖 Generated with Claude Code