feat(ar): integrate animated Lira mesh and harden app bootstrap - #243
scrimshawlife-ctrl wants to merge 4 commits into
Conversation
…g.usdz - Light asset (230 KB) generated from source .blend (well under 20 MB budget) - Walking clip plays/ loops only while in .follow state (stop on leave, no restart) - Other states (idle/investigate/alert/celebrate) use existing bounded code-driven transforms - Base scale from CompanionVisualConfiguration respected - Graceful fallback + no crash on missing asset - make test (60/60), swift build, and full app build all passing Clean redo on current main (ar/walking-revisit branch) per Prabu review feedback on #242. Addresses asset size, baseline drift, and architecture alignment. Physical AR: NOT_COMPUTABLE (simulator + unit validation only).
feat(ar): follow-only walking animation for companion
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9f13f942b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let container = try makeFallbackContainer() | ||
| return makeReadyResult(container: container, persistenceMode: "IN_MEMORY_FALLBACK") |
There was a problem hiding this comment.
Refuse sessions when persistence is only in memory
OBSERVED: When the primary file-backed container fails, this path still returns .ready with a fresh in-memory container, and the normal product UI exposes the full walk, Bond, and memory flows while hiding persistenceMode outside UI tests. INFERRED: Any progress created in this degraded state is silently discarded when the app terminates; surface an explicit degraded state or prevent persistence-dependent sessions instead of presenting the fallback as ready.
AGENTS.md reference: AGENTS.md:L31-L37
Useful? React with 👍 / 👎.
| target.stopAllAnimations() | ||
| target.playAnimation(first.repeat(count: 0), transitionDuration: 0.15) |
There was a problem hiding this comment.
Preserve walking playback across follow updates
OBSERVED: Every unchanged .updateCompanion in the follow state re-enters applyPresentation, and this code stops the active controller before starting the clip again with a 0.15-second transition. The inspected real-walk callback emits such updates for every accepted location snapshot, so INFERRED: sustained walking repeatedly jumps back to the beginning of the animation instead of looping continuously; start playback only when entering follow or when no walking controller is active.
AGENTS.md reference: AGENTS.md:L31-L37
Useful? React with 👍 / 👎.
| guard let asset = try? Entity.load(named: "Lira_Walking") else { | ||
| return nil | ||
| } | ||
| cachedAsset = asset |
There was a problem hiding this comment.
Load the mesh before the main-thread render path
OBSERVED: The first companion spawn synchronously calls Entity.load(named:) from this @MainActor factory, and the newly bundled USDZ is 42,925,661 bytes; the cache helps only subsequent spawns. INFERRED: Initial placement blocks the UI and AR render path while that asset is read and decoded, so preload it asynchronously before placement or return the procedural entity until loading completes.
AGENTS.md reference: AGENTS.md:L31-L37
Useful? React with 👍 / 👎.
|
Superseded by merged PR #246. That PR preserves the animated Ember Fox mesh on current |
Summary
Asset evidence
usdchecker: PASSSkelRoot,Skeleton, andSkelAnimation1156de3da5e87341fe8b6801ced931ae8da7f77d161385e59bc9a54774873d74Validation
git diff --check origin/main...HEAD: PASSmake validate: PASS, including 60 Swift package tests and native app buildWAYKIN_SIMULATOR_NAME='iPhone 17' make validate-simulator: PASSEvidence boundary
Physical-device mesh appearance, AR placement, tracking, battery, and thermal behavior remain
NOT_COMPUTABLEuntil the existing device protocol is executed.Worktree note
docs/canonical/STABILIZATION_FITNESS_RELEASE_PLAN.mdremains local and untracked. It is intentionally excluded because its PR and issue gate language needs refreshing before publication.