CMAPI 1.0.0 release sanity test
Use a backed-up or disposable full-game save. This pass validates the new content/lifecycle API plus regressions in the previously proven core. A build error, red runtime exception, duplicated lifecycle event, stale inventory, wrong recipe/unlock data, save corruption, authority bypass, or stuck game input blocks the release candidate.
Mod Menu 0.2.2 remains an independently versioned experimental beta. Its known controller-open and Item Catalog submenu defects do not block core 1.0.0, but background game activation, stuck cursor/input, save mutation, or repeating trainer effects still do.
1. Clean build and deployment
Close Planet Crafter and CMAPI, remove the previously deployed CMAPI runtime and test mod, then run:
.\scripts\Sync-GameReferences.ps1 `
-GamePath "C:\Program Files (x86)\Steam\steamapps\common\The Planet Crafter"
dotnet build .\CMAPI.slnx --configuration Release
.\scripts\Deploy-Dev.ps1 `
-GamePath "C:\Program Files (x86)\Steam\steamapps\common\The Planet Crafter" `
-SkipBuildThe build must have zero errors and warnings attributable to the new API. Start through CMAPI and run:
version
gameinfo
health_check
mods
commands content
Expected: CMAPI 1.0.0, Public API 1.0.0, Mod Menu 0.2.2 experimental beta, tested Planet Crafter 2.008 MVID 520dcd8f-2c13-4a99-b871-44c7ad40bcc1, Test Mod 1.0.0, standalone runtime ownership, the new storage/scheduler/game-loop features, compatible Content API, and health_check PASS.
2. Lifecycle boundaries
Load a world and inspect Test Mod log lines:
Player startedandLocal player readyeach appear once.World enteredappears once after the local player and planet are ready.- If weather is already active, one
Weather startedfollows world entry. - Save through Planet Crafter. Exactly one
Save completedappears only after the game finishes saving. - Run
backup create; the normal save completion event and manual snapshot both complete without duplicate test-mod subscriptions. - If interplanetary travel is available, travel once. Exactly one
Planet changed: old -> newappears. An old weather observation ends before the change; any new active observation starts afterward. - Exit to title. Any observed weather ends before one
World exited, followed by balanced local/player stopped events. Re-enter and repeat once.
3. Recipe and unlock catalog
Run queries using IDs/names visible in your current game:
recipes iron
recipes CraftStationT2
recipe Super Alloy
test_recipes uranium
unlocks available iron
unlocks locked
unlocks blueprint
unlock_info Iron
test_unlocks chip
Confirm recipe results match the in-game recipe display. Repeated ingredients must appear as one ingredient with the correct quantity; station IDs must match where the item is actually craftable. Exact IDs must resolve regardless of letter case, while ambiguous names must never make CMAPI guess.
For unlocks, confirm one currently available item, one locked progression item, and one blueprint item. Threshold unit/value, global state, explicit planets, and current-planet availability must agree with the game. Repeat after unlocking something or changing planet and confirm a new query reflects the new state.
4. Local inventory snapshots and events
inventory
inventory backpack iron
inventory equipment
test_inventory backpack
test_inventory equipment
Verify capacity, occupied/free slots, and aggregated counts against the in-game backpack/equipment. Add one known item normally, consume/drop one, equip one, and unequip one. Each operation must produce one Test Mod change line with the correct inventory, item ID, add/remove direction, and post-change slot count. World exit/re-entry must bind once: repeat an item move and ensure no duplicate callbacks appear.
5. Core regression
Run:
players
items iron
give_item Iron 1
give_money 1
teleport 559 2 600
teleport back
environment
world_state
weather_status
Confirm native HUD feedback, host authority, placement recovery, and live environment data still work. Let one natural weather event start and end if practical; its public lifecycle events must each fire once.
6. Optional Mod Menu beta safety
Inject with cmapi_inject, open with Insert, click several safe controls, hide, and run cmapi_uninject. No click or key may activate Planet Crafter behind the menu, and the game/pause cursor must work afterward. Infinite Power must not repeat its on/off sound. Record, but do not rediscover during this API gate, the known L3+R3 open and Browse/Search Item Catalog activation defects.
7. Shutdown and package
Quit normally and confirm the post-exit backup plus clean console closure. Then:
.\scripts\Build-Release.ps1 `
-GamePath "C:\Program Files (x86)\Steam\steamapps\common\The Planet Crafter"Verify-Release.ps1, the negative package gates, and SHA-256 verification must pass. Confirm CMAPI-package.json covers every archive file, the archive contains the updated CMAPI.API.xml, and it excludes the internal Test Mod and game DLLs. Install into a second clean game copy through the wizard and repeat startup, world entry, one recipe/unlock/inventory query, one inventory-change event, save completion, world exit, and normal shutdown.
Confirm the build also reports the update-feed contract and installer transaction gates as passed and emits the ZIP, .sha256, and update-feed JSON. Do not exercise CMAPI.exe --update against the production URL until that exact feed and matching GitHub release asset are published. A missing feed before publication must stop safely without modifying the live installation.
Passing this page approves the tested 1.0.0 archive for release-candidate use. Publish the official tag and stable feed only after every applicable gate in TESTING.md and RELEASE-CHECKLIST.md passes against that exact archive.