From 4cb911d5c4faea5abfa7178648635c92b536057e Mon Sep 17 00:00:00 2001 From: fy59 Date: Thu, 24 Sep 2026 06:52:13 +0200 Subject: [PATCH] docs: record sleep persistence and agenda evidence --- CHANGELOG.md | 14 ++++++++++++++ docs/current_state.md | 18 ++++++++++++------ docs/roadmap.md | 9 ++++++--- docs/tests.md | 24 ++++++++++++++++++------ 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aafb0f..8d9481b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,20 @@ also refined. `trainlog.perf` deployment and read-only Firefox smoke validate the latest real HR night and the latest real night containing medications from code commit `2ce458d`. +- Reused that same read-only fallback projection in the multi-night Sleep + agenda, with a visibly estimated hatched interval and no Sleep write. The + agenda now derives an exact 18:00-to-18:00 hourly grid, presents at least + two-hour labels on ordinary desktop widths, expands to every hour when wide, + and reduces to six-hour anchors on narrow screens. A read-only real-device + investigation of the 2026-09-23 night found no medication intake in any + retained local revision and established that later synchronization only + published the already-empty current revision. Android regression coverage + now proves two pre-bed intakes, including quantity two, through repeated + repository reopen, bedtime, wake, final get-up, generation, desktop ACK, + replay, stale-ancestor input and a subsequent revision. The private service + serves Web code commit `a60e1aa`; a non-mutating Firefox smoke on the real + night confirms the identical 22:50–04:04 agenda/detail projection and the + responsive 13/25/5-label axis densities. ## 0.1.5 — 2026-09-23 diff --git a/docs/current_state.md b/docs/current_state.md index dc3dfe8..7182c74 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -169,7 +169,7 @@ parallel implementation of its rules. | Sleep tonight readiness delta | `TRAINLOG_SLEEP_TONIGHT_CLOSEOUT_V1=PASS`: Meson 111/111, import checks 6/6, Android `testDebugUnitTest` plus `assembleDebug`, Web 191/191 plus typecheck/build, exact V2 quantity replay, private vc47 schema-v32 migration, fresh CYCPLUS BPM and non-mutating Android/Web visual review. | | 0.1.5 validation | `TRAINLOG_0_1_5_VALIDATION_V1=PASS`: native 111/111; Android unit-test task and APK build; Web 191/191 plus typecheck/build; JSON/import, C-format and diff checks pass. Private vc47 preserves real data through schema v32, renders pre-bed medication quantity controls, reconnects the CYCPLUS and presents the multi-night Web Sleep agenda. | | Tomorrow session readiness | `TRAINLOG_TOMORROW_SESSION_CARDIO_READINESS_V1=PASS`: the private vc46 is clean on schema v31 with fresh CYCPLUS BPM and the next Program session is unambiguous; one combined regression proves two ordered occurrences loaded from the synchronized Program, Program provenance, factual timeline/HR ownership, finalization, full generation, desktop import, replay and correlated ACK | -| Current operational cursor | 0.1.6 Sleep graph overlays and post-review Web corrections implemented, fully validated, and served by the private `trainlog.perf` service from development code commit `2ce458d`; immutable stable v0.1.5 remains unchanged. | +| Current operational cursor | 0.1.6 Sleep graph overlays, shared agenda estimate and denser responsive agenda axis validated and privately served from Web code commit `a60e1aa`; immutable stable v0.1.5 remains unchanged. | | Complete synchronization gap contract | Frozen dependency contract; operational USB/Drive slices required by v0.1.2 are delivered | | Isolated synchronization test environment | `TRAINLOG_SYNC_TEST_ENV_V1=PASS/FROZEN` | | Synchronization characterization | `TRAINLOG_SYNC_CHARACTERIZATION_V1=PASS/FROZEN` | @@ -195,8 +195,11 @@ full-hour ticks between exact visible bounds. Medication presentation retains unit dose and quantity as separate facts. A missing declared sleep interval uses only a labeled, non-medical Web estimate from Couché plus 45 minutes to Levé minus 10 minutes when both bounds exist; it never changes canonical Sleep -data. The overlays remain available without an HR capture and do not fabricate -BPM. +data. The selected-night graph and the period agenda consume the same +projection. The agenda renders an estimated interval with distinct hatching, +never substitutes it for a factual interval, and retains the exact shared +18:00-to-18:00 geometry. The overlays remain available without an HR capture +and do not fabricate BPM. Language is device-local presentation state. Android keeps it in dedicated SharedPreferences; desktop keeps it in the XDG configuration file @@ -341,9 +344,12 @@ cluster. Program progress uses the shared success color while retaining its factual completed/total text. Responsive charts preserve their viewBox aspect ratio, and Analyse explicitly distinguishes unavailable exercise timing from partial measured coverage instead of deriving time from sets or repetitions. -The shared Sleep agenda owns one label/track/facts grid. Its five clock labels -and every event, interval and medication marker use the same coordinates: -18:00 at 0%, 00:00 at 25%, 06:00 at 50%, 12:00 at 75%, and 18:00 at 100%. +The shared Sleep agenda owns one label/track/facts grid. Its 25 exact hourly +positions and every event, interval and medication marker use the same +coordinates: 18:00 at 0%, 00:00 at 25%, 06:00 at 50%, 12:00 at 75%, and 18:00 +at 100%. Ordinary desktop widths show the 13 two-hour labels, wide layouts show +all hours, and narrow layouts retain the five six-hour anchors without changing +the underlying geometry. The Equipment route projects supplied and custom definitions with exercise, history, preparation and Program reference counts. Its guarded merge accepts a diff --git a/docs/roadmap.md b/docs/roadmap.md index 09fc3e0..656b65e 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -65,11 +65,14 @@ synchronization transport. The 0.1.6 Web refinement now also layers factual Sleep intervals, awakenings, medication intakes and complete hourly ticks on the selected night's HR chart. -Its explicitly labeled fallback estimate is presentation-only; release work -remains the next separate operational step. +Its explicitly labeled fallback estimate is presentation-only and is shared by +the period agenda, whose responsive labels retain an exact hourly +18:00-to-18:00 geometry. Android lifecycle/ACK regressions now explicitly guard +pre-bed medication snapshots against restart, replay and stale ancestry. +Release work remains the next separate operational step. ```text -CURRENT_OPERATIONAL_CURSOR=0.1.6 Sleep graph overlays and post-review Web corrections validated and privately deployed; stable release work remains separate. +CURRENT_OPERATIONAL_CURSOR=0.1.6 Sleep graph/agenda projection and Android medication persistence proof validated and privately deployed; stable release work remains separate. ``` Sleep Diary V1 stays frozen/readable while active capable peers require diff --git a/docs/tests.md b/docs/tests.md index 4bc7ff9..16337a1 100644 --- a/docs/tests.md +++ b/docs/tests.md @@ -25,27 +25,39 @@ still conflicts. The equipment client test removes `crypto.randomUUID`, uses deterministic `getRandomValues` bytes, and completes the protected merge HTTP request; native merge tests retain their transaction/rollback coverage. -The real Sleep Bluetooth recovery regression starts with no Android session, -records a pre-bed medication with `quantity=2`, Couché, two BPM/RR samples +The real Sleep Bluetooth recovery regression starts with no Android session +and an empty pending Sleep revision, records two pre-bed medication intakes +(including `quantity=2`), reopens the repository after each meaningful +lifecycle transition, then records Couché, two BPM/RR samples separated by Réveil, and Levé. It captures and publishes the production V2 Sleep and V1 heart-rate artifacts, imports them with the desktop consumer, accepts and replays the ACK without duplication, then admits a second -Sleep-only revision. Separate tests prove connection-arrival auto-request +Sleep-only revision. It also applies the original intake-free ancestor after +ACK and proves that causal reconciliation cannot erase the current intakes. +Separate tests prove connection-arrival auto-request policy with its cooldown, cross-run reuse of an unacknowledged immutable generation and recognition of its original-run exact generation/digest ACK, ledger-backed superseded-branch capacity, fresh-peer non-root Sleep ancestry, service-installer upgrade behavior, and ACK-recovery progress frames over the Bluetooth-selected orchestrator path. -UI regressions assert the Sleep labels at exactly 0/25/50/75/100%, persisted +UI regressions assert the Sleep agenda's 25 exact hourly positions, 13 visible +two-hour desktop labels and five narrow six-hour anchors, including the exact +0/25/50/75/100% coordinates. They also prove that both Sleep views reuse the +same presentation-only Couché +45 minutes to Levé -10 minutes estimate, that a +factual sleep interval wins, and that a missing bound produces no estimate. +Other UI regressions cover persisted Dashboard sizing and reset behavior, English preference persistence across a remount, centralized Dashboard English labels, non-stretched chart aspect ratios, and distinct missing/partial exercise-timing messages. -The closeout run passes Web **31 files / 196 tests**, TypeScript typecheck and +The closeout run passes Web **32 files / 205 tests**, TypeScript typecheck and the production build; native Meson **111/111**; Android `testDebugUnitTest` and `assembleDebug`; JSON/import validators; changed-C formatting; and diff checks. The restarted private service serves the rebuilt executable byte-for-byte from -the development checkout and reports healthy Trainlog `0.1.6`. +the development checkout and reports healthy Trainlog `0.1.6`. A non-mutating +Firefox smoke on the real 2026-09-23 night confirms the agenda and detail both +show 22:50–04:04 as estimated, with 13 ordinary-desktop labels, 25 wide labels +and five narrow anchors. Sleep Diary coverage includes schema creation/migration, midnight and DST offsets, revision conflict, logical deletion/reopen, companion replay and