|
| 1 | +# v2rayF PLAN — From glued client to trusted tunnel |
| 2 | + |
| 3 | +Single source of truth for product direction. Older notes in [`roadmap-engine-first.md`](roadmap-engine-first.md) point here. |
| 4 | + |
| 5 | +## Operating rules |
| 6 | + |
| 7 | +- GitHub push / public release only when the maintainer explicitly asks (authorized for **v2.6.2.14**). |
| 8 | +- Local builds, APK sideloads, and private testing are fine between releases. |
| 9 | +- North star: drop any valid config → **every app on the device** reaches the internet through that exit — not “browser works, Instagram Direct dies.” |
| 10 | + |
| 11 | +## Focus |
| 12 | + |
| 13 | +**Android-first** (Iran/China phones) for 3–6 months. Windows follows once Android full-tunnel QA passes. macOS/Linux TUN/kill-switch after that. |
| 14 | + |
| 15 | +## Success criteria (Connect green) |
| 16 | + |
| 17 | +Connect may show Connected only when: |
| 18 | + |
| 19 | +1. Core process is alive, and |
| 20 | +2. Local SOCKS probe passes, and |
| 21 | +3. On Android TUN sessions: TUN path probe passes (no false-green on HTTP-proxy-only paths). |
| 22 | + |
| 23 | +## Golden app matrix |
| 24 | + |
| 25 | +Same subscription, clean install, Private DNS **Off**. Mark pass/fail (not Mbps alone). |
| 26 | + |
| 27 | +| App | Check | |
| 28 | +|-----|--------| |
| 29 | +| Chrome | HTTPS page load | |
| 30 | +| Instagram | Feed + **Direct** (MQTT) | |
| 31 | +| WhatsApp | Chat send/receive | |
| 32 | +| Telegram | Chat + media | |
| 33 | +| YouTube | Video playback | |
| 34 | +| Maps | Load + search | |
| 35 | +| Play Services | FCM push arrives | |
| 36 | +| One UDP game / voice | Real-time UDP path | |
| 37 | + |
| 38 | +**Scorecard:** run v2rayF vs v2rayNG vs V2Box on the same phone and link; file results under private notes (do not commit credentials). |
| 39 | + |
| 40 | +## Phases |
| 41 | + |
| 42 | +### Phase 0 — Freeze the leak of trust |
| 43 | + |
| 44 | +- [x] Codify success criteria + golden matrix (this file) |
| 45 | +- [x] Scorecard process documented |
| 46 | +- [x] Release gate: maintainer approves every push |
| 47 | + |
| 48 | +### Phase 1 — One live engine on Android |
| 49 | + |
| 50 | +- [x] Android live Connect + latency/speedtest both prefer sing-box when `PreferSingBoxOnAndroid` (D13) |
| 51 | +- [x] TUN fd lifecycle documented as one state machine (`AndroidTunLifecycle` + rebind policy) |
| 52 | +- [x] CI / package-android: fail if unpatched sing-box in release path (D18) |
| 53 | + |
| 54 | +**Exit gate:** Instagram Direct + WhatsApp + Chrome on clean install without manual App Network tweaks. |
| 55 | + |
| 56 | +### Phase 2 — Full-tunnel correctness |
| 57 | + |
| 58 | +- [x] DNS: keep real UDP via proxy + IPv6 fail-closed; Private DNS conflict UX on Android |
| 59 | +- [x] Bypass China on sing-box via rule-sets (no longer silent Bypass LAN stub) |
| 60 | +- [x] IR / CN network presets (one-tap profiles) |
| 61 | +- [x] Prefer tunnel+DNS over growing exception lists; document shrink policy |
| 62 | +- [x] UDP/QUIC golden checks documented (manual scorecard) |
| 63 | + |
| 64 | +**Exit gate:** golden matrix green on IR-like and CN-like path (or lab equivalent). |
| 65 | + |
| 66 | +### Phase 3 — Config completeness |
| 67 | + |
| 68 | +- [x] Unsupported SIP003 / exotic plugins: hard refuse with reason (never silent “connected”) |
| 69 | +- [x] Unsupported schemes (Hysteria1, Naive, SSR, …) return refuse hints |
| 70 | +- [x] Subscription mirror hints + auto-retry for GitHub/raw (CN/IR) |
| 71 | + |
| 72 | +### Phase 4 — Desktop parity + innovation (after Android wins) |
| 73 | + |
| 74 | +- [x] Path truth UI (TUN / HTTP assist / Direct counts) while Connected |
| 75 | +- [x] Scorecard template export (Settings) |
| 76 | +- [x] Desktop TUN / kill-switch honesty on macOS/Linux (`TunRequirementMessage`) |
| 77 | +- Windows TUN reliability bar (ongoing) |
| 78 | +- Then UX / multipath / diagnostics (former “Phase C”) |
| 79 | + |
| 80 | +### Phase 5 — Distribution for CN/IR |
| 81 | + |
| 82 | +- [x] Sideload + in-app update primary (documented); subscription mirrors tip |
| 83 | +- [x] fa / zh tips (Private DNS, battery) — `docs/tips/fa-zh-connect.md` |
| 84 | +- [x] Battery exemption re-prompt after revoke (D14) |
| 85 | +- No Play Store dependency for core updates |
| 86 | + |
| 87 | +## What we will not do |
| 88 | + |
| 89 | +- One-off domain/package patches without a golden-matrix failure and a removal plan |
| 90 | +- UX redesign as a substitute for tunnel correctness |
| 91 | +- iOS before Android full-tunnel bar |
| 92 | +- Silent Survive / traffic rewrite without consent |
0 commit comments