What Changed in v7
GENERIC_CORPORATE_TOKENS in lei.js was extended with geographic terms
(south/north/east/west/africa/taiwan/japan/korea/india/europe/pacific) and industry terms
(semiconductor/semiconductors) to stop generic-word LEI parent-walk bridges. A new
isPersonNameInitialSuffix() guard in fuzzy.js catches patent-style
"Surname Initial" inventor names (e.g. "Smith J") so they no longer fuzzy-match against
unrelated companies. Five stale wikidata_relationships rows that produced
recurring false-positive subsidiary clusters were deleted.
entity_matches_pre_r4_rescan_backup). The full match:tm cascade
(exact → DBA → LEI → wikidata parent-walk → fuzzy → transliteration) re-ran against all
1,262,112 holders at MATCH_CONCURRENCY=16, completing in 21.9 minutes
with 14,476 rows across 11,797 unique holders.
build:ai-queue queued 8,374
reason='uncertain' entries (existing matches at confidence 0.50–0.94) plus
989,847 reason='no_match' FTS candidates from Phase 2. Per standing policy
(<1% acceptance on no-match candidates), the Phase 2 rows were deleted before launch,
leaving the queue at exactly 8,374 entries.
ai-queue-mistral, same calibrated
v3 prompt and threshold as the prior production run): 8,369 entries processed in 281.6 minutes,
4,591 confirmed (54.9%), 3,778 rejected, 5 errors (transient — see §8).
Combined with the 6,107 deterministic matches that never entered the queue (confidence ≥ 0.95
or below the AI floor), the final effective TM match set is 10,698 rows / 8,666 unique
holders.
Headline KPIs — Before vs After
Headline finding: a from-scratch deterministic re-scan plus an independent fresh AI pass reproduces 97.3% of the previous hand-curated effective match set (10,698 / 10,869) — and the AI confirm rate held essentially flat (55.7% → 54.9%). This validates that the Round 1–4 code fixes generalize: the −229 net rows removed are not AI-review noise but systematic false-positive removal (generic-token bridges, person-name initials, stale wikidata relationships) that the pipeline now avoids automatically, without manual per-row deletion.
AI Re-review — Confirm Rate by Deterministic Origin
Every uncertain match (confidence 0.50–0.94) carries its originating deterministic method in
metadata.original_method. Grouping the 8,369 AI decisions by that origin shows where the
AI agrees with the deterministic pipeline and where it diverges.
Confirm Rate by Origin Method
| Origin method | Confirmed | Rejected | Total | Confirm rate |
|---|---|---|---|---|
| exact | 1,198 | 24 | 1,222 | 98.0% |
| lei | 1,398 | 1,066 | 2,464 | 56.7% |
| fuzzy | 1,810 | 2,580 | 4,390 | 41.2% |
| wikidata | 118 | 48 | 166 | 71.1% |
| dba | 43 | 56 | 99 | 43.4% |
| translit_* | 24 | 4 | 28 | 85.7% |
| Total | 4,591 | 3,778 | 8,369 | 54.9% |
Reading the table: exact normalized-name matches at uncertain
confidence are almost always genuine (98.0%) — the AI mostly catches edge cases like truncated
legal suffixes. fuzzy and dba sit near a coin-flip (41.2% / 43.4%),
confirming these remain the noisiest deterministic tiers and the ones where AI adjudication adds
the most value. lei at 56.7% reflects the mix of same-country (high agreement) and
cross-country (lower agreement) LEI matches. wikidata parent-walk subsidiary links
score well (71.1%), and the new transliteration pipeline validates strongly at 85.7%
(24/28) — see §6.
AI Score Distribution
Confirmed (4,591 rows)
Bimodal as in v6: the 0.795 (raw 0.90) and 0.823 (raw 0.95) clusters dominate, with a smaller 0.85 (raw 1.00, "certain") tail. Score structure is consistent with the calibrated v3 prompt's known distribution.
Rejected (3,778 rows)
59.1% are outright rejections (model judged different entities, score=0). The remaining
40.9% scored just below MIN_SCORE=0.75 — dominated by the 0.685 "uncertain"
bucket (raw 0.70), the same cluster the v3 threshold was specifically calibrated
to filter. These rows keep match_method='ai_rejected' for audit but no longer
count as effective matches.
Final TM Match Breakdown (v7)
Effective Matches (10,698 rows)
exact + dba + fuzzy + lei here are the
6,107 deterministic matches that scored ≥0.95 (or never entered the queue) and were left
untouched by AI review.
ai_confirmed Link Type Split
The subsidiary count (1,347) is identical to the pre-Round-4 backup —
the −229 net change is entirely in direct links (3,473 → 3,244), consistent
with the FP fixes targeting direct fuzzy/LEI bridges rather than the wikidata-derived
parent-walk subsidiary set.
| Match method | Direct | Subsidiary | Total | % of effective |
|---|---|---|---|---|
exact | 5,874 | 0 | 5,874 | 54.9% |
ai_confirmed | 3,244 | 1,347 | 4,591 | 42.9% |
dba | 229 | 0 | 229 | 2.1% |
fuzzy | 3 | 0 | 3 | <0.1% |
lei | 1 | 0 | 1 | <0.1% |
| Effective total | 9,351 | 1,347 | 10,698 | 100% |
ai_rejected (audit only) | 2,660 | 1,118 | 3,778 | — |
| Grand total | 12,011 | 2,465 | 14,476 | — |
Transliteration Pipeline — First Validation
translit_* Matches Through AI Review
First independent signal on transliteration quality: all 28 transliteration-derived
matches (Cyrillic ×25, CJK ×1, Greek ×2) were uncertain-tier and went through AI review. The AI
confirmed 24/28 (85.7%) — well above the all-method average (54.9%) and close to the exact
tier (98.0%). The 2 Greek rejections were the entire Greek sample, so no conclusion can be drawn
about Greek transliteration quality from n=2; Cyrillic (23/25 = 92.0%) is a much stronger signal.
This pipeline remains wired in for direct holder-name matching only — see §7 for the still-open gap
against match-patent.js ([[project-transliteration]]).
Data Quality Notes
| Holder name | Candidate company | Origin method | Existing conf. |
|---|---|---|---|
| LIMITED LIABILITY COMPANY "NORMA" | OCARD Limited Liability Company (LLC) | fuzzy | 0.675 |
| The Green Hornet, Inc. | On The Green LLC | fuzzy | 0.7875 |
| Gold Medal Manufacturing Sdn. Bhd. | Gold Medal, Inc | fuzzy | 0.81 |
| The Coca-Cola Comp. | The Coca-Cola, Co. | lei | 0.828 |
| CTH | CTH Ltd. | exact | 0.90 |
5 queue entries (0.06%) errored after 3 consecutive unparseable AI responses
— the run log's generic "company not in DB" label is misleading here: all 5 target companies
exist in companies (verified by ID). These were transient Ollama parsing failures.
The rows remain in their pre-AI deterministic state (match_method unchanged,
confidence still 0.675–0.90, included in the §5 totals) and are eligible for re-queue on a
future run:ai-queue pass — they will simply be picked up again as
reason='uncertain' with status='error' currently blocking re-dequeue
unless reset to 'pending'.
Recommended Next Steps
Current state: TM matching is fully re-validated post Round 1–4 — 10,698
effective rows / 8,666 unique holders / 4,743 companies covered. The patent side
(patent_applicant, 10,379 rows / 7,952 unique applicants) shares the same fixed
lei.js/fuzzy.js code but has never been through AI review.
| Priority | Action | Detail | Est. scope |
|---|---|---|---|
| High | Build + run patent AI queue | 7,373 uncertain patent matches never AI-reviewed: fuzzy 4,466,
lei 2,626, wikidata 226, exact 50, dba 5 |
~4–5 hrs at observed 30/min |
| Medium | Reset the 5 errored queue entries to pending and re-run |
Transient Ollama parse failures (§7) — small batch, quick to clear | Minutes |
| Medium | Manually set link_type='subsidiary' for Panasonic IP Management Corp.
(entity_matches IDs 3006899/3006900) |
Round 4 reviewer confirmed the match is correct but it landed as
fuzzy/direct — genuine patent-holding subsidiary of
Panasonic Corporation |
2-row UPDATE |
| Medium | Round 5 manual review prep | Sample new ai_confirmed/ai_rejected rows for spot-checking,
focused on the lei (56.7%) and fuzzy (41.2%) origin tiers
where AI agreement is lowest |
~50-pair sample |
| Low | Wire transliteration pipeline into match-patent.js |
Currently TM-only ([[project-transliteration]]); §6 shows 85.7% AI confirm rate on the 28 TM transliteration matches, suggesting similar value on the patent side | Pipeline dev |