Skip to content

[fork-only] WIP(android): ephemeral contextual home experiment - #117

Draft
kvnloo wants to merge 1 commit into
mainfrom
fork/wip-android-ephemeral-contextual-hom-51
Draft

kvnloo wants to merge 1 commit into
mainfrom
fork/wip-android-ephemeral-contextual-hom-51

Conversation

@kvnloo

@kvnloo kvnloo commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Problem (reference)

Fork-only successor to kvnloo/noop#51, an Android ephemeral contextual Today experiment. This is not a fix for an upstream issue or a proposal to ryanbr/noop.

Root cause (current-main source)

At kvnloo/noop@2a1de7609843b095505274ad6fc811757210be80, android/app/src/main/java/com/noop/ui/AppRoot.kt:582-590 displays the full GlassBottomBar and :627-672 displays the existing TodayScreen; android/app/src/main/java/com/noop/ui/BreatheScreen.kt:218 has no optional post-session Journal action. The original fork experiment was on older base 3a0b74b2da11617cc4d3ce6452c8c5b990a7798f.

Change

  • Reapply only original WIP(android): ephemeral contextual home experiment #51's own 9 commits / 11-file base-to-head diff (source head 1156204e460dc2cf3d4895d4b900c1a97ddd4792). Its first commit directly follows that old base: no stacked parent fork PR or inherited changes.
  • Retain an ephemeral contextual Today with one prompt, 2-action dock, reversible full Today, validated/nullable Charge display, Breathe shortcut, manual post-Breathe Journal CTA and next-wake-day guidance. No new scoring, storage, permissions, BLE messages or network.
  • Current-main adaptations: all modified Kotlin/JUnit hunks applied to identical source context at 2a1de760; replace contextual-screen typography/spacing with current NoopType/Metrics tokens (with existing Palette colors); add values-it, values-pl, values-ru, values-zh to match the four additional shipped Android locale directories on current main. All 9 locales have the same 25 contextual string keys. Update experiment documentation to this fork/ branch.
  • This is Android-only presentation. No Swift twin is appropriate: no shared decoder, analytics, storage, math or byte-level behavior changes.

Tests

UNRUN. GitHub Actions is disabled on kvnloo/noop; no workflow has been dispatched and no passing checks are claimed. The commit re-reads at f68cd7c3892ff4f179435f9d0bf5190993751bc1 matched all 15 files, and the base-to-head comparison is exactly 1 commit, 15 paths, 0 behind.

  • Existing JUnit framework: ContextualTodayScreenTest adds 7 cases for active-session precedence, stale-scanning/connected precedence, offline/waiting/review decisions and invalid Charge suppression; BreatheOutcomeTest adds 2 for fresh/non-abandoned check-in and next wake-day rollover.
  • Hand-checked expectations: visibleChargePercent(61.6) = 62 (nearest integer); null, NaN, +∞, -1 and 101 stay unavailable. Connected=true + scanning=true + hasCharge=true selects REVIEW_DAY, not SCANNING; activeWorkout=true wins even while disconnected. A session shorter than 120 seconds has no completed outcome; a fresh "—" outcome permits manual check-in but asserts no HRV estimate. journalDayKey(-1, 2026-12-31) = 2027-01-01, and journalDayKey(-1, 2028-02-28) = 2028-02-29.
  • Exact verification commands:
cd android
./gradlew --no-build-cache --rerun-tasks assembleFullDebug testFullDebugUnitTest
./gradlew --no-build-cache --rerun-tasks testFullDebugUnitTest --tests 'com.noop.ui.ContextualTodayScreenTest' --tests 'com.noop.ui.BreatheOutcomeTest'
  • Upstream check names for these paths: Android CI / build-and-test, i18n Coverage / check, Source Hygiene / doc-comments, Tools Python CI / linux-capture (unfiltered). Swift Packages CI and Apple App build do not apply to these Android/docs-only paths.

Hardware needed

No new BLE command, pairing state machine or firmware action. Real Android phone + WHOOP strap required to validate connect/scanning/reconnect prompt transitions, active-workout handoff, accessibility/TalkBack, large fonts, light/dark themes and device navigation. No strap or device test performed here.

Upstream readiness

FORK-ONLY; not upstream-ready and not a merge candidate. fork/ feature under RFC-0, for opt-in channel composition. In particular, original #51 says longitudinal Breathe → Journal pilots need either #53 or #58 for explicit answer semantics; they are pilot-safety dependencies, not ancestry or code prerequisites. Do not claim pilot efficacy or merge both without review. Exact-head external runner + physical UX checks remain open.

Do not merge; source for channels/nightly.

Implemented by ChatGPT (mobile app, GitHub connector) for Kevin's NOOP factory.

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