Skip to content

PulseStages 0.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 17:33
· 40 commits to main since this release

Nights and naps are updated automatically when their heart rate reaches Health Connect after they were written, so a
night estimated from part of its heart rate no longer stays so until it is recomputed by hand. Install it over 0.1.x
like any update (same signing key): the app keeps its data, its ledger is migrated on the first start, and the
sessions already in Health Connect stay; sessions written by 0.1.x are compared by their heart-rate sample count on
their first check (user guide).

Added

  • Install and update with Obtainium: a "Get it on Obtainium" button in the README and the user guide adds
    PulseStages to Obtainium with one tap and a confirmation; Obtainium then
    installs it and every later release as an update. The import takes final releases only, selects
    PulseStages-<version>.apk with the APK filter ^PulseStages-[0-9.]+\.apk$ (never the -debug APK) and expects
    the release signing certificate. The app itself still has no update check and no internet access
    (user guide).
    The release notes link to that section.
  • Recent nights and naps are updated automatically when more heart rate arrives. Heart rate often reaches Health
    Connect hours after the sleep session, and a night written from part of it (for example with the rules estimator at
    40–60 % coverage) stayed so until it was recomputed by hand. Every sync now also reads the heart rate, steps and
    optional channels of recent written nights and naps again and compares them with a fingerprint stored at the write:
    on the schedule of the retry of nights without an estimate (every run for 36 hours after the session ended, growing
    gaps for late arrivals), at most 8 per run. When the input changed, the night is estimated again, and its session is
    rewritten only when it would change (stages, title or notes), under the same record key with the next version. Never
    under "Never overwrite"; stale nights are left to "Recompute stale nights"; a session deleted outside the app is not
    written again; fewer heart-rate samples than at the write never make a session worse. The night detail shows
    "Updated automatically" with the reason (for example "more heart rate arrived (46 → 57 samples)"), "Estimate new"
    adds "… nights updated with late data.", and the log has a line per update
    (user guide,
    architecture.md §3.6, PLAN.md §2).
  • Ledger schema 3: estimated_nights.inputFingerprint and inputCheckedAt, with the migration 2 → 3 and the
    exported schema 3.json. The fingerprint holds per channel the number of samples and a SHA-256 digest of them, never
    the samples; rows written before have none and are compared by their heart-rate sample count and coverage until
    their first check (privacy.md,
    architecture.md §4.2).
  • On-device suite: the shadow pipeline's refresh-recent scenario runs the refresh over the real recent nights
    with nothing written to Health Connect (tools/device-test/README.md).

Downloads

File Use
PulseStages-0.2.0.apk Signed release build for everyday use. Later releases install over it as updates.
PulseStages-0.2.0-debug.apk Debug build for testing, with the demo mode.
SHA256SUMS.txt SHA-256 checksums of both APKs: sha256sum -c --ignore-missing SHA256SUMS.txt

The two APKs are signed with different keys, so neither can update the other. To switch, uninstall first.
The sessions PulseStages wrote stay in Health Connect; grant its permissions again after the reinstall.

To get every later release installed as an update, add PulseStages to Obtainium
(user guide).

Release signing certificate SHA-256: ce5546e83c03eac9837b93fc2c04d2e37abd1b778c3ef9e01b67cd1602e35be5

Debug signing certificate SHA-256: b557d5d55ea3c6d98e72493b1e82f228465201e7271d93f7ace577ff1c5b35cc (a later debug APK installs over an earlier one only if this value is the same)