Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 25 additions & 35 deletions App/Resources/Companion/Lira/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,55 +3,45 @@
```yaml
evidence_class: MESHY_EMBER_FOX_WALK_V1
file: Lira_AR_Base.usdz
runtime_size: ~4.8MB_artist_blend_dcc
runtime_size: ~20MB_ember_fox_walk
mesh_authority_pr: 246
supersedes: ARTIST_BLEND_HERO_DCC_MID_LOD
```

Primary: `App/Resources/Lira_AR_Base.usdz` (bundled via xcodegen)
Mirror: `App/Resources/Companion/Lira/Lira_AR_Base.usdz`
Docs mirror: `docs/assets/companion/ar/Lira_AR_Base.usdz`
Artist source: `ArtSource/Companion/Lira/lira.blend`
Primary: `App/Resources/Lira_AR_Base.usdz` (bundled via xcodegen)
Mirror: `App/Resources/Companion/Lira/Lira_AR_Base.usdz`
Docs mirror: `docs/assets/companion/ar/Lira_AR_Base.usdz`

Re-export after sculpt / clip changes (does **not** use the Meshy interim path):
Current runtime package is the **Ember Fox** walk USDZ shipped by **PR #246**. The three tracked copies must remain **byte-identical**.

Do **not** re-import or replace this mesh without an explicit asset issue. Closed PRs **#242** and **#243** are superseded; do not force-merge them.

## Integrity

```bash
./scripts/export_lira_blend_to_usdz.sh ArtSource/Companion/Lira/lira.blend
./scripts/check_lira_usdz_integrity.sh
# or
make check-lira-usdz
```

Legacy Meshy image-to-3d packages (if still under `ArtSource/Companion/Lira/meshy/`) are
**not** the runtime default. Do not copy them over `Lira_AR_Base.usdz`.
Marker: `docs/assets/companion/ar/artist/EXPORT_OK` — `MESHY_EMBER_FOX_WALK_V1`.
Validation: `usdchecker --arkit` PASS on package (see EXPORT_OK).

## Runtime

1. AR attach → `LiraARAssetLoader.preloadFromBundle()`
2. If hierarchy incomplete → promote markers (Body + A1–A3) + spectral FX (ember/plume/shadow)
3. Spawn clone; preserve Body textures; `applySpectralFXSkin` for Dawn/Veil/Rupture FX climate
4. Hybrid puppet: Body bob/lean + CoreGlow breath + Filament sway
5. On failure → procedural Living Familiar mid-LOD

## Required hierarchy (post-promote)

| Node | Role |
|------|------|
| `LiraRoot` | Root |
| `Body` | Visual mesh parent |
| `Head`, `LeftEar`, `RightEar`, `Tail` | Puppet / motion |
| `Filament`, `CoreGlow` | A3 / A2 anchors |
| `GroundShadow`, `StatusIndicator` | Chrome |
1. AR attach → `LiraARAssetLoader.preloadFromBundle()` (versioned async template load)
2. Spawn may use **procedural Living Familiar** only as a bounded fallback while the package decodes
3. When decode completes, **authored Ember Fox** replaces the fallback in-place
4. Scene-owned anchors are explicitly detached so replacement leaves **one** companion
5. Embedded walk cycle targets the **skeleton**; scale/ground contact follow measured contract
6. State updates must not overwrite the imported asset’s canonical base transform

## DCC clip sidecars

Per-state Blender actions also ship as:
## Per-state clip sidecars

`App/Resources/Companion/Lira/Clips/Lira_{Idle,Follow,Investigate,Alert,Celebrate,Spawn}.usdz`

At preload, `LiraARAssetLoader.loadDCCClipSidecars()` maps any RealityKit-visible
animations into `LiraSkeletalPlayer` (overlaying the puppet library). When RealityKit
exposes no `availableAnimations` for the Blender crate export, the player stays on
`puppet:multiPart:6_clips` — state motion still works; DCC bone curves do not.
These remain bundled for catalog/fallback paths. While an authored walk clip is present on the Ember Fox rig, `LiraSkeletalPlayer` stands down for conflicting multi-part DCC binding (see EXPORT_OK). Per-state authored clips return when a compatible rig ships — add incrementally; **never** replace the base mesh merely to add clips.

## Integrity
## Historical note

