{ "schemaVersion": 1, "note": "Exact historical campaign JSON bytes archived from Git. Layouts, names and original moveLimit values are unchanged. Validation uses the current shared game rules: rotations and failed probes are free; only successful removals consume budget. These are historical level layouts, not complete reproductions of historical application code or scoring rules.", "versions": [ { "version": "v0.1", "sourceCommit": "ef2724bb2e6582c92ac26b3a45fcc18c406d6c21", "sourceRef": "ef2724b", "sourcePath": "levels/campaign.json", "sourceBlob": "bb7b2886092acc599c85034224348ff239209887", "archivePath": "levels/versions/v0.1.json", "sha256": "07f1ccdb985d37f6d1fc6e132aeab63423045427f00af2a7bf8bdcf6ecefc9d1", "bytes": 170975, "levelCount": 24, "firstLevelName": "转一转,路就通了", "lastLevelName": "六角大满贯", "legacyStorageKeys": [ "hex-trails-v2" ], "legacyDraftStorageKey": "hex-trails-draft", "historicalMoveLimit": { "preserved": true, "min": 8, "max": 32 }, "validation": { "engine": "current shared src/core.js", "validLevels": 24, "solvableLevels": 24, "replayedWins": 24, "failedReplayActions": 0, "minimumRotations": 1, "maximumRotations": 3, "minimumBudgetAfterWin": 3, "maximumBudgetAfterWin": 9, "initialIndependentLoopPieces": 6, "levelsWithInitialIndependentLoops": [ 1, 6, 7, 16, 20, 21 ], "initialSweptOnlyBlockedPieces": 119, "levelsWithInitialSweptOnlyBlocks": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 ], "note": "Historical loops and swept collisions are intentionally preserved. Audited independently against the historical git blob." } }, { "version": "v0.2", "sourceCommit": "70b021d4cc2fecc832bb3a601452953ed0bd6dd5", "sourceRef": "70b021d", "sourcePath": "levels/campaign.json", "sourceBlob": "601b4ae192935bd3e27ad4eb2bd33770988596a8", "archivePath": "levels/versions/v0.2.json", "sha256": "becf6422b9e49bda72a7b4c5f6ecd55e40a3bf2f90dd244f9e80a25a1a8589da", "bytes": 434460, "levelCount": 48, "firstLevelName": "一眼看见出口", "lastLevelName": "自在回响", "legacyStorageKeys": [ "hex-trails-observe-v3" ], "legacyDraftStorageKey": "hex-trails-draft", "historicalMoveLimit": { "preserved": true, "min": 4, "max": 33 }, "validation": { "engine": "current shared src/core.js", "validLevels": 48, "solvableLevels": 48, "replayedWins": 48, "failedReplayActions": 0, "initialIndependentLoopPieces": 0, "levelsWithInitialIndependentLoops": [], "initialSweptOnlyBlockedPieces": 0, "levelsWithInitialSweptOnlyBlocks": [], "referenceSweptOnlyBlockedStates": 0, "minimumRotations": 0, "maximumRotations": 1, "minimumBudgetAfterWin": 0, "maximumBudgetAfterWin": 0 } }, { "version": "v0.3", "sourceCommit": "e92cccba82cfc6dab5afb64b2c77a686fd1eb6ba", "sourceRef": "e92cccb", "sourcePath": "levels/campaign.json", "sourceBlob": "bb33a66b0953305d3d2b4a680052408531299a64", "archivePath": "levels/versions/v0.3.json", "sha256": "6540e28fbc238441791d6afafcace35b80f04d01d57f1d2b6bfb153b30ac6886", "bytes": 455033, "levelCount": 48, "firstLevelName": "跟着弯道走", "lastLevelName": "自在回响", "legacyStorageKeys": [ "hex-trails-observe-v3-r2" ], "validation": { "engine": "current shared src/core.js", "validLevels": 48, "solvableLevels": 48, "replayedWins": 48, "failedReplayActions": 0, "minimumRotations": 0, "maximumRotations": 2 } } ] }