Skip to content

v2 workspace: plan + architecture docs for the Tauri/Rust rewrite#22

Merged
bryanroscoe merged 2 commits into
mainfrom
docs/v2-plan
May 23, 2026
Merged

v2 workspace: plan + architecture docs for the Tauri/Rust rewrite#22
bryanroscoe merged 2 commits into
mainfrom
docs/v2-plan

Conversation

@bryanroscoe
Copy link
Copy Markdown
Owner

Sets up `v2/` as the workspace for the rewrite per the language/stack discussion. No code yet — the Rust toolchain isn't installed locally and hand-writing Tauri scaffolding risks producing files that won't compile. The plan is structured so `cargo create-tauri-app` slots directly into this layout when the toolchain is ready.

What's in this PR

  • `v2/README.md` — technology choices (Tauri 2 / Rust / Svelte default), three-layer architecture diagram, seven non-negotiable architectural commitments, local-setup steps.
  • `v2/PLAN.md` — eleven-phase porting roadmap with each item mapped to a section of `docs/FEATURES.md`. Phase status legend, definition-of-done for v2.0, parking-lot section for research-pass ideas deferred to post-v2.1.
  • `v2/.gitignore` — anticipates Rust / Node build artifacts and update-signing key paths.

Phase summary

Phase Goal
1 Foundation (Tauri scaffold, engine + ADB driver crates, test harness, CI)
2 Discovery & profile (read-only)
3 Network discovery + mDNS stretch
4 Health report incl. v0.75.0 Display & Audio additions
5 App lists + Optimize/Restore (the core debloat)
6 Launcher management incl. v0.75.0 hard-won Android-11-on-Shield fixes
7 Display Scaling + Tweaks
8 Snapshots
9 APK sideload + reboot
10 Packaging + auto-update (v2.0 GA target)
11 Mobile phone client (v2.1)

Architectural commitments (non-negotiable, see README)

  1. Engine has no I/O
  2. App lists are runtime data, not embedded code
  3. All ADB calls go through one wrapper
  4. Detection logic exists exactly once (v1 has two, see FEATURES.md §13.1)
  5. Snapshots are versioned (`schemaVersion`)
  6. Strict-mode error handling preserved
  7. Reversibility model preserved (Recovery one-click backout)

Pairs with #21 (the feature catalog) — `docs/FEATURES.md` is the behavior spec, this PR is the implementation roadmap that walks it.

Sets up v2/ as the workspace for the Rust + Tauri 2 rewrite, with two
planning artifacts:

- v2/README.md — technology choices (Tauri 2 / Rust / Svelte default),
  three-layer architecture (engine / ADB driver / frontend), seven
  non-negotiable architectural commitments, local setup steps for once
  the Rust toolchain is installed.
- v2/PLAN.md — eleven-phase porting roadmap. Each phase maps line items
  to FEATURES.md sections. Definition-of-done checklist for v2.0.0.
  Parking-lot section captures research-pass ideas deferred past v2.1.
- v2/.gitignore — Tauri / Rust / Node build artifacts and update-signing
  key paths.

No code yet — the Rust toolchain isn't installed locally and hand-
writing a Tauri scaffold risks producing files that won't compile.
The plan is concrete enough that running cargo create-tauri-app once
Rust is set up will slot directly into this structure.
Independent review surfaced several technical concerns and gaps.
Folded fixes into the plan and the README's architectural commitments.

README:
- Commitment #1 (engine has no I/O) clarified to also exclude HTTP
  fetches. Commitment #2 (runtime app-list fetch) now explicitly
  states the loader lives in the Tauri host layer next to the
  command bridge, NOT in the engine — engine accepts lists as
  inputs. Resolves the tension the reviewer flagged.
- Added explicit "Non-goals" section: not a root tool, not a flasher,
  no cloud sync, no telemetry, no Play Store. Bounds expectations.

PLAN.md Phase 1 (Foundation):
- Added Phase 1.7 fixture-capture pass — real Shield dumpsys outputs
  checked in early so all later phases have a test corpus without
  needing device access.
- Added Phase 1.9 — pin the frontend framework before shipping the
  first 3 views (switching frameworks after that is expensive).

PLAN.md Phase 10 (Packaging):
- 10.2 code-signing decision is now concrete: macOS = Apple Dev
  Program + notarization ($99/yr, no shortcut). Windows = pick (a)
  EV cert ($300-500/yr, immediate SmartScreen reputation), (b) OV
  cert ($100-300/yr, 30k-install reputation ramp), or (c) unsigned
  + documented bypass. Notes (c) is risky for the debloater audience
  that already mistrusts the tool. Linux = personal GPG.
- 10.4 calls out pinned toolchain versions for reproducible builds.
- 10.5 expanded: the Ed25519 signing key MUST NOT rotate without
  bricking auto-update for old versions — document custody, backup,
  and one-way "key lost" recovery procedure.

PLAN.md Phase 11 (Mobile):
- Reality-check warning at the top: Android apps cannot bundle or
  exec an `adb` binary (SELinux + sandbox), so "ADB-over-network
  from phone" means reimplementing the ADB wire protocol in Rust.
  That's a substantial library, not a small task.
- Added Phase 11.0 — research spike evaluating existing Rust ADB
  crates (`adb_client`, `forensic-adb`, etc.) before committing
  to a v2.1 timeline. Decision document gates 11.1.
- Phase 11.3 reframed accordingly.

PLAN.md Phase 5 addenda + parking lot:
- Moved "Disable Nvidia telemetry preset" and "More Shield bloat from
  florisse.nl" out of the parking lot and into a new "Phase 5 addenda"
  section — they're data changes to the app lists, not future
  features. Introduces a `data/presets/*.json` schema as Phase 5
  scope to support composed multi-package actions.
- Parking lot still holds the post-v2.1 ideas.

Definition of done for v2.0 — added:
- Snapshot-rejection fixture test (honoring commitment #5)
- v1 → v2 snapshot migration story documented
- Signing-key custody plan committed
- Third-party attribution surface in-app
- Accessibility baseline (keyboard, contrast)
- No-telemetry confirmation via build inspection
@bryanroscoe bryanroscoe merged commit b797a5c into main May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant