Files
life-companion/docs/IOS_V1_EXECUTION_PLAN.md
T

70 KiB

iOS V1 Execution Plan

This is the durable execution record for the complete Life Companion iOS V1. It is updated whenever a work item changes state. A screen, placeholder, or stored value is not considered complete unless the promised user-visible behavior and its verification both exist.

The sequential roadmap from the current animation work through an installable, usable product candidate is defined in docs/USABLE_IOS_V1_PLAN.md.

Scope And Invariants

  • iOS is the only implementation, build, accessibility, and release target.
  • Android files may remain as future reference but are not changed or tested.
  • The app contains no sound.
  • Missing days never punish the user or create debt.
  • More quantity, duration, records, devices, or payment never accelerates the relationship.
  • Health statements remain factual and correctable; the app does not infer mood or judge health quality.
  • The app remains local-first and useful offline.
  • The user will launch the app on a physical device; automated work must not silently replace physical-device gates with simulated evidence.

Definition Of Complete

V1 is complete only when all of the following are true:

  1. A fresh install can complete encounter, naming, first signal, factual response, correction, discovery, placement, exploration, memory, export, and reset without a placeholder path.
  2. Four directions and four species deliver equivalent functional depth.
  3. All twelve identities remain visually and behaviorally consistent across encounter, habitat, profile, memory, growth, and animation.
  4. An exploration choice has a deterministic later consequence that the user can observe, not only a stored choice ID.
  5. Placed discoveries remain visible, movable, reusable, and attributable to accepted life events.
  6. Every required companion action has a coherent frame sequence, clean interruption/settling behavior, static fallback, and Reduced Motion path.
  7. Data source, notification, motion, haptics, language, export, reset, and deletion controls execute their stated behavior.
  8. TypeScript, lint, the complete Jest suite, Metro iOS bundle, and iOS native build pass at the accepted revision.
  9. VoiceOver, Dynamic Type, HealthKit background delivery, file sharing, and lifecycle recovery have physical-device evidence or remain explicitly open release gates.

Execution Order

Only one work item is active at a time. DONE requires a focused commit and recorded verification. EXTERNAL GATE means implementation can continue, but release acceptance requires an owner decision, paid asset budget, or physical device.

ID Outcome Status Acceptance boundary
BASE-01 Typed React Native iOS project, durable store, domain growth, and complete navigation skeleton DONE 85ec2aa and later baseline commits
DATA-01 HealthKit refresh, cursor deduplication, correction rebuild, and background delivery DONE 9beadf5, 039bf42
JOURNEY-01 Seven-day explorations, weekly memory, monthly chronicle, and four direction outputs DONE 7a7d32e, 3ece695
SYSTEM-01 Notification opt-in/rate limits, data-file export, preferences, and reset DONE 337ec5c, 3671432, 81d106e, 2932e94
HABITAT-01 Eight durable slots and placed discoveries visible from the home habitat DONE 3a6590c
EXP-01 Exploration choices alter later placement guidance and name the actual consequence in memory DONE 363f6b3; deterministic domain and UI tests
IDENTITY-01 Palette, birth mark, and temperament presentation remain consistent in every companion surface DONE 3cba4ef; typed catalog and shared presentation tests
DISCOVERY-01 Twenty discoveries have distinct presentation and meaningful reuse feedback DONE 70366be; unique glyph and persistent reuse tests
ANIM-RUNTIME-01 Typed, interruptible semantic animation state machine with Reduced Motion and fallback DONE 1ad602a; 15 semantic clips, cancellation and fallback tests
ANIM-ASSET-01 Four species cover the complete semantic animation library DONE Pathbud, Cloudnest, Facetlantern, and Mossspring each own all 15 audited clips without fallback; physical-device motion review remains external
ACCESS-01 Load-bearing screens support VoiceOver, Dynamic Type, narrow layouts, and recovery states EXTERNAL GATE 1f1203d, 0983610, 4192001, 005442d, and e5b53de complete automated implementation; physical-device VoiceOver, focus, and visual acceptance remain
RELEASE-01 Final iOS bundle/build, privacy declarations, handoff, and physical-device acceptance EXTERNAL GATE af18e98 and 5f63d01 pass source-controlled release gates; App Store owner values, production animation decision, and physical-device evidence remain

Next Execution Queue

The remaining implementation is completed in the following order. Each batch gets focused automated evidence and a product-code commit before this document records the exact revision in a separate evidence commit.

  1. ACCESS-01C DONE (4192001): notification permission denial and request failures remain visible without changing the preference; the full-screen world map is scrollable and operable at 200% Dynamic Type with explicit region semantics.
  2. ACCESS-01D DONE (005442d, e5b53de): load-bearing onboarding, action, journey, memory, and settings layouts are exercised at 320x568 and 200% Dynamic Type. Candidate cards, action rows, signal controls, segmented options, habitat content, portraits, and share cards adapt without removing a scroll path.
  3. RELEASE-01A DONE (af18e98): iOS permission copy, privacy declarations, HealthKit background capability, data export, local notifications, reset, app icons, and launch presentation match the implemented product. Android remains outside this release scope.
  4. RELEASE-01B DONE (5f63d01): complete TypeScript, ESLint, Jest, Metro iOS bundle, native Asset Catalog/launch compilation, and unsigned iOS Simulator build gates pass at one candidate revision.
  5. DEVICE-01 READY / EXTERNAL GATE: docs/IOS_DEVICE_ACCEPTANCE.md provides the physical-device matrix for HealthKit permission and background delivery, notifications, sharing, VoiceOver, 200% Dynamic Type, Reduce Motion, haptics off, lifecycle restore, iPad, and long-absence recovery. Only actual device results can close these gates.

ANIM-ASSET-01 is now complete as an implementation gate. Physical-device motion review remains an external release gate. The user approved a bounded Pathbud pilot before expanding to the other species. The pilot targets 12-16 idle frames at 8-10 FPS, 8-12 notice frames at 10-12 FPS, and 12-16 activity frames at about 12 FPS. Paid generation is limited to this representative batch; generated rows must pass extraction, curation, centroid and baseline inspection, and a runtime playback check before expansion.

Work Item Contracts

EXP-01: Consequence-Bearing Exploration

Observable behavior:

  • The latest relevant exploration consequence recommends stable habitat slots for a newly revealed discovery without moving or forcing the object.
  • Current placement remains selected even when it is outside the recommendation.
  • Weekly memories and monthly chronicles name the actual selected consequence, rather than only saying that a choice occurred.
  • The mapping is deterministic after restart and independent of event quantity.

Verification:

  • Unit tests cover all eight consequences, stable ordering, no-choice fallback, and occupied/current slots.
  • Component tests cover the recommendation label and consequence copy.
  • TypeScript, ESLint, complete Jest suite, and git diff --check pass.

IDENTITY-01: Permanent Identity Presentation

Observable behavior:

  • Every identity resolves to one palette treatment, one birth-mark treatment, and deterministic temperament timing.
  • Encounter, comparison, hatch, habitat, profile, and memory use the same appearance descriptor and never fall back to species-only identity.
  • Differences remain cosmetic and do not imply rarity or gameplay advantage.

Verification:

  • A catalog completeness test covers all twelve identities.
  • Shared companion presentation components are tested in all required surfaces.
  • Reduced Motion preserves identity information without animation.

