diff --git a/CHANGELOG.md b/CHANGELOG.md index bd495ca..b856566 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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`. diff --git a/README.md b/README.md index cfdbe36..627b205 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/current_state.md b/docs/current_state.md index 011421a..ab3423d 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -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 diff --git a/docs/reviews/programs_presentation_android_delete_v1_evidence.md b/docs/reviews/programs_presentation_android_delete_v1_evidence.md index 38c4db6..55d1442 100644 --- a/docs/reviews/programs_presentation_android_delete_v1_evidence.md +++ b/docs/reviews/programs_presentation_android_delete_v1_evidence.md @@ -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. diff --git a/docs/roadmap.md b/docs/roadmap.md index 13561c7..4ce9154 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -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.