Skip to content

fix(data): merge 183 confirmed tablet/watch near-duplicate records - #324

Merged
Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/tablet-watch-dedup
Sep 28, 2026
Merged

Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/tablet-watch-dedup

Conversation

@Seungpyo1007

Copy link
Copy Markdown
Member

What & why

Remove 183 duplicate records across 182 verified tablet/watch groups, retaining the more complete record, unioning source URLs, and preserving differing original source data under raw_merged_records.

Pattern Tablet groups Watch groups Removed records
Identical GSMArena re-imports 15 3 18
Cross-directory model duplicates 44 25 70 (includes an Active 2 triplet)
Intra-directory brand-prefix duplicates 94 1 95

The investigation comment abbreviates its group list; these counts reflect individually verified matches rather than forcing its reported total of 192. Ambiguous RAM tiers, year splits, LTE/Wi-Fi distinctions, Surface Duo, and the MediaPad Vogue discrepancy remain unmerged. Three Prestigio 7.0 HD/Prime/Ultra Plus revisions are distinct devices and remain separate; Watch Magic remains unmerged because its OS could not be sourced confidently.

Repair the repeated 1500 mAh / 150 g import placeholders: 170 fields were replaced using same-device sibling evidence before merging, and 362 fields with no unambiguous replacement are null. Resolve nine watch RAM discrepancies and ten pixel-density discrepancies from the original CSV, rebuild tablet storage options without RAM entries, and correct the iPad Pro 12.9 (2015) battery from 307 to 10,307 mAh after checking the comma-separated source value. Synchronize representative variant memory when corrected.

Closes #296

Source

Existing references are retained, and references used for corrections are included in the changed records.

Validation

  • python -m app.validate passed across the repository.
  • Checked every merge's source union and original-data preservation, excluded RAM tiers and Plus revisions, corrected memory consistency, ownership, and removal of all top-level targeted placeholders.
  • git diff --check passed.
  • Public dump refresh: pending nullable mobile-field support.

Checklist

  • Targets develop
  • Validator passes locally
  • Paths and slugs follow the existing conventions
  • Every record retains source URLs
  • Refreshed public dump is the final commit

@github-actions github-actions Bot added bug Something isn't working data Dataset changes enhancement New feature or request labels Sep 28, 2026
@TechEngineBot

Copy link
Copy Markdown
Member

🔎 Data verification — Tier 0 (offline existence/trust)

Scored by app.verify; posted by TechEngineBot. Informational only — the structural gate (app.validate) is separate and authoritative for merge.

12/12 categories ? 191,636 records ? diff base develop@7eff079

Changed records in this PR

569 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" : 137
    "Yellow" : 430
    "Red" : 2
Loading
Category Distribution Total 🟢 🟡 🔴 🟢 %
tablet 🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟥 490 102 387 1 20.8%
watch 🟩🟩🟩🟩🟩🟨🟨🟨🟨🟨🟨🟥 79 35 43 1 44.3%
All 🟩🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟥 569 137 430 2 24.1%

Full-dataset baseline

191636 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" : 32768
    "Yellow" : 157814
    "Red" : 1054
Loading
Category Distribution Total 🟢 🟡 🔴 🟢 %
brand 🟩🟩🟩🟩🟩🟩🟩🟨🟨🟨🟨🟨 207 122 85 0 58.9%
soc 🟩🟩🟨🟨🟨🟨🟨🟥🟥🟥🟥🟥 2117 284 837 996 13.4%
smartphone 🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟥 93407 18003 75350 54 19.3%
tablet 🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟥 3305 289 3015 1 8.7%
watch 🟩🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟥 418 93 323 2 22.2%
pda 🟩🟩🟩🟩🟩🟩🟩🟨🟨🟨🟨🟨 140 83 57 0 59.3%
gpu 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟨🟨🟨 2076 1529 547 0 73.7%
cpu 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟨🟥 4512 4219 292 1 93.5%
laptop 🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 1995 107 1888 0 5.4%
monitor 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 882 0 882 0 0.0%
software 🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 42493 366 42127 0 0.9%
website 🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 40084 7673 32411 0 19.1%
All 🟩🟩🟨🟨🟨🟨🟨🟨🟨🟨🟨🟥 191636 32768 157814 1054 17.1%

