Repository navigation
feat(animation): add weighted playback and authored locomotion evaluation - #395
Merged
Merged
Conversation
VQ-04 bounded prerequisite. Keep broad blend-space and platform acceptance open; no runtime screenshot or full-suite pass is claimed.
Conflict: docs/PRDs/batch-2026-10-01-visual-quality/PRD-VQ-04-locomotion-blend-spaces.md (add/add, docs only). Kept this branch's work notes (Status PARTIAL, the bounded interruption-repair and verified real-rig capture sections) and adopted develop's relative README.md / EXECUTE.md links, which now resolve because develop ships both files. No feature source conflicted.
… workflow, per AGENTS.md) Root AGENTS.md: no workflow file per feature. The animation lane becomes job `animation` behind the shared `paths` gate, keeping its own 25-minute timeout, steps, runner and `vq04-animation-*` artifact names, so what the pull request runs is unchanged. Lane regex translated from the removed file's `paths:` globs (glob to anchored ERE, `.` escaped, `*` as `[^/]*`); the removed workflow's own path entry becomes `^\.github/workflows/integration\.yml$`, as every other lane already does. Also ignore `docs/verification/vq04/**` in biome: those two reports are machine-written evidence whose bytes the PRD pins to the hosted artifact, and `pnpm lint` was already red on this branch for their formatting alone.
…ional-clip search One playWeighted call per frame from game settings; direction fails closed without authored clips. Phase boxes stay open: no scene consumer, no browser or native run, no directional clips.
…river Opt-in ?vq-locomotion fixture: third-person rig and first-person body on the CC0 mannequin, one scripted speed trace, per-tick clips, weights, phase and action counts in the observation channel, plus the playtest scenario. CPU, lint, typecheck and native bundle pass; the rendered run is unverified locally (SwiftShader blank).
…, no network assertion)
… native host resolves it
…gs; record the native run
…and record Phase 1-2 evidence Adds scripts/verify-vq-locomotion.ts to the integration animation job with routing cases (red first), native and browser frames with provenance, and ticks Phase 1 box 2 and both Phase 2 boxes. Phase 3 and acceptance stay open: no directional clips, native host stale, hosted run not yet recorded.
jonit-dev
marked this pull request as ready for review
October 5, 2026 03:40
…ide the evidence budget
…afe and backward clips
…he native Phase 3 proof
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Current result
AnimationPlayer.playWeightedblends authored clip weights on the existing mixer, preserves contributing actions through reversals, joins entering clips by normalized phase and releases outgoing actions. Editable game source evaluates deterministic 1D/2D weights and drives a first-person visible body, a third-person Quaternius rig and a CC0 KayKit Rig_Medium consumer with real left/right/backward gaits. No replacement mixer or core numerical evaluator was added.Canonical completed PRD-VQ-04: 6/6 phase items, 2/2 acceptance items. Merged through the ordinary squash queue on 2026-10-05 at 08:17:27 UTC as
9b3c482.Current proof and limits
9b3c4824c523de9f49fba6e24299ad56ae6e21a9, whose tree equals the qualified PR head. Browser/native artifacts11330929421and11331537103, with native success receipt11331666720/ job111660946518, each pass 46/46 assertions, 586 frames, zero diagnostics; the same 14 retained wait checkpoints / three consumers have exact clip, weight and phase parity, with the two input offsets excluded. All 66 substantive queue jobs passed, includingci-requiredjob111673844710at 08:16:54 UTC. The finalrun-summarywas cancelled at 08:17:40 UTC, after the 08:17:27 merge; the aggregate run is therefore recorded cancelled, not aggregate success. No failed or pending substantive check remains.53638dd91cb6b952ebbeef06a00e8e3eacb9fb4dfrom published head4b52788d1520a24f055ec4643275fbb1f50c82feand based5d169705f34b6b41d1888f3885cb8968e81cb60. Browser animation and freshly built ARM Linux-native locomotion each pass 46/46 assertions, 586 frames, zero diagnostics. Artifacts11329847950and11330160809, with success receipt11330430129for native job111649219544, match clips, every weight and normalized phase at all 14 retained fixed-tick wait checkpoints across all three consumers, with cross-runtime difference 0. The same two differing input ticks below are excluded. Fresh CI typecheck and the full required board pass;ci-requiredsucceeded at 07:27:17 UTC in this run. The native host SHA-256 remains8296f86ed64fb2704a056cc021ff8af352013308b816efde6798b04774c8dceb; software-rendered correctness limits still apply.e81fb686086c834893f2e4e16ff1083f2110b5eewith core 0.3.4. Its browser animation and freshly built ARM Linux-native locomotion jobs each passed 46/46 assertions, 586 frames, zero diagnostics. Browser: headed WebGPU, Google SwiftShader. Native: Vulkan llvmpipe; host SHA-2568296f86ed64fb2704a056cc021ff8af352013308b816efde6798b04774c8dceb. These jobs passed even though the aggregate run was later cancelled after source advancement.11328392524and11327683944, tied to exact-candidate success receipt11328503119, matches selected clips, every weight and normalized phase at 14 fixed-tick wait checkpoints across all three rigs, with maximum cross-runtime difference 0. Input snapshots at browser/native ticks 2/1 and 176/175 sample different fixture ticks and are excluded. No full per-tick comparison is claimed.strideSync; no moving-ground foot-contact, sustained phase locking, allocation measurement or hardware performance is claimed. Human aesthetic review remains outstanding and is not an original PRD checkbox. The earlier failed asset-manifest capture and stale-host receipts remain historical below.Canonical checklist
Phase 1 — Continuous weights with explicit boundaries
Phase 2 — Two real locomotion consumers
Phase 3 — Qualify the visible result
Acceptance
Historical implementation receipts
The receipts below retain their original source, scope and failures. Statements about partial progress or draft state describe those historical milestones. The current counts and state are above.
Scope
Bounded PRD-VQ-04 prerequisite: repair interrupted crossfades and add
AnimationPlayer.playWeightedon the existing authoritative mixer. Games supply clip weights, authored transition duration and phase-sync opt-out; clip selection, numerical evaluation and locomotion states remain game-owned. No replacement mixer, graph or dependency is added.SkeletalMesh3D. Nine Idle/Walk/Jog requests exercise all 65 bones. It starts on scenario input and freezes at exact ticks, so startup timing cannot change the captured pose.Historical canonical PRD-VQ-04 at f742def was partial at that receipt.
Historical verified interruption screenshots
Hosted run 36996637583 passed at source
a53db062fec7b1b3ae99268470dfa06d15ee3494. Headed Chromium, WebGPU, Google SwiftShader. All five reports pass with zero diagnostics, including a separate bright-silhouette region bound. Errors and device-loss warnings are rejected. This proves rendered correctness, not hardware performance, full blend spaces, native execution or foot-contact quality.All five images were visually inspected independently and copied unchanged from the Actions artifact. Every immutable raw URL was fetched successfully (HTTP 200) and its SHA-256 matched the original PNG. These historical images qualify the earlier interruption repair at the captured source; they do not qualify the new weighted API.
Tick 24: walking/jogging blend before the return request
Tick 25: return to the still-contributing idle action
Tick 26: first subsequent frame
Tick 48: later rapid reversal
Tick 108: settled idle
Weights, phases and adapter · Source/run/artifact/per-image digests and assertion verdicts.
Across the trace: weight-sum error ≤
2.220446049250313e-16; request-time phase and local-position jump0; normalized-quaternion jump ≤4.2146848510894035e-8radians. Seven requests returned to live actions. Final weights[1, 0, 0], one active action. Artifact ZIP SHA-256:ba1e0cff8e340330f98096695bd9e84840a3e0c15f5659a00e70a08475c91e08.Checks and remaining limits
pnpm testis blocked at thetsxUnix-socket lifecycle preflight; no complete aggregate-suite pass is claimed. Local GPU rendering is unavailable, so actual pixels came from the hosted runner.Weighted API repair at
ee535d1c6— 2026-10-04Preserved the unpublished owner snapshot before integration; original checkout is unchanged. Weighted playback retains contributors until zero, joins compatible phases, uses normalized overflow-safe weights and bounded full-delta ramps, preserves the deadline under identical per-frame requests, and hands ownership back to single/once playback. Eighteen regressions exercise these paths, including idle-dominant stride timing and static-clip phase transfer.
pnpm typecheckpasses root and recursive packages/examples. Core build/declarations/MCP/publint, budgets, capability/API gates and root lint pass. Quality scanning completed with 186 reported findings; it is not a clean quality report.10823978independently reproduces inherited root failures with exact locked dependencies and its own fresh core build. The narrow public core/playtest source mapping (as on develop) and fixture-local Vite types repair these; regression tests preserve private package boundaries./tmpENOSPC failures (321 pass / 2 fail); moving only this task's scratch to the workspace disk passed unchanged tests/hooks. No skip, threshold or source weakening.Game-owned evaluator slice at
f95b4ffab— 2026-10-04Adds editable sorted/clamped 1D evaluation and declared triangular 2D barycentric weights with nearest-domain-edge projection. Authored snapshots and declaration-order ties make replay deterministic; duplicate, malformed, overlapping, degenerate and numerically unrepresentable domains fail explicitly. No numerical core export or second mixer is added.
prd:25%bucket. Total actual criteria are 1/8 (12.5%). Existing PR labelprd:0%is retained pending the coordinator's percentage-policy correction; no exact 25% completion claim is made.Develop conflict repair at
a7f578097— 2026-10-04Merged exact develop
15adf350da53addfa33675c2b3f0e2722e086e37into publishedf95b4ffab0b842dc9a851ab10c719345ec67a6d6with one normal fast-forward push. All develop integration jobs remain; the animation capture lane uses the current exact-base/head routing selector and includes weighted/evaluator CPU suites. The relocated PRD preserves its original checklist, partial status and historical evidence, with an immutable link to removed batch execution instructions.Routing regressions: develop-only 2 failed/58 passed; resolved focused routing/workflow/animation/mannequin checks 347/347 pass. Root and recursive typecheck, lint, docs and budgets pass; normal precommit synchronization and prepush gates pass, including 320 drift tests. Fresh independent review accepts the resolution. GitHub reports MERGEABLE / CLEAN at this exact head and base. Draft remains on; hosted jobs skip draft runs, so this is no new rendered/native acceptance claim. No consumer implementation was added; remaining PRD criteria stay open.