Skip to content

Commit 7553492

Browse files
committed
release: 1.3.7 — clipboard fix, diagnostic dual-probe, HWID rotation
Quality-of-life follow-up to v1.3.6. Headline is a clipboard helper that makes every 'Copy' button in the UI actually work on plain-HTTP LAN origins — they used to silently fail because navigator.clipboard is gated behind window.isSecureContext. Highlights: - New lib/clipboard.ts with execCommand fallback for insecure HTTP - Internet check split into 'direct' (SO_MARK=0xff bypass) + 'via VPN' - Per-subscription rotate_hwid toggle for panels throttling stable HWIDs - RoutingRule.action remap on legacy-dup collapse (missed in 1.3.6) - CodeQL hardening: literal-allowlist subprocess + log replace sanitiser - Frontend bundle split: index chunk 354 KB → 161 KB gzipped 8 commits since v1.3.7-rc. 13 new tests; backend full suite + frontend 25/25 green. One Alembic migration (016, backward-compatible default). Safe to upgrade from any 1.3.x. Migration applied automatically by install.sh; hot-update requires 'alembic upgrade head' before restart.
1 parent 397e5f0 commit 7553492

4 files changed

Lines changed: 10 additions & 4 deletions

File tree

backend/alembic/versions/016_add_subscription_rotate_hwid.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ def upgrade() -> None:
3434
server_default=sa.false(),
3535
)
3636
)
37+
# SQLite's batch_alter_table sometimes leaves the column NULL for
38+
# pre-existing rows even with `server_default=false`. Belt-and-
39+
# braces backfill keeps the column consistent (model treats NULL
40+
# as False at the Python level anyway, but cleaner DB state means
41+
# the UI never sees an indeterminate checkbox).
42+
op.execute("UPDATE subscription SET rotate_hwid = 0 WHERE rotate_hwid IS NULL")
3743

3844

3945
def downgrade() -> None:

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.3.6"
8+
APP_VERSION = "1.3.7"
99

1010

1111
class Settings(BaseSettings):

frontend/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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.3.6",
4+
"version": "1.3.7",
55
"license": "BSD-3-Clause",
66
"type": "module",
77
"scripts": {

0 commit comments

Comments
 (0)