Hard violations (forced red):

Count Check
1 !boost_ge_base

green = authoritative source + complete + consistent · yellow = plausible, needs confirmation · red = sparse/weak source or a hard contradiction. Promotion to verified runs in the scheduled verify-network workflow.

@TechEngineBot

TechEngineBot commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

TechEngine change review: PASS

12/12 categories ? 191,636 records ? diff base develop@7eff079

Check Result
python -m app.validate PASS
Changed dump JSON and manifest/index counts PASS
New hard integrity anomalies vs PR base PASS

Changed data

Category Added Modified Deleted Added verified Added unverified Added Kaggle-sourced
brand 0 0 0 0 0 0
soc 0 0 0 0 0 0
smartphone 0 0 0 0 0 0
tablet 0 490 154 0 0 0
watch 0 79 29 0 0 0
pda 0 0 0 0 0 0
gpu 0 0 0 0 0 0
cpu 0 0 0 0 0 0
laptop 0 0 0 0 0 0
monitor 0 0 0 0 0 0
software 0 0 0 0 0 0
website 0 0 0 0 0 0

Changed record examples

tablet modified

  • tablet/acer/2011/iconia-smart/acer-iconia-smart.json - Acer Iconia Smart
  • tablet/acer/2011/iconia-tab-a100/acer-iconia-tab-a100.json - Acer Iconia Tab A100
  • tablet/acer/2011/iconia-tab-a101/acer-iconia-tab-a101.json - Acer Iconia Tab A101
  • tablet/acer/2011/iconia-tab-a500/iconia-tab-a500.json - Iconia Tab A500
  • tablet/acer/2011/iconia-tab-a501/iconia-tab-a501.json - Iconia Tab A501
  • tablet/acer/2012/iconia-tab-a110/acer-iconia-tab-a110.json - Acer Iconia Tab A110
  • tablet/acer/2012/iconia-tab-a200/iconia-tab-a200.json - Iconia Tab A200
  • tablet/acer/2012/iconia-tab-a210/iconia-tab-a210.json - Iconia Tab A210
  • tablet/acer/2012/iconia-tab-a510/iconia-tab-a510.json - Iconia Tab A510
  • tablet/acer/2012/iconia-tab-a511/iconia-tab-a511.json - Iconia Tab A511
  • tablet/acer/2012/iconia-tab-a700/iconia-tab-a700.json - Iconia Tab A700
  • tablet/acer/2012/iconia-tab-a701/iconia-tab-a701.json - Iconia Tab A701
  • tablet/acer/2013/iconia-tab-a1-810/acer-iconia-tab-a1-810.json - Acer Iconia Tab A1-810
  • tablet/acer/2013/iconia-tab-a1-811/acer-iconia-tab-a1-811.json - Acer Iconia Tab A1-811
  • tablet/acer/2013/iconia-tab-a3/iconia-tab-a3.json - Iconia Tab A3
  • ... 475 more

