Skip to content

Commit 883bbdf

Browse files
committed
v2.6.2.14: trusted tunnel — Connect honesty, CN/IR profiles, no false-green.
Align Android speedtest with live sing-box, require TUN path probes, add Iran/China presets and subscription mirrors; remove unused Sponsors badge.
1 parent 3c2e153 commit 883bbdf

49 files changed

Lines changed: 966 additions & 136 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/FUNDING.yml‎

Lines changed: 0 additions & 3 deletions
This file was deleted.

‎.github/workflows/ci.yml‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,21 @@ jobs:
3737
- name: Install Android workload
3838
run: dotnet workload install android
3939

40-
- name: Download Android Xray assets
40+
- uses: actions/setup-go@v5
41+
with:
42+
go-version: "1.23"
43+
44+
- uses: nttld/setup-ndk@v1
45+
id: ndk
46+
with:
47+
ndk-version: r26d
48+
49+
- name: Download Android assets (patched sing-box required)
4150
shell: pwsh
42-
run: ./scripts/package-android.ps1 -AllowUnpatchedSingBox
51+
env:
52+
ANDROID_NDK_HOME: ${{ steps.ndk.outputs.ndk-path }}
53+
# D18 / PLAN: never allow stock libsingbox.so — TUN fd inheritance requires the patch.
54+
run: ./scripts/package-android.ps1
4355

4456
- name: Build Android
4557
run: dotnet build src/v2rayF.Android/v2rayF.Android.csproj -c Release -f net10.0-android

‎.github/workflows/release.yml‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: Release
22

3+
# Tag push (v*) publishes platform zips via softprops/action-gh-release.
4+
# body_path: docs/releases/<tag>.md
5+
36
on:
47
push:
58
tags:
@@ -61,10 +64,12 @@ jobs:
6164
echo "ANDROID_KEYSTORE_PATH=$RUNNER_TEMP/signing/v2rayf-release.jks" >> "$GITHUB_ENV"
6265
6366
- uses: actions/setup-go@v5
67+
if: matrix.android == true
6468
with:
6569
go-version: "1.23"
6670

6771
- uses: nttld/setup-ndk@v1
72+
if: matrix.android == true
6873
id: ndk
6974
with:
7075
ndk-version: r26d

‎CHANGELOG.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.6.2.14] - 2026-09-09
11+
12+
### Added
13+
14+
- Canonical product plan: `docs/PLAN.md` (trusted tunnel, Android-first)
15+
- Golden app matrix + UDP/QUIC messenger QA + exception-list shrink policy tips
16+
- Iran / China one-tap network profiles (Settings)
17+
- Android Private DNS conflict warning before Connect
18+
- sing-box Bypass China via geosite-cn / geoip-cn remote rule-sets (jsDelivr)
19+
- `AndroidTunLifecycle` state machine documentation for TUN fd lifecycle
20+
- GitHub/raw subscription mirror auto-retry + `docs/tips/subscription-mirrors.md`
21+
- Path truth line while Connected; scorecard template copy (Settings)
22+
- fa/zh Private DNS + battery tips
23+
24+
### Changed
25+
26+
- Android speedtest uses the same sing-box path as live Connect (D13)
27+
- Connect gate requires TUN app-path probe when TUN is active (no false-green)
28+
- Import hard-refuse messaging for SIP003 plugins and unsupported schemes
29+
- CI builds patched Android sing-box (no `-AllowUnpatchedSingBox`); release Go/NDK gated to Android (D18/D19)
30+
- Shrink messaging exact-host glue; keep FCM + Meta MQTT intentional lists
31+
- Battery exemption re-prompts after revoke (D14)
32+
- Desktop TUN requirement message honest on macOS/Linux
33+
- App Network hint explains GMS/GSF Direct as proven breaker, not generic glue
34+
- Remove GitHub Sponsors badge and FUNDING.yml until Sponsors is configured
35+
1036
## [2.6.2.13] - 2026-09-09
1137

1238
### Fixed

‎CONTRIBUTING.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
Thank you for your interest in improving v2rayF!
44

5+
## Maintainer release gate
6+
7+
**Do not push to GitHub or cut a public release** unless the project maintainer explicitly asks for a push/release. Local builds and private APK sideloads are fine. Product direction lives in [`docs/PLAN.md`](docs/PLAN.md).
8+
59
## How to contribute
610

711
1. **Fork** the repository on GitHub

‎README.md‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ HTTP/2 302 → grab a zip. no brew. no store tax. MIT.
2727
<a href="https://github.com/drmikecrypto/v2rayF/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/drmikecrypto/v2rayF/ci.yml?branch=main&style=for-the-badge&label=ci&color=222222&labelColor=111111" alt="ci"></a>
2828
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-222222?style=for-the-badge&labelColor=111111" alt="license"></a>
2929
<a href="https://github.com/drmikecrypto/v2rayF/stargazers"><img src="https://img.shields.io/github/stars/drmikecrypto/v2rayF?style=for-the-badge&color=222222&labelColor=111111" alt="stars"></a>
30-
<a href="https://github.com/sponsors/drmikecrypto"><img src="https://img.shields.io/badge/sponsor-♥_keep_it_free-ea4aaa?style=for-the-badge&labelColor=111111" alt="sponsor"></a>
3130
</p>
3231

3332
---
@@ -202,7 +201,6 @@ One Avalonia tree across desktop+Android, explicit Sentinel leak profile, Secure
202201
## contribute / legal
203202

204203
- [CONTRIBUTING](CONTRIBUTING.md) · [bug](https://github.com/drmikecrypto/v2rayF/issues/new?template=bug_report.md) · [feature](https://github.com/drmikecrypto/v2rayF/issues/new?template=feature_request.md) · [SECURITY](SECURITY.md)
205-
- [Sponsor](https://github.com/sponsors/drmikecrypto) — keep v2rayF open source and free
206204
- MIT · ships [Xray-core](https://github.com/XTLS/Xray-core) + [sing-box](https://github.com/SagerNet/sing-box) in release artifacts (not in git)
207205
- UI: [Avalonia](https://avaloniaui.net/)
208206

‎docs/PLAN.md‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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

‎docs/backlog-2.6.2.14.md‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# Backlog — v2.6.2.14 hygiene (deferred from defect audit)
22

3-
Tracked from the 2.6.2.12 audit; **not** in 2.6.2.13.
3+
Tracked from the 2.6.2.12 audit. Items marked **done** landed with the trusted-tunnel PLAN work.
44

5-
| ID | Finding | Fix |
6-
|----|---------|-----|
7-
| D12 | Connected ignores TUN and SetHttpProxy OEM failure | StatusText weak proxy/TUN; re-show HTTP proxy warning |
8-
| D13 | Android speedtest = Xray; live = sing-box | Speedtest use PreferSingBox path on Android |
9-
| D14 | Battery exemption never re-prompts after revoke | Clear prompt flag when OS still optimizing |
10-
| D15 | StatusSanitizer misses hy2/tuic/anytls/wg and logcat dumps | Extend schemes + scrub |
11-
| D16 | tip/desktop docs TunOnlyFailThreshold 2 vs code 6 | Living tips → 6 |
12-
| D17 | `Defaults_SurviveAndDoH_Off` misnamed | Rename |
13-
| D18 | CI `-AllowUnpatchedSingBox` | Build patched lib or fail if stock |
14-
| D19 | Release workflow installs Go/NDK on all RIDs | Gate `if: matrix.android` |
15-
| D20 | `SECURITY.md` still 1.4.x | Support 2.6.x; Sponsors/advisories contact |
16-
| D21 | `llms.txt` 1.4 / ProcessBuilder stale | Align DualCore 2.6.x |
17-
| D22 | Version scattered in 4 csproj | Optional Directory.Build.props + CI assert |
18-
| D23 | Local `dist/` / `.tools/` junk | `scripts/clean-artifacts.ps1` only |
5+
| ID | Finding | Fix | Status |
6+
|----|---------|-----|--------|
7+
| D12 | Connected ignores TUN and SetHttpProxy OEM failure | StatusText weak proxy/TUN; re-show HTTP proxy warning | open |
8+
| D13 | Android speedtest = Xray; live = sing-box | Speedtest use PreferSingBox path on Android | **done** |
9+
| D14 | Battery exemption never re-prompts after revoke | Clear prompt flag when OS still optimizing | **done** |
10+
| D15 | StatusSanitizer misses hy2/tuic/anytls/wg and logcat dumps | Extend schemes + scrub | open |
11+
| D16 | tip/desktop docs TunOnlyFailThreshold 2 vs code 6 | Living tips → 6 | open |
12+
| D17 | `Defaults_SurviveAndDoH_Off` misnamed | Rename | open |
13+
| D18 | CI `-AllowUnpatchedSingBox` | Build patched lib or fail if stock | **done** |
14+
| D19 | Release workflow installs Go/NDK on all RIDs | Gate `if: matrix.android` | **done** |
15+
| D20 | `SECURITY.md` still 1.4.x | Support 2.6.x; Sponsors/advisories contact | open |
16+
| D21 | `llms.txt` 1.4 / ProcessBuilder stale | Align DualCore 2.6.x | open |
17+
| D22 | Version scattered in 4 csproj | Optional Directory.Build.props + CI assert | open |
18+
| D23 | Local `dist/` / `.tools/` junk | `scripts/clean-artifacts.ps1` only | open |

‎docs/releases/v2.6.2.14.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# v2.6.2.14
2+
3+
Trusted-tunnel reliability release — Android full-tunnel honesty, CN/IR presets, no false-green Connect.
4+
5+
### Added
6+
7+
- `docs/PLAN.md` — product north star (Android-first trusted tunnel)
8+
- Iran / China / Sentinel one-tap network profiles
9+
- Path truth line while Connected; scorecard template copy
10+
- Private DNS conflict warning (Android); fa/zh Private DNS + battery tips
11+
- Subscription GitHub/raw mirror auto-retry for CN/IR
12+
- sing-box Bypass China via geosite-cn / geoip-cn (jsDelivr)
13+
14+
### Changed
15+
16+
- Android speedtest uses the same sing-box path as live Connect (D13)
17+
- Connect requires SOCKS + TUN app-path (no false-green)
18+
- CI requires patched Android sing-box (D18); release Go/NDK only on Android (D19)
19+
- Battery exemption re-prompts after revoke (D14)
20+
- Desktop TUN/kill-switch honesty on macOS/Linux
21+
- Hard refuse for SIP003 plugins / unsupported schemes
22+
- Remove unused GitHub Sponsors badge (no Sponsors account yet)
23+
24+
### Install
25+
26+
Sideload the platform zip from this release. Android: prefer in-app Update, or uninstall→install if signature changed.

‎docs/roadmap-engine-first.md‎

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
# Engine-first roadmap (Beat V2Box)
1+
# Engine-first roadmap
22

3-
Shipped through **v2.2.2**:
3+
**Canonical plan:** [`PLAN.md`](PLAN.md) — trusted tunnel, Android-first for CN/IR, no GitHub push until maintainer approval.
44

5-
- Phase A: default DoH for Connect + DoH retry — **kept**. Speedtest DNS stays UDP (v2.2.1; DoH-in-speedtest caused universal timeouts).
6-
- Phase B: Android classic on sing-box TUN (`stack: system`) — **re-enabled in v2.2.2** for Instagram Direct / raw-socket apps; keeps v2.2.1 speedtest safeguards. Desktop classic stays Xray. Hy2/TUIC/WG remain on sing-box.
5+
Shipped through v2.2.2 (kept):
76

8-
## Phase C (not in this release)
7+
- Phase A: default DoH for Connect + DoH retry. Speedtest DNS stays UDP.
8+
- Phase B: Android classic on sing-box TUN; desktop classic on Xray; Hy2/TUIC/WG on sing-box.
99

10-
Track separately once head-to-head Mbps vs V2Box on the same subscription links is competitive:
11-
12-
1. Visual / UX system (brand, motion, hierarchy — not default Avalonia panels)
13-
2. Multi-path / bonding aggregation (SpeedyFi-like) only after single-link engine wins
14-
3. Onboarding + diagnostics that show path RTT vs Mbps honestly
15-
16-
Do not start Phase C as a substitute for engine parity.
10+
Former “Phase C” (UX / multipath / diagnostics) stays deferred until single-link engine + golden app matrix meet [`PLAN.md`](PLAN.md) exit gates.

0 commit comments

Comments
 (0)