docs(sync): document full-generation daily routing
This commit is contained in:
parent
1e9c8aa741
commit
2a68e5a505
6 changed files with 48 additions and 12 deletions
|
|
@ -4,6 +4,15 @@
|
||||||
|
|
||||||
Development opened after the stable v0.1.2 release.
|
Development opened after the stable v0.1.2 release.
|
||||||
|
|
||||||
|
- Routed Android foreground and daemon-triggered daily synchronization through
|
||||||
|
the existing full-generation orchestrator whenever its trusted local
|
||||||
|
configuration is present. The standalone mobile V3 importer remains strict
|
||||||
|
and still rejects causally protected live replay; complete generations apply
|
||||||
|
tombstones before filtering dominated snapshot facts. No schema, exchange
|
||||||
|
format, causal rule, or synchronization protocol changed. Android backup
|
||||||
|
manifests now obtain `product_version` from installed package metadata
|
||||||
|
instead of retaining the historical `0.1.2` literal.
|
||||||
|
|
||||||
- Unified the Android capture interface around compact dark cards, action
|
- Unified the Android capture interface around compact dark cards, action
|
||||||
tiles, restrained-radius button variants, wrapping selection grids, and
|
tiles, restrained-radius button variants, wrapping selection grids, and
|
||||||
two-column performed-set entry. Home now focuses on session capture, recent
|
two-column performed-set entry. Home now focuses on session capture, recent
|
||||||
|
|
|
||||||
|
|
@ -1056,10 +1056,17 @@ coordinator waits for correlated objects, tolerates stale objects left by
|
||||||
interrupted runs, strictly revalidates desktop-retained historical ACKs, and
|
interrupted runs, strictly revalidates desktop-retained historical ACKs, and
|
||||||
shows completion only after both durable peer acknowledgements.
|
shows completion only after both durable peer acknowledgements.
|
||||||
|
|
||||||
Each explicit foreground generation attempt publishes the Android peer before
|
Each explicit foreground synchronization attempt publishes the Android peer
|
||||||
emitting one fresh legacy request signal for `trainlog-syncd`. If transport is
|
and enters the full-generation coordinator before emitting one fresh request
|
||||||
|
signal for `trainlog-syncd`. The signal is only admission/correlation; a
|
||||||
|
configured daemon routes it to the existing desktop orchestrator rather than
|
||||||
|
the standalone V3 importer. If transport is
|
||||||
interrupted after generation publication, a later attempt resumes the exact
|
interrupted after generation publication, a later attempt resumes the exact
|
||||||
stored generation instead of recapturing mutable data. An acknowledged Android
|
stored generation instead of recapturing mutable data. An acknowledged Android
|
||||||
generation remains resumable only until the desktop generation for that run is
|
generation remains resumable only until the desktop generation for that run is
|
||||||
durably consumed; a fully completed run is then excluded from foreground
|
durably consumed; a fully completed run is then excluded from foreground
|
||||||
selection. This preserves late-ACK recovery without replaying completed runs.
|
selection. This preserves late-ACK recovery without replaying completed runs.
|
||||||
|
|
||||||
|
Backup manifests retain format version 1 and the current Android schema. Their
|
||||||
|
`product_version` is read from installed package metadata, so development
|
||||||
|
builds record `0.1.3` without a second hard-coded product-version source.
|
||||||
|
|
|
||||||
|
|
@ -456,10 +456,11 @@ manifest is published after its member objects. The helper runs inside the
|
||||||
orchestrator-owned process group and cannot be selected or parameterized by an
|
orchestrator-owned process group and cannot be selected or parameterized by an
|
||||||
HTTP request.
|
HTTP request.
|
||||||
|
|
||||||
It polls for a new Android request and invokes the same shared C synchronization
|
It polls for a new Android request. With trusted full-generation configuration
|
||||||
engine used by the TUI.
|
it admits that request to the existing application orchestrator and peer
|
||||||
|
worker; without that configuration it retains the shared C/V3 compatibility
|
||||||
It does not implement a second synchronization algorithm.
|
engine used by the TUI. It does not implement a second synchronization
|
||||||
|
algorithm.
|
||||||
|
|
||||||
## 3. Exercise model
|
## 3. Exercise model
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -152,15 +152,20 @@ Android inbox/outbox still select V3 and do not move the draft artifact.
|
||||||
boundaries, not active storage choices.
|
boundaries, not active storage choices.
|
||||||
- Desktop synchronization uses direct libudev/libmtp discovery and object
|
- Desktop synchronization uses direct libudev/libmtp discovery and object
|
||||||
access. No GVFS/FUSE mount is required.
|
access. No GVFS/FUSE mount is required.
|
||||||
- `trainlog_sync_run()` is shared by the TUI and `trainlog-syncd`.
|
- `trainlog_sync_run()` remains the strict legacy V3 engine shared with the
|
||||||
|
TUI and compatibility tooling. When the trusted full-generation
|
||||||
|
configuration is present, `trainlog-syncd` admits the Android request into
|
||||||
|
the existing `sync_orchestrator.py`/`sync_peer_worker.py` conversation;
|
||||||
|
configuration absence retains the legacy fallback.
|
||||||
- The desktop imports Android snapshots, publishes catalog/profile/feedback/AI
|
- The desktop imports Android snapshots, publishes catalog/profile/feedback/AI
|
||||||
companions, and returns a receipt. Stable IDs, artifact idempotence and the
|
companions, and returns a receipt. Stable IDs, artifact idempotence and the
|
||||||
few domain-specific explicit states make defined replay paths idempotent.
|
few domain-specific explicit states make defined replay paths idempotent.
|
||||||
Explicit staged generation services now provide coherent V4/companion
|
Explicit staged generation services now provide coherent V4/companion
|
||||||
capture, immutable manifests, whole-generation SQLite consumption and
|
capture, immutable manifests, whole-generation SQLite consumption and
|
||||||
durable peer ACKs. A trusted opt-in configuration may select the bounded
|
durable peer ACKs. The Android foreground trigger now publishes a complete
|
||||||
|
generation by default. A trusted desktop configuration selects the bounded
|
||||||
production generation MTP adapter; absent configuration leaves V3 as the
|
production generation MTP adapter; absent configuration leaves V3 as the
|
||||||
default.
|
compatibility fallback.
|
||||||
- SQLite database files are never synchronized.
|
- SQLite database files are never synchronized.
|
||||||
- The desktop AI flow uses external `rclone` for Drive inbox/archive and
|
- The desktop AI flow uses external `rclone` for Drive inbox/archive and
|
||||||
read-only history export. Android owns no Drive credentials.
|
read-only history export. Android owns no Drive credentials.
|
||||||
|
|
|
||||||
|
|
@ -135,9 +135,11 @@ Synchronization artifacts are separate from the frozen Trainlog session JSON
|
||||||
v1 format.
|
v1 format.
|
||||||
|
|
||||||
V4 history and execution-draft V1 are staged codecs with explicit repository
|
V4 history and execution-draft V1 are staged codecs with explicit repository
|
||||||
and command-line entry points. They are deliberately absent from
|
and command-line entry points. They remain deliberately absent from
|
||||||
`trainlog_sync_run()`, request/receipt publication and the Android automatic
|
`trainlog_sync_run()`: configured Android/daemon requests now route around that
|
||||||
inbox/outbox. Deployment must stop the old user worker, replace the installed
|
strict legacy V3 engine into the existing full-generation orchestrator. The
|
||||||
|
request artifact remains only a correlated admission signal. Deployment must
|
||||||
|
stop the old user worker, replace the installed
|
||||||
binary/scripts as one unit, migrate only through the new binary, and restart
|
binary/scripts as one unit, migrate only through the new binary, and restart
|
||||||
only after compatibility checks; this ticket performs none of those steps.
|
only after compatibility checks; this ticket performs none of those steps.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1512,6 +1512,18 @@ the `trainlog-syncd` launcher and daemon source, and the generation worker.
|
||||||
This prevents a user unit from silently executing a helper from a different
|
This prevents a user unit from silently executing a helper from a different
|
||||||
checkout than the installed desktop candidate.
|
checkout than the installed desktop candidate.
|
||||||
|
|
||||||
|
`syncd_routing` proves that both Android-labelled and daemon-labelled
|
||||||
|
admissions invoke the packaged `sync_orchestrator.py` full-generation owner
|
||||||
|
when trusted configuration is present, and never invoke the legacy
|
||||||
|
`trainlog-sync-once` command in that mode. The generation-MTP boundary test
|
||||||
|
proves that polling copies the Android request signal without acknowledging or
|
||||||
|
deleting it. Session-exchange characterization keeps standalone V3 rejection
|
||||||
|
strict while its complete-envelope case filters a tombstone-dominated live
|
||||||
|
fact; the causal Android/Desktop round-trip and generation replay/ACK tests
|
||||||
|
cover restart, idempotence and non-resurrection. `AndroidBackupServiceTest`
|
||||||
|
injects a product version and verifies that exact value in the ZIP manifest,
|
||||||
|
preventing a return to a hard-coded release string.
|
||||||
|
|
||||||
The isolated JDK 17 harness reports **220 Android tests: 215 passed, five
|
The isolated JDK 17 harness reports **220 Android tests: 215 passed, five
|
||||||
skipped, zero failures/errors**. The skips are optional, externally supplied
|
skipped, zero failures/errors**. The skips are optional, externally supplied
|
||||||
copy gates: `BridgeBackupMigrationTest.verifiedSchemaSeventeenBridgeBackupMigratesThroughCurrentOwner`,
|
copy gates: `BridgeBackupMigrationTest.verifiedSchemaSeventeenBridgeBackupMigratesThroughCurrentOwner`,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue