Skip to content

Cosmetic variant families are split across several base_item groups #204

Description

@alistair3149

The problem

A single cosmetic variant family is sometimes split across several base_item groups, so a consumer asking "what other colours does this come in" gets a subset, with nothing to indicate the rest exist.

ADP-mk4 Core Righteous and ADP-mk4 Core Woodland are the same torso piece in different skins — same set_name, manufacturer, type and size — but land in different groups:

ADP-mk4 Core Righteous   cds_armor_heavy_core_02_03_xenothreat   base_item: ADP-mk4 Core (Modified)
ADP-mk4 Core Woodland    cds_armor_heavy_core_01_01_01           base_item: itself

Counting conservatively — armor and clothing only, and only (set_name, type) pairs where every base item's name contains the set name, so groups contaminated by an unrelated product are excluded — 11 families are split this way, covering 144 items. The ADP-mk4 example above isn't in that count, because its group is also contaminated (see #202).

Two causes

1. The model index. The split tracks the first numeric group in class_name:

Morozov-SH Helmet            rrs_specialist_heavy_helmet_01_01_*     13 items
Morozov-SH Helmet Redshift   rrs_specialist_heavy_helmet_03_01_*      9 items

2. Token order in class_name. This one looks unambiguous — the same product, with two tokens transposed, lands in a different group:

Inquisitor Legs Base        outlaw_legacy_armor_medium_legs_01_01_01    22 items
Inquisitor Legs Icefall     outlaw_legacy_medium_armor_legs_01_02_01     7 items
Inquisitor Legs Neon Pink   outlaw_legacy_medium_armor_legs_02_01_01     3 items

armor_medium versus medium_armor. The same transposition splits Inquisitor Arms into three groups too, and between them those two families are 62 of the 144 items.

Deriving the grouping key from something stable, or at minimum normalising token order, would fix case 2 outright.

Method

Full sweep on 18 September 2026:

GET /api/v2/items?limit=200&page=N&include=related_items&locale=en_EN

62 pages, 12,331 items. Counted (set_name, type) pairs in Char_* types spanning more than one base_item, keeping only those where every base item's name contains the set name, so groups contaminated by an unrelated product are excluded.

Also excluded: the seven items carrying _dmg in class_name, six of which are the Venture set and five of which share a display name with a pristine item. Those five split three further families on their own; including them the count would be 14 families and 228 items.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions