docs: record Programs Android rollout

This commit is contained in:
fy59 2026-09-18 20:45:13 +02:00
parent f431b6ec9c
commit db722588f8
5 changed files with 93 additions and 27 deletions

View file

@ -2,8 +2,9 @@
## Unreleased — 0.1.2
- Implemented `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1` without
deployment. Desktop schema v26 adds terminal logical Program deletion with
- Completed the private coordinated deployment of
`TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1`. Desktop schema v26 adds
terminal logical Program deletion with
request/deleted revisions, durable response replay, generation linkage and
acknowledgment state; source definitions and derived preparations remain,
while deleted Programs cannot resurrect or prepare. The responsive Sessions
@ -14,9 +15,12 @@
`trainlog-programs` V1 (`programs-v1.json`) publishes nondeleted Programs and
unacknowledged tombstones under capability `programs-v1`; it changes neither
`TRAINLOG_FORMAT_V1`, mobile V3, catalog exchange, nor preparations. Real
Firefox Programs screenshots are recorded in
`docs/reviews/programs_presentation_android_delete_v1_evidence.md`;
deployment remains pending.
Firefox Programs screenshots and real rollout evidence are recorded in
`docs/reviews/programs_presentation_android_delete_v1_evidence.md`. The
signed private Android update advanced versionCode 15 to 16 without
uninstall or data clearing. A real disposable Program tombstone was consumed
and acknowledged, and a final correlated exchange after component restart
proved persistence, idempotence, and non-resurrection.
- Completed the private grouped rollout of Web Sessions deletion and Program
V1 from desktop source `a0fc48f082b76dba2ae3a56fceb492169de89f89`.

View file

@ -17,7 +17,7 @@ over direct MTP; it never copies SQLite database files between devices.
|---|---|
| Android | Capture and quickly correct sets, repetitions, loads, durations, and continuous activities; reorder active and completed-session occurrences; capture feedback, J+1 follow-ups, body measurements, and AI proposals; trigger sync; show quick summaries. |
| Desktop TUI | Administer, inspect, maintain, import/export, correct canonical history, and provide technical tools. |
| Local Web (0.1.2 development) | Display the Dashboard and the implemented Sessions inventory, deletion, manual preparation, Android-delivery, and embedded Programs workflow through typed Trainlog Core/API boundaries. Programs has responsive detail and terminal logical deletion; its latest Android projection companion is implemented but not deployed. Analyse, the standalone Programmes route, and Exercises remain placeholders. |
| Local Web (0.1.2 development) | Display the Dashboard and the implemented Sessions inventory, deletion, manual preparation, Android-delivery, and embedded Programs workflow through typed Trainlog Core/API boundaries. Programs has responsive detail, terminal logical deletion, and a privately deployed read-only Android projection. Analyse, the standalone Programmes route, and Exercises remain placeholders. |
No interface reconstructs business truth from SQLite tables. The local Web is
a sibling adapter, not an extension of the TUI. On `main`, its loopback-only
@ -335,10 +335,9 @@ As of 2026-09-18:
`WEB_DASHBOARD_V1=PASS/FROZEN` and `TRAINLOG_WEB_SESSIONS_V1=PASS/FROZEN`;
Programs is implemented inside Sessions; Analyse, Exercises, and the
standalone top-level Programmes route remain placeholders;
- `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=IMPLEMENTED_VALIDATED`:
desktop Programs presentation/logical deletion and the Android read-only
projection are implemented and have real Firefox screenshot evidence, but
deployment remains pending;
- `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=PASS`: the coordinated
private desktop/Android deployment, real Firefox presentation, correlated
`programs-v1` deletion ACK, restart/replay, and non-resurrection checks pass;
- `TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`;
- `TRAINLOG_SYNC_GENERATION_ACK_V1=PASS/FROZEN` through explicit staged
services; automatic synchronization still selects V3. The trusted local

View file

