diff --git a/.github/scripts/telegram_release_notify.py b/.github/scripts/telegram_release_notify.py
index 1fd15a3..10c2a85 100755
--- a/.github/scripts/telegram_release_notify.py
+++ b/.github/scripts/telegram_release_notify.py
@@ -179,10 +179,21 @@ def main() -> int:
ver = args.version
sha = sha256_of(args.apk)
+ # Caption structure requested by the repo owner:
+ # 1. Title + SHA-256 (as before)
+ # 2. Persian preamble labelling the repo link as
+ # "GitHub repo + full Persian guide"
+ # 3. Repo URL
+ # 4. Persian preamble labelling the release link as
+ # "this version's release — desktop/router builds live here"
+ # 5. Release URL
+ # Keeps total well under Telegram's 1024-char caption limit.
caption = (
f"mhrv-rs Android v{ver}\n\n"
- f"SHA-256: {sha}\n"
- f"https://github.com/{args.repo}\n"
+ f"SHA-256: {sha}\n\n"
+ f"مخزن گیتهاب + مطالعه راهنمای کامل فارسی:\n"
+ f"https://github.com/{args.repo}\n\n"
+ f"لینک به این نسخه جهت دریافت نسخه های مربوط به مودم و کامپیوتر:\n"
f"https://github.com/{args.repo}/releases/tag/v{ver}"
)
diff --git a/Cargo.lock b/Cargo.lock
index fb4d180..5966337 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2186,7 +2186,7 @@ dependencies = [
[[package]]
name = "mhrv-rs"
-version = "1.2.14"
+version = "1.3.0"
dependencies = [
"base64 0.22.1",
"bytes",
diff --git a/Cargo.toml b/Cargo.toml
index 0461e0f..33396f2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mhrv-rs"
-version = "1.2.14"
+version = "1.3.0"
edition = "2021"
description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting"
license = "MIT"
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index ab607c5..ca728e8 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -14,8 +14,8 @@ android {
applicationId = "com.therealaleph.mhrv"
minSdk = 24 // Android 7.0 — covers 99%+ of live devices.
targetSdk = 34
- versionCode = 134
- versionName = "1.2.14"
+ versionCode = 135
+ versionName = "1.3.0"
// Ship all four mainstream Android ABIs:
// - arm64-v8a — 95%+ of real-world Android phones since 2019
diff --git a/docs/changelog/v1.3.0.md b/docs/changelog/v1.3.0.md
new file mode 100644
index 0000000..f354c50
--- /dev/null
+++ b/docs/changelog/v1.3.0.md
@@ -0,0 +1,12 @@
+
+• همزمانی ۳۰ درخواست به ازای هر Deployment در حالت `full` ([#142](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/142)): پیشتر سقف pipeline کل = تعداد Deploymentها بود (مثلاً ۳ دیپلوی = ۳ درخواست همزمان). حالا هر Deployment حوضچهٔ همزمانی مخصوص خودش با ۳۰ مجوز داره، مطابق سقف اجرای همزمان Apps Script به ازای هر **حساب**. **توجه مهم:** این ۳۰×N فقط وقتی به طور کامل تحقق پیدا میکنه که هر Deployment روی یک حساب گوگل جداگانه باشه. چند Deployment روی یک حساب همچنان در همون سقف ۳۰ هر حساب سهیماند — اگه بیشتر بفرستید، گوگل `Too many simultaneous invocations` برمیگردونه. مستندات EN + FA برای این موضوع بهروز شدن
+• رفع باگ App Splitting حالت ONLY در اندروید ([#143](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/143)): کد قبلی هم `addAllowedApplication` و هم `addDisallowedApplication` رو روی یک Builder صدا میزد، که طبق مستندات اندروید mutually exclusive هستن — نتیجه: `establish()` در سکوت fail میشد و حالت ONLY عملاً کار نمیکرد. حالا self-exclude داخل شاخهٔ `when` منتقل شده و فقط در حالات ALL و EXCEPT اعمال میشه
+• انتشار APKهای جداگانه per-ABI برای اندروید ([#136](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/136)): علاوه بر APK universal ~۵۳ مگابایتی، حالا چهار APK جداگانه هم منتشر میشن: `arm64-v8a` (~۲۱ مگ، اکثر گوشیهای مدرن)، `armeabi-v7a` (~۱۸ مگ، گوشیهای قدیمیتر)، `x86_64` و `x86` (~۲۲ مگ هر کدام). برای کاربران در شبکههای محدود که دانلود ۵۰ مگابایتی قابل اتکا نیست، APK ~۲۱ مگابایتی `arm64-v8a` احتمال موفقیت بسیار بیشتری داره. نام universal عوض نشده، لینکهای قدیمی کار میکنن
+• شفافسازی مدل تهدید `IP` در بخش امنیت README ([#148](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/148)): حذف هدرهای forwarded در نسخهٔ ۱.۲.۹ فقط پایهٔ اول (کلاینت → Apps Script) رو پوشش میده. هدرهایی که زیرساخت داخلی گوگل ممکنه روی فراخوانی بعدی `UrlFetchApp.fetch()` اضافه کنه خارج از کنترل این کلاینت هستن. برای مدلهای تهدیدی که لازمه سرور مقصد تحت هیچ شرایطی IP واقعی کاربر رو نبینه، توصیه میشه از حالت Full Tunnel استفاده بشه که از VPS شخصی خارج میشه
+• قالببندی Telegram release post: متن فارسی توضیحی بالای هر لینک (مخزن گیتهاب + راهنمای کامل، لینک نسخه) اضافه شد تا کاربران فارسیزبان بلافاصله بفهمن هر لینک چیه
+---
+• Per-deployment concurrency in `full` mode ([#142](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/142)): previously the pipeline depth was capped at `number_of_deployments` total (e.g. 3 deployments = 3 in-flight batches). Now each deployment ID gets its own concurrency pool of 30 permits, matching the per-Apps-Script-account simultaneous-executions limit. **Important caveat:** the 30×N math only holds if each deployment lives in a separate Google account. Multiple deployments under one account still share that single account's 30-slot bucket; exceeding it returns `Too many simultaneous invocations`. Both EN and FA README sections updated to reflect this
+• Android app-splitting ONLY mode bug fix ([#143](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/143)): the previous code called `addAllowedApplication` and `addDisallowedApplication` on the same `VpnService.Builder` — Android documents these as mutually exclusive, and the result was that `establish()` silently failed in ONLY mode (manifested as "ONLY mode doesn't work, everything still tunnels / nothing tunnels"). The self-exclude is now inside the `when` branch and only fires in ALL / EXCEPT modes
+• Per-ABI Android APKs in addition to the universal ([#136](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/136)): releases now ship four split APKs alongside the ~53 MB universal: `arm64-v8a` (~21 MB, covers 95%+ of modern devices), `armeabi-v7a` (~18 MB, older 32-bit ARM), `x86_64` (~23 MB, emulators / Chromebooks), and `x86` (~22 MB, legacy emulators). Users on unreliable censorship-tunnel paths — where a 50 MB download often fails — now have a 21 MB `arm64-v8a` option that's much more likely to succeed. The universal APK keeps its existing filename so existing download links, Telegram mirrors, and in-app update prompts keep working
+• Honest IP-exposure note added to the Security Posture section ([#148](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/148)): the v1.2.9 forwarded-header stripping only covers the first leg (client → Apps Script). Whatever Google's infrastructure may add on the subsequent `UrlFetchApp.fetch()` to the destination is outside this client's control. For threat models where the destination must not learn the user's IP under any circumstances, the recommendation is Full Tunnel mode (traffic exits via the user's own VPS end-to-end)
+• Telegram release-post format: added Persian preambles above the GitHub repo link ("GitHub repo + full Persian guide") and the release link ("this version's release, with desktop/router builds"), so Persian-speaking channel readers see the intent of each link at a glance