Enhancements
apiv2 node fanout #99, reported in #94
POST apiv2/savehonours asyncvalue: push to nodes now, or let the hourly reconcile converge- Malformed
syncvalues are rejected instead of silently skipping the fanout - Client drawer: links no longer truncated, node links render read-only, copy-all button for bulk import
Bug Fixes
Cluster sync #99
- Every
@clusterclient was re-pushed on every reconcile round - Node pushes wiped the node's traffic history
editbulksilently switched off periodic auto-reset- A stale tab stripped every cluster route from a client's subscription
- Traffic reset left paid-up users rejected for up to an hour
- Per-client auto-reset re-enable never reached the nodes
- The
[node]link marker had four encodings; now one ConfigService.Saveran commit, notify and core start after a failed request- Duplicate client names are rejected — apiv2 bypassed the SPA's only check
- Transactions take the write lock at BEGIN, ending
SQLITE_BUSYon read-modify-write normalizeHostalso sanitises the configured web domain- The enable/disable toggle no longer rolls back counters the stats job recorded
Subscriptions #95, reported in #89
- A client on an adopted node inbound got that route twice; sing-box and mihomo reject the whole config on a duplicate tag
- Adoption clears
tls_id, so that second copy also lostflowand could not connect over reality + xtls-rprx-vision - Tag uniqueness now settles across every source, not just within the links
Ported from s-ui v1.5.5 #100
- naive links follow the inbound's network:
naive+https/naive+quicnext to the legacyhttp2:// - ShadowTLS seeds
handshake.server_port443 — without it the inbound failed to start - Hand-written rule-sets survive a chip edit
- Site-Private and IP-Private chips carried each other's value
Found while reviewing that port #100
create*handed every new entity the same nested objects: a ShadowTLS handshake port leaked into the next inbound, plus 14 other sites- Edits to built-in rule-sets are no longer reset by a chip click
- A non-array
rule_setfrom the JSON editor crashed the chip setters - The naive links per address are named
-h2/-h3instead of all alike
Chores
- Dependency bumps:
sing-box1.13.18, frontend group #98, gomod group #97 - CI runs
go testin the backend job #96 - Test scaffolding for the service and api packages, with an in-memory SQLite fixture #99
Full Changelog: v1.6.3...v1.6.4