Help us improve
Share bugs, ideas, or general feedback.
From nethercore
Testing Nethercore games for determinism and correctness. Covers sync testing, replay recording and playback, debug actions, and desync diagnosis. Use when running sync tests, setting up replay-based regression tests, or diagnosing determinism failures.
npx claudepluginhub nethercore-systems/nethercore-ai-plugins --plugin nethercoreHow this skill is triggered — by the user, by Claude, or both
Slash command
/nethercore:testingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Runs two identical instances, compares checksums each frame.
Adds Playwright QA tests to web games for visual regression, gameplay verification, boot checks, and performance metrics. Activates on 'add tests', 'test my game', 'add QA', 'check for bugs'.
Enforces playtesting before declaring gameplay features done — requires running the game and walking the feature rather than relying on static checks.
Generates tests for Dojo models and systems using spawn_test_world, cheat codes, and assertions. For testing game logic, verifying state changes, ensuring system correctness.
Share bugs, ideas, or general feedback.
Runs two identical instances, compares checksums each frame.
nether run --sync-test
nether run --sync-test --frames 3000 # Specific duration
Pass criteria: Identical checksums for 1000+ frames.
Record and replay for regression testing:
nether run --record replay.bin # Record
nether run --replay replay.bin # Playback
Workflow:
| Do | Don't |
|---|---|
random() FFI | rand::thread_rng() |
BTreeMap, BTreeSet | HashMap, HashSet |
| Frame counter | Instant::now() |
| Fixed-point math | Floating-point accumulation |
| Type | Tool | Purpose |
|---|---|---|
| Unit | cargo test | Pure logic |
| Sync | nether run --sync-test | Runtime determinism |
| Replay | --record/--replay | Cross-build validation |
log() calls around suspicious codeInstead of recording long input sequences, use debug actions to skip directly to test scenarios:
# Skip to level 3 boss
[[frames]]
f = 0
action = "Load Level"
action_params = { level = 3 }
[[frames]]
f = 1
snap = true
assert = "$boss_health > 0"
Games register actions in init():
debug_action_begin(b"Load Level".as_ptr(), 10, b"debug_load_level".as_ptr(), 16);
debug_action_param_i32(b"level".as_ptr(), 5, 1);
debug_action_end();
When to use: