|
1 | 1 | # VMAnyware — current state |
2 | 2 |
|
3 | | -Updated: 2026-10-22. Historical evidence and decisions are in Git and docs. |
| 3 | +Updated: 2026-10-23. Historical evidence and decisions are in Git and docs. |
4 | 4 |
|
5 | 5 | Naming note: historical lab resource identifiers below are normalized to the |
6 | 6 | current VMAnyware name. External resources were not renamed; use VMIDs and |
7 | 7 | ignored local lab records to verify actual identifiers before operations. |
8 | 8 |
|
9 | 9 | ## Latest resume point |
10 | 10 |
|
11 | | -User-requested session checkpoint: finish this slice, commit/push and stop here. |
12 | | -ADR 0088 implements Android Keystore wrapping for the optional application SSH |
13 | | -unlock secret. ARM64/x86_64 Rust, Kotlin/JNI and both signed debug APKs compile/package; |
14 | | -helper presence, native hashes, descriptors, initializer exports and existing |
15 | | -manifest constraints pass. A focused scope test and affected browser journey pass. |
16 | | -This is compiled/packaged implementation, not actual Android runtime acceptance. |
17 | | -The SSH private key stays in its passphrase-encrypted app file. Linux Secret Service |
18 | | -already has joined native UI/vault/SSH acceptance (ADR 0087). macOS Keychain, |
19 | | -Windows/iOS parity, exact APK/device/Keystore behavior, real Proxmox and deployment |
20 | | -acceptance remain open. No full-roadmap completion or audited percentage is claimed. |
21 | | - |
22 | | -Resume next with an explicitly approved owned Android runtime: save/read/restart, |
23 | | -tamper/wrong-scope and missing/invalidated wrapping-key refusal, forget/read refusal, |
24 | | -then host-trust-first SSH/PTY using the system source. Do not start a VM, AVD or |
25 | | -personal credential operation just because source/build checks pass. All task |
26 | | -processes are terminal; no pending build or test needs restarting. |
| 11 | +Goal resumed 2026-10-23. Android Keystore production source and both debug APKs |
| 12 | +compile/package (ADR 0088). ADR 0089 now prepares a separate test-only instrumented |
| 13 | +APK (four real-Keystore cases), an exact-artifact read-only plan and the packaged |
| 14 | +IPC save/read/restart/forget scenario. Three host-only fake-ADB refusal checks pass. |
| 15 | +The test APK compiles; signatures, target/runner/test-only metadata and matching |
| 16 | +main/test signer verify. No runtime case has been executed. No emulator was created, |
| 17 | +started, installed/reset or contacted; no personal credential was read/changed. |
| 18 | + |
| 19 | +Reviewable plan: `.lab/android-keystore/plan.json`, SHA-256 |
| 20 | +`47d7cc257434b038f7be1b62b8f8f5f4635565ef20acb63e9bd976c41b4798bf`. |
| 21 | +It requires the named already booted x86_64 QEMU AVD, serial emulator-5580, ADB 5047, |
| 22 | +installs only the two hashed APKs and resets only dev.vmanyware.client. Proposed |
| 23 | +creation/start uses a fresh owned API-35/Pixel-6 AVD in the task-local Android user |
| 24 | +directory, 2 vCPUs/2048 MiB RAM/2 GiB data. These VM/app operations still require |
| 25 | +explicit concrete approval under AGENTS.md. No live task handle remains pending. |
| 26 | +Next: obtain that approval, then execute the exact plan and record actual runtime |
| 27 | +results; otherwise continue other source work without starting a VM. |
| 28 | + |
| 29 | +The full roadmap remains active/incomplete: real Proxmox, Android runtime/SSH/IME, |
| 30 | +other platform stores/parity, deployment and release gates remain open. No audited |
| 31 | +completion percentage is claimed. |
27 | 32 |
|
28 | 33 |
|
29 | 34 | Latest source slice: production HTTP admission now has a global burst-120, |
@@ -6902,3 +6907,58 @@ then continue other source/platform work. User asked to stop at this checkpoint; |
6902 | 6907 | do not start another slice in this session. Website remains at the accepted Linux |
6903 | 6908 | checkpoint `11dcb6c`; Android source/package evidence is now in this repo and should |
6904 | 6909 | be synchronized on the next publication pass, without claiming device validation. |
| 6910 | + |
| 6911 | + |
| 6912 | +## 2026-10-23 — Prepared owned Android Keystore acceptance (ADR 0089) |
| 6913 | + |
| 6914 | +Scope/acceptance: compile an isolated test APK and prepare a reviewed, opt-in |
| 6915 | +save/read/process-restart/forget plus negative Keystore scenario; enforce target/ |
| 6916 | +artifact/reset gates without launching a VM or reading personal credentials. |
| 6917 | +Added four AndroidJUnit4 instrumented cases using only generated random scopes, |
| 6918 | +explicit owned-fixture argument and emulator hardware/package guards. Tests exercise |
| 6919 | +roundtrip/reopened helper/forget, authenticated ciphertext tamper/wrong scope, |
| 6920 | +wrapping-key loss with no silent regeneration and explicit forget/resave, malformed |
| 6921 | +scope/version/size and byte-array clearing. They add no production corruption/key |
| 6922 | +hook, do not enumerate aliases and clean only their own generated scopes. |
| 6923 | + |
| 6924 | +The native Android harness gains --keystore with a mandatory local APK whose digest |
| 6925 | +must match the installed standalone APK before data reset. Actual IPC scenario |
| 6926 | +requires explicit save/forget confirmation, correct passphrase, unchanged public |
| 6927 | +identity, system unlock before/after process restart, forgotten-secret read refusal |
| 6928 | +and preserved manual identity. The separate planner verifies packages/signatures, |
| 6929 | +shared signer, main x86_64 ABI and test-only instrumentation target, hashes APKs and |
| 6930 | +host controllers, and records exact target/operations. Execution rechecks the plan |
| 6931 | +before ADB and checks AVD name/QEMU/boot/ABI before any installation. It requires all |
| 6932 | +four instrumented cases and matching native report; it removes only the test APK it |
| 6933 | +installed and stops the owned app. It does not create/start an emulator. |
| 6934 | + |
| 6935 | +Verification: the targeted test APK assembles successfully |
| 6936 | +(`.lab/android-toolchain/keystore-test-apk-build.log`). Initial direct Gradle attempt |
| 6937 | +reached the unchanged native Rust hook needing a live Tauri CLI options server; |
| 6938 | +correct targeted build excludes :app:rustBuildX86_64Debug and reuses the existing |
| 6939 | +ADR-0088 verified library. Main Rust/Kotlin crypto source is unchanged. AndroidTest |
| 6940 | +uses pinned JUnit 1.3.0/runner 1.7.0; the unused generated Espresso dependency is |
| 6941 | +removed. A manifest now explicitly marks the artifact testOnly=true/allowBackup=false; |
| 6942 | +its absence was caught/refused by the first plan attempt before any ADB operation. |
| 6943 | + |
| 6944 | +The read-only final plan passes SDK signature/manifest/ABI/signer/hash checks |
| 6945 | +(`.lab/android-toolchain/keystore-plan-check.log`). Main APK SHA-256 remains |
| 6946 | +`0aa58facc6a8d659e76f64cdcc738c44ac2072ddac55c3429c9643d3a072ab47`. |
| 6947 | +Test APK is 400436 bytes, SHA-256 |
| 6948 | +`9f5447e94d2123d2686d05afa1d26a7d0fc196b6273cab96b2d1be1ec1ba264a`. |
| 6949 | +Plan SHA-256 is `47d7cc257434b038f7be1b62b8f8f5f4635565ef20acb63e9bd976c41b4798bf`. |
| 6950 | +The three host-only refusal cases pass (`.lab/android-keystore/host-guards.log`): |
| 6951 | +missing artifact causes zero fake-ADB calls, wrong AVD and changed installed APK |
| 6952 | +cause only guarded reads and no reset/install/force-stop. Python/JS syntax, diff |
| 6953 | +review and unchanged IPC manifest consistency (82 commands) pass. No unrelated |
| 6954 | +server/browser/Rust suite or production APK rebuild reran for this test-only slice. |
| 6955 | + |
| 6956 | +Read-only SDK inspection confirms an API-35 Google APIs x86_64 image and Pixel-6 |
| 6957 | +definition are already available; configured owned AVD listing is empty. This is |
| 6958 | +not VM creation/start authorization. Proposed setup and exact app/test operations |
| 6959 | +are reviewable in the plan and experiments/android-native/README.md. Runtime |
| 6960 | +approval remains pending; no ADB call against an emulator, installation, credential |
| 6961 | +change, real VM or provider access occurred. Four cases are compiled, not passed. |
| 6962 | +The plan report retains runtimeValidated=false and full APK/platform acceptance is |
| 6963 | +not changed. Next task: execute on the explicitly approved disposable runtime, then |
| 6964 | +record actual failures/success and continue Android system-source SSH/rotation. |
0 commit comments