feat(ui): implement responsive player browser experience

This commit is contained in:
2026-09-04 21:57:17 +03:00
parent 9339578dc9
commit d042c3ce90
17 changed files with 926 additions and 152 deletions
+52 -4
View File
@@ -657,7 +657,7 @@ Complete the authoritative gameplay mechanics and terminal match outcomes.
## Milestone 008 — Player browser experience
**Status:** `NOT_STARTED`
**Status:** `IN_PROGRESS`
### Objective
@@ -705,9 +705,57 @@ into the browser.
### Evidence
Completion evidence is not yet available because this milestone has not
started. Required evidence includes browser-test output, desktop/mobile visual
checks, refresh recovery results, and filesystem image size.
Implementation is complete, but the milestone remains `IN_PROGRESS` until the
required physical-device and current-stable-browser checks can be run.
- `bash scripts/run_host_tests.sh` completed successfully. The five focused
browser tests reported keyboard/swipe direction equivalence, intention-only
command envelopes, full replacement of chunked projections without
explored-map memory, token-only refresh restoration, and local Russian,
accessible, responsive assets. All Milestone 001-007 host regressions passed
in the same run. The complete default observer projection remained bounded
at 688 chunks with a worst-case maximum of 495 bytes against the 512-byte
message limit. A separate AddressSanitizer and UndefinedBehaviorSanitizer run
of the changed projection suite passed without findings; leak detection was
disabled because the sandbox executes under `ptrace`.
- `python3 scripts/verify_web_assets.py` reported `web asset reproducibility:
PASS` with digest
`f321d5bb1b4ad8cfcdf306c5a5e696f3b2b00b54792c727fd639671e585b573d`
and a complete compressed payload of 17,100 of 1,572,864 allowed bytes.
Source inspection and tests found no remote runtime URL, import, font,
framework, analytics, or icon dependency. `node --check web/player.js` and
`xmllint --noout web/icons.svg` also completed successfully.
- `pio run -e esp32-c6-devkitm-1` completed with `[SUCCESS]`, reporting 47,508
of 327,680 RAM bytes and 1,005,660 of 2,097,152 application bytes. The
independent partition check reported `firmware.bin uses 1006288/2097152
bytes in partition factory`. `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`, with all five
gzip assets present in the image.
- Physical delivery passed after the board re-enumerated as `/dev/ttyACM0`.
`pio run -e esp32-c6-devkitm-1 --target upload --upload-port /dev/ttyACM0`
and the corresponding `uploadfs` command both completed with `[SUCCESS]` and
hash-verified every write. The ESP32-C6FH4 revision 0.2 boot log reported
application version `0.8.0`, the unchanged 4 MB partition table,
`LittleFS mounted: total=2031616 bytes, used=36864 bytes`, and successful HTTP,
WebSocket, and provisioning service startup. The saved station SSID remained
`k49`, so the device correctly entered its `maze32-F7B9` fallback AP while the
host remained on `Mazda7`; the host network was not changed.
- A USB readback of the complete LittleFS partition used
`/home/sasa/.platformio/penv/bin/python
/home/sasa/.platformio/packages/tool-esptoolpy/esptool.py --chip esp32c6
--port /dev/ttyACM0 read_flash 0x210000 0x1f0000
/tmp/maze32-m008-littlefs-readback.bin`. Both the built image and physical
readback had SHA-256
`606b98e11cbc479bf11bffa9a38d62ddfebce0689f0e3ebf148521190a032fd5`;
`cmp` returned zero, proving byte-for-byte delivery without interrupting the
host's internet connection.
- Live browser validation is blocked. The browser-control runtime returned `No
browser is available`, and its browser inventory was empty. Therefore the
required visual and interaction passes at `412 x 916`, representative tablet
and desktop viewports, and current stable Chrome, Safari, Firefox, and Edge
cannot yet be recorded. Milestone 008 must not be marked `COMPLETE` until
those browser checks pass. Milestone 009 remains `NOT_STARTED`.
## Milestone 009 — Observer mode and disconnect recovery