urt-rs / docs /research /QVM_RANKING_WIRE_RUST_BATCH.md
nmarshall's picture
gameplay: port modeled recipient wire bytes
78ab0c4
|
Raw History Blame Contribute Delete
6.4 kB

Ranking, leaderboard and wire-model Rust batch

RE-769–778 continues from 799143f3, with ten separately committed tasks. The goal remains full Rust/Bevy/Solari gameplay on macOS and Linux. This batch advances bounded ranking/leaderboard evidence and three Rust primitives. Original binary parity, networking and an interactive runtime remain open.

Task Scope Evidence
RE-769 Complete5441 raw ranking comparator Comparator
RE-770 Actual aligned35095 small insertion sort and callback tracing Small sort
RE-771 Complete finite5864 ranking with actual small sort and rank words Ranking
RE-772 Leaderboard20-slot mapping and sparse sentinels Layout
RE-773 Complete284610 joint-threshold selector Selector
RE-774 First four283622 category selections with actual children Categories
RE-775 Original recipient templates, copy wrapper and explicit byte model Wire model
RE-776 Rust raw comparator and caller-ordered rank words Rust ranking
RE-777 Rust mapping, sentinels and joint selector Rust leaderboard
RE-778 Rust modeled recipient byte serializer Rust wire

The comparator has non-ordering prefilter behavior: two deferred or connecting clients can return+1 in both directions, including self. Rust exposes a raw comparator and does not implement Ord. Actual35095 source executes its aligned four-byte n<7 insertion branch with actual5441 callbacks; larger quicksort/byte swaps/recursion remain open. Complete5864 finite fixtures then publish individual/team rank words and tie bit16384.7805/6328 remain captured publication boundaries. Rust rank publication validates a supplied permutation and eligible clients; it does not implement the original sort.

The leaderboard mapping has20 slots.284610 requires all nine metrics to strictly exceed current thresholds, including sentinel-valued fields, and updates only nonsentinels. An all-sentinel record can therefore pass comparisons without ever selecting an entity. Source scan order and strict ties are preserved. First category selections execute actual284555/284610/278587, but the prefix stops before the fourth-category total post-filter and remaining categories.

Original command templates are scoress/scoresd with12 numeric fields and a name per participant. The valid69338 wrapper requests31 bytes from native-103 and then explicitly zeros byte31. Source fallback literals are---. The serializer preserves C-string byte length,31-byte truncation, signed decimal values and a trailing NUL.37914 formatting, real native strncpy and server send are not executed here; Rust parity is to the explicit original-template/native-copy model. It must not be described as native wire parity.

Tracer finding and required audit

Actual repeated sort callbacks exposed a bounded-tracer issue: excluding the current return boundary for an entire segment can miss later visits to the same call site. New opt-in repeated_calls=True skips the initial boundary once and honors later reentries. Dynamic CALL return offsets are also explicit because callback-pointer loads can follow the destination LOCAL. Unsigned LEU/GEU evaluation is covered by boundary tests for all four unsigned comparisons.

New sort/ranking/leaderboard compositions opt in to corrected tracing. Earlier consumers retain their legacy setting. Existing regression success confirms compatibility, not semantic correctness for every earlier repeated-call analysis. Audit each such consumer, including similar bounded resumers such as qvm_research_support.execute, migrate it deliberately and review regenerated reports/oracles before extending parity claims. Also verify dynamic-CALL return-destination inference at every affected call site; the new explicit-offset path does not retroactively validate legacy dynamic callbacks. This is a substantive remaining research requirement.

Validation cadence

Focused cargo xtask test-group runs precede each task's final commit. Selected reports regenerate twice, followed by affected tests and storage/link/whitespace guards. Rust gameplay groups run scoped package tests and13 parity reports. After commit ten, the single cargo xtask test-full --since 799143f3 run passed1504 Python tests and92 Rust tests (10 assets,54 gameplay,28 xtask). All290 affected report producers regenerated twice byte-identically; storage, documentation links across337 files and whitespace guards passed. Three older reports refreshed only byte-memory snapshots:448 added cells in authentication queries,1808 in chat expansion and532 in selector bounds. No old byte cells or other fields changed. The tenth task commit includes these reviewed snapshots and validation documentation. The legacy tracing audit remains open despite regression compatibility.

Remaining limits and next tasks

  1. Audit legacy repeated-call trace consumers and revise any affected findings/oracles with corrected reentry semantics.
  2. Recover35095 large/unaligned sort paths, recursion and comparator helper34964, then7805/6328 publication internals.
  3. Extend complete5864 ranking to deferred/connecting/spectator domains without assuming strict comparator ordering.
  4. Complete283622 leaderboard categories/post-filters/publication and native/runtime ownership.
  5. Execute37914 formatter, original strlen/native copy and send boundaries to establish real serialized-command parity.
  6. Compose recovered score/stat/recipient/ranking effects through full health/contact/shared-pellet callers using audited tracing.
  7. Establish owned Rust simulation state, event lifetimes, inventory reset/obituary and recipient/network identities.
  8. Continue original native executable/DLL/library parity and loader ownership.
  9. Connect asset VFS, simulation and world collision to macOS/Linux Bevy runtime validation.
  10. Port rendering/materials to Solari and establish interactive full-game acceptance on both platforms.

RE-768 remains partially advanced. Native, Linux, rendering and complete gameplay acceptance remain open.