DISCOVERY-01: Distinct Objects And Reuse

Observable behavior:

  • All twenty catalog entries are visually distinguishable without text alone.
  • Reveal, placement, displacement, move, and reuse have visible confirmation.
  • Reuse reflects the companion species and object direction while preserving the same factual provenance.

Verification:

  • Catalog uniqueness and state-transition tests cover all entries.
  • Habitat and discovery component tests cover placement conflict and reuse.

ANIM-RUNTIME-01 And ANIM-ASSET-01

Runtime comes before more assets:

  • A typed manifest declares semantic clips, duration, loop policy, reduced poses, fallback, and interruption policy.
  • The player owns one cancellable sequence and calls completion exactly once.
  • Only current-species assets load; absent optional clips fall back honestly.

Asset completion is tracked separately because it requires art review and paid generation. Pathbud now owns all 15 declared semantic clips without fallback. The current cross-species baseline is still not production-complete: Pathbud and Cloudnest each own all 15 declared semantic clips; Facetlantern now owns all 15 audited clips; all four species now own the complete 15-clip library.

Pilot execution (ANIM-ASSET-01P, approved 2026-08-17):

  • Use the locked Pathbud base from the read-only life-companion-prototype run only as a reference; all new generation and curation outputs belong to this repository's art/sprite-runs/pathbud-pilot-20260817 run.
  • Request exactly three component rows: idle (14 frames, 9 FPS), notice (10 frames, 11 FPS), and activity_response (14 frames, 12 FPS). After deterministic extraction, reject four split fragments and ship curated playback sequences of 13, 10, and 12 frames respectively.
  • Preserve the existing semantic identity and grounded silhouette. Curation must establish a shared foot baseline and reduce centroid jitter before any PNG reaches src/assets/pathbud.
  • The pilot passed post-curation inspection with score 100, no errors, and no warnings. Runtime now preloads the active clip and advances from elapsed time rather than chained per-frame delays.

Interaction batch (ANIM-ASSET-01I, completed 2026-08-17):

  • Extend the accepted Pathbud identity with rest, touch, discovery_reveal, and object_use before adding lower-frequency clips.
  • The curated Pathbud idle frame is the canonical anchor. The provider returned 10, 10, 11, and 11 natural poses; deterministic endpoint holds produce final playback sequences of 12, 10, 12, and 12 frames at 9, 11, 12, and 12 FPS.
  • Post-curation inspection scored 100 with no errors or warnings. The full 27 Jest suites / 82 tests, TypeScript, ESLint, a Metro iOS bundle containing 120 assets, and the unsigned iOS Simulator build pass. Physical-device motion review remains open. This score predates adjacent-frame continuity checks and therefore proves extraction integrity, not motion smoothness.

Continuity repair (ANIM-ASSET-01C, completed 2026-08-17):

  • Physical visual review separated two defects. Landscape onboarding panels clipped a square child under overflow: hidden; cb4af35 makes the child fill the panel height while its PNG remains contain-scaled. Independent action rows also jumped between distant key poses.
  • tools/audit_sprite_continuity.py adds edge-pixel, adjacent alpha-IoU, and centroid-movement gates. The accepted discovery reveal now ships 15 natural poses instead of 12. Its minimum adjacent IoU improved from 0.652 to 0.775, maximum centroid movement fell from 37.8px to 17.9px, and all frames retain zero canvas-edge pixels.
  • Four provider attempts were audited rather than automatically published. Touch failed at the provider, Activity response fused poses during component extraction, and Object use returned a labeled two-row sheet; all three were rejected. Only Discovery reveal passed the complete generation, extraction, curation, continuity, and runtime replacement path.
  • The same continuity gate passes Rest, Notice, Touch, Discovery reveal, and Object use. Idle (min IoU 0.689) and Activity response (min IoU 0.600, max movement 34.8px) remain explicitly open and must be generated as smaller multi-row pose batches rather than another crowded 16-pose strip.
  • At f4dc849, 27 Jest suites / 83 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 123 copied assets, and the unsigned iOS Simulator build pass. Physical-device motion review remains open.

Motion repair (ANIM-ASSET-01M, completed 2026-08-17):

  • Continuity QA now includes the last-to-first edge for looping clips. The old 13-frame Idle failed at min IoU 0.689; the new 10-frame loop passes with min IoU 0.971, maximum movement 1.57px, and zero edge pixels.
  • Activity response was split into an eight-frame departure row and an eight-frame return row so each 16:9 source retained safe component spacing. The return row used the accepted departure endpoint as motion vocabulary. The combined 16-frame runtime passes at min IoU 0.823, maximum movement 14.53px; its segment boundary is IoU 0.890 and 7.53px movement.
  • Three provider tasks completed for USD 0.063. The return task result was recovered by its existing task ID after a local TLS polling interruption; no duplicate paid request was submitted.
  • All seven currently integrated Pathbud clips now pass the same continuity gate, with loop closure enabled for Idle and Rest. Lower-frequency Pathbud semantics, other species, and physical-device motion review remain open.
  • At 51f6e25, 27 Jest suites / 83 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 124 copied assets, and the unsigned iOS Simulator build pass.

Core semantic expansion (ANIM-ASSET-01S, completed 2026-08-17):

  • Pathbud now owns generated Hatch, Calm response, Focus response, and Vitality response clips instead of falling back to Idle. Four API Mart GPT-Image-2 tasks completed for USD 0.084 total.
  • Visual curation rejected Hatch source frame 8 because its tall head lift made the final settle jump, and Vitality source frame 4 because it introduced a mouth outside the locked identity. Rejected frames are absent from runtime.
  • Runtime ships 9 / 8 / 8 / 7 frames at 9 / 8 / 9 / 9 FPS. All four clips have zero canvas-edge pixels; minimum adjacent alpha IoU is 0.810, 0.812, 0.844, and 0.763, while maximum centroid movement is 13.71px, 5.18px, 14.49px, and 20.22px respectively.
  • Reduced Motion uses the declared final pose and completes once. At 08c2ee9, 27 Jest suites / 83 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 156 copied assets, and the unsigned iOS Simulator build pass.
  • Pathbud still needs reorient, signature move, growth transition, and memory pose. Other species and physical-device motion review remain open.

Pathbud semantic completion (ANIM-ASSET-01F, completed 2026-08-17):

  • Reorient, signature move, growth transition, and memory pose complete the Pathbud library. Four API Mart GPT-Image-2 tasks completed for USD 0.084.
  • All 8 / 10 / 8 / 8 generated frames passed identity review and were retained at 10 / 10 / 9 / 8 FPS. No clip adds a mouth, external prop, detached effect, background, or canvas-edge pixel.
  • Minimum adjacent alpha IoU is 0.889, 0.860, 0.884, and 0.872; maximum centroid movement is 9.61px, 6.17px, 7.01px, and 9.05px. All results are materially inside the shared 0.70 / 24px continuity gates.
  • Runtime tests now require the curated Pathbud inventory to equal all 15 declared semantic clip IDs, so a future missing/fallback clip fails the test.
  • At 494b5e2, 27 Jest suites / 83 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 190 copied assets, and the unsigned iOS Simulator build pass. Other species and physical-device motion review remain open.

