Skip to content

Phoenix v1.0.2

Choose a tag to compare

@9thLevelSoftware 9thLevelSoftware released this 31 Aug 03:05

Phoenix v1.0.2

Release notes for v1.0.2. Updated September 25, 2026.

Bug Fixes

  • Fix Just Lift summary reset race (#719)
  • fix(#714): per-snapshot ownership marker prevents stale async Just Lift write (#718)
  • update Constants.APP_VERSION to 1.0.2 (#760)
  • preserve Just Lift auto-start session (#759)
  • fix(ios): do not treat WAL sidecars as dual databases (#758)
  • fix(ios): resolve all DB_TARGET_VALIDATION_FAILED recurrence paths for #725 (#755)
  • fix(ci): restore compatible iOS build and upload toolchains (#730)
  • fix(ios): use executeQuery for journal_mode WAL pragma (#729)
  • fix(ci): use matching Xcode for iOS archives (#723)
  • fix(ui): put Target Reps above Weight on routine set config (#767) (#771)
  • Preserve a live Just Lift execution lease during screen re-preparation after startup reaches Active. (#777)
  • Fix Just Lift polling after manual summary dismissal (#778)
  • Show and preserve the Equipment Rack selection for upcoming cable exercises during REST TIME / UP NEXT. (#787)
  • High-confidence routine defect: both full exporters select soft-deleted routines and serialize no deletion marker. v1.0.2 tag source has identical relevant export/model/schema/PR-repository files. Actual production SQL diagnostic confirms routine tombstone inclusion and deleted PR exclusion. Correction: UI PR deletion is soft, not physical. PR observation unresolved; no Android runtime verification or application fix claimed. (#780)
  • Confirmed production freshness-gate defect: timed cable sends unlimited commands but lease target0 excludes unlimited acceptance, rejecting modern target252 ROM notifications before warmup completes and leaving duration timer waiting. Executed unchanged production Kotlin gate probe: ROM1/2/3 target252 all TARGET_MISMATCH, target0 all Process. High confidence code defect; medium reporter-session attribution. Full lifecycle and Phantom runtime validation remain unverified, not a resolution. (#783)
  • Confirmed current-source manual Just Lift summary dismissal launches a redundant physical RESET after completion re-arm. KableBleRepository.stopWorkout finally unconditionally stops polling, beyond the engine stale-lease guard. Production-faithful stop hook reproduces manual polling loss while natural expiry passes. Nine host tests: one diagnostic failure, one pre-existing skipped test, zero errors. Exact TestFlight build attribution and physical replay remain unverified; original recreation stays CNR. No production fix implemented. (#778)
  • Fix for issue #767 (#767)
  • Confirmed app-side recovery mismatch at main 1e0e99c: standalone Just Lift has no routine snapshot; reconnect falls to EnterSetReady, sets Idle, then null-routine delegate returns. Transient alert clears before reconnect/on Connected and initializes false after cold construction; no load-uncertainty obligation in this path. Physical retained load and disconnect trigger remain CNR/unverified. RESET cannot transmit after BLE loss, and transport acknowledgement is not physical release proof. (#782)
  • Confirmed lossy template-cycle sync contract: TemplateConverter prefixes routine IDs; SyncManager excludes these routines and nulls uploaded day links; portal stores/returns null; both cycle merge paths replace local associations. Real SQLDelight diagnostic reproduces null-link loss while retaining Routine/day rows; no-pull reload control passes. Source mechanism confidence high, reporter attribution medium; recreation remains CNR and actual backend/device round trip not executed. Existing PortalPushLimitsTest (26) and SqlDelightSyncRepositoryTest (21) pass; diagnostic 2 tests includes 1 expected retention failure. No production fix implemented. (#791)
  • Make live-set sample collection O(1) and remove per-sample debug logging (#834)
  • harden mobile persistence, safety, and recovery (#832)
  • pass SqlDriver into MigrationManager so startup repair runs (#809)
  • Correct user-facing docs: privacy policy, install guides, README, license wording (#804)
  • Capture uncaught crashes to a file and offer to share them; set release log levels on iOS (#803)
  • Correct the agent-facing docs (CLAUDE.md, AGENTS.md, build comment) (#799)
  • preserve template cycle routines across sync pulls (#791)
  • fix(sync): use domain last-edit for session/cycle LWW and notes merge (#789)
  • fix(workout): resolve unilateral use from dual cable telemetry (#788)
  • fix(issue-582): show equipment rack on rest screen (#787)
  • fix(ios): stage Compose resources for simulator target (#786)
  • fix(ios): add bounded database conflict diagnostics (#784)
  • start timed cable countdown from unlimited notifications (#783)
  • fix(safety): persist trainer load uncertainty across restart (#782)
  • fix(sync): preserve drop-set fields in portal push mapping (#781)
  • Fix full backups including deleted routines (#780)
  • fix(ui): prevent Just Lift controls from vertical compression (#779)
  • preserve Just Lift polling after manual summary dismissal (#778)
  • preserve live Just Lift execution during preparation (#777)
  • fix(ci): validate iOS app icons before release builds (#773)
  • Show Bulgarian Split Squat in the exercise picker instead of One Leg Barbell Squat (#858)
  • Active Recovery now scales every positively loaded exercise at the selected modifier, including catalogue-derived bodyweight rows and per-set-only loads (#888)
  • Restore Belt Squat and belt-equipped squat variants missing since the exercise library refactor (#890)
  • Seed portal exercise_catalog with the same stable BELT-equipped Belt Squat ids before the mobile release (#225)

Enhancements

  • Issue #724 prototype: mid-routine exercise jumps route to Set Ready for weight/reps confirmation before START. (#724)
  • Added the issue #772 CSV routine import preview visual for product signoff (#772)
  • Prototype: optional Essentials exercise filter for faster routine creation (#770)
  • Prototype: Manual set-summary duration and untimed continue flow (#849)
  • Prototype asset for Recent exercise tagging in the Just Lift Mini picker (#850)