feat: version campaigns and document original puzzle design

Restore v0.1 and v0.2 archives with separate progress, publish the curved v0.3 campaign, and document the original 24-level design with reproducible evidence. Refine board presentation and movement, and keep video lab tooling within its own directory.
This commit is contained in:
cabinw
2026-09-09 13:17:30 +08:00
parent 70b021d4cc
commit e92cccba82
52 changed files with 76449 additions and 15076 deletions
+114
View File
@@ -0,0 +1,114 @@
{
"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
}
}
]
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff