fix(storage): preserve v26 legacy user input - #1550
Draft
Jeremy1844 wants to merge 1 commit into
Draft
Conversation
Jeremy1844
force-pushed
the
fix/adv-2026-0003-v26-migration
branch
from
July 29, 2026 12:33
106ed03 to
420ecbb
Compare
This was referenced Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft PR packet: ADV-2026-0003
Proposed PR
fix(storage): preserve v26 legacy user inputAdventech/sabbath-school-android/main55405f66a8c555047dc0035747acdcaa371d59fafix/adv-2026-0003-v26-migration420ecbb013c957c99b73b6916163056ae2362361RC-0003)Publication privacy note: the branch commit metadata was recreated with the account's GitHub noreply identity before review. Its source tree, message, parent, and stable patch ID are unchanged, so the recorded source-tree validation remains applicable to the published head.
Why
The production v26-to-v27 Room migration deleted the durable
annotations,comments, andhighlightstables. A global destructive fallback could erase the complete database on unsupported paths. The old identifiers do not prove a safe semantic mapping into current block-level input, so the minimal data-preserving remedy quarantines the original rows byte-for-byte rather than guessing. This is a confirmed P0 slice of Android issue #1545.Failing-before reproduction
With a populated v26 database, the initial migration test fails because
legacy_annotations_v26does not exist after migration. A second deliberate red privacy phase observes one retained legacy row after the realUserInputDao.clear(), proving recovery tables also need account-deletion/logout semantics.Minimal fix
legacy_*_v26recovery tables.Recorded local checks
clear().:services:storage:impl:check :services:storage:impl:assembleRelease :common:auth:testReleaseUnitTest(297 tasks).:libraries:storage:api:check :libraries:storage:test:check :common:auth:check(368 tasks).:app:assembleRelease(1,200 tasks).These are local Windows-hosted Robolectric/SQLite/Gradle results. No hosted Actions, production database, emulator, physical-device, signed, store, or production result is claimed.
The 2026-07-28 delivery refresh reconfirmed the unchanged public target and zero-overlap PR set. The exact clean head passed the real migration fixture (1/1), the 297-task storage/auth release gate (5/5 emitted tests), the storage compatibility gate (4/4 emitted tests), and a restarted fresh
:app:assembleRelease --rerun-tasks. This refresh adds local delivery confidence only; it does not satisfy the production-signed copied-database, device, low-storage/interruption, privacy, hosted, or rollback gates below.Overlap and disposition
Android PR #1548 at
8523d93c0f05376b30113a2b24c1f7bbccc30aa0has zero overlap and remains separate.RC-0003 conflicts semantically with RC-0002 only because both isolated roots declare different version-33 schemas. Review this preservation/privacy root before choosing RC-0002's final migration number. The composed verification head is evidence only, never a multi-root PR.
Migration, recovery, and rollback
Security, privacy, and content rights
Recovery rows may contain private notes and annotations. They must not appear in public artifacts, telemetry, or implicit uploads. This root adds no content, translation, lesson, PDF/video asset, Bible/EGW material, credential, signing, or deployment change.
Dependency order and draft blockers
This schema/privacy root precedes RC-0002. Keep the PR draft until maintainers identify the actual shipped database lineage, production-signed upgrades pass on copied representative v26 databases under low-storage/interruption/process-death conditions, logout/account-deletion privacy is verified on-device, support approves treatment for already-affected users, and required hosted checks pass.