Cloudnest core responses (ANIM-ASSET-02A, completed 2026-08-17):

  • Activity, Calm, Focus, and Vitality response clips extend the accepted four-frame Idle and Notice identity. Seven API Mart GPT-Image-2 tasks completed for USD 0.147; Activity and the other rows each ship eight curated frames.
  • The Focus provider task completed normally, but the original CLI stalled while reading its image response. The existing task result was downloaded by task ID and verified by SHA-256; no duplicate paid request was submitted.
  • Closely spaced cloud shells fused under connected-component segmentation. The official projection-profile plus dynamic-programming extraction path recovered eight natural poses per row with no warnings or grid slicing.
  • Owner review rejected two intermediate Activity repairs. Removing original source frames 3 and 5 fixed the alternating perspective but left a one-frame shell expansion. A later one-row regeneration introduced neighboring-pose blue fragments during projection extraction, so none of its frames shipped.
  • The accepted Activity clip combines two spacious four-pose component rows: departure and return. Every frame preserves the front three-quarter camera, folded shell width, and clean alpha boundary. Its minimum adjacent IoU is 0.914, maximum centroid movement is 5.36px, and the segment boundary is 0.949 / 1.25px.
  • All runtime clips have zero edge pixels. Final minimum adjacent alpha IoU is 0.914, 0.943, 0.875, and 0.773; maximum centroid movement is 5.36px, 1.07px, 0.88px, and 11.09px respectively.
  • At d345503, 27 Jest suites / 84 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 222 copied assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass. Remaining Cloudnest semantics, other species, and physical-device motion review remain open.

Cloudnest interaction expansion (ANIM-ASSET-02B, completed 2026-08-17):

  • Rest, Touch, Discovery reveal, and Object use add four high-frequency interactions without fallback. Four API Mart GPT-Image-2 tasks completed for USD 0.084, producing 24 clean connected components from four spacious six-pose rows.
  • Motion review rejected Touch source frame 3 because its excessive full-body tilt created 16-17.5px adjacent centroid jumps. Runtime ships the remaining five-pose Touch sequence; its maximum movement is 3.27px.
  • Runtime ships Rest/Touch/Discovery/Object use as 6/5/6/6 frames at 6/9/9/9 FPS. All have zero edge pixels. Minimum adjacent alpha IoU is 0.989, 0.846, 0.886, and 0.822; maximum centroid movement is 0.48px, 3.27px, 2.38px, and 10.65px respectively.
  • The default inspector records one intentional warning: Rest silhouette motion is 0.0085, below the generic 0.01 threshold, because its visible sequence is carried by eyelid poses while the shell remains stable. The warning and manual visual acceptance remain in evidence rather than lowering the gate.
  • At b5251ca, 27 Jest suites / 85 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 245 copied assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass. Cloudnest still needs Hatch, Reorient, Signature move, Growth transition, and Memory pose.

Cloudnest dynamic completion (ANIM-ASSET-02C, completed 2026-08-17):

  • Hatch, Reorient, Signature move, and Growth transition add four dynamic semantics without fallback. Four API Mart GPT-Image-2 tasks completed for USD 0.084, producing 24 clean connected components from four six-pose rows.
  • Motion review rejected Hatch source frame 0 because its larger body scale produced 0.685 adjacent alpha IoU and a 21.01px centroid jump. The remaining five poses retain a complete closed-eye awakening sequence.
  • Runtime ships Hatch/Reorient/Signature/Growth as 5/6/6/6 frames at 7/8/9/8 FPS. All have zero edge pixels. Minimum adjacent alpha IoU is 0.930, 0.956, 0.890, and 0.935; maximum centroid movement is 2.81px, 0.65px, 1.82px, and 1.21px respectively. Post-generation inspection scores 100 with no warnings.
  • At 2cd4995, 27 Jest suites / 86 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 268 copied assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass. Memory pose is the only remaining Cloudnest clip.

Cloudnest semantic completion (ANIM-ASSET-02D, completed 2026-08-17):

  • Memory pose completes Cloudnest's 15-clip semantic library without fallback. One API Mart GPT-Image-2 task completed for USD 0.021 and produced six clean connected components.
  • Visual review rejected source frame 4 because its very narrow eyelids read as stern rather than warm. Runtime ships source frames 0/1/2/3/5 as five poses at 8 FPS, ending on the portrait-ready Reduced Motion pose.
  • The runtime sequence has zero edge pixels, minimum adjacent alpha IoU 0.873, and maximum centroid movement 6.00px. Post-generation inspection scores 100 with no warnings.
  • A completeness test requires Cloudnest's implemented animation keys to equal all 15 declared semantic clip IDs, preventing silent fallback regression.
  • At e4cfe03, 27 Jest suites / 87 tests, TypeScript, ESLint, a production Metro iOS bundle reporting 273 copied assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass. Physical-device motion review remains open.

Facetlantern Idle motion pilot (ANIM-ASSET-03A, completed 2026-08-17):

  • A one-row eight-pose attempt was rejected even though projection extraction reported zero edge pixels and strong continuity. Adjacent open hands touched in the raw strip, so every extracted far hand ended at an artificial vertical cut. Numeric QA does not override visible anatomy damage.
  • The accepted replacement uses separate four-pose Inhale and Exhale component rows. Exhale received the accepted Inhale row as motion vocabulary. Three API Mart GPT-Image-2 tasks completed for USD 0.063; the failed one-row result is preserved only as rejection evidence.
  • Runtime concatenates the two rows into an eight-frame loop at 6 FPS. It has zero edge pixels, minimum adjacent alpha IoU 0.936, maximum centroid movement 1.43px, segment-boundary IoU 0.962, and loop-boundary IoU 0.936.
  • The default inspector retains one warning: Exhale silhouette motion 0.0078 is below the generic 0.01 threshold because the visible progression is mainly eyelid reopening and a small crystal settle. The warning is not hidden by lowering the threshold.
  • Facetlantern actions targeting eight or ten poses now use spacious multi-row motion segments whenever hands can cross slot boundaries. At d2577ef, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 277 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Rest and Notice (ANIM-ASSET-03B, completed 2026-08-17):

  • Rest and Notice each use two spacious four-pose rows, producing eight runtime frames without cropped hands. Four API Mart GPT-Image-2 tasks completed for USD 0.084; all 16 components extracted cleanly and post-generation inspection scored 100 with no warnings.
  • Two attempts to upload the 11MB Rest Settle row as the Return motion reference failed before any task ID or charge with HTTP/2 protocol errors. The repeated large-row payload was stopped. The accepted Return instead uses the extracted 73KB Settle endpoint frame as its compact third reference. Notice Hold uses the same endpoint-reference policy.
  • Rest ships an eight-frame loop at 6 FPS with zero edge pixels, minimum IoU 0.904, maximum movement 2.18px, segment-boundary IoU 0.943, and loop-boundary IoU 0.953.
  • Notice ships eight frames at 10 FPS with zero edge pixels, minimum IoU 0.879, maximum movement 4.61px, and segment-boundary IoU 0.898. Its final pose is the Reduced Motion attention pose rather than a return to Idle.
  • At 1f333df, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 293 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Touch (ANIM-ASSET-03C, completed 2026-08-17):

  • Touch uses separate four-pose Approach and Settle rows. Settle received the extracted Approach endpoint as its compact motion reference. Two API Mart GPT-Image-2 tasks completed for USD 0.042; all eight generated components extracted cleanly and post-generation inspection scored 100.
  • Visual review rejected Settle source frame 1 because it changed to a near-front camera with symmetric hands, then reversed to the accepted three-quarter view. The broad uncurated numeric audit passed, but the perspective reversal did not.
  • Runtime uses seven genuine poses at 10 FPS in the order Approach 0/1/2/3, Settle 2/0/3. No cloned frame was added merely to claim eight frames. The curated sequence has zero edge pixels, minimum IoU 0.918, and maximum movement 2.85px.
  • At 4778550, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 300 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Activity and Calm (ANIM-ASSET-03D, completed 2026-08-17):

  • Activity and Calm each use two spacious four-pose rows and compact extracted endpoint references for their second segments. Four API Mart GPT-Image-2 tasks completed for USD 0.084; all 16 components extracted cleanly and post-generation inspection scored 100 with no warnings.
  • Activity ships eight frames at 10 FPS with zero edge pixels, minimum IoU 0.783, maximum movement 6.58px, and segment-boundary IoU 0.892. Its larger palm lift is an intentional energetic peak, not a camera change.
  • Calm ships eight frames at 8 FPS with zero edge pixels, minimum IoU 0.880, maximum movement 1.41px, and segment-boundary IoU 0.980.
  • At 62ea844, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 316 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Focus (ANIM-ASSET-03E, completed 2026-08-17):

  • Based on owner feedback, Focus was expanded from eight planned poses to two five-pose rows at 10 FPS. Engage generated successfully. The first Release task and the separate Vitality Open task were rejected by the provider safety system with zero cost; one bounded Release retry succeeded. Vitality remains pending and no fallback art was integrated.
  • Visual review rejected Release source frame 4 because it jumped directly from a deep lean to Idle (0.709 IoU, 13.73px). Runtime keeps nine unique PNGs but plays 13 frames: Engage 0-4, Release 0-3, then Engage 3/2/1/0 in reverse as a genuine physical return path.
  • The final playback has zero edge pixels, minimum IoU 0.829, maximum movement 7.13px, and post-generation inspection score 100 with no warnings.
  • At 77c1b2c, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 325 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Reorient (ANIM-ASSET-03F, completed 2026-08-17):

  • Reorient uses two five-pose rows at 10 FPS. Turn and Hold completed normally, while the separate Vitality Return task was rejected by the provider safety system with zero cost. The successful Vitality Rise row remains unpublished; no half-animation or fallback entered runtime.
  • Runtime ships all ten Reorient poses and stops at the final leftward Reduced Motion orientation. It has zero edge pixels, minimum IoU 0.945, maximum movement 1.52px, and segment-boundary IoU 0.965.
  • The generic inspector retains one rounded boundary warning for subtle Turn silhouette motion; visual review confirms incremental eye, face, and body direction changes, so the warning remains visible rather than lowering the threshold.
  • At 5705362, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 335 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Vitality (ANIM-ASSET-03G, completed 2026-08-18):

  • The accepted five-pose Rise from the prior run was preserved. Its original Return task had failed provider safety at zero cost, so no partial runtime clip was published. A simplified neutral Return prompt using the extracted Rise endpoint completed successfully for USD 0.021.
  • Runtime now ships all ten Vitality poses at 10 FPS. It has zero edge pixels, minimum IoU 0.884, maximum movement 3.06px, and segment-boundary IoU 0.943. Inspection scored 100 with no warnings.
  • Total accepted Vitality generation cost is USD 0.042, including the prior Rise. At d5250eb, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 345 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Signature move (ANIM-ASSET-03H, completed 2026-08-18):

  • The original Signature Trace request was rejected by provider safety with zero cost. A shorter neutral two-hand crystal-gesture request completed both five-pose rows for USD 0.042; all components extracted cleanly and inspection scored 100.
  • Visual curation reordered the generated Finish row from 0/1/2/3/4 to 0/3/2/1/4, producing one directional progression from hands framing the crystal, through the open-palms peak, back to Idle instead of alternating hand poses.
  • Runtime ships ten poses at 10 FPS with zero edge pixels, minimum IoU 0.848, and maximum movement 5.23px.
  • At eedfc0d, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 355 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Discovery and Object use (ANIM-ASSET-03I, completed 2026-08-18):

  • Discovery Reveal and Object Use each use two five-pose rows at 10 FPS. Four API Mart GPT-Image-2 tasks completed for USD 0.084; all 20 components extracted cleanly and inspection scored 100 with no warnings.
  • Both return rows were reordered from 0/1/2/3/4 to 2/1/0/3/4 so the deepest or most-open pose occurs once, followed by a monotonic return instead of a segment-boundary reset.
  • Discovery ships ten poses with zero edge pixels, minimum IoU 0.754, and maximum movement 3.01px. Object Use ships ten poses with zero edge pixels, minimum IoU 0.805, and maximum movement 10.46px.
  • At 5a767b2, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 375 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Hatch and Growth (ANIM-ASSET-03J, completed 2026-08-18):

  • Hatch and Growth each use two five-pose rows at 9 FPS. Four API Mart GPT-Image-2 tasks completed for USD 0.084; all 20 components extracted cleanly and inspection scored 100.
  • Visual review rejected Growth Rise source frame 2 because it introduced a second blue crystal in the character's hand. Hatch ships all ten poses; Growth ships the remaining nine without the duplicate-crystal identity error.
  • Hatch has zero edge pixels, minimum IoU 0.879, and maximum movement 3.29px. Growth has zero edge pixels, minimum IoU 0.788, and maximum movement 4.68px.
  • At f314b69, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 394 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Facetlantern Memory pose (ANIM-ASSET-03K, completed 2026-08-18):

  • Memory pose uses a five-plus-five component-row plan at 8 FPS. Four API Mart GPT-Image-2 tasks completed for USD 0.056; two hold rows were rejected before curation for camera drift and an edge-cropped hand.
  • The accepted runtime sequence keeps nine real poses: five settling poses and four portrait-hold poses after removing one scale/camera jump. The final pose is the Reduced Motion portrait pose; no static fallback or cloned frame is used.
  • The nine-frame runtime audit has zero edge pixels, minimum IoU 0.964851, maximum centroid movement 1.5884px, and no continuity failures. The raw settle row's low motion warning is recorded as an intentional quiet-memory transition in the evidence ledger.
  • At 48a77b7 / 11ed29b, 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reporting 403 assets, and an unsigned arm64 iPhone 17 Pro Simulator build pass.

Mossspring Rest and Notice (ANIM-ASSET-04A, completed 2026-08-18):

  • Rest and Notice ship eight curated frames each from split component rows at 6 and 10 FPS. Four API Mart GPT-Image-2 tasks completed for USD 0.056; zero-cost network retries were not charged.
  • Both runtime audits retain zero edge pixels and pass continuity: Rest min IoU 0.792551 / max movement 11.8336px; Notice min IoU 0.795959 / max movement 12.8192px. Evidence is in art/evidence/mossspring-rest-notice-20260818.

Mossspring Activity and Calm (ANIM-ASSET-04B, completed 2026-08-18):

  • Activity and Calm ship five and seven curated frames at 10 and 6 FPS. Return/hold rows with direct-to-idle jumps were rejected during curation.
  • Audits pass with zero edge pixels: Activity min IoU 0.734325 / max movement 20.2028px; Calm min IoU 0.8744 / max movement 9.4109px. Evidence is in art/evidence/mossspring-activity-calm-20260818.

Mossspring Focus and Vitality (ANIM-ASSET-04C, completed 2026-08-18):

  • Focus and Vitality ship seven curated frames each at 8 and 9 FPS. Direct returns to idle and a 27px medium-to-low jump were excluded.
  • Audits pass with zero edge pixels: Focus min IoU 0.744777 / max movement 18.7404px; Vitality min IoU 0.719571 / max movement 20.0477px. Evidence is in art/evidence/mossspring-focus-vitality-20260818.

Mossspring Reorient and Signature (ANIM-ASSET-04D, completed 2026-08-18):

  • Reorient and Signature ship seven and six curated frames at 8 and 9 FPS. A near-edge final reorient pose and a detached signature effect were rejected.
  • Audits pass with zero edge pixels: Reorient min IoU 0.847587 / max movement 11.0911px; Signature min IoU 0.809369 / max movement 12.2454px. Evidence is in art/evidence/mossspring-reorient-signature-20260818.

Mossspring Touch and Discovery (ANIM-ASSET-04E, completed 2026-08-18):

  • Touch ships four clean approach poses after the settle row introduced a new mouth; Discovery ships seven poses after one raised-claw jump was excluded.
  • Audits pass with zero edge pixels: Touch min IoU 0.812136 / max movement 10.4386px; Discovery min IoU 0.755497 / max movement 20.0975px. Evidence is in art/evidence/mossspring-touch-discovery-20260818.

Mossspring Object Use and Hatch (ANIM-ASSET-04F, completed 2026-08-18):

  • Object Use and Hatch ship eight and seven curated frames at 8 FPS. The tall hatch peak was omitted so the sequence settles into its stable final pose.
  • Audits pass with zero edge pixels: Object Use min IoU 0.73327 / max movement 19.7338px; Hatch min IoU 0.710401 / max movement 21.4145px. Evidence is in art/evidence/mossspring-object-hatch-20260818.

Mossspring Growth and Memory (ANIM-ASSET-04G, completed 2026-08-18):

  • Growth transition and Memory pose each ship seven curated frames at 8 FPS. Growth Rise frame 0 was omitted as a duplicate midpoint that caused a sub-threshold transition; Memory Settle frame 1 was omitted after an oversized frontal jump. The accepted runtime rows retain the monotonic ascent and quiet portrait hold.
  • The final audits pass with zero edge pixels: Growth min IoU 0.703149 / max movement 19.5201px; Memory min IoU 0.821481 / max movement 8.1832px. Evidence is in art/evidence/mossspring-growth-memory-20260818.
  • At 4c65192, the complete 27 Jest suites / 89 tests, TypeScript, ESLint, production Metro iOS bundle with 496 assets, and unsigned iPhone 17 Pro iOS 26.1 Simulator build pass. Physical-device motion review remains open.

USABLE-01A: First-Use And Daily-Use Durable Flow

  • At f81344e / 24e1a7f / 41de5dc, __tests__/usableFlow.test.ts exercises the real Zustand store with deterministic dates: fresh encounter, naming, first signal, factual event, correction, discovery reveal/place/reuse, seven shared days, exploration consequence, weekly memory, export, AsyncStorage relaunch with a running timer, reset, and sparse D0/D1/D3/D7/D14/D21/D30 dates without catch-up growth. It also verifies 60 shared days across eight weekly chapters and two monthly chronicles, plus a timezone-shifted imported local day without event duplication.
  • The same fixture caught and fixed a reset defect where Zustand's default merge left companion, selectedIdentityId, activeTimer, and pendingResponseEventId in persisted state. Reset now clears those optional fields while retaining the store actions.
  • The complete 28 Jest suites / 95 tests, TypeScript, ESLint, and git diff --check pass. The remaining Goal 2 work is a full navigation-container workflow review and native/device lifecycle gates.

NATIVE-01A: Native Service Failure Recovery

  • At 0326028, HealthKit authorization and background-delivery errors persist as retryable healthConnection.lastError state and successful retries clear stale errors. Notification API failures no longer create delivered receipts.
  • Timer routes opened while another timer is active now show an explicit conflict state and link back to the running timer instead of silently rejecting startTimer.
  • Share Sheet image and fallback failures now show an accessible retry error instead of leaving the user with a silent failure.
  • At c1bfbbd, the complete 28 Jest suites / 100 tests, TypeScript, ESLint, production Metro iOS bundle with 496 assets, and unsigned iPhone 17 Pro iOS 26.1 Simulator build pass. Physical-device permission, background wake-up, share-sheet, and accessibility/lifecycle review remain external.

USABLE-02A: Usability Feedback And Empty States

  • At 48b653a / dd887a6, Profile fulfills the onboarding promise that a companion name can be changed later; Wardrobe explains an empty collection; Pact explains rejected third/same-direction journey signals; and Data Sources exposes health read errors as accessibility alerts.
  • At ed86746, network changes also show a non-blocking offline state while local companion, record, and shared-world workflows remain available.
  • At 7018ab3, unlocked action, hotspot, and signature direction outputs can be revisited with a corresponding companion motion instead of remaining static result rows.
  • At 16e8f4c, Habitat surfaces a grounded companion reflection for quiet, recent, returning, discovery-ready, and exploration-ready states, using only accepted local facts and explicit choices. It creates a return reason without streaks, guilt, health judgment, or fabricated dialogue.
  • At 42cbf33, Memory adds a factual recent-pattern summary using the last shared days, dominant direction, and action names. It counts distinct days, so repeated events cannot create a false progress signal.
  • At 7c18c13, a thirty-day chronicle gains a privacy-safe share card with direction, discovery, and choice summaries; zero-event directions are omitted instead of being presented as part of the user's history.
  • At 6e3558a, users can persist a reflection focus; return cards honor it only when that direction has real accepted history and never change growth rules.
  • At a8b19aa, ninety shared days form a seasonal archive and privacy-safe seasonal share card, extending the long-term memory loop beyond the first month without adding a paywall or synthetic data.
  • At 3cad2cf, users can add a personal seasonal note that persists, exports, and appears in the privacy-safe share card.
  • At 676249e, older seasonal archives remain browsable after later seasons form, preserving the cumulative long-term memory loop.
  • At 3e45da7, the square seasonal-coast asset is used as a subdued latest archive-card background and older seasons are collapsed by default, reducing Memory-page clutter without losing history.
  • At 3de29c2, the user-facing label changed from seasonal archive to long-term archive, with a clear explanation that the 90-day archive is automatic and not another task.
  • The current follow-up also lets users save individual long-term archives and open a saved-only view without changing the underlying growth rules.
  • Formed long-term archives now also leave a subtle atmosphere tint and a coast-art marker in Habitat that opens the corresponding archive area.
  • Long-term archives derive a bounded keepsake from their dominant direction; the same keepsake is shown in Memory, Habitat, and share cards.
  • Habitat archive markers can be revisited with an existing companion response animation; revisit counts persist locally and export with the rest of the archive state.
  • Archive revisit presentation now follows the keepsake direction through the curated activity/calm/focus/vitality response clips and eight bounded return lines.
  • Thirty-day chronicles now accept a persisted personal note that exports and appears in privacy-safe sharing.
  • Earlier chronicles are collapsed by default and can be expanded to recover older personal notes without duplicating latest-chronicle controls.
  • No-data sharing now removes monthly and long-term personal notes from both the captured card and system share message, with a negative privacy test.
  • At 8286460, the native iOS Debug Simulator build succeeds on iPhone 17 Pro / iOS 26.1, and Metro startup renders the real first-encounter screen; the screenshot and open interaction/device gates are recorded in art/evidence/simulator-acceptance-20260819/.
  • At ceb805a, the encounter screen keeps its two secondary actions on one row at normal text size and stacks them at 200% Dynamic Type; the corrected Simulator capture shows both controls fully visible.
  • Long-term archives now expose the three deterministic monthly chronicle IDs that formed them; Memory can expand those monthly summaries and sharing names the month range without exposing personal notes in no-data mode.
  • The expanded archive view derives a direction arc from those same chronicles, distinguishing themes that run through the full period from later arrivals.
  • Archive chronicle rows now expand and highlight the exact monthly chronicle; monthly chronicles can be saved and filtered, persist through schema 11, and export with the rest of the local archive state.
  • The current incomplete month derives one of eight bounded monthly marks after 14 shared days. Habitat and Memory preview it without countdown pressure; at 30 days the same mark appears in the chronicle and privacy-safe share output.
  • At 811c944, the early-retention loop and successful system-share privacy message are covered by dedicated tests. A CuaDriver Simulator-click attempt posted host-window events but produced no device navigation, so it remains a recorded non-pass rather than being relabeled as interaction evidence.
  • Monthly-mark previews now support direction-specific companion revisits; schema 12 persists/export counts without advancing growth or forming a chronicle early.
  • At 8bb2dcc, the D360 annual review and its privacy-safe share summary are covered by dedicated domain/UI tests; the latest native build and Simulator capture are bound to the same revision.
  • Between D30 and D90, Habitat keeps the latest completed monthly mark revisitable; at D90 the long-term archive marker takes over without duplicate monthly/archive cards.
  • At 360 shared days, Memory and privacy-safe sharing expose one deterministic annual review assembled from four long-term archives; no new persistence or payment gate is introduced.
  • Schema 13 adds annual personal notes with the same 240-character, migration, export, and no-data privacy boundaries as monthly and long-term notes.
  • Multiple annual reviews remain browsable after later years form; older annual notes are read-only, while every year remains independently shareable.
  • SharePrivacy now receives an explicit target so chronicle, archive, annual, and full-memory entry points cannot silently mix unrelated artifacts; system messages and captured cards use the same target contract.
  • Full-memory year summaries use stable 560/760 point capture heights at normal and 200% text; single monthly/archive cards use 390/520 points and annual cards use 440/620 points with layout regression coverage.
  • At 5e15317, monthly, long-term, annual, and full-memory privacy summaries are scoped to their own event ranges. Annual review and sharing also preserve the four archive keepsakes in order instead of only increasing totals. Every historical monthly chronicle, long-term archive, and annual review can now open a share card for its own artifact rather than falling back to the latest.
  • At 70fa898, the previously hidden signal catalog is available as a complete 27-item library across Activity, Calm, Focus, and Vitality. Users can keep six preferred signals, replace them without deleting historical memories, add a custom timer or one-tap signal, and request automatic Apple Health sources.
  • At c02c2b5, first use exposes the complete signal library above the four recommendations. Preset and custom first signals carry an explicit onboarding contract into Habitat, while an unavailable HealthKit source keeps selection open and names equal-value timer and one-tap alternatives.
  • The complete 53 Jest suites / 170 tests, TypeScript, ESLint, production Metro iOS bundle with 498 assets, and unsigned iPhone 17 Pro iOS 26.1 Simulator build pass. Physical VoiceOver/Dynamic Type review and full device lifecycle acceptance remain external.
  • At 9e1f8aa, 8b954ec, and c38d3e0, Maestro 2.8 real Simulator interaction automation passed thirteen flows on iPhone 17 Pro / iOS 26.1: fresh onboarding, first signal/library, daily record and journey, exploration choice, discovery reveal/place/reuse, timer completion/correction, D360 memory/archive/annual share, iOS system sharing, world/profile/settings, export/reset, candidate comparison/species browse, profile preferences, and memory notes/favorites/history. The run captured 54 successful screenshots and found/fixed the D360 weekly-memory reachability issue, the baked-in second companion in memory backgrounds, and the overly tall discovery placement list. The detailed run manifest is tracked at art/evidence/simulator-e2e-20260819/manifest.json; physical-device gates remain open.

ACCESS-01 And RELEASE-01

  • Completed foundation: stable Zustand derived snapshots, header/control/timer semantics, scalable button labels, keyboard-adjusting scroll containers, and a tested 200% Dynamic Type habitat layout (1f1203d).
  • Completed recovery: stale timer, encounter, profile, habitat, journey, exploration, event, and discovery routes show a recoverable state instead of a blank screen; destructive reset uses a focusable, scrollable system Modal that respects Reduced Motion (0983610).
  • Completed permission and world-map behavior: notification denial and native request errors are announced without silently enabling a preference; the world map scrolls at large text sizes and exposes its title, regions, stages, and navigation as explicit accessibility elements (4192001).
  • Completed narrow large-text workflows: candidate cards and comparison actions, quick logging, signal controls, segmented options, habitat, memory, sharing, and settings use tested 320x568 / 200% layouts. Signal switches have visible purpose labels, and memory/settings section headings are navigable (005442d, e5b53de).
  • Add behavior tests for each load-bearing screen instead of counting screen files as coverage.
  • Record which checks are automated, simulator-only, or physical-device-only.
  • Repeat Metro iOS bundle and native build after the final implementation revision.
  • Physical-device acceptance includes HealthKit authorization/background wake-up, file sharing, VoiceOver, 200% Dynamic Type, Reduce Motion, haptics off, app background/restore, and long-absence recovery.

Commit And Evidence Protocol

For every completed work item:

  1. Change only the smallest required product, test, and documentation files.
  2. Run targeted tests while developing.
  3. Run TypeScript, ESLint, complete Jest, and git diff --check before commit.
  4. Update this file's status and evidence table in the same completion batch.
  5. Create a focused Git commit and confirm the worktree is clean.
  6. Do not mark simulator or unit evidence as physical-device acceptance.

Evidence Log