@ -4,9 +4,9 @@ The opt-in full-generation path is operational on the private daily
installation. The loopback Web control and foreground Android coordinator use
the production direct-libmtp adapter, correlated manifest/ACK V1 objects, and
persistent peer identities. The latest controlled rollout verified real
desktop and Android backups, restoration and migration on copies, desktop
schema v24 to v25, and an in-place private Android update from versionCode 14
to 15. The installed APK remains `com.labfytools.trainlog` 0.1.2, is
desktop and Android backups, populated-copy migration, desktop schema v25 to
v26, and an in-place private Android update from versionCode 15 to 16. The
installed APK remains `com.labfytools.trainlog` 0.1.2, is
non-debuggable, and retains certificate SHA-256
`aa56c97f2781a0d01f007f4444c3970deb58ad8327ca3da7b0b90f37dbe2ad25`.
One preparation created explicitly as disposable was withdrawn through the Web
@ -81,7 +81,7 @@ parallel implementation of its rules.
| Web Dashboard V1 | `WEB_DASHBOARD_V1=PASS/FROZEN` |
| Web Sessions V1 | `TRAINLOG_WEB_SESSIONS_V1=PASS/FROZEN` (controlled desktop/Android deployment validated) |
| Web Sessions deletion and Programs V1 | `TRAINLOG_WEB_SESSIONS_DELETE_AND_PROGRAMS_V1=PASS` (private grouped rollout validated) |
| Programs presentation, Android projection, and deletion | `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=IMPLEMENTED_VALIDATED` (not deployed; real Firefox Programs screenshots recorded) |
| Programs presentation, Android projection, and deletion | `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=PASS` (private coordinated deployment and restart/replay validated) |
| Sync orchestrator/report V1 | `TRAINLOG_SYNC_ORCHESTRATOR_REPORT_V1=PASS/FROZEN` |
| Web sync API V1 | `TRAINLOG_WEB_SYNC_API_V1=PASS/FROZEN` |
| Web sync button V1 | `TRAINLOG_WEB_SYNC_BUTTON_V1=PASS/FROZEN` |
@ -272,6 +272,20 @@ snapshot plus unacknowledged tombstones under capability `programs-v1`; a
durable correlated ACK records acknowledgment. It changes neither
`TRAINLOG_FORMAT_V1`, mobile V3, catalog exchange, nor preparations.
The private Programs rollout migrated desktop schema v25 to v26 and Android
schema v23 to v24 after verified backups, then installed the signed
non-debuggable versionCode 16 APK without uninstalling or clearing data. The
real 24-session Program remained unique and readable on Web and Android. A
clearly disposable Program was imported, synchronized, cancelled once without
mutation, then logically deleted through the Web confirmation. Android consumed
the real tombstone and desktop recorded its correlated generation ACK. A first
post-restart attempt failed before generation with `device_unavailable` and
`PTP_ERROR_IO`; no success state was recorded. Releasing the stale bounded MTP
worker and restarting the local ADB server restored the same physical peer. The
subsequent correlated exchange completed in both directions, and store reopen
confirmed one durable Android tombstone, one acknowledged desktop deletion,
no duplicate Program, and no resurrection.
The controlled deployment preserved the installed Android signing identity and
advanced its private `versionCode` from 13 to 14 without uninstalling or
clearing data. The requested six-occurrence validation preparation was already

View file

