Skip to content

feat(ar): integrate animated Lira mesh and harden app bootstrap - #243

Closed
scrimshawlife-ctrl wants to merge 4 commits into
mainfrom
agent/animated-lira-bootstrap-stabilization
Closed

scrimshawlife-ctrl wants to merge 4 commits into
mainfrom
agent/animated-lira-bootstrap-stabilization

Conversation

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner

Summary

  • add the bundled Lira walking asset and wire follow-state animation playback
  • replace the placeholder presentation with the uploaded skinned Meshy USDZ
  • normalize and ground the imported mesh at the canonical companion height
  • cache the decoded RealityKit template and clone independent instances
  • preserve the procedural companion as a graceful asset-loading fallback
  • replace the forced SwiftData bootstrap fallback with explicit file-backed, in-memory, and unavailable states
  • add focused mesh, animation, scale, cloning, and bootstrap failure tests

Asset evidence

  • usdchecker: PASS
  • contains SkelRoot, Skeleton, and SkelAnimation
  • animation range: frames 1 through 32 at 30 fps
  • bundled asset SHA-256: 1156de3da5e87341fe8b6801ced931ae8da7f77d161385e59bc9a54774873d74

Validation

  • git diff --check origin/main...HEAD: PASS
  • focused AR and bootstrap tests: 24 passed, 0 failed
  • cached mesh tests: 2 passed, 0 failed
  • make validate: PASS, including 60 Swift package tests and native app build
  • WAYKIN_SIMULATOR_NAME='iPhone 17' make validate-simulator: PASS
  • simulator UI tests: 9 passed, 0 failed

Evidence boundary

Physical-device mesh appearance, AR placement, tracking, battery, and thermal behavior remain NOT_COMPUTABLE until the existing device protocol is executed.

Worktree note

docs/canonical/STABILIZATION_FITNESS_RELEASE_PLAN.md remains local and untracked. It is intentionally excluded because its PR and issue gate language needs refreshing before publication.

…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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread App/WaykinApp.swift
Comment on lines +54 to +55
let container = try makeFallbackContainer()
return makeReadyResult(container: container, persistenceMode: "IN_MEMORY_FALLBACK")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +309 to +310
target.stopAllAnimations()
target.playAnimation(first.repeat(count: 0), transitionDuration: 0.15)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +21 to +24
guard let asset = try? Entity.load(named: "Lira_Walking") else {
return nil
}
cachedAsset = asset

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Superseded by merged PR #246. That PR preserves the animated Ember Fox mesh on current main and includes the device-confirmed replacement/anchor fixes plus broader validation. Closing this stale branch avoids reintroducing its old-base rollback and conflicting bootstrap/mesh implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant