Download docs/research/QVM_SCOREBOARD_MEMORY_BATCH.md from nmarshall/urt-rs: direct link, hf CLI and curl.
- Browser
- Download file 5.73 kB
-
https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_SCOREBOARD_MEMORY_BATCH.md
- Command line
-
hf download hf://nmarshall/urt-rs/docs/research/QVM_SCOREBOARD_MEMORY_BATCH.md
-
curl -L -o QVM_SCOREBOARD_MEMORY_BATCH.md https://huggingface.co/nmarshall/urt-rs/resolve/main/docs/research/QVM_SCOREBOARD_MEMORY_BATCH.md
Coherent research memory and stateful scoreboard packets
RE-802–811; baseline 744c236f. Ten tasks, one commit after each focused cargo xtask validation, one full-suite run after commit ten. Original assets are unchanged.
| Task | Result | Evidence |
|---|---|---|
| RE-802 | Coherent byte/word reads and bounded unaligned snapshot copies | Memory |
| RE-803 | Explicit child byte effects and read-only views in both resumers | Child effects |
| RE-804 | Actual36038/36185 string helpers and69338 wrapper | Strings |
| RE-805 | Original179363 numeric/cache/admission behavior | Rows |
| RE-806 | Original scoreboard byte construction with modeled formatter/copy boundaries | Packet bytes |
| RE-807 | Rust source-specific scoreboard numeric projection | Rust rows |
| RE-808 | Rust packet admission, cache effects and ring rotation | Rust packet |
| RE-809 | Source6328 executes successive scoreboard bodies with shared state | Source stream |
| RE-810 | Rust stateful broadcast transmissions | Rust stream |
| RE-811 | Actual recent-award effects inside the shared stat-update composition | Stat awards |
Findings
The coherent memory mode is opt-in. LOAD1/LOAD4/STORE1/STORE4 share a little-endian view, including unaligned word accesses. Byte-only partial words remain unreadable as complete words until initialized. BLOCK_COPY uses a bounded snapshot model, including unaligned/overlapping regions; this does not establish original native memcpy overlap semantics. Child byte handlers require corrected reentry and word synchronization. They receive read-only byte views and return validated explicit byte writes, applied after changed words and before the CALL return patch. Movement command tuples take precedence at the next segment.
Original36038 strlen and36185 strcpy use word lookahead and partial destination-word updates. Initialized source padding and scratch destinations make those finite observations explicit. Repeated calls also require coherent reinstallation of frame arguments; changing only the word dictionary can leave an older argument in the byte view. The helper bridge now reinstalls argument words in both views.
Scoreboard179363 is distinct from the previously recovered179736/180087 payloads. Only connecting state1 forces ping999; other supplied connection values use the raw ping clamp. Its class field is not clamped. The source computes and updates a candidate's ping cache before testing whether its formatted row would exceed1024 bytes. Exactly1024 bytes are admitted, while the first rejected candidate's cache update remains visible. The final format uses a two-buffer ring and increments its counter even for an empty packet.
The original scoreboard/string/copy/format wrappers now execute in the finite source composition.37914 decimal/string formatting and native-103 strncpy remain explicit byte models; -18 sends are captured. Exact Rust byte parity therefore establishes agreement with original control flow plus these models, not native wire/ABI parity. Names remain raw bytes, may be split at31 bytes, and use the verified fallback for lengths below2. Stateful source/Rust broadcasts preserve recipient scan order, caches, packet admission and ring rotation across recipients.
Stat update278834 additionally executes actual285227 recent awards after the actual team-counter and ratio/totals/divisor children. Fixtures share canonical actor/victim client records and independently verify mode,39/40 count,30000/30001 age and self-alias effects. Leaderboard283622 and7259 logging remain captured.
Validation
Focused groups regenerate selected reports twice, run affected Python tests and storage/link/whitespace guards, and refresh scoped gameplay tests for Rust changes. The registry regression checks the new module and all source-report-to-Rust-parity edges. After exactly ten task commits, the single cargo xtask test-full --since 744c236f run passed 1,587 Python tests and109 Rust tests (10 assets,71 gameplay,28 xtask). All320 affected report producers regenerated twice byte-identically; storage policy,370 documentation files and whitespace guards passed. Regeneration left the working tree clean, so legacy consumers had no additional report refreshes to review. Final validation notes are checked with documentation-only xtask selection and amended into commit ten without repeating the full suite.
Next work — RE-812
- Recover37914's actual formatting and native-103 copy/error/overlap semantics, then compare captured original/native scoreboard messages. Current exact bytes depend on explicit models.
- Recover7805 exit-rule effects before composing complete ranking-to-broadcast behavior. Re-evaluate connection/client state after those effects in a runtime.
- Continue legacy resumer audits, unresolved/computed ranges, callback destinations and memory legality. Opt-in coherent fixtures do not retroactively validate legacy consumers or constitute a complete VM.
- Extend shared stat/award composition through actual leaderboard283622, native logs and full lifecycle ownership. Bound large positive divisor scan cost.
- Integrate Rust ranking/scoreboard/stat state with runtime entities, protocol and session ownership; continue world collision, movement/combat, maps/models/materials/audio and rendering.
- Validate native macOS/Linux builds, original-game comparisons and interactive Rust/Bevy/Solari acceptance. The full game remains incomplete.