trainlog/docs/reviews/sync_rollout_v1_deployment.md

67 lines
3.2 KiB
Markdown

# Full-generation synchronization V1 private deployment record
Date: 2026-09-17
Status: `TRAINLOG_SYNC_FINALIZATION_AND_ROLLOUT_V1=PASS`
This record deliberately omits phone serials, peer IDs, generation IDs,
credential locations, user content, and private backup hashes. Complete causal
evidence is retained in the private rollout journal.
## Installed set
- Trainlog 0.1.2 development; desktop schema v21 and Android schema v20.
- Versioned relocatable desktop bundle behind stable user-bin symlinks.
- Android release-variant APK installed only through compatible signed updates;
the final private rollout version code is 6.
- Production direct-libmtp generation adapter with one explicitly paired peer.
- Loopback Web service and the user-session request daemon are active from the
same versioned installation. No live-checkout runtime helper is used.
## Data and migration evidence
- The original Android schema-v17 store was backed up through the signed bridge
UI and verified for manifest, digests, SQLite integrity, foreign keys and an
exact semantic match to the pre-update store. The real archive migrated on a
copy before live installation.
- A post-migration Android backup was also verified. The real source contained
no active draft, so draft restoration was correctly not applicable; no
synthetic draft was inserted.
- The desktop schema-v18 store was copied with SQLite's backup API, validated,
and migrated on an isolated copy before the live schema-v21 open. Historical
table values were preserved.
- Backups, failed generations, rejection ACKs and successful generation/ACK
evidence remain retained. No one-sided rollback was performed after causal
writes began.
## Operational evidence
- The actual foreground Android advertisement exposed the required persistent
identity and all five capabilities.
- Production libudev/libmtp discovery and object transfer completed on the
selected unlocked phone.
- Three final bidirectional conversations completed with a durable consumed ACK
on each peer and all eight required domains reported successful.
- A service/application restart and a second non-destructive exchange produced
no duplicate business data. Logical hashes for 23 desktop business tables
and 540 rows were identical before and after replay; integrity and foreign-key
checks passed.
- Android visibly returned to an enabled action and displayed synchronization
completion for both Android and PC.
## Rollout repairs
The real rollout exposed and closed four bounded defects: feedback idempotence
depended on the SQLite row representation; the desktop package omitted several
runtime exporters; Android accepted stale coordination filenames without
run/generation correlation; and its UI waited for a legacy receipt after the
generation coordinator had already completed. Regression tests cover each
affected boundary.
## Remaining limits
The phone must be connected, unlocked and in the foreground synchronization
flow. Retained outgoing generations remain subject to the explicit capacity of
eight per peer; evidence is never silently evicted. Drive was not configured or
tested. This private deployment does not publish 0.1.2, create a tag or release,
or alter the existing v0.1.1 release.