urt-rs / docs /research /QVM_SCOREBOARD_MEMORY_BATCH.md
nmarshall's picture
qvm: compose recent awards with stat updates
7c1c408
|
Raw History Blame Contribute Delete
5.73 kB

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.