tablet deleted

  • tablet/acer/2011/iconia-tab-a100/iconia-tab-a100.json - Iconia Tab A100
  • tablet/acer/2011/iconia-tab-a101/iconia-tab-a101.json - Iconia Tab A101
  • tablet/acer/2012/iconia-tab-a110/iconia-tab-a110.json - Iconia Tab A110
  • tablet/acer/2013/iconia-tab-a1-810/iconia-tab-a1-810.json - Iconia Tab A1-810
  • tablet/acer/2013/iconia-tab-a1-811/iconia-tab-a1-811.json - Iconia Tab A1-811
  • tablet/acer/2013/iconia-tab-b1-710/iconia-tab-b1-710.json - Iconia Tab B1-710
  • tablet/acer/2013/iconia-tab-b1-a71/iconia-tab-b1-a71.json - Iconia Tab B1-A71
  • tablet/acer/2014/acer-iconia-tab-7-a1-713/acer-iconia-tab-7-a1-713.json - Acer Iconia Tab 7 A1-713
  • tablet/acer/2014/acer-iconia-tab-7-a1-713hd/acer-iconia-tab-7-a1-713hd.json - Acer Iconia Tab 7 A1-713HD
  • tablet/acer/2014/acer-iconia-tab-a3-a20/acer-iconia-tab-a3-a20.json - Acer Iconia Tab A3-A20
  • tablet/acer/2014/acer-iconia-tab-a3-a20fhd/acer-iconia-tab-a3-a20fhd.json - Acer Iconia Tab A3-A20FHD
  • tablet/acer/2014/iconia-tab-8-a1-840fhd/iconia-tab-8-a1-840fhd.json - Iconia Tab 8 A1-840FHD
  • tablet/acer/2015/acer-iconia-tab-10-a3-a30/acer-iconia-tab-10-a3-a30.json - Acer Iconia Tab 10 A3-A30
  • tablet/acer/2018/acer-chromebook-tab-10/acer-chromebook-tab-10.json - Acer Chromebook Tab 10
  • tablet/alcatel/2013/one-touch-tab-7-hd/one-touch-tab-7-hd.json - One Touch Tab 7 HD
  • ... 139 more

watch modified

  • watch/alcatel/2015/go-watch/go-watch.json - GO Watch
  • watch/alcatel/2015/watch/watch.json - Watch
  • watch/allview/2016/allwatch/allwatch.json - Allwatch
  • watch/allview/2018/allwatch-hybrid-s/allwatch-hybrid-s.json - Allwatch Hybrid S
  • watch/allview/2018/allwatch-hybrid-t/allwatch-hybrid-t.json - Allwatch Hybrid T
  • watch/allview/2018/allwatch-v/allwatch-v.json - Allwatch V
  • watch/apple/2014/watch-38mm-1st-gen/watch-38mm-1st-gen.json - Watch 38mm (1st gen)
  • watch/apple/2014/watch-42mm-1st-gen/watch-42mm-1st-gen.json - Watch 42mm (1st gen)
  • watch/apple/2014/watch-edition-38mm-1st-gen/watch-edition-38mm-1st-gen.json - Watch Edition 38mm (1st gen)
  • watch/apple/2014/watch-edition-42mm-1st-gen/watch-edition-42mm-1st-gen.json - Watch Edition 42mm (1st gen)
  • watch/apple/2014/watch-sport-38mm-1st-gen/watch-sport-38mm-1st-gen.json - Watch Sport 38mm (1st gen)
  • watch/apple/2014/watch-sport-42mm-1st-gen/watch-sport-42mm-1st-gen.json - Watch Sport 42mm (1st gen)
  • watch/apple/2016/watch-edition-series-2-38mm/watch-edition-series-2-38mm.json - Watch Edition Series 2 38mm
  • watch/apple/2016/watch-edition-series-2-42mm/watch-edition-series-2-42mm.json - Watch Edition Series 2 42mm
  • watch/apple/2016/watch-series-1-aluminum-38mm/watch-series-1-aluminum-38mm.json - Watch Series 1 Aluminum 38mm
  • ... 64 more

