S9SourceNine Labs / CMAPI Docs 1.0
CMAPI / Maintainers

Sanity test

Short in-game verification pass for a candidate build.

View source ↗
CMAPI 1.0.0Standalone runtimeWindows x64Tested with Planet Crafter 2.008

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:

POWERSHELL
.\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" `
  -SkipBuild

The 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:

  1. Player started and Local player ready each appear once.
  2. World entered appears once after the local player and planet are ready.
  3. If weather is already active, one Weather started follows world entry.
  4. Save through Planet Crafter. Exactly one Save completed appears only after the game finishes saving.
  5. Run backup create; the normal save completion event and manual snapshot both complete without duplicate test-mod subscriptions.
  6. If interplanetary travel is available, travel once. Exactly one Planet changed: old -> new appears. An old weather observation ends before the change; any new active observation starts afterward.
  7. 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:

POWERSHELL
.\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.