fix: Move duress off the entries frame on Android (v2.9.9 frame-ceiling mirror) app/src/main/java/com/peachpasswords/sync/VaultAdopt.kt:sendVaultSnapshot now mirrors the peach-browser v4.6.4 wire shape — duress rides its own ADOPT_SNAPSHOT frame after the entries chunks (chunk_index = entriesChunkCount, chunkCount += 1) instead of being attached to the entries final chunk. Tombstones migrate to the last wire frame (entries final if no duress, else duress frame). If the duress frame would push chunkCount past MAX_SNAPSHOT_CHUNKS (200), the duress frame is dropped and sync fills duress later (graceful, never blocks adoption). Cross-repo wire contract: identical to peach-browser save 8411b9a63ec4. The receiver is unchanged on both sides — receiveVaultSnapshot reads duress_slot off any chunk and merges per chunk, so: - new sender -> old receiver: duress-only frame on iteration N - old sender -> new receiver: duress on the entries final chunk - new sender -> new receiver: duress on its own frame app/src/test/java/com/peachpasswords/sync/VaultAdoptSnapshotTest.kt: 3 new tests mirroring browser T-A33/T-A34/T-A35 with backtick-space naming (VaultAdoptSnapshotTest uses backtick style, RelayAdoptionReceiverTest would also use it per the brief verification record): - frame ceiling 768KiB duress on separate frame round-trips (T-A33) - intermediate frame sizes stay under wire ceiling when duress rides its own frame (T-A34, structural probe observes raw sizes and assertions) - legacy duress on entries final chunk still decodes (T-A35, manual legacy sender shape) VERSION bumped 2.9.8 -> 2.9.9; versionCode 240154 -> 240155. Single-authority VERSION file unchanged in role (only value). Gate (JDK 21 from Android Studio bundle, required for Gradle 8.14.3): focused testDebugUnitTest --tests "*.VaultAdoptSnapshotTest" green after a fix on a Kotlin compile error in the first T-A33 attempt (used AdopJson inline form with mapOf which needs reified type; replaced with literal string-build matching the existing tests' style). Full gate: ./gradlew testDebugUnitTest lintDebug assembleRelease --rerun-tasks BUILD SUCCESSFUL 2m39s, 843 tests / 117 suites / 0 failures / 0 errors / 0 skips (was 840 at v2.9.8 baseline + 3 new duress tests). VaultAdoptSnapshot- Test: 16 tests / 0 / 0. Closes the deferred REVIEW_DEFERRED_ITEMS_BRIEF.md Item 1 (frame ceiling) on both ends of the wire.
$ koh steal kepr.uk/peach-android@c0c413a880b4
·
parent: 1d9938576524
discussion
log in to leave a comment.