The real-data era: token live, stubs retired, editions on demand

BGG application approved. The migration the stub markers guarded for
weeks: both synthetic caches deleted; tests/fixtures/bgg_cache
re-recorded from the live API (recording list extended to every
scenario the suite exercises — Civilization truncation, the Sorcerer
SPI tiebreak, StarForce, Flat Top's thematic year, Alice Is Missing's
rpgitem fallback); resolve --force re-matched all 133 titles for real
(109 auto, 6 ambiguous, 18 unmatched, 30 edition ballots);
data/STUB_DATA.marker deleted with its exit condition met — the guard
mechanism stays armed should stubs ever regenerate.

Reality fixed one bug and taught one lesson. The bug: a multi-type
search lists an expansion twice (once per matched type) and the parser
kept the generic boardgame entry — parse_search now dedupes by id
preferring the specific type, which is what keeps expansion tagging
(the base-vs-expansion review guard) alive on real data. The lesson:
hand-built ambiguity is tidier than the real thing — Wingspan has 46
versions with three plausible English Stonemaier printings, so the
suite's synthetic version ids and version_auto expectations became
real ballots (assertions updated to recorded reality; the cue-plumbing
test keeps its crafted two-version scenario via an injected
transport).

New: pick edition. A cue-less matched row is version_unknown by design
(never guess) — but the owner knows which printing the box is.
open_version_ballot() fetches the game's complete version list,
cue-scores it when cues exist, and marks the row version_ambiguous so
the normal Review edition pass presents it; the Titles page grows the
button (Eric's three Wiz-Wars: two cue-less copies can now each claim
their edition).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jXZFSTZQKzAC8fqpWSz9g
This commit is contained in:
Eric Wagoner
2026-08-05 18:50:17 -04:00
co-authored by Claude Fable 5
parent 15d3120029
commit 59f4b8c43c
135 changed files with 15851 additions and 266 deletions
@@ -1 +1,550 @@
<items><item type="boardgame" id="2524"><name type="primary" value="game"/><versions><item type="boardgameversion" id="252401"><name type="primary" value="SPI Designer's Edition"/><yearpublished value="1974"/><link type="boardgamepublisher" id="1" value="Simulations Publications, Inc. (SPI)"/><link type="language" id="1" value="English"/></item><item type="boardgameversion" id="252402"><name type="primary" value="SPI folio edition"/><yearpublished value="1974"/><link type="boardgamepublisher" id="1" value="Simulations Publications, Inc. (SPI)"/><link type="language" id="1" value="English"/></item></versions></item></items>
<?xml version="1.0" encoding="utf-8"?><items termsofuse="https://boardgamegeek.com/xmlapi/termsofuse"><item type="boardgame" id="2524">
<thumbnail>https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__small/img/OTL4rEL5eQ-8jJ_JubPwIq9LBIQ=/fit-in/200x150/filters:strip_icc()/pic567384.jpg</thumbnail>
<image>https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__original/img/JRuDUwwK8S1jG9gZISv_Hwz5Kog=/0x0/filters:format(jpeg)/pic567384.jpg</image>
<name type="primary" sortindex="1" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" />
<name type="alternate" sortindex="1" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century Designer&#039;s Edition" />
<description>Adapted from the box:
The game is a simulation of events within a conjectural future history in which telekinesis is used to move ships through space. It is played on a map which displays 74 star systems in a three-dimensional "sphere" of space measuring roughly 40 light years in diameter, with Earth's home system at the center. A grid of hexagons printed over the map is used to regulate movement and position of pieces. Pieces' exact locations are not known until they "meet" in the same three-dimensional "hex space".
The pieces in the game represent groups of four interstellar spaceships (StarForces) and space stations (StarGates). Each Player maneuvers his pieces (via Stellar Shifting) to engage those of the enemy. Movement is plotted and executed simultaneously. The game proceeds this way (for a specified number of turns) as the players try to achieve the objectives set forth in the rules. No prior knowledge is required to play the game - just a little ingenuity and common sense.
Battles take place when units are in the same three-dimensional location. In the Basic Game, the attacking Player compares the total variable strengths of the involved units and consults a simple probability table to determine the outcome of each battle. In the Advanced Game, a small tactical maneuver map is used. When enemy forces engage on the main map, they are transferred to the tactical display. Here they move (in three dimensions), attack and defend using a fixed number of action points per tactical turn.
Combat outcomes result in pieces not being destroyed but being "randomised"; usually to a location far from all the action.
Part of the StarForce Trilogy box set, along with Outreach and StarSoldier. There are also special rules to use Starsoldier as a tactical game for StarForce.
</description>
<yearpublished value="1974" />
<minplayers value="1" />
<maxplayers value="3" />
<poll name="suggested_numplayers" title="User Suggested Number of Players" totalvotes="6">
<results numplayers="1">
<result value="Best" numvotes="0" />
<result value="Recommended" numvotes="2" />
<result value="Not Recommended" numvotes="1" />
</results>
<results numplayers="2">
<result value="Best" numvotes="4" />
<result value="Recommended" numvotes="0" />
<result value="Not Recommended" numvotes="0" />
</results>
<results numplayers="3">
<result value="Best" numvotes="1" />
<result value="Recommended" numvotes="0" />
<result value="Not Recommended" numvotes="0" />
</results>
<results numplayers="3+">
<result value="Best" numvotes="0" />
<result value="Recommended" numvotes="2" />
<result value="Not Recommended" numvotes="0" />
</results>
</poll>
<poll-summary name="suggested_numplayers" title="User Suggested Number of Players">
<result name="bestwith" value="Best with 23 players" />
<result name="recommmendedwith" value="Recommended with 13+ players" />
</poll-summary> <playingtime value="240" />
<minplaytime value="240" />
<maxplaytime value="240" />
<minage value="12" />
<poll name="suggested_playerage" title="User Suggested Player Age" totalvotes="2">
<results>
<result value="2" numvotes="0" />
<result value="3" numvotes="0" />
<result value="4" numvotes="0" />
<result value="5" numvotes="0" />
<result value="6" numvotes="0" />
<result value="8" numvotes="0" />
<result value="10" numvotes="0" />
<result value="12" numvotes="0" />
<result value="14" numvotes="1" />
<result value="16" numvotes="1" />
<result value="18" numvotes="0" />
<result value="21 and up" numvotes="0" />
</results>
</poll> <poll name="language_dependence" title="Language Dependence" totalvotes="4">
<results>
<result level="1" value="No necessary in-game text" numvotes="0" />
<result level="2" value="Some necessary text - easily memorized or small crib sheet" numvotes="0" />
<result level="3" value="Moderate in-game text - needs crib sheet or paste ups" numvotes="2" />
<result level="4" value="Extensive use of text - massive conversion needed to be playable" numvotes="2" />
<result level="5" value="Unplayable in another language" numvotes="0" />
</results>
</poll>
<link type="boardgamecategory" id="1016" value="Science Fiction" />
<link type="boardgamecategory" id="1019" value="Wargame" />
<link type="boardgamemechanic" id="2689" value="Action Queue" />
<link type="boardgamemechanic" id="2676" value="Grid Movement" />
<link type="boardgamemechanic" id="2026" value="Hexagon Grid" />
<link type="boardgamemechanic" id="2070" value="Simulation" />
<link type="boardgamefamily" id="64949" value="Components: Map (Interplanetary or Interstellar scale)" />
<link type="boardgamefamily" id="58557" value="Series: Simultaneous Movement System (SPI)" />
<link type="boardgameintegration" id="6215" value="StarSoldier: Tactical Warfare in the 25th Century" />
<link type="boardgamecompilation" id="146115" value="StarForce Trilogy" />
<link type="boardgamedesigner" id="1030" value="Redmond Aksel Simonsen" />
<link type="boardgameartist" id="1030" value="Redmond Aksel Simonsen" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<versions><item type="boardgameversion" id="219137">
<thumbnail>https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__small/img/9PYzeERL1pUms7L4hG2WIloVriU=/fit-in/200x150/filters:strip_icc()/pic20984.jpg</thumbnail>
<image>https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__original/img/GAXZD5DAX6dgChoy-UXXDrAmenQ=/0x0/filters:format(jpeg)/pic20984.jpg</image>
<canonicalname value="StarForce \&#039;Alpha Centauri\&#039;: Interstellar Conflict in the 25th Century Designer\&#039;s Edition"></canonicalname>
<link type="boardgameversion" id="2524" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" inbound="true"/>
<name type="primary" sortindex="1" value="SPI boxed designer&#039;s edition" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<link type="boardgameartist" id="1030" value="Redmond Aksel Simonsen" />
<yearpublished value="1974" />
<productcode value="HSF-771" />
<width value="9" />
<length value="11.625" />
<depth value="2" />
<weight value="0" />
<link type="language" id="2184" value="English" />
</item>
<item type="boardgameversion" id="28238">
<thumbnail>https://cf.geekdo-images.com/RQampTopF1fI_dthUB1TDg__small/img/_U4-K5t8K646btzkBAK3D7sP-9s=/fit-in/200x150/filters:strip_icc()/pic56687.jpg</thumbnail>
<image>https://cf.geekdo-images.com/RQampTopF1fI_dthUB1TDg__original/img/9d3TherAOwjA7MzTkTQHtCY5cxc=/0x0/filters:format(jpeg)/pic56687.jpg</image>
<canonicalname value="StarForce \&#039;Alpha Centauri\&#039;: Interstellar Conflict in the 25th Century"></canonicalname>
<link type="boardgameversion" id="2524" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" inbound="true"/>
<name type="primary" sortindex="1" value="SPI boxed edition" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<link type="boardgameartist" id="1030" value="Redmond Aksel Simonsen" />
<yearpublished value="1974" />
<productcode value="U0660" />
<width value="9" />
<length value="11.5" />
<depth value="2" />
<weight value="1.03617" />
<link type="language" id="2184" value="English" />
</item>
<item type="boardgameversion" id="108034">
<thumbnail>https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__small/img/OTL4rEL5eQ-8jJ_JubPwIq9LBIQ=/fit-in/200x150/filters:strip_icc()/pic567384.jpg</thumbnail>
<image>https://cf.geekdo-images.com/8PIdXg87V8l-VuCZAplQlQ__original/img/JRuDUwwK8S1jG9gZISv_Hwz5Kog=/0x0/filters:format(jpeg)/pic567384.jpg</image>
<canonicalname value="StarForce \&#039;Alpha Centauri\&#039;: Interstellar Conflict in the 25th Century Designer\&#039;s Edition"></canonicalname>
<link type="boardgameversion" id="2524" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" inbound="true"/>
<name type="primary" sortindex="1" value="SPI Designer&#039;s Edition" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<link type="boardgameartist" id="1030" value="Redmond Aksel Simonsen" />
<yearpublished value="1974" />
<productcode value="HSF-771" />
<width value="9" />
<length value="11.5" />
<depth value="2.1" />
<weight value="0" />
<link type="language" id="2184" value="English" />
</item>
<item type="boardgameversion" id="28154">
<thumbnail>https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__small/img/9PYzeERL1pUms7L4hG2WIloVriU=/fit-in/200x150/filters:strip_icc()/pic20984.jpg</thumbnail>
<image>https://cf.geekdo-images.com/Cko_tNtjRX8d6avovTl-Ag__original/img/GAXZD5DAX6dgChoy-UXXDrAmenQ=/0x0/filters:format(jpeg)/pic20984.jpg</image>
<canonicalname value="StarForce \&#039;Alpha Centauri\&#039;: Interstellar Conflict in the 25th Century"></canonicalname>
<link type="boardgameversion" id="2524" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" inbound="true"/>
<name type="primary" sortindex="1" value="SPI flat pack designer&#039;s edition" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<link type="boardgameartist" id="1030" value="Redmond Aksel Simonsen" />
<yearpublished value="1974" />
<productcode value="" />
<width value="11.75" />
<length value="14.75" />
<depth value="1" />
<weight value="0" />
<link type="language" id="2184" value="English" />
</item>
<item type="boardgameversion" id="249134">
<thumbnail>https://cf.geekdo-images.com/fPWr5Hd4H-PjUcQTtbicNQ__small/img/t7KpLAefJXyV1OX89UG7F1UvC8A=/fit-in/200x150/filters:strip_icc()/pic1220943.jpg</thumbnail>
<image>https://cf.geekdo-images.com/fPWr5Hd4H-PjUcQTtbicNQ__original/img/RhZT3RK-EScpzeAPzVJbzKz__8o=/0x0/filters:format(jpeg)/pic1220943.jpg</image>
<canonicalname value="StarForce \&#039;Alpha Centauri\&#039;: Interstellar Conflict in the 25th Century"></canonicalname>
<link type="boardgameversion" id="2524" value="StarForce &#039;Alpha Centauri&#039;: Interstellar Conflict in the 25th Century" inbound="true"/>
<name type="primary" sortindex="1" value="SPI Flat Tray Standard Edition" />
<link type="boardgamepublisher" id="120" value="SPI (Simulations Publications, Inc.)" />
<yearpublished value="1974" />
<productcode value="" />
<width value="0" />
<length value="0" />
<depth value="0" />
<weight value="0" />
<link type="language" id="2184" value="English" />
</item>
</versions>
</item>
</items>