8000 Release readiness: Android compatibility, stable 0.1, and external TestFlight · Issue #34 · shroominic/OpenGlucose · GitHub
[go: up one dir, main page]

Skip to content

Release readiness: Android compatibility, stable 0.1, and external TestFlight #34

Open

Description

@shroominic

Goal

Ship the next verified 0.1.x build as a real, non-prerelease GitHub release with a signed Android APK and an externally testable iOS build. First validate the Android compatibility fix through a private release-mode candidate; do not create another public prerelease just for diagnosis.

Guardrails

  • Do not publish tester contact details, screenshots, sensor/device identifiers, health data, credentials, profiles, certificates, or private diagnostics.
  • Do not ask testers to uninstall, unpair, or reset an active sensor unless a separately reviewed recovery procedure requires it.
  • Product-facing release notes describe user-visible changes only.

Now

  • Fix the already-bonded Android session path. One real device completes Android pairing but OpenGlucose remains at Connecting with no sensor details. Capture identifier-free stage/failure evidence across service discovery, notification subscription, vendor handshake, and baseline reads; reproduce an already-bonded reconnect; add deterministic regression coverage; verify on both the affected and known-good phones.
  • Build a private Android candidate. Use release mode, the existing package/signing lineage, and a fresh build code. Verify package, version, signer, and digest. Deliver privately as an in-place update and record the sanitized result. Do not attach it to a GitHub Release or public workflow artifact.

Stable 0.1 release blockers

  • Record stable-release semantics. GitHub already has v0.1.0 and v0.1.1 as prereleases, so those tags cannot represent new bytes. Select the next unused v0.1.x version/build and publish it as non-prerelease only after the candidate passes. Keep historical tags unless a separate destructive-cleanup decision is approved.
  • Make release automation support a real release. The current Android lane and draft TestFlight lane require prerelease == true; update and test both so an approved non-prerelease can launch the two platform lanes without creating another public prerelease.
  • Land and configure the protected TestFlight workflow. Merge #33 after review, then configure its protected release environment and durable private state store under owner approval. Prove configuration with fail-closed preflight evidence before publishing a release.
  • Resolve export compliance truthfully. Review the cryptography shipped by the app and dependencies, have the Apple Account Holder make the required determination, and store the decision/evidence privately before external beta review or notification.
  • Upload and approve the next iOS build. No iOS 0.1.1 (19) was uploaded. Use the next verified version/build, confirm processing and exact audience, submit Beta App Review, and notify only after approval.
  • Choose and restore the external tester path. Decide between a controlled invite-only group and a public join link. Configure the workflow and audience consistently, attach the approved build, set usable capacity/invitations, and verify join + install with a new tester.
  • Close external-release device controls. Record redacted physical-device evidence for data handling, active lock-screen redaction, release logging, and the critical sensor journey required by the repository control register.

Product follow-up

  • Verify the complete warmup lifecycle. A phone entering warmup is useful evidence but does not prove countdown, transition to ready, or reading availability. Capture expected behavior, verify warmup-to-ready on hardware, and add a regression test.
  • Raise the iOS deployment floor before Apple’s deadline. The current iOS 14 warning is not the present upload blocker; schedule iOS 15 migration, compatibility documentation, and CI/device verification before Spring 2027.

Operational tracking

  • Reconcile the checked-in backlog. All 43 existing .backlog/tasks entries still report To Do, including features already shipped. Audit each against its acceptance criteria, mark Done/In Progress/To Do accurately, remove stale branch notes, and add the release/compatibility work above.
  • Keep private-chat follow-ups sanitized. Review tester conversations for additional action items, but record only technical summaries in this public repository.

Current evidence

  • v0.1.0 and v0.1.1 are both public prereleases.
  • #33 is draft, cleanly mergeable, and its current CI/security checks pass; live release infrastructure is intentionally not enabled by the PR.
  • #32 addressed initial Android bonding but does not yet have passing evidence for the newly reported already-bonded session path.

Activity

  1. raynman1 commented on Aug 15, 2026

    @raynman1

    Private Android validation candidate built and delivered (not published as a GitHub Release).

    • Candidate: 0.1.1-ronell.1 (20)
    • Source: 4ba534f825c4d2101a1bcc61230a85c82b539581
    • APK SHA-256: 45ce00819246642f91bce1617235943199370e20a9ab64d8d90d1d8fe8ad831a
    • Release verifier passed: expected package/version/build, dedicated non-debug signer, one signer, APK Signature Scheme v2, non-debuggable.
    • Focused BLE tests and analyzers passed; independent review found no P0–P2 issues.

    Hardware validation remains pending. Do not mark the compatibility item complete until the affected phone successfully reaches a verified sensor session (or returns a sanitized failure stage).

  2. raynman1 commented on Aug 15, 2026

    @raynman1

    Hardware result for private candidate 0.1.1-ronell.1 (20): failed on the affected Android device.

    Observed after selecting the already-paired sensor:

    • UI transitions to Connecting.
    • It then reaches the structured error The sensor disconnected. Keep the phone close and try again.
    • Sensor life remains unavailable, glucose remains --, and history remains at zero.

    This is not a warm-up state and does not close the compatibility task. The candidate did improve failure presentation but did not establish a verified vendor session. Next step: capture an identifier-free setup phase/operation/diagnostic code in a private diagnostic build, then patch the exact failing boundary. No public release should be created for this iteration.

  3. shroominic commented on Aug 15, 2026

    @shroominic
    OwnerAuthor

    Private candidate round 2 is now in hardware validation.

    • The prior candidate still disconnected on the affected Android phone after a scan-free retry, so scanning was not the only cause.
    • The new candidate stops BLE scanning before every connect/retry, refreshes a confirmed pre-existing Android bond on a fresh GATT link before discovery, and disables the unused Service Changed subscription.
    • A private-build-only Copy support code action emits only a closed setup phase plus sanitized BLE category/operation/code; it excludes identifiers, native text, readings, and raw data.
    • Focused BLE, AiDEX, app, analyzer, format, and independent-review gates passed.
    • Signed private build 0.1.1-ronell.2 (21) was delivered privately as an in-place update. It was not published as a GitHub Release or public artifact.

    Awaiting the affected-phone result. If setup still fails, the copied OGSUP1 line will identify the exact phase for the next fix.

  4. added
    area:releaseRelease readiness, distribution, signing, and hardware validation
    priority:P0Critical path or release-blocking work
    risk:R2Health data, persistence, integration, AI, accessibility, or native risk
    on Aug 15, 2026
  5. shroominic commented on Sep 1, 2026

    @shroominic
    OwnerAuthor

    Unverified field observation: intermittent disconnect

    A participant reported that the sensor “sometimes disconnected” and that reconnecting in the app was unclear. This is not yet a reproducible defect: the interview did not capture the platform, app version, phone/OS, exact state, frequency, message, support code, or recovery result.

    Before opening a separate runtime-reconnect bug, collect:

    • app version/build, platform, phone model, and OS version;
    • whether the session had reached Connected and was showing readings;
    • foreground/background/locked-screen state and approximate frequency;
    • whether another phone or vendor app was connected;
    • the exact message/support code;
    • whether automatic recovery occurred, whether manual retry worked, and whether missed readings backfilled.

    Android setup recovery from PR #52 and PR #55 shipped in v0.1.3 and is present in v0.1.6. If a verified session on a current build fails to recover, open a focused runtime-reconnect bug. Recovery must preserve the bond, active session, and stored readings.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:releaseRelease readiness, distribution, signing, and hardware validationpriority:P0Critical path or release-blocking workrisk:R2Health data, persistence, integration, AI, accessibility, or native risk

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0