urt-rs / docs /research /QVM_POSE_LIFECYCLE_BATCH.md
nmarshall's picture
qvm: model child frame samples
75ffee4
|
Raw History Blame Contribute Delete
7.31 kB

Complete finite pose and lifecycle composition: RE-659–668

Ten separately checked tasks extend the history and model-hit preparation batch. The complete finite pose routine now executes with its recovered source children. Grenade construction uses actual allocation and entity query. Entity-free control flow and the first model-child sample stage are also recovered, with unresolved external effects retained explicitly.

Task Recovered scope Evidence
RE-659 Exhaustive producer literal references and direct caller owners History callers
RE-660 Both actual swing controllers and caller pointer reloads Controller composition
RE-661 Complete vector-to-angle helper with exact alias fixtures Vector angles
RE-662 Animation dispatch, horizontal speed and movement-yaw interpolation Movement yaw
RE-663 Pitch publication, full velocity normalization and lateral scratch Pitch/lean arithmetic
RE-664 Relative angle wrapping, numeric flag sum and output layout Pose publication
RE-665 Complete32254 through actual recovered source children Complete pose
RE-666 Complete277400 control flow with captured resource-release effects Entity free
RE-667 Actual276433 query and allocation inside grenade construction Queried grenade
RE-668 First eligible child traversal, frame sample addressing and interpolation Model samples

Findings for the rewrite

The history append producer has one direct literal caller in156173; reset has three in174399/203011/219630. All decoded literal references and aligned initialized-data matches are inventoried, with instruction contexts preserved. Dynamic scheduling, source guard interpretation and indirect dispatch still require recovery. No live frame ordering is inferred from these references.

Complete pose32254 now runs two33391 swing controllers through caller-owned pointers, then reloads their mutations. Actual62944 vector-to-angle conversion retains its vertical/zero fallback: zero input produces pitch−270, yaw0. Movement branches select forward/reverse/default paths by the recovered animation jump table, cap integer horizontal speed at200 and clamp yaw delta to±60 before actual63746 interpolation. An integer reciprocal in this scratch path zeros horizontal components above speed1. Later velocity normalization separately uses a floating reciprocal and full3D length; the two calculations must remain distinct.

Pitch is gated by the active flag, biased by15 for IDs20/21 or5 otherwise, and stored through an external pointer. A lateral scalar is calculated but never read by the remaining function; no visible lean effect is claimed from it. The output stage repeatedly wraps head-minus-body and body-minus-legs with inclusive±180 endpoints, publishes absolute legs unchanged and writes a shifted numeric flag sum through an optional pointer. Independent composition checks all nine output angles and external state mutations across110 complete finite fixtures. Original native math bit parity, asset skeleton semantics and legal live inputs remain open.

Entity-free277400 requests unlink and optional nested-object releases, clears nine resource fields in order, then checks548 before whole-record reset. A protected record can retain its object pointer and in-use flag after release requests; this source distinction is preserved without assuming ownership semantics. Unprotected reset writes the free marker, integer tag and current free time into an otherwise zero880-byte record. Resource helper effects and engine unlink remain captured, while bounded zero fill is modeled.

Grenade285971 now composes actual lookup, allocation/initialization and276433 query over supplied entity pools. The report captures the selected entity's actual velocity. That velocity contributes only when selected ID equals the owner's ground ID. Both reused/extended allocation and skipped unused/null-name/wrong-tag records are checked. Native registration remains captured and grenade callback223156 remains unexecuted.

Model traversal25341 skips null children and selects112-byte records by frame and child index. It interpolates twelve words from offsets64..108 using B+(A−B)×fraction, including extrapolation. The next22009 transform request remains pending. The recursive25341 and23092 leaf stages are identified from source but do not execute in these probes. This is sample preparation, not a successful intersection.

Validation and limits

The1097-test baseline gains40 checks, ending at1137 passing tests. Every new report regenerates byte-identically and remains below2MiB. Independent float32, full-record, pointer mutation, call-order, aliasing, dispatch and whole-pose oracles check bounded source behavior. Existing supplied-query grenade reports also regenerate byte-identically after the optional resolver extension. Storage/filter, documentation-link and whitespace checks pass. No assets, Rust runtime or shared evaluator changes occur in this batch.

All entity pools, model tables and finite input domains are explicit fixtures. Native finite math and bounded zero fill are models; registration, unlink and resource releases are requests without external effects. No original executable/full VM, native heap/collision, complete model intersection/contact/damage, live server tick, networking/rendering or macOS/Linux Rust/Bevy/Solari gameplay runs here. The overarching RE-658 scope remains partially complete; the next work is tracked under RE-669.

Next ten concrete tasks

  1. Compose complete32254 into144766, preserving the actual shooter timing, target pointers and generated pose outputs through transform construction.
  2. Recover22009's child transform composition and matrix layout with independent full-record and alias checks.
  3. Continue25341 through actual22009 and repeated child traversal, recursive/leaf dispatch, parent processing and bounded hierarchy termination.
  4. Recover23092 leaf geometry/primitive contracts and source model buffer ownership, frame bounds and asset identities.
  5. Recover actual hit-context vector/record production, type/key/count meanings and no-hit boundaries; compose actual output with25835 sorting/publication.
  6. Resume the full rewound trace through recovered model returns and all cleanup; retain exact caller mutations and link/unlink requests.
  7. Recover contact292545, reached damage211239, penetration/retry, aggregation and event64 encoding with source-based hit inputs and original reference checks.
  8. Recover conditions and sequencing inside history caller owners156173/174399/203011/219630; validate scheduling and shooter target times.
  9. Recover resource helpers16934/249639 and actual expiry/free/reallocation composition, including protected records and resource aliases.
  10. Continue grenade223156 trajectory/contact/bounce/explosion and original/native trace capture. Implement a verified Rust gameplay slice and continue all macOS/Linux Bevy/Solari asset/rendering/runtime goals.