feat(game): implement authoritative movement and visibility core
This commit is contained in:
@@ -459,11 +459,11 @@ object placement and bounded memory use.
|
||||
`{"status":"serving","healthy":true,"version":"0.5.0","errorCode":0}`.
|
||||
- These deterministic, validator, resource, representative-map, build, and
|
||||
physical-board results provide concrete evidence for all six acceptance
|
||||
criteria. Milestone 006 remains `NOT_STARTED`.
|
||||
criteria and completed Milestone 005.
|
||||
|
||||
## Milestone 006 — Authoritative movement and visibility core
|
||||
|
||||
**Status:** `NOT_STARTED`
|
||||
**Status:** `COMPLETE`
|
||||
|
||||
### Objective
|
||||
|
||||
@@ -497,9 +497,66 @@ server-enforced role-specific visibility.
|
||||
|
||||
### Evidence
|
||||
|
||||
Completion evidence is not yet available because this milestone has not
|
||||
started. Required evidence includes host-test output, serialized payload
|
||||
inspection, and deterministic command-order tests.
|
||||
- On 2026-09-04,
|
||||
`PLATFORMIO_SETTING_ENABLE_TELEMETRY=no /home/sasa/.platformio/penv/bin/pio
|
||||
project config` exited successfully and resolved the production and isolated
|
||||
`milestone-006-device-test` environments from `espressif32@7.0.1`, ESP-IDF,
|
||||
the `esp32-c6-devkitm-1` profile, 4 MB Flash, and the root partition and
|
||||
sdkconfig files.
|
||||
- `./scripts/run_host_tests.sh` passed every preceding suite and reported
|
||||
`game movement, cooldown, and FIFO ordering: PASS (commands 1-7, states
|
||||
0-3)`, `game bounded command queue: PASS (16 entries)`, `game shared-cell
|
||||
meeting event: PASS (one event)`, and `game visibility and payload security:
|
||||
PASS (r3=49/16, r6=64/49, observer=64)`. The same suite serialized a complete
|
||||
default `128 x 64` observer snapshot as 345 chunks and reported a maximum
|
||||
chunk size of 405 bytes against the 512-byte limit. A separate build with
|
||||
`-fsanitize=address,undefined` repeated the game-core suite without an
|
||||
address or undefined-behavior finding; leak detection was disabled because
|
||||
the sandbox executes under `ptrace`.
|
||||
- The deterministic movement cases proved that queued commands are processed
|
||||
in assigned FIFO order, each accepted direction changes exactly one
|
||||
coordinate by one cell, and Player 1 and Player 2 may act at the same server
|
||||
timestamp. Countdown, cooldown, out-of-order timestamp, closed-wall,
|
||||
malformed-direction, observer, and full-queue rejections left player state,
|
||||
accepted-move counters, cooldown clocks, and the authoritative state
|
||||
sequence unchanged. Entering the other player's occupied cell left both
|
||||
players there and emitted one meeting event.
|
||||
- Projection tests covered both player roles and reused a snapshot after an
|
||||
opponent changed from visible to hidden. Radius-three squares contained 49
|
||||
cells at an interior position and 16 at a corner; radius-six squares
|
||||
contained 64 and 49 respectively on the `8 x 8` fixture. An internal wall
|
||||
did not remove cells. Player structures and every serialized 512-byte-bounded
|
||||
JSON chunk omitted hidden cell 63, its hidden key record, and stale opponent
|
||||
state, while the observer contained all 64 cells, all ten fixture objects,
|
||||
and both player positions. The serializer also emitted the versioned
|
||||
envelope, authoritative sequence, phase, meeting sequence, and chunk
|
||||
metadata.
|
||||
- `/home/sasa/.platformio/penv/bin/pio run -e esp32-c6-devkitm-1` completed
|
||||
with `[SUCCESS]` and reported 47,508 of 327,680 RAM bytes and 1,005,274 of
|
||||
2,097,152 application bytes in use. The production `firmware.bin` measured
|
||||
1,005,904 bytes against the 2,097,152-byte factory partition.
|
||||
`/home/sasa/.platformio/penv/bin/pio run -e esp32-c6-devkitm-1 --target
|
||||
buildfs` completed with `[SUCCESS]`; the independent partition check reported
|
||||
`littlefs.bin uses 2031616/2031616 bytes in partition littlefs`.
|
||||
- The isolated device image built with `[SUCCESS]`, using 124,468 of 327,680
|
||||
RAM bytes and 1,016,242 of 2,097,152 application bytes. Its independent
|
||||
partition check reported `firmware.bin uses 1016880/2097152 bytes in
|
||||
partition factory`. Upload with `/home/sasa/.platformio/penv/bin/pio run -e
|
||||
milestone-006-device-test --target upload --upload-port /dev/ttyACM0`
|
||||
identified an ESP32-C6FH4 revision 0.2 with 4 MB embedded Flash and
|
||||
hash-verified every written image.
|
||||
- The physical board logged an accepted command with command sequence one,
|
||||
state sequence one, and the new position. It projected 28 player cells into
|
||||
two bounded chunks and the complete 8,192-cell, 30-object observer state into
|
||||
345 bounded chunks; the first serialized chunk was 372 bytes. It then logged
|
||||
`fixed=34612/40960 bytes, runtime=5/50 ms, heap_delta=0` and
|
||||
`M006 physical game test: PASS`.
|
||||
- The production image was restored and hash-verified after the isolated test.
|
||||
A live `GET /health` returned
|
||||
`{"status":"serving","healthy":true,"version":"0.6.0","errorCode":0}`.
|
||||
These host, serialization, build, resource, and physical-board results
|
||||
provide concrete evidence for all six acceptance criteria. Milestone 007
|
||||
remains `NOT_STARTED`.
|
||||
|
||||
## Milestone 007 — Keys, artifacts, compasses, exits, and results
|
||||
|
||||
|
||||
Reference in New Issue
Block a user