```bash
./scripts/check_lira_usdz_integrity.sh
```
The retired **artist-blend / DCC mid-LOD** package (`ARTIST_BLEND_HERO_DCC_MID_LOD`, ~5 MB) was the previous default. It is **not** the active runtime. Historical receipts and Phase A notes that pin artist-blend SHAs (`3cc8ac2`, `d7954ac`) remain historical evidence only.
4 changes: 3 additions & 1 deletion KNOWN_LIMITATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
- Whether Apple Watch-originated samples appear with the expected timing in the current iPhone HealthKit queries.
- Whether the conservative defaults are appropriate across devices, terrain, urban canyons, and accessibility-related walking patterns.

A **PARTIAL** outdoor AR operator receipt exists (`docs/design/receipts/OUTDOOR_AR_RECEIPT_20260720_DEVICE_PARTIAL.md`, pre-mitigation continuity/audio notes). That is **not** a full outdoor COH PASS. Continuity/audio/UI/DCC mitigations and Hallmark polish have since landed on main; do **not** mark GPS, outdoor audio, battery, or outdoor AR quality as PASS from simulator, package evidence, Phase A, or that PARTIAL alone. Issue #41 requires a daylight re-walk on **current main tip** (see `docs/collaboration/ACTIVE_WORK.md` and the latest `OUTDOOR_QA_RECEIPT_*_PENDING.md`).
A **PARTIAL** outdoor AR operator receipt exists (`docs/design/receipts/OUTDOOR_AR_RECEIPT_20260720_DEVICE_PARTIAL.md`, pre-mitigation continuity/audio notes). That is **not** a full outdoor COH PASS. Continuity/audio/UI mitigations, Hallmark polish, Ember Fox mesh/runtime (**#246**), and real-walk pressure tuning (**#248**) have since landed on main; do **not** mark GPS, outdoor audio, battery, or outdoor AR quality as PASS from simulator, package evidence, historical Phase A (`3cc8ac2` / `d7954ac` era), or that PARTIAL alone. Issue #41 requires a daylight re-walk on **current main tip** (see `docs/collaboration/ACTIVE_WORK.md`). Pre-mesh indoor/outdoor PENDING scaffolds are historical — re-scaffold for the install tip.

**Companion package:** Packaged Ember Fox (`MESHY_EMBER_FOX_WALK_V1`) is the authoritative runtime asset. The retired artist-blend/DCC mid-LOD package is not current. Device claims that the authored mesh replaced the procedural fallback require physical OBSERVED evidence; issue **#247** holds TestFlight archive until that is confirmed on the post-#246 tip.

The local field-test receipt is engineering evidence only. It has no remote analytics or automatic upload, and receipt creation does not validate physical behavior. Timestamps may reveal session timing when a receipt is shared, field-test ratings remain manual, and receipt-related battery impact is unverified. Settings can show latest-receipt status and share the on-device JSON; that is still a privacy-filtered engineering export, not analytics.

Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ Demo Mode runs the same deterministic loop without physical movement or location
| Deterministic Demo Mode | ✅ Implemented | Package-testable |
| Local session memories | ✅ Implemented | Concise, privacy-bounded facts |
| Real-walk Core Location wiring | 🟡 Validation | Outdoor GPS requires device receipts (#41) |
| AR app adapter (MVP) | ✅ Implemented (frozen) | Presentation-only; outdoor tracking PARTIAL / re-walk |
| AR app adapter (MVP) | ✅ Implemented (frozen) | Presentation-only; outdoor tracking PARTIAL / re-walk (#41) |
| Packaged companion (Ember Fox) | ✅ Implemented (#246) | Async load + procedural fallback + live replace; device outdoor evidence still open |
| Path progress + session map | ✅ Implemented | Semantic path, not navigation-grade |
| HealthKit read enrichment | ✅ Implemented | Soft context; physical HK evidence open |
| Multiplayer, marketplace, LiveOps | 🔒 Deferred | Outside current scope |
Expand Down
10 changes: 6 additions & 4 deletions docs/assets/companion/ar/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

| File | Role |
| ---- | ---- |
| `Lira_AR_Base.usdz` | Packaged mid-LOD (same as app) |
| `src/Lira_AR_Base.usda` | Editable source; rebuild via `scripts/build_lira_usdz.sh` |
| `Lira_AR_Base.usdz` | Packaged Ember Fox runtime (same bytes as app; `MESHY_EMBER_FOX_WALK_V1`) |
| `artist/EXPORT_OK` | Evidence marker for current package |
| `src/Lira_AR_Base.usda` | Historical/generated source path; not the current Ember Fox default |

Runtime: `App/Resources/Companion/Lira/Lira_AR_Base.usdz`
Loader: `LiraARAssetLoader`
Runtime: `App/Resources/Lira_AR_Base.usdz` (+ nested mirror)
Loader: `LiraARAssetLoader` (async template + procedural fallback + live replace)
Authority: PR #246
Spec: `docs/design/LIRA_AR_PRODUCTION_RIG.md`
20 changes: 17 additions & 3 deletions docs/canonical/CURRENT_CAPABILITY_MATRIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
| Movement integrity | Implemented | Binding | Do not change thresholds without scoped issue |
| Lira companion | Implemented | Binding | Extend only through approved states |
| Bond | Implemented | Binding | Require migration plan for schema or semantic changes |
| Bounded pursuit pressure | Implemented | Binding | Preserve safety constraints |
| Bounded pursuit pressure | Implemented | Binding | Preserve safety constraints; real-walk pressure curve from PR #248 is gameplay tuning only |
| Deterministic events | Implemented | Binding | Seeded reproducibility; companion-first defaultRules v1.1 |
| Semantic audio | Implemented | Binding | Core must not own filenames |
| Local persistence | Implemented | Binding | Make no cloud assumptions |
| Field-test receipts | Implemented | Binding | Preserve privacy filtering |
| AR semantic contracts | Implemented | Binding | Keep platform-neutral |
| AR app adapter (MVP) | **Implemented (frozen)** | Binding | Maintenance/defects only — see `AR_MVP_FREEZE.md` |
| Packaged companion mesh (Ember Fox) | **Implemented** | Binding | PR #246; do not re-import/replace without asset issue; #242/#243 superseded |
| Mesh async load + procedural fallback + live replace | **Implemented** | Binding | Authored asset must replace fallback; single companion anchor |
| Real-walk-to-AR commands | **Implemented** | Binding | Device tracking quality still requires evidence |
| Path progress (semantic) | **Implemented (v1.1+summary)** | Binding | Not navigation-grade |
| HealthKit read enrichment | **Implemented (v1.1 hardened)** | Binding | Optional step-volume + distance; Demo never blocked |
Expand All @@ -23,7 +25,8 @@
| Workout-session mirroring | Deferred | Reference only | Preserve iPhone gameplay authority and idempotent reconciliation |
| WatchConnectivity semantic sync | Deferred | Reference only | Non-authoritative state only; session ID + revision required |
| Live heart-rate/effort enrichment | Deferred | Reference only | Raw metrics may not directly select events or raise coercive pressure |
| Outdoor physical AR QA | Partial | Binding evidence | PARTIAL receipt 2026-07-20; full PASS requires #41 re-walk on tip SHA (blocking further outdoor PASS claims) |
| Outdoor physical AR QA | Partial | Binding evidence | PARTIAL receipt 2026-07-20 (historical pre-mesh); full PASS requires #41 re-walk on **current** tip SHA |
| Indoor Ember Fox device smoke | Pending device | Binding evidence | Mesh may render on device; outdoor tracking/thermal still incomplete without receipts |
| Glasses glance adapter | Implemented (flag default off) | Supporting | Mock/transport; physical glasses NOT_COMPUTABLE |
| Companion presentation matrix | Implemented | Binding | Shared behavior/distance/AR string authority |
| Conversation Director | **Release candidate** | Reference only | Define provider-neutral contracts and evidence gate before implementation |
Expand All @@ -36,4 +39,15 @@
| Multiplayer | Excluded | Binding | Do not implement |
| Marketplace/creator SDK | Excluded | Binding | Do not implement |
| Economy/LiveOps | Deferred | Reference only | Do not implement |
| Generative AI required for canonical loop | Excluded | Binding | Deterministic and offline fallback behavior is mandatory |
| Generative AI required for canonical loop | Excluded | Binding | Deterministic and offline fallback behavior is mandatory |

## Runtime identity snapshot (non-binding convenience)

| Field | Value |
| --- | --- |
| Documented `main` tip at last matrix refresh | `7df3a169ede507ce54469330318f66c4603f8c3d` |
| Companion package | Ember Fox USDZ (`MESHY_EMBER_FOX_WALK_V1`) |
| Mesh authority | PR #246 |
| Superseded mesh PRs | #242, #243 (closed) |
| Retired default package | Artist-blend / DCC mid-LOD (`ARTIST_BLEND_HERO_DCC_MID_LOD`) |
| Live coordination | `docs/collaboration/ACTIVE_WORK.md` |
Loading
Loading