Skip to content

fix(data): resolve 170 more smartphone brand-prefix conflicts - #334

Merged
Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/smartphone-prefix-conflicts-2
Sep 29, 2026
Merged

Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/smartphone-prefix-conflicts-2

Conversation

@Seungpyo1007

@Seungpyo1007 Seungpyo1007 commented Sep 29, 2026 •

Copy link
Copy Markdown
Member

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-800 vs
snapdragon-800, hisilicon-kirin-980 vs kirin-980), battery/weight/ram already
matching. Unlike the phonedb twins in #330, the twin here cites Wikipedia or a
vendor page, so its specific release_date is reliable and was adopted over the
bare side's generic YYYY-01-01 (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 which chip
is correct against a cited source, fixed the soc, 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 (SD 695), Nord CE 2 (Dimensity 900), Sony Xperia Z
    (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 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.

Confirmed different devices — un-paired (left as separate records, no merge): 3

  • HTC one-m9: holds the One M9+ (Helio X10) vs the One M9 (Snapdragon 810).
  • Motorola razr: the 2023 Razr (SD 8+ Gen 1) vs the 2019 Razr (SD 710).
  • Sony xperia-z3: the Xperia Z3+ (SD 810) vs the Xperia Z3 (SD 801).

Counts

  • resolved-and-merged: 170
  • confirmed-different-devices-not-duplicates: 3 (un-paired)
  • still-unresolved-no-source: 180 — 21 same-model pairs whose correct chip I
    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.
  • 92,824 smartphone files (−170), zero duplicate slugs. Dump refreshed in the last
    commit (removes the 170 deleted twin slugs, reconciles score percentiles).

Closes #296

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.
@github-actions github-actions Bot added bug Something isn't working data Dataset changes enhancement New feature or request labels Sep 29, 2026
@Seungpyo1007
Seungpyo1007 merged commit ee4f2fe into develop Sep 29, 2026
5 checks passed
@Seungpyo1007
Seungpyo1007 deleted the Seungpyo1007/smartphone-prefix-conflicts-2 branch September 29, 2026 12:47
@Seungpyo1007 Seungpyo1007 removed the enhancement New feature or request label Sep 29, 2026
Seungpyo1007 added a commit that referenced this pull request Sep 29, 2026
… 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working data Dataset changes

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Data accuracy: corrections, duplicates and dates (workstream)

1 participant