CLCTN · TYPE MANIFEST · VIDEO GAME · SEPTEMBER 2026
CIB · THE LIBRARY
SUPERSEDES RETRO GAME
Retro is a date that keeps moving.
A type called retro game has to answer a question the app has no business asking: how old is old enough. In 2026 that line sits somewhere around the PS2, and it will have moved again by the time the type ships. Meanwhile a 1997 Saturn game and a 2019 Switch game are collected by the same person, in the same room, with the same anxieties — completeness, region, edition, and whether the thing still works. So the type is video game, the whole medium, and the era becomes a field rather than a boundary.
Written against vinyl.yml for shape and retro-computer.yml for the clock. This page also settles the signature question raised in One Roof, section 09: the CIB triptych is withdrawn and the game gets the generic ladder instead.
01 · WHY THE OLD CUT WAS WRONG
Four separate failures, each of which on its own would be a reason to widen the type. Together they make "retro" indefensible as a category boundary.
{{ w.n }}
{{ w.t }}
{{ w.b }}
WHAT IT COSTS TO KEEP THE OLD CUT
{{ w.cost }}
02 · FIVE MEDIA, ONE TYPE
The real design problem isn't the date, it's the media: a cartridge, a disc, a big PC box, a handheld card and a download code want different completeness, different lookup and different decay. One field — media — resolves all of it, because the rules that vary are exactly the rules the kit already parameterises.
Pick a medium. The two signatures, the clock, the lookup strategy and the hard part all change; the slots, the verbs and the scale do not.
{{ t.name }}
{{ exTitle }}
{{ exSub }}
{{ exYears }}
SIGNATURE 1 · LADDER · {{ axisCount }} AXES · LAST STEP MEANS MISSING
{{ ladderNote }}
{{ s.n }}
{{ s.mark }}
{{ l }}
SIGNATURE 2 · SET · WHAT SHOULD BE IN THE BOX
{{ setNote }}
{{ sl.mark }}
{{ sl.n }}
{{ setCount }}
THE ONE CLOCK · RENDERS IN THE STATUS SLOT · ESTIMATE
{{ clockName }}
{{ clockNote }}
HOW IT IS IDENTIFIED
{{ lookupCode }}
THE HARD PART
{{ hard }}
Note what stays put across all five: one scale, one clock, two signatures, the same seven slots. The medium changes the content of each, never the count — which is the One Roof contract holding under the widest type in the catalogue.
03 · VIDEO-GAME.YML
Fourteen fields, no new primitive. mediaRules is the only unusual key: a lookup table keyed on the media field that selects which insert slots, which clock formula and which identifier strategy apply. It is data, not code, and it is the reason one type can hold five media without five branches in the app.
RESOURCES/TYPES/VIDEO-GAME.YML
REPLACES RETRO-GAME
id: video-game name: singular: Game plural: Games collection: The Library mark: "CIB" icon: cartridge gradient: [indigo, claret] # Same title, different region or print = different object. duplicates: rows spine: title: Title subtitle: Platform # not the publisher — this is how shelves are read year: Released # this print, not the game's first release acquired: Acquired on paid: Paid value: Value # One scale, shared by every axis and every medium. Missing is a step, so # completeness and condition are the same question asked once. conditions: [Sealed, Mint, Near mint, Very good, Good, Fair, Poor] allowMissing: true # Signatures — see One Roof, section 09. Two is the cap, and the clock # is not one of them: it renders in the status slot like every other clock. signatures: - renderer: ladder axes: [mediaCondition, boxCondition, manualCondition] - renderer: set binds: inserts # slots come from mediaRules, below # The era is a consequence of the medium, never a boundary. This table is # what lets one type cover 1977 to now without a second type. mediaRules: cartridge: identifier: catalogueNumber inserts: [manual, map, insert, regCard, dustSleeve, spineCard] clock: saveBattery # lithium cell, ~25-35 yrs optical: identifier: barcode inserts: [manual, inlay, regCard, demoDisc, obi] clock: discRot # pressing-plant dependent, see Q2 floppy: identifier: catalogueNumber inserts: [manual, codeWheel, feelies, map, disks] clock: mediaRot card: identifier: barcode inserts: [manual, insert] clock: none code: identifier: none # a licence is not an object; the card is inserts: [codeCard, sleeve] clock: codeExpiry # the only clock that can reach zero lookup: symbologies: [ean13, upc-a, jan] providers: [openvgdb] localCorpus: releases.json # ~180k releases, region-resolved ocrFields: [title, platform, catalogueNumber] identifierPattern: per-platform searchable: [title, subtitle, year, publisher, region, edition, place] placeLabel: Where it is related: [subtitle, publisher, series] fields: - key: platform | Platform | text | auto - key: publisher | Publisher | text | auto - key: catalogueNumber | Catalogue no. | text | auto · the real id - key: region | Region | choice | NTSC-U, NTSC-J, PAL, region-free - key: media | Media | choice | drives mediaRules - key: edition | Edition | text | first print, Greatest Hits, Platinum, budget - key: revision | Revision | text | cart rev / disc ver - key: mediaCondition | Cart / disc | scale | ladder axis 1 - key: boxCondition | Box | scale | ladder axis 2 - key: manualCondition | Manual | scale | ladder axis 3 - key: inserts | What's inside | set | slots per medium - key: slab | Sealed / graded | choice | None, Sealed ungraded, WATA, VGA - key: saveBattery | Save battery | date | feeds the clock - key: playLog | Played | log | [date, note, finished] supersedes: - type: official/retro-game@1 fields: cart -> mediaCondition box -> boxCondition manual -> manualCondition cib -> (derived from the ladder; field removed)
04 · IDENTITY — WHY TWO COPIES ARE NEVER THE SAME COPY
This is the type's hardest problem and the one a title-based lookup gets wrong every time. Four axes of variation, all of which move the price by a multiple, none of which are visible in the title.
AXIS
THE SAME GAME, TWO OBJECTS
HOW THE TYPE SETTLES IT
{{ i.k }}
{{ i.a }}
{{ i.b }}
05 · THE SEALED MARKET — A POSITION, NOT A FEATURE
WHAT THE TYPE DOES
A slab field with four values, and Sealed as the top step of the ordinary condition scale. A graded slab shows as an outline on the ladder's marker — the same treatment comics and trading cards get, because it is the same fact. Nothing else: no price index, no population report, no grading-service integration.
WHY IT STOPS THERE
The sealed-and-graded end of this hobby is a speculative market with a live controversy attached, and building for it would make the app an instrument of that market rather than a catalogue of a collection. Supporting the field is honest — people own slabs. Ranking, valuing or celebrating them is a product decision I would not make for you without asking.
06 · MIGRATION FROM RETRO GAME
Nobody's collection moves. Three of the four fields map by name, the fourth is derived and disappears, and the media field is filled in from the platform — a Mega Drive game is a cartridge, a Dreamcast game is a disc — with a one-screen confirm for the handful of platforms that shipped both.
{{ m.k }}
{{ m.t }}
{{ m.b }}
07 · OPEN QUESTIONS
{{ o.k }}
{{ o.q }}
{{ o.b }}