@ -5,9 +5,9 @@
This record captures the implementation and validation evidence presently
available for `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1`.
The feature is implemented and validated in the recorded automated and real
Firefox Programs presentation checks. It is **not deployed**. This record does
not assign `PASS` or `FROZEN` status.
The feature is implemented, validated, and deployed on the authorized private
desktop/Android pair. `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=PASS`.
This is not a public release and does not change a FROZEN exchange contract.
## Implemented contract
@ -66,15 +66,63 @@ post-migration integrity check passed, foreign-key violations numbered **0**,
and the business-data SHA-256 was identical before and after migration:
`b264dd1b5fd7cdc599b2f6e2a20c01af794949e7871b8e3107ff3b29a06c6e11`.
The program identity hash was `1b14...`; the 24 sessions hash was `593f...`;
the 164 entries hash was `b991...`; and the two preparations hash was
`2e273...`. The copy contained no `deleted_at` values and no
The Program hash was
`1b14ba7d8dbfbd3d3b19b6584e399fce3f161e1aa20591ca21676530dc0ebd43`;
the 24 ordered sessions hash was
`593f91572cccb109f76175be249afad5b0e311c429b56ef0cee141a5deb7f3a4`;
the 164 entries hash was
`9ca6742dd168777b7653a857bc695dbf1f59f10abf489bfaae24660b69fdb1cc`;
and the two preparations hash was
`2e2733b2624248210c390e5d592fe03e4130775ddb24e7fdb93280b4f778ec25`.
The copy contained no `deleted_at` values and no
`program_deletions` rows. All 45 unchanged business tables matched their
canonical field-level hashes.
These results are implementation and presentation-validation evidence. They do
not substitute for separate deployment validation.
## Private deployment validation
## Remaining validation
The authorized rollout used source commit
`f431b6ec9cab68e0d41d04815ba41bac55787485`. The coordinated desktop archive
SHA-256 was
`072fb61c8ddc86ebd9fed650c3928ddfd07010823358e0cd6cfefb3de11d4597`;
the private release APK SHA-256 was
`bbf3fa5b3ddce3d83b13d22170c23ae0196991b31b70466f85fa124ed72fb297`.
The installed `com.labfytools.trainlog` remained non-debuggable and retained
certificate SHA-256
`aa56c97f2781a0d01f007f4444c3970deb58ad8327ca3da7b0b90f37dbe2ad25`.
- Validate deployment separately before representing the feature as deployed.
The real desktop database migrated from schema v25 to v26 with
`integrity_check=ok`, no foreign-key violations, and unchanged field-level
Program data. The real Program retained its stable identity, title, active
state, 24 ordered sessions, 164 entries, occurrences, targets, equipment,
rests, notes, and preparation provenance. Android migrated from schema v23 to
v24 without changing any of its 46 pre-existing tables.
The real Web import created only the disposable Program
`pg_dd90fbc1-8131-41f1-9d49-f516e34a17da`. Its first confirmation cancellation
made no mutation. Confirmed deletion produced revision
`pgr_5c34b25a-678e-49e5-89a2-eecebd4e361f`; Android consumed its tombstone and
desktop correlated acknowledgment with generation
`gen_5a260b7c-6377-4805-82bb-d793fc41e35f`.
After both components restarted, the first attempted control run failed before
either generation was created: `device_unavailable` followed a real
`PTP_ERROR_IO`. The failure was retained and was not rewritten as success. A
stale `trainlog-sync-once --request-only` worker owned the MTP descriptor;
stopping only `trainlog-syncd` released it. A bounded libmtp probe found the
same Samsung SM-G990B, and restarting the local ADB server restored the same
serial and peer advertisement without reconnecting, reinstalling, clearing, or
restoring either store.
The final post-restart run
`sy_2b2320a8-e182-41a5-b238-ac04f0d4e5f2` completed with desktop generation
`gen_9afcc6f9-f7a5-4eec-a24e-696182addfe8`, Android generation
`gen_0b101149-5ba8-4ba2-9912-eca8cc9d9953`, two durable `consumed` ACKs, no
missing capability, and `sessions_reconciled=0`. A final Android backup has
schema v24, `integrity_check=ok`, no foreign-key violations, one synchronized
Program with 24 sessions, and exactly one tombstone for the disposable Program.
Its archive SHA-256 is
`cad5830062578984e77f7900246701b5e1a6bc7629054d012ef34c7cd5f36669`.
Desktop has schema v26, one acknowledged deletion ledger row, no visible
disposable Program, and one unchanged real Program. Closing and reopening the
services and Android application preserved those results. Both Trainlog user
services were active at closeout.

View file

@ -59,9 +59,10 @@ explicit trusted opt-in. The authorized private direct-MTP rollout passed on
real hardware; automatic V3 selection remains unchanged without that opt-in.
The next separately contracted Web surface is Exercises. Sessions deletion and
its Programs subtab are complete in software and are not reopened by that
future contract. `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1` is
implemented and validated in automated and real Firefox Programs presentation
checks, but is not deployed. It must not be reopened by the Exercises contract.
future contract. `TRAINLOG_PROGRAMS_PRESENTATION_ANDROID_DELETE_V1=PASS` after
its coordinated private desktop/Android deployment, correlated deletion ACK,
and post-restart non-resurrection validation. It must not be reopened by the
Exercises contract.
`TRAINLOG_SYNC_GAP_CONTRACT_V1=CONTRACT_FROZEN / IMPLEMENTATION_IN_PROGRESS`
defines the complete-sync target and its bounded dependency order.