watch deleted

  • watch/apple/2014/apple-watch-38mm-1st-gen/apple-watch-38mm-1st-gen.json - Apple Watch 38mm (1st gen)
  • watch/apple/2014/apple-watch-42mm-1st-gen/apple-watch-42mm-1st-gen.json - Apple Watch 42mm (1st gen)
  • watch/apple/2014/apple-watch-edition-38mm-1st-gen/apple-watch-edition-38mm-1st-gen.json - Apple Watch Edition 38mm (1st gen)
  • watch/apple/2014/apple-watch-edition-42mm-1st-gen/apple-watch-edition-42mm-1st-gen.json - Apple Watch Edition 42mm (1st gen)
  • watch/apple/2014/apple-watch-sport-38mm-1st-gen/apple-watch-sport-38mm-1st-gen.json - Apple Watch Sport 38mm (1st gen)
  • watch/apple/2014/apple-watch-sport-42mm-1st-gen/apple-watch-sport-42mm-1st-gen.json - Apple Watch Sport 42mm (1st gen)
  • watch/apple/2016/apple-watch-edition-series-2-38mm/apple-watch-edition-series-2-38mm.json - Apple Watch Edition Series 2 38mm
  • watch/apple/2016/apple-watch-edition-series-2-42mm/apple-watch-edition-series-2-42mm.json - Apple Watch Edition Series 2 42mm
  • watch/apple/2016/apple-watch-series-1-aluminum-38mm/apple-watch-series-1-aluminum-38mm.json - Apple Watch Series 1 Aluminum 38mm
  • watch/apple/2016/apple-watch-series-1-aluminum-42mm/apple-watch-series-1-aluminum-42mm.json - Apple Watch Series 1 Aluminum 42mm
  • watch/apple/2016/apple-watch-series-2-38mm/apple-watch-series-2-38mm.json - Apple Watch Series 2 38mm
  • watch/apple/2016/apple-watch-series-2-42mm/apple-watch-series-2-42mm.json - Apple Watch Series 2 42mm
  • watch/apple/2016/apple-watch-series-2-aluminum-38mm/apple-watch-series-2-aluminum-38mm.json - Apple Watch Series 2 Aluminum 38mm
  • watch/apple/2016/apple-watch-series-2-aluminum-42mm/apple-watch-series-2-aluminum-42mm.json - Apple Watch Series 2 Aluminum 42mm
  • watch/apple/2017/apple-watch-edition-series-3/apple-watch-edition-series-3.json - Apple Watch Edition Series 3
  • ... 14 more

Heuristic review

  • Heuristic warnings: none found.

@TechEngineBot

TechEngineBot commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

TechEngine validation stats: PASS

12/12 categories ? 191,636 records ? diff base develop@7eff079

Data summary

Category Total Verified Unverified Missing verified Tracked Verified % of tracked
brand 207 123 84 0 207 59.4%
soc 2117 284 1833 0 2117 13.4%
smartphone 93407 17581 75826 0 93407 18.8%
tablet 3305 285 3020 0 3305 8.6%
watch 418 93 325 0 418 22.2%
pda 140 74 66 0 140 52.9%
gpu 2076 1496 580 0 2076 72.1%
cpu 4512 4219 293 0 4512 93.5%
laptop 1995 105 1890 0 1995 5.3%
monitor 882 0 882 0 882 0.0%
software 42493 358 42135 0 42493 0.8%
website 40084 7635 32449 0 40084 19.0%
all 191636 32253 159383 0 191636 16.8%

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.8% (32253/191636), smartphone 18.8% (17581/93407), website 19.0% (7635/40084), and 1 more.
Tracked coverage excludes records missing the verified field; see the Missing verified column for those records.
This does not fail validation. Keep imported records verified: false until manual audit, but treat this as follow-up verification work before relying on the affected categories as curated data.

Validation notes

  • The integrity gate blocks only hard anomalies introduced by this PR relative to its merge base.
  • Full advisory outlier listings are suppressed on successful runs because they are dataset-wide and mostly stable between PRs.
  • Failure runs still include a detailed log excerpt for debugging.

Key output:

## app.validate
## integrity_check.py (PR head compared with PR base)
loaded CPU=4512 GPU=2076
Integrity section Flagged lines
structural 0
CPU name/tier consistency (desktop mainstream only) 0
CPU single>multi (cinebench/geekbench — should be multi>=single) 0
CPU era-vs-score outliers 8
CPU cross-source ratio outliers (possible wrong-variant) 132
GPU cross-source ratio outliers + sanity 51

