Skip to content

Commit 1b27fe0

Browse files
committed
release: v1.4.3
New: set-aware routing rule export/import. Export picks scopes (Global + each set), merged or per-scope, in a native envelope that preserves every rule field. Import previews additions vs duplicates/unusable, surfaces action conflicts (same match, different action) for per-rule resolution, and commits into Global, an existing set, or a new one. Rules referencing a missing node/balancer or geo tag are dropped so the result stays valid. Changed: deleting a routing set now defaults to deleting its rules (with "Move to Global" as the secondary option); devices always fall back to Global. The legacy V2Ray export/import UI is removed (endpoint kept). Fixed: DoH resolver now uses RFC 8484 wire format (application/dns-message) instead of the JSON API, which AdGuard's /dns-query rejected with HTTP 400. Also folds in the post-1.4.2 dependency bumps (aiohttp 3.14.0, asyncssh 2.23.0 closing 3 advisories, uvicorn, pydantic-settings, pytest-asyncio, CI actions). No schema migration, no breaking changes. Backend suite 745 passing; frontend type-checks and builds clean.
1 parent bc6000d commit 1b27fe0

3 files changed

Lines changed: 58 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,62 @@ All notable user-facing changes to PiTun. Full per-release detail lives in the
44
[GitHub Releases](https://github.com/DaveBugg/PiTun/releases); this file is the
55
committed summary.
66

7+
## v1.4.3 — 2026-06-15
8+
9+
Set-aware routing rule **export/import** (pick scopes, resolve conflicts, import
10+
into Global / an existing / a new set), a **DNS-over-HTTPS resolver fix**, and a
11+
clearer **set-deletion** flow. Plus the post-1.4.2 dependency security bumps.
12+
13+
### Added
14+
15+
- **Set-aware export/import (Routing).** Export picks scopes — Global and/or each
16+
routing set — and downloads them merged into one file or as separate per-scope
17+
files, in a native PiTun envelope (`format: "pitun-routing"`) that preserves
18+
every rule field including `mac`/`geosite` and `node:`/`balancer:` actions.
19+
Import reads that envelope (or a legacy V2Ray JSON array — auto-detected),
20+
previews what would be added vs. skipped (identical / in-file duplicates /
21+
unusable), and surfaces **action conflicts** (same match, different action) for
22+
per-rule resolution before committing into Global, an existing set, or a new
23+
one. Rules referencing a node/balancer or geo tag absent on this box are
24+
dropped (and counted) so the result stays valid for xray.
25+
- **`cascade=delete` on set deletion.** `DELETE /api/routing-sets/{id}` can now
26+
drop a set's rules instead of moving them to Global.
27+
28+
### Changed
29+
30+
- **Deleting a routing set now defaults to deleting its rules.** The delete
31+
dialog leads with "Delete set + rules"; "Move to Global" is the secondary
32+
option. Assigned devices always fall back to Global (a physical device row is
33+
never deleted). Previously a delete silently moved every rule to Global.
34+
- The legacy client-side V2Ray export and the standalone V2Ray import dialog are
35+
removed from the UI; the `import-v2ray` endpoint stays for API compatibility.
36+
37+
### Fixed
38+
39+
- **DoH resolver uses RFC 8484 wire format.** `_resolve_doh` issued the
40+
Google/Cloudflare JSON query (`?name=&type=A`, `application/dns-json`), which
41+
AdGuard's `/dns-query` rejects with HTTP 400 — breaking the Route Explainer's
42+
resolution and reachability for any AdGuard-over-DoH rule. It now POSTs
43+
`application/dns-message` and parses the wire response (DNS query builder
44+
shared with the UDP path).
45+
46+
### Security / dependencies
47+
48+
- `aiohttp` 3.13.5 → 3.14.0 and `asyncssh` 2.22.0 → 2.23.0 — closes 3 Dependabot
49+
advisories (none reachable in PiTun's usage, but bumped for hygiene).
50+
- `uvicorn` 0.46.0 → 0.48.0, `pydantic-settings` 2.14.0 → 2.14.1,
51+
`pytest-asyncio` 1.3.0 → 1.4.0 (dev).
52+
- CI: `actions/checkout` 6.0.2 → 6.0.3, `docker/setup-buildx-action` 4.0.0 → 4.1.0.
53+
- 3 CodeQL `routing_sets.py` alerts dismissed as false positives (int-typed log
54+
args; an intentional bind-and-close port probe).
55+
56+
### Notes
57+
58+
- No breaking changes, no schema migration (alembic head stays at `017`).
59+
- Backend suite 745 passing. Frontend type-checks and builds clean.
60+
61+
**Full Changelog:** https://github.com/DaveBugg/PiTun/compare/v1.4.2...v1.4.3
62+
763
## v1.4.2 — 2026-06-12
864

965
Adds the **Route Explainer** — a two-layer diagnostic that shows exactly where

backend/app/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# OpenAPI metadata, `/health` response, and `/system/status` so the
66
# frontend can display it next to the xray version. Bump this on each
77
# release — frontend keeps its own version in `frontend/package.json`.
8-
APP_VERSION = "1.4.2"
8+
APP_VERSION = "1.4.3"
99

1010

1111
class Settings(BaseSettings):

frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pitun-frontend",
33
"private": true,
4-
"version": "1.4.2",
4+
"version": "1.4.3",
55
"license": "BSD-3-Clause",
66
"type": "module",
77
"scripts": {

0 commit comments

Comments
 (0)