Repository navigation
PulseStages 0.2.0
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>.apkwith the APK filter^PulseStages-[0-9.]+\.apk$(never the-debugAPK) 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.inputFingerprintandinputCheckedAt, with the migration 2 → 3 and the
exported schema3.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-recentscenario 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)