67 lines
3.2 KiB
Markdown
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.
|