v1.3.10
This release comes from a project-wide deep review (architecture / database / performance / frontend / UX) and fixes the high-risk findings. Full report: docs/dev/deep-review-2026-07.md.
Fixed
- RuleSet/IPCIDR nodes in the chain-flow entry column (v1.3.9 regression) — mihomo traffic keys on the top-level policy group again; a one-time startup migration remaps and merges the polluted rows written since v1.3.9
- 30-day ranges effectively contained only 7 days of dimension data — hourly dim tables now follow the hourly retention window instead of the minute-level cutoff
- Silent missing data when ClickHouse writes are on but reads stay on SQLite — write reduction now requires reads to prefer ClickHouse, with a startup warning for the misconfiguration
- CSV association columns dropped values on substring collisions (
a.comvsaa.com) — delimiter-aware dedup everywhere - Batch writes double-counted on retry — the flush is now one atomic transaction
- Cross-backend data bleed while switching backends — WS pushes carry
backendId; the client drops mismatched in-flight pushes - Error surfaces — route/global error boundaries; chain-flow failures show a retry card instead of vanishing
- Dark mode — theme-aware world map, upload-arrow color fix, missing dark variants on health button/badge
Changed
- Chain-flow realtime merge O(R×N) → O(R+N), top-N row cap (
RULE_CHAIN_FLOW_MAX_ROWS) - Concurrent WS broadcast payload fetch + outbound backpressure (
WS_MAX_BUFFERED_BYTES) - Dropped four never-used expression indexes (write amplification on the hottest tables)
- Collapsed the drifted single-update write path into the batch implementation
Upgrade notes: no manual steps — the rule-name cleanup and index drops run automatically at startup. See CHANGELOG.md / CHANGELOG.en.md for details.