@Seungpyo1007
Seungpyo1007 marked this pull request as ready for review September 28, 2026 21:10
@Seungpyo1007
Seungpyo1007 merged commit 31ffd15 into develop Sep 28, 2026
7 of 8 checks passed
Seungpyo1007 added a commit that referenced this pull request Sep 29, 2026
Scanned the pda category (140 records, reviewed every match by hand) for the
three duplicate patterns the tablet/watch (#324) and smartphone (#329/#330)
passes turned up. Merged 28 redundant files into 21 keepers (140 -> 112),
keeping the better-sourced side field by field and unioning source_urls.

Pattern 1 - identical scrape imported twice under different row-id slugs
(100% identical specs, differ only by source_row):
  - motorola/2002/accompli-388: kept ...-scrapegsma-344, deleted ...-1227.
  - mitac/2005/mio-a701: kept ...-scrapegsma-278, deleted ...-1161.

Pattern 2 - same device under a brand-prefixed slug and a bare slug in sibling
dirs. Same convention as the #330 GSMArena/phonedb merge: kept the bare
GSMArena/Kaggle record (real specs + raw_gsmarena, sometimes Wikipedia),
upgraded name to the brand-inclusive form, unioned source_urls to retain the
phonedb reference, kept the keeper's soc/release_date, left verified as-is,
deleted the phonedb twin:
  - treo-680  <- palm-treo-680-palm-lowrider   ("Palm Treo 680")
  - treo-750v <- palm-treo-750v-htc-cheetah    ("Palm Treo 750v")
  - treo-750  <- palm-treo-750-htc-cheetah     ("Palm Treo 750")
  - treo-500v <- palm-treo-500v-palm-otto      ("Palm Treo 500v")
Treo 750 vs 750v and Treo 500 vs 500v were kept as distinct SKUs (only the
matching-model twins were merged). palm-treo-500-palm-otto (2008 Treo 500) is a
different device and was left alone.

Pattern 3 - cross-source duplicate: the same PDA imported as a clean short-slug
record and as a cigarplug/scrape-gsma row in the same base dir. Kept the clean
record (correct soc FK, canonical slug), deleted the scrape twin, and repaired
the keeper's ram_gb from the twin's cited memory_internal (the clean side
carried the fabricated ram_gb=1 placeholder; the scrape side had the real
value). The github.com/cigarplug/scrape-gsma URL was unioned so the repaired
RAM is sourced:
  - 16 HP iPAQ pairs: h6310/h6315/h6320/h6325/hw6510/hw6515 -> 0.0625 GB (64 MB);
    hw6910/hw6915/rw6815/rw6818/rw6828/514 -> 0.0625; 610c/910c/data-messenger/
    voice-messenger -> 0.125 GB (128 MB).
  - i-mate pda2 (two identical scrape twins, -1004 and -121) -> 0.125 GB.
  - i-mate pda2k -> 0.125 GB; i-mate pdal -> 0.062 GB.
  - palm treo-pro (3-way: bare + scrape-gsma-7066 + phonedb palm-treo-pro):
    kept the bare Wikipedia-cited record, ram 1 -> 0.125 GB (128 MB), name ->
    "Palm Treo Pro", unioned all four source_urls.

Left unmerged and documented (ambiguous, per "leave ambiguous unmerged"): the
GSM webOS palm-pre-scrapegsma-7065 and palm-pre-plus-scrapegsma-7063 overlap a
region-split family (palm-pre[-plus]-palm-castle-c CDMA and
palm-pre[-plus]-gsm-*-palm-castle-g EU/NA) but do not map 1:1, so no merge.
The EU/NA regional variant pairs (pixi-gsm, pixi-plus-gsm, pre-2-gsm,
pre[-plus]-gsm-castle-g) are legitimate separate SKUs and were left alone.

No value was invented: every ram_gb repair took the real figure already present
in the deleted twin's cited memory_internal. verified flags unchanged.

Both gates pass: `python -m app.validate` and `integrity_check.py <data>
--strict` (0 hard anomalies).

Refs #296
@Seungpyo1007
Seungpyo1007 deleted the Seungpyo1007/tablet-watch-dedup branch September 30, 2026 08:32
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 enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Data accuracy: corrections, duplicates and dates (workstream)

2 participants