Repository navigation
Conversation
Matching R4 app proof — 13 October 2026, final Cloud handoffRelay source remains The matching genuine native-Realm/transactional-HTTP matrix now passes 260/260, zero skipped, under Node 22.23.3 on app code
|
R4 local loopback repair follow-upRelay source head: The narrow fix sets the supplied subscription on an existing AppImage during explicit revisioned repair, after the existing revision/conflict check. No Keeper readiness gate, approved contributor manifest, legacy writer behavior, hosted service, or production data was changed. Disposable tests: focused production-route regression RED 0/1 on b600 and GREEN 1/1 on this head; full transactional HTTP matrix 58/58, backup suite 120/120, and Relay TypeScript check PASS. The loopback paired service was rebuilt from this head without resetting its disposable Mongo/account. Native Android opt-in on the modified local app then displayed Backup verified after complete readback; a subsequent local label mutation produced snapshot 200 → revisioned mutation 200 → readback 200 and returned to Verified. This is a local source/fixture result, not deployed Relay readiness or final exact-SHA Keeper signoff. Private logs and source identities: |
R4 local metadata repair — 13 October 2026, current draft head
Relay current source is
838049e537e07eb646a2a0393eb969fba43d0739, draft/unmerged/undeployed. The previously pinnedb600416e5ba7325927d7d2871cff7776f4e593feremains the historical host proof and initial native failure baseline. The final mobile candidate is Keeper #7045d25d5660ac72443952ae1f7899cf456b5991c805; its exact-head Local handoff supersedes the earlier app-in-progress state below.The matching genuine native-Realm/transactional-HTTP matrix now passes 260/260, zero skipped, under Node 22.23.3 on app code
3cc9368ca2f3b2149db5743a5f9d230aa516d6a0(final head adds documentation only) and a clean Relay b600 checkout installed with frozen Yarn. All seven operations, real crypto/production producers, stale queued payload, A→B→A, remote conflicts, protocol/acknowledgement failures, partial fanout, final verification races and complete clean Recovery Key restore are included. Seven added cases cover six actual Redux Persist consent/boot/durability paths and one actual status-source projection with native/HTTP proof; canonical opt-out wins every read-order prefix, errors deny legacy fallback, late fallback preserves continued persistence, and saved Verified cannot outlive the session proof. This is Linux host evidence, not iOS/Android UI/MMKV/relaunch or deployed fleet evidence. Current app CodeQL is green; hosted Tests and the genuine job are tracked in #7045 separately.AUTOMATIC_BACKUP_SOURCE_READYpermits only DEVELOPMENT loopback validation; hosted app automatic writes remain fenced byAUTOMATIC_BACKUP_RELAY_ROLLOUT_READY=false. Native IOS/ANDROID, human review, real operator/runtime/index/transaction/auth/request-limit evidence and old-instance/in-flight/legacy-full-writer drainage remain open. The approved contributor runtime lock remains ee935; this paired fixture does not replace it. No merge, Relay deployment, production mutation, release signing, upload or publication is authorized or performed.13 October Local follow-up — current 838049e head
Native Android local opt-in on the initial b600 fixture reached real snapshot 200 → revisioned repair 200 → snapshot 200 but failed complete readback:
createNewAppprecreated an AppImage without subscription, and repair set subscription only on insert. Keeper correctly withheld Verified. Current commit838049e537e07eb646a2a0393eb969fba43d0739writes the supplied subscription on an existing AppImage in explicit revisioned repair after revision/conflict checks. Legacy behavior and Keeper's safety gate are unchanged.The focused production-route test is RED 0/1 on b600, GREEN 1/1 here. Full transactional HTTP is PASS 58/58, backup suite 120/120 and TypeScript compilation PASS on current source. A loopback-only paired service rebuilt from this commit then produced native Android Verified after complete readback and after one additional label mutation. See exact-head local comment. This does not establish final exact-SHA app acceptance or deployed Relay readiness.
13 October Cloud continuation — historical b600 head
Historical head:
b600416e5ba7325927d7d2871cff7776f4e593fe.LOCAL_DEVnow allows/revisionedBackupMutation; it previously returned 503 before the v2 handler. A focused regression proves the route is reached while hosted provider routes remain unavailable. This is the only productionsrc/runtime change after82ee3b1; CAS, schemas and generation logic are unchanged.KEEPER_APP_SOURCE=/path/to/bitcoin-keeper yarn test:automatic-httppassed 57/57 locally against disposable MongoDB 7 replica-set transactions and real loopback Express. The fixture mounts the actual local-mode gate, exact production HTTP handler source, shared Relay service graph and Mongoose schemas; ciphertext uses the compatible app's real AES encryption/decryption exports.updated:true/preconditionApplied:true/newRevision, real encrypted readback, stale 409, old-route 404, malformed acknowledgement, valid-format acknowledgement equal to the old revision, and lost reply after a real commit. Scoped operations preserve unrelated remote-only records; explicit whole-backup deletion remains the separate destructive exception.getAppImageread route for the app's genuine Recovery Key restore test.prepareRestore(appId)seeds an actual disposable free-tier App record so production receipt validation takes its normal no-provider branch. The backend test confirms unchanged encrypted records/revision and required headers. No legacy write route or automatic endpoint fallback is mounted. This backend read test is not a claim that native Realm restore has passed.git diff --checkpassed. Exact-head hosted Source readiness 38342719226 and Build and test 38342719221 passed; the optional paired 57-case HTTP matrix is local evidence, not a hosted job.12 October runtime update — historical source head
Runtime source head:
82ee3b10708a56d220170505d1bb7e3bc8429e77. The earlierfc17d96verification below is historical.newRevisioncalculated in its Mongo transaction after the generation update; the route refuses a success response without it.unavailableLabelIdsand withhold ambiguous ciphertext. Normal restore and legacy full backup fail closed; v2 repair can fill a uniquely owned missing label. Shared IDs still need a separately reviewed operator migration. An AppImages labels index supports the ownership query and must be verified during backend rollout.Purpose
Prevent a late, already-sent incremental backup mutation from overwriting a newer encrypted backup. This is a draft stacked on Relay #3, whose current head is
d4d59b080370637ac82e3a7cf6ef58564f9a22ac; the only difference from the app's pinned Relay runtimeee935359f22ff7932ea0a62e9084d4b49801f4aais README text.Contract and safety
POST /revisionedBackupMutationfor seven active incremental operations. The client sends the currentgetBackupSnapshotrevision and the server checks it inside a Mongo transaction. Successful responses explicitly saypreconditionApplied: true; stale revisions return 409BACKUP_CHANGED.Verification
Exact stacked head
fc17d9687e7238dcb2fc0618b97c0441a77c727d: 111/111 isolated loopback Mongo backend tests passed on the source commit (same runtime tree; #3 adds only README), TypeScripttsc --noEmit -p .passed on this stacked head, source secret scan passed, and diff check passed.Rollout and open work
The matching app client contract is being tested separately in #7045. Do not merge or deploy from this draft. Before enabling the app client, every old Relay instance and its in-flight writes must be drained and the new route verified on the deployed target; a mixed fleet or delayed old instance can still accept an unchecked old request. No backend deployment, production data mutation, app release, or publication was performed.