fix(data): resolve 170 more smartphone brand-prefix conflicts - #334
Conversation
Continues the brand-prefix dedup from #329/#330. Those resolved 414 pairs and carried forward a residual of 353. This resolves 170 of that residual, source- verified, and explicitly un-pairs 3 that are genuinely different devices. Three sub-slices resolved (Refs #296): 1. 37 vendor/Wikipedia-sourced same-chip pairs. Same device, same physical chip (soc slugs differ only in spelling, e.g. `qualcomm-msm8974-snapdragon-800` vs `snapdragon-800`, `hisilicon-kirin-980` vs `kirin-980`), with battery/weight/ram already matching. Unlike the phonedb twins in #330, the twin here carries a Wikipedia or vendor page as its source, so its specific release_date is reliable and was adopted over the bare side's generic YYYY-01-01 placeholder (spot-checked: Huawei P30 Pro 2019-03-26 = GSMArena; LG G2 September 2013 = Wikipedia). Kept the canonical bare slug, unioned source_urls, set verified=true only where the twin was a vendor/Wikipedia source. 2. 7 same-model pairs whose two sides named different chips — verified against a cited source which side is correct, fixed the soc, then merged: - Oppo Find X8 Pro -> Dimensity 9400 (oppo.com launch; GSMArena) - Motorola Edge 50 Ultra -> Snapdragon 8s Gen 3 (motorola.com; phonearena) - Honor Magic V3 -> Snapdragon 8 Gen 3 (phonearena SM8650-AB; honor.com) - OnePlus Nord CE 2 Lite (Snapdragon 695), Nord CE 2 (Dimensity 900), Sony Xperia Z (APQ8064 S4 Pro), Honor Magic V2 (Snapdragon 8 Gen 2) — the bare side already held the correct chip; merged and cited GSMArena/vendor. 3. 126 pairs where the soc slugs are the same physical chip via a spelling variant, or one side's soc was a vague descriptor (`dual-core 1.0 GHz`, `<brand> mobile platform`, `n-a`) and the twin named the specific FK-valid part. Kept the GSMArena (bare) record, adopted the specific soc when the keeper's was vague, rejected the phonedb stamped placeholders (weight 150.0 / battery 1500), left the (unreliable) phonedb dates alone, unioned source_urls, deleted the twin. Un-paired as genuinely different devices (left as separate records, no merge): - HTC: `one-m9` holds the One M9+ (Helio X10) vs the One M9 (Snapdragon 810). - Motorola: `razr` holds the 2023 Razr (SD 8+ Gen 1) vs the 2019 Razr (SD 710). - Sony: `xperia-z3` holds the Xperia Z3+ (SD 810) vs the Xperia Z3 (SD 801). No value invented; every repaired field cites its evidence URL in source_urls. Left unresolved for a later pass (documented on #296): 21 same-model pairs whose correct chip I could not source this round (includes the Huawei P50 Pro, which genuinely shipped both Kirin 9000 and Snapdragon 888 SKUs), 157 pairs needing a per-record ram/weight/battery source, and 2 odd/other pairs. Both gates pass: `python -m app.validate` and `integrity_check.py <data> --strict` (0 hard anomalies). Refs #296
…flicts Regenerates site/public/v1 from the current data with no re-scrape (python -m app.dump). Removes the 170 deleted twin slugs and reconciles score percentiles. `app.validate` passes on the dumped tree.
🔎 Data verification — Tier 0 (offline existence/trust)Scored by 12/12 categories ? 191,176 records ? diff base develop@ea3f31e Changed records in this PR170 record(s) assessed. %%{init: {"theme":"base","themeVariables":{"pie1":"#3fb950","pie2":"#d29922","pie3":"#f85149","pieStrokeWidth":"0px","pieOpacity":"1"}}}%%
pie showData
title Verification bands — all records
"Green" : 148
"Yellow" : 22
"Red" : 0
Full-dataset baseline191176 record(s) assessed. %%{init: {"theme":"base","themeVariables":{"pie1":"#3fb950","pie2":"#d29922","pie3":"#f85149","pieStrokeWidth":"0px","pieOpacity":"1"}}}%%
pie showData
title Verification bands — all records
"Green" : 33027
"Yellow" : 157096
"Red" : 1053
Hard violations (forced red):
green = authoritative source + complete + consistent · yellow = plausible, needs confirmation · red = sparse/weak source or a hard contradiction. Promotion to |
TechEngine change review: PASS12/12 categories ? 191,176 records ? diff base develop@ea3f31e
Changed data
Changed record examplessmartphone modified
smartphone deleted
Heuristic review
|
TechEngine validation stats: PASS12/12 categories ? 191,176 records ? diff base develop@ea3f31e
Data summary
Warning Tracked verified coverage is below 50% for monitor 0.0% (0/882), software 0.8% (358/42493), laptop 5.3% (105/1995), tablet 8.6% (285/3305), soc 13.4% (284/2117), all 16.7% (31907/191176), smartphone 18.6% (17235/92824), website 19.0% (7635/40084), and 1 more. Validation notes
Key output:
|
… base slug The brand-prefix scan across #329/#330/#334 kept flagging some pairs as duplicates that are actually two DIFFERENT products which happen to share a base name — the mechanical slug-matching couldn't tell them apart. A focused pass for that specific pattern (name divergence, not the "same device / data conflict" or "needs a source" patterns already handled) found 7, each confirmed against a source as a distinct real device. Un-paired by giving the mis-slugged variant a distinct slug/filename /name so it is no longer a false duplicate of the base model. No merges; both records stay as separate devices. - HTC U11+ vs U11 — distinct fall-2017 model, smaller bezels, SD835/6GB/3930mAh vs the summer U11 (androidcentral). `u11` -> `u11-plus` (name "HTC U11+"). - HTC One M9+ vs One M9 — the M9+ uses a Helio X10 and QHD display, separate from the SD810 One M9. `one-m9` -> `one-m9-plus`. - Huawei P40 Pro+ vs P40 Pro — distinct higher model (pocket-lint, CNET). `p40-pro` -> `p40-pro-plus`. - Sony Xperia Z3+ vs Xperia Z3 — the Z3+ (a.k.a. Xperia Z4) is a distinct 2015 Snapdragon 810 model with its own Wikipedia page, vs the 2014 Z3 (Snapdragon 801). `xperia-z3` -> `xperia-z3-plus`. - Motorola Razr (2023) vs Razr (2019) — different foldable generations (SD 8+ Gen 1 vs SD 710). `razr` -> `razr-2023`. - Fairphone 3+ (2020) vs Fairphone 3 (2019) — successor model. The 3+ record -> `fairphone-3-plus-dual-sim-lte-fp3plus`. - Gigabyte GSmart GS202+ vs GS202 — distinct + variant. The + record -> `gsmart-gs202-plus`. Each renamed record keeps its own specs and sources untouched (nothing merged, nothing invented); only slug, base_model_slug, name and filename change so the two devices no longer collide as a false pair. New slugs are collision-free. Both gates pass: `python -m app.validate` and `integrity_check.py <data> --strict` (0 hard anomalies). Residual brand-prefix pairs drop from 183 to 176. Refs #296
Summary
Continues the smartphone brand-prefix dedup from #329 (50 pairs) and #330 (364
pairs). Those left a residual of 353 pairs. This resolves 170 of them,
each source-verified, and explicitly un-pairs 3 that turned out to be genuinely
different devices sharing a base slug.
Resolved and merged: 170
1. 37 vendor/Wikipedia-sourced same-chip pairs. Same device, same physical chip
(soc slugs differ only in spelling —
qualcomm-msm8974-snapdragon-800vssnapdragon-800,hisilicon-kirin-980vskirin-980), battery/weight/ram alreadymatching. Unlike the phonedb twins in #330, the twin here cites Wikipedia or a
vendor page, so its specific
release_dateis reliable and was adopted over thebare side's generic
YYYY-01-01(spot-checked: Huawei P30 Pro2019-03-26=GSMArena; LG G2 September 2013 = Wikipedia). Kept the canonical bare slug, unioned
source_urls, set
verified=trueonly where the twin was a vendor/Wikipedia source.2. 7 same-model pairs whose two sides named different chips — verified which chip
is correct against a cited source, fixed the
soc, merged:dimensity-9400(oppo.com launch; GSMArena)snapdragon-8s-gen-3(motorola.com; phonearena)snapdragon-8-gen-3(phonearena SM8650-AB; honor.com)(APQ8064 S4 Pro), Honor Magic V2 (SD 8 Gen 2) — the bare side already held the
correct chip; merged with GSMArena/vendor citation.
3. 126 pairs where the soc slugs are the same chip via a spelling variant, or one
side's soc was a vague descriptor (
dual-core 1.0 GHz,<brand> mobile platform,n-a) while the twin named the specific FK-valid part. Kept the GSMArena barerecord, adopted the specific soc when the keeper's was vague, rejected the phonedb
stamped placeholders (
weight 150.0/battery 1500), left the unreliable phonedbdates alone, unioned source_urls, deleted the twin.
Confirmed different devices — un-paired (left as separate records, no merge): 3
one-m9: holds the One M9+ (Helio X10) vs the One M9 (Snapdragon 810).razr: the 2023 Razr (SD 8+ Gen 1) vs the 2019 Razr (SD 710).xperia-z3: the Xperia Z3+ (SD 810) vs the Xperia Z3 (SD 801).Counts
couldn't source this round (includes Huawei P50 Pro, which genuinely shipped both
Kirin 9000 and Snapdragon 888 SKUs — a real dual-chipset model), 157 pairs needing
a per-record ram/weight/battery source, and 2 odd/other pairs. Left documented
rather than guessed, per the "never invent a value" rule.
Validation
python -m app.validate→ passed.integrity_check.py <data> --strict→ no hard anomalies.commit (removes the 170 deleted twin slugs, reconciles score percentiles).
Closes #296