46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
# Runtime resource budget
|
|
|
|
Milestone 010 fixes and exposes the following production limits. They are
|
|
compile-time bounds, not targets that may grow with match duration.
|
|
|
|
| Resource | Limit | Defensive behavior |
|
|
| --- | ---: | --- |
|
|
| WebSocket connections | 6 | A seventh WebSocket handshake is rejected. |
|
|
| LwIP sockets | 16 | ESP-IDF remains configured by `sdkconfig.defaults`. |
|
|
| Client message | 512 bytes | An oversized frame is counted and disconnected. |
|
|
| Outgoing message | 768 bytes | An over-limit message cannot enter the queue. |
|
|
| Outgoing queue | 12 entries | Queue overflow is counted; memory cannot grow. |
|
|
| Game command queue | 16 entries | Excess commands receive `queue_full`. |
|
|
| Input rate | 20 messages/second | Excess messages are rejected; sustained abuse above 40 in the same window is disconnected. |
|
|
| Player response budget | 250 ms | The physical stress client fails above this round-trip threshold. |
|
|
| Observer update policy | Latest bounded projection | A busy observer may lose intermediate dynamic chunks and recover on a newer projection. Failed or stalled required sends close the socket. |
|
|
| Reconnect deadline | 60,000 ms | Gameplay pauses, then ends in a draw at expiry. |
|
|
|
|
## Build-time measurements
|
|
|
|
The Milestone 010 production build on 2026-09-05 reported 124,276 of 327,680
|
|
static RAM bytes and 1,028,600 of 2,097,152 application bytes. The independent
|
|
binary check measured 1,029,232 bytes in the 2 MiB factory partition, leaving
|
|
1,067,920 bytes of application margin. The compressed web
|
|
payload totals 19,253 bytes against its 1.5 MiB budget, leaving 1,553,611 bytes
|
|
of payload margin. LittleFS remains the fixed 1,984 KiB partition and its image
|
|
is checked against `partitions.csv` on every build.
|
|
|
|
The global authoritative gateway, including its one maze, one projection
|
|
buffer, fixed queues, sessions, timers, and metrics, occupies 86,840 bytes of
|
|
static storage in the production ELF. It does not allocate a maze or
|
|
projection per client. No production source or test requires PSRAM or a GPIO.
|
|
|
|
## Runtime measurements
|
|
|
|
`GET /diagnostics` returns current and minimum internal 8-bit heap values and
|
|
the largest internal free block. It deliberately samples
|
|
`MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT`, so external RAM cannot make a failing
|
|
internal-memory result appear healthy. Serial samples use the same capability
|
|
mask.
|
|
|
|
Final six-client, slow-client, repeated-match, and network-recovery samples
|
|
belong in the active milestone evidence in `PLANS.md`. Build-time numbers in
|
|
this document must be refreshed if the production image changes before that
|
|
evidence is recorded.
|