The corpus knew '28 stages' and 'six tutorials with no AIParams'. It did not know the NUMBERS, and they are not 1..28. Hashing stage\UnitGroup_S%02d.tbl for N=0..39 against GP_MAIN_GAME_E.pak: 1-16 and 18-29 ship, 17 does not -- 28 files -- and the six with no AIParams_SNN.tbl are exactly 18-23. So S01-S16 story, S17 absent, S18-S23 tutorials, S24-S29 story: 22 + 6. eng\GP_HANGAR_ARSENAL_3D.tbl's ResourceID record keys a player-craft mesh by stage: Unit_St1_6 -> rou_f001 (DeltaSaber T), Unit_St7_16 -> rou_f002 (W), plus six further fields tagged with the raw numbers 24,25,26,27,28,29 -> rou_f002 x4, rou_f004 (DeltaSaber A) at 28, rou_f002. The bare tags are the last six story-stage numbers. Control in the same record: tag_hash(name) == tag for 11/11 named fields, so those six genuinely carry no name. Cross-check from a different file: grouping the Arsenal pak's 168 stage-scoped entries by which _Player craft their loadout mounts gives f001 = 6, f002 = 15, f004 = 1, tutorials 5+1 = 6, and every number closes against ResourceID -- 6 = Unit_St1_6; 15 = Unit_St7_16 (10) plus tags 24,25,26,27,29 (5); 1 = tag 28; 6+15+1+6 = 28. So the player flies the DeltaSaber A in exactly one mission, S28, and the DeltaSaber T only for the first six. Not settled: the Arsenal entry filenames, so which of the 168 is S24 vs S25 is constrained but not pinned. New structure doc, artefact and regenerator; the other five artefacts regenerate byte-identical.