Work item Revision Evidence Remaining gate
BASE-01 through HABITAT-01 2932e94 baseline 13 Jest suites / 47 tests, TypeScript, ESLint; prior Metro iOS bundle and simulator native build Final device acceptance remains open
EXP-01 363f6b3 15 Jest suites / 59 tests, TypeScript, ESLint, git diff --check Final device visual and accessibility review remains open
IDENTITY-01 3cba4ef 16 Jest suites / 62 tests, TypeScript, ESLint, git diff --check; all 12 identities covered Production frame-art and physical-device visual review remain under later gates
DISCOVERY-01 70366be 17 Jest suites / 65 tests, TypeScript, ESLint, git diff --check; 20 unique glyphs and persistent species/direction reuse feedback Physical-device visual review remains open
ANIM-RUNTIME-01 1ad602a 18 Jest suites / 69 tests, TypeScript, ESLint, git diff --check; Metro iOS bundle copied 59 assets ANIM-ASSET-01 and physical-device motion review remain open
ANIM-ASSET-01P 5df32ed Pathbud idle/notice/activity ship 13/10/12 curated frames; post-curation score 100 with no warnings; 27 Jest suites / 82 tests, TypeScript, ESLint, Metro iOS bundle copied 74 assets, unsigned iOS Simulator build succeeded Physical-device motion review and expansion to the remaining species/clips remain open
ANIM-ASSET-01I 23ae32b Pathbud rest/touch/discovery/object-use ship 12/10/12/12 curated frames; post-curation score 100 with no warnings; 27 Jest suites / 82 tests, TypeScript, ESLint, Metro iOS bundle copied 120 assets, unsigned iOS Simulator build succeeded Physical-device motion review and lower-frequency Pathbud/remaining-species clips remain open
ANIM-ASSET-01C cb4af35, f4dc849 Landscape art no longer clips square children; Discovery reveal ships 15 continuity-audited frames with zero edge pixels, min adjacent IoU 0.775, max movement 17.9px; 27 Jest suites / 83 tests, TypeScript, ESLint, Metro reported 123 assets, unsigned iOS Simulator build succeeded Idle and Activity response still fail continuity QA; remaining species and physical-device review remain open
ANIM-ASSET-01M 51f6e25 Idle ships a 10-frame audited loop (min IoU 0.971); Activity response ships 16 frames across two generated motion segments (min IoU 0.823, boundary IoU 0.890); all seven integrated Pathbud clips pass; 27 Jest suites / 83 tests, TypeScript, ESLint, Metro reported 124 assets, unsigned iOS Simulator build succeeded Remaining Pathbud semantics, other species, and physical-device review remain open
ANIM-ASSET-01S 08c2ee9 Hatch/Calm/Focus/Vitality ship 9/8/8/7 curated frames; rejected identity/jump frames are absent; all four continuity audits pass with zero edge pixels; 27 Jest suites / 83 tests, TypeScript, ESLint, Metro reported 156 assets, unsigned iOS Simulator build succeeded Reorient, signature move, growth transition, memory pose, other species, and physical-device review remain open
ANIM-ASSET-01F 494b5e2 Reorient/signature/growth/memory ship 8/10/8/8 curated frames; all pass continuity gates with zero edge pixels; Pathbud owns all 15 declared clips with no fallback; 27 Jest suites / 83 tests, TypeScript, ESLint, Metro reported 190 assets, unsigned iOS Simulator build succeeded Other species and physical-device motion review remain open
ANIM-ASSET-02A bcb7904, d345503 Cloudnest Activity/Calm/Focus/Vitality ship 8/8/8/8 curated frames; two intermediate Activity repairs were rejected before the accepted split-row motion; all four continuity audits pass with zero edge pixels; 27 Jest suites / 84 tests, TypeScript, ESLint, Metro reported 222 assets, unsigned arm64 iOS Simulator build succeeded Remaining Cloudnest semantics, Facetlantern, Mossspring, and physical-device review remain open
ANIM-ASSET-02B b5251ca Cloudnest Rest/Touch/Discovery/Object-use ship 6/5/6/6 curated frames; one excessive Touch tilt was rejected; all runtime continuity audits pass with zero edge pixels; 27 Jest suites / 85 tests, TypeScript, ESLint, Metro reported 245 assets, unsigned arm64 iOS Simulator build succeeded Hatch, Reorient, Signature, Growth, Memory, other species, and physical-device review remain open
ANIM-ASSET-02C 2cd4995 Cloudnest Hatch/Reorient/Signature/Growth ship 5/6/6/6 curated frames; one oversized Hatch frame was rejected; all runtime continuity audits pass with zero edge pixels; 27 Jest suites / 86 tests, TypeScript, ESLint, Metro reported 268 assets, unsigned arm64 iOS Simulator build succeeded Memory pose, other species, and physical-device review remain open
ANIM-ASSET-02D e4cfe03 Cloudnest Memory pose ships five curated frames; one stern-eye pose was rejected; continuity passes with zero edge pixels; Cloudnest owns all 15 clips with a completeness test; 27 Jest suites / 87 tests, TypeScript, ESLint, Metro reported 273 assets, unsigned arm64 iOS Simulator build succeeded Facetlantern, Mossspring, and physical-device review remain open
ANIM-ASSET-03A d2577ef Facetlantern Idle ships an eight-frame split-row loop; one-row eight-pose extraction was rejected for cropped hands despite passing numeric continuity; accepted loop min IoU 0.936, max movement 1.43px, zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 277 assets, unsigned arm64 iOS Simulator build succeeded Remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03B 1f333df Facetlantern Rest/Notice each ship eight split-row frames; compact endpoint references replaced unreliable 11MB paired-row uploads; all components and continuity audits pass with zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 293 assets, unsigned arm64 iOS Simulator build succeeded Touch, remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03C 4778550 Facetlantern Touch ships seven curated split-row poses; one near-front perspective reversal was rejected without replacing it with a clone; final min IoU 0.918, max movement 2.85px, zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 300 assets, unsigned arm64 iOS Simulator build succeeded Direction responses, remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03D 62ea844 Facetlantern Activity/Calm each ship eight split-row frames using compact endpoint references; both continuity audits pass with zero edge pixels and inspection score 100; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 316 assets, unsigned arm64 iOS Simulator build succeeded Focus/Vitality, remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03E 77c1b2c Facetlantern Focus uses nine unique PNGs in a 13-frame enter/peak/reverse-return sequence; the direct-to-idle frame was rejected; provider safety rejected one Release attempt and Vitality Open at zero cost; final min IoU 0.829, max movement 7.13px, zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 325 assets, unsigned arm64 iOS Simulator build succeeded Vitality and remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03F 5705362 Facetlantern Reorient ships ten split-row poses; Vitality Rise remains unpublished after the Return provider task failed at zero cost; Reorient min IoU 0.945, max movement 1.52px, zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 335 assets, unsigned arm64 iOS Simulator build succeeded Vitality and remaining Facetlantern semantics, Mossspring, and physical-device review remain open
ANIM-ASSET-03G d5250eb Facetlantern Vitality ships ten split-row poses after a simplified Return prompt recovered from the prior zero-cost provider failure; min IoU 0.884, max movement 3.06px, zero edge pixels, inspection score 100; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 345 assets, unsigned arm64 iOS Simulator build succeeded Signature/Discovery/Object/Hatch/Growth/Memory, Mossspring, and physical-device review remain open
ANIM-ASSET-03H eedfc0d Facetlantern Signature move ships ten curated two-hand crystal-gesture poses after a shorter neutral request recovered from a zero-cost provider safety failure; final min IoU 0.848, max movement 5.23px, zero edge pixels, inspection score 100; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 355 assets, unsigned arm64 iOS Simulator build succeeded Discovery/Object/Hatch/Growth/Memory, Mossspring, and physical-device review remain open
ANIM-ASSET-03I 5a767b2 Facetlantern Discovery/Object Use each ship ten curated split-row poses with physically ordered return rows; final min IoU 0.754/0.805, max movement 3.01/10.46px, zero edge pixels, inspection score 100; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 375 assets, unsigned arm64 iOS Simulator build succeeded Hatch/Growth/Memory, Mossspring, and physical-device review remain open
ANIM-ASSET-03J f314b69 Facetlantern Hatch/Growth ship 10/9 curated split-row poses; one duplicate-crystal Growth pose was rejected; final min IoU 0.879/0.788, max movement 3.29/4.68px, zero edge pixels, inspection score 100; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 394 assets, unsigned arm64 iOS Simulator build succeeded Memory, Mossspring, and physical-device review remain open
ANIM-ASSET-03K 48a77b7, 11ed29b Facetlantern Memory pose ships nine curated frames from two 5-pose rows; two camera/crop candidates and one scale jump were rejected; runtime min IoU 0.964851, max movement 1.5884px, zero edge pixels; 27 Jest suites / 88 tests, TypeScript, ESLint, Metro reported 403 assets, unsigned arm64 iOS Simulator build succeeded Mossspring and physical-device review remain open
ANIM-ASSET-04A 7fbb17d Mossspring Rest/Notice ship 8/8 curated frames; both audits pass with zero edge pixels and min IoU 0.792551/0.795959; 12 animation tests, TypeScript, and ESLint pass Remaining Mossspring semantics and physical-device review remain open
ANIM-ASSET-04B 7ea1793 Mossspring Activity/Calm ship 5/7 curated frames after rejecting direct-to-idle returns; audits pass with zero edge pixels and min IoU 0.734325/0.8744 Remaining Mossspring semantics and physical-device review remain open
ANIM-ASSET-04C a4d41cb Mossspring Focus/Vitality ship 7/7 curated frames after removing direct returns and a 27px jump; audits pass with zero edge pixels and min IoU 0.744777/0.719571 Remaining Mossspring semantics and physical-device review remain open
ANIM-ASSET-04D e0f3fa8 Mossspring Reorient/Signature ship 7/6 curated frames after rejecting an edge pose and detached effect; audits pass with zero edge pixels and min IoU 0.847587/0.809369 Remaining Mossspring semantics and physical-device review remain open
ANIM-ASSET-04E cb0c2cd Mossspring Touch/Discovery ship 4/7 curated frames; a new-mouth Touch row and one Discovery jump were rejected; audits pass with zero edge pixels and min IoU 0.812136/0.755497 Remaining Mossspring semantics and physical-device review remain open
ANIM-ASSET-04F fde6168 Mossspring Object Use/Hatch ship 8/7 curated frames; the tall Hatch peak was omitted; audits pass with zero edge pixels and min IoU 0.73327/0.710401 Growth, Memory, and physical-device review remain open
ANIM-ASSET-04G 4c65192 Mossspring Growth/Memory ship 7/7 curated frames; final audits pass with zero edge pixels and min IoU 0.703149/0.821481; 27 Jest suites / 89 tests, TypeScript, ESLint, Metro reports 496 assets, and unsigned iPhone 17 Pro iOS 26.1 Simulator build succeeds Physical-device motion review remains open
USABLE-01A f81344e, 24e1a7f, 41de5dc Durable-store first-use/daily-use fixture covers encounter through reset, correction, discovery reuse, exploration memory, export, relaunch, timer restore, sparse D0/D1/D3/D7/D14/D21/D30 dates, monthly continuation, and timezone-shifted imports; reset optional-field persistence bug fixed; 28 Jest suites / 95 tests, TypeScript, ESLint, and git diff --check pass Navigation-container review and physical-device lifecycle gates remain open
NATIVE-01A 0326028, c1bfbbd HealthKit unavailable/denied/error and background-delivery retry paths, notification native failure receipt safety, conflicting timer recovery, and Share Sheet fallback error state are covered; 28 Jest suites / 100 tests, TypeScript, ESLint, Metro reports 496 assets, unsigned iPhone 17 Pro iOS 26.1 Simulator build succeeds Physical-device permission, background wake-up, share-sheet, and accessibility/lifecycle gates remain open
USABLE-02A 48b653a, dd887a6, ed86746, 3de29c2, b2cca59, 1cbcfbe, dda86f3, 8cd2984, 20a3637, 246fef0, 8286460, ceb805a, cf8de62, 6dc2ad9, c017276, 9e37a0e, a69765d, 811c944, 66a0abe, 8bb2dcc, c64d6e5, 2b1000b, 5e15317, 70fa898, c02c2b5, 9e1f8aa, 8b954ec, c38d3e0 Profile rename, Wardrobe empty state, Pact journey-limit feedback, Data Sources accessibility alert, non-blocking offline state, revisit-able direction actions/hotspots/signatures, grounded companion return reflections, factual recent-pattern summaries, target-specific monthly/archive/annual/full-memory share cards and messages, event-scoped privacy summaries, ordered annual keepsake history, historical monthly/archive/annual share targets, a 27-item life-signal library with six-item replacement and history preservation, complete-library first setup with preset/custom completion and HealthKit fallback, custom signals, notes, saved filtering, D14 monthly-mark preview/revisit and highlighted archive return, no-data note privacy boundary, corrected encounter action layout, persisted reflection focus, D90 archives with chronicle composition/direction arc, D360 annual review, note and collapsed history, personal archive notes, saved archive history, archive history, subdued archive-card art, revisitable Habitat archive marker, deterministic archive keepsakes, persistent direction-specific archive revisits, 13 passing real Simulator interaction flows with 54 screenshots, collapsed weekly/date memory browsing, companion-free memory/share backgrounds, compact discovery placement, stable candidate-comparison and species-browse actions, profile rename/preferences, and memory notes/favorites/history are covered; 54 Jest suites / 173 tests, TypeScript, ESLint, Metro reports 497 assets, unsigned iPhone 17 Pro iOS 26.1 Simulator build succeeds Physical HealthKit, notifications, VoiceOver/Dynamic Type, share sheet, lifecycle, and iPad gates remain open
ACCESS-01A 1f1203d 20 Jest suites / 73 tests, TypeScript, ESLint, git diff --check; complete-state render and 200% text layout tested Modal focus, screen recovery, broader layouts, and device matrix remain open
ACCESS-01B 0983610 23 Jest suites / 76 tests, TypeScript, ESLint, git diff --check; stale-route recovery and destructive reset boundaries tested Broader 200% layouts, Modal focus on device, and device matrix remain open
ACCESS-01C 4192001 25 Jest suites / 78 tests, TypeScript, ESLint, git diff --check; notification denial/failure and scrollable 200% world-map behavior tested Remaining load-bearing layouts and physical-device semantics remain open
ACCESS-01D 005442d, e5b53de 27 Jest suites / 80 tests, TypeScript, ESLint, git diff --check; 320x568 / 200% workflows, fixed-format cards, visible signal labels, and settings headings tested VoiceOver focus order and visual layout still require physical-device acceptance
RELEASE-01A af18e98 27 Jest suites / 80 tests, TypeScript, ESLint, git diff --check; plutil, actool, and ibtool pass; 17 opaque App Icon assets and localized HealthKit permission copy audited in docs/IOS_RELEASE_AUDIT.md App Store owner values, final native build, privacy questionnaire, and physical-device capabilities remain open
RELEASE-01B 5f63d01 27 Jest suites / 80 tests, TypeScript, ESLint, git diff --check; production Metro iOS bundle copied 54 assets; unsigned iOS Simulator native build succeeded Signed archive/upload and all physical-device checks remain open