Skip to content

feat: upstream catch-up to sing-box 1.14.0-alpha.40 (snell, bridge, api, usbip) + binary pins 1.13.14/α40#345

Merged
JegoVPN merged 5 commits into
mainfrom
feat/upstream-catchup-1.14a40
Jul 8, 2026
Merged

feat: upstream catch-up to sing-box 1.14.0-alpha.40 (snell, bridge, api, usbip) + binary pins 1.13.14/α40#345
JegoVPN merged 5 commits into
mainfrom
feat/upstream-catchup-1.14a40

Conversation

@JegoVPN

@JegoVPN JegoVPN commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

Catches the editor up from the 1.14.0-alpha.29 baseline to upstream 1.14.0-alpha.40, on all three tracks:

Docs + generated data

  • Docs mirror topped up to alpha.40 (the daily-sync PR chore(docs): sync sing-box upstream docs #344 predated the alpha.40 release by ~8h; this branch adds the bridge outbound docs + pre-match L3 update)
  • knownFields.generated.ts regenerated (six new testing types enter the unknown-field linter's doc-derived sets)

Binary pins (all three sites + stale-guard)

  • stable 1.13.12 → 1.13.14, testing 1.14.0-alpha.29 → 1.14.0-alpha.40 (1.12.25 still newest 1.12.x) in the root installer, container installer, and Dockerfile ARGs, with sha256 from the GitHub release digests; CACHE_BUST bumped to force the Cloudflare image rebuild
  • the root installer now stamps .version and reinstalls on mismatch — previously a pin bump silently kept stale local binaries under test:binaries

Modeling (alpha.30..40 schema deltas, complete per docs-tree diff)

  • snell inbound/outbound (alpha.38): version-asymmetric enums (inbound 5|6, outbound 4|6 — v5 wire ≡ v4), psk/userkey/reuse/obfs/mode controls, multi-user editor, v6 psk 12–255-byte gate
  • bridge outbound (alpha.40): L3 egress controls, no dial fields by design, privileged platform badge
  • api service (alpha.30/32): secret/CORS/private-network + dashboard editor (bool/string shorthand normalized to object form)
  • usbip-server / usbip-client services (alpha.32): provider enum, shared device-match editor, effective-match requirement
  • rule-set http_client fallback wording (alpha.40): rule-set-implicit-http-client-deprecated is now also suppressed by a non-empty http_clients[]; the api dashboard gets the mirrored warning
  • pre-match route/sniff L3 semantics: docs-only for the app (no config-field surface); tailscale/tls/rule_action deltas were formatting-only

Cross-cutting

  • inbound/outbound/service TYPE version gates are generic over TYPE_MIN_VERSION (historical ids outbound-naive-version / service-ccm-ocm-version preserved)
  • store creation gates read SchemaRow.channel via isTestingOnlyType() — no more hardcoded type literals; new outbound gate added (first testing-only outbounds)

Verification

  • every behavioral diagnostic claim binary-verified on the real 1.14.0-alpha.40 (and 1.13.14 rejection side): snell required/psk-length FATALs, usbip empty-match FATALs, api dashboard shorthands
  • new fixture fixtures/testing/upstream-114-catchup.json covers all six types, check-clean on alpha.40, decode-rejected by 1.13.14
  • tsc clean · unit 1799/1799 · validate:fixtures 19 official checks · test:binaries 20/20 with the NEW pins · external render gate 220 fixtures · targeted e2e (editor/inspector/diagnostics) 11/11 · production build OK
  • senior review gate: one pass, REQUEST-CHANGES → all findings fixed in c3c37b0 (usbip effective-match, outbound-snell message overclaim, empty-string http_client suppression); the snell empty-userkey nit follows the existing product stance (ss2022 parity) and is left as a follow-up

🤖 Generated with Claude Code

JegoVPN and others added 5 commits July 8, 2026 12:30
The daily sync PR (#344) predated the alpha.40 release by ~8h; force re-sync
brings in the bridge outbound docs and the pre-match L3-forwarding update.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds the six new testing-channel types (snell in/out, bridge outbound, api +
usbip-server + usbip-client services) to the doc-derived field sets.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
All three pin sites move together (root installer + container installer +
Dockerfile ARGs) with fresh sha256 sums from the GitHub release digests, and
CACHE_BUST forces the Cloudflare image rebuild. 1.12.25 is still the newest
1.12.x. The root installer now stamps .version and reinstalls on mismatch —
a bare existence check silently kept stale binaries after a pin bump, so
test:binaries could validate against the wrong sing-box.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Six new testing-only types, full palette->inspector->diagnostics surface:
- snell inbound/outbound (alpha.38): version-asymmetric enums (in 5|6, out
  4|6), psk/userkey/reuse/obfs controls, multi-user editor, and a binary-
  verified v6 psk 12-255-byte gate (check-time FATAL on alpha.40)
- bridge outbound (alpha.40): L3 egress controls, no dial fields by design,
  privileged platform badge
- api service (alpha.30/32): secret/CORS/private-network controls + dashboard
  editor (bool/string shorthand normalized to the object form)
- usbip-server/usbip-client services (alpha.32): provider enum + shared
  device-match editor; devices-required-with-default-provider is an error
  (binary-verified check-time FATAL)

Cross-cutting:
- inbound/outbound/service version gates are now generic over the
  TYPE_MIN_VERSION table (historical ids preserved: outbound-naive-version,
  service-ccm-ocm-version); store creation gates read SchemaRow.channel via
  isTestingOnlyType() instead of hardcoded type names
- rule-set-implicit-http-client-deprecated is now also suppressed by a
  non-empty http_clients[] (alpha.40 docs pin the fallback order as
  default_http_client, else the FIRST http_clients entry), and the api
  dashboard gets the mirrored api-dashboard-implicit-http-client-deprecated
- fixtures/testing/upstream-114-catchup.json: all six types check-clean on
  the real alpha.40 binary (stable 1.13.14 rejects the same file)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…h-up

- usbip-server devices gate now requires an EFFECTIVE match: empty strings and
  zero-valued ids count as unset, matching the binary's per-entry rejection
  ("at least one of busid/vendor_id/product_id/serial is required") — the
  previous length-only check passed the exact state the inspector's Add button
  creates
- outbound snell v6 psk message no longer claims a startup refusal: only the
  inbound arm is check-FATAL; the outbound passes check and fails later as
  "cipher: message authentication failed" (still an error — it can never
  authenticate)
- an empty http_client string no longer suppresses the implicit-HTTP-client
  deprecations (rule-set + api dashboard): the docs pin "When empty, the
  default HTTP client is used", so "" falls back exactly like absent

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
sbcv c3c37b0 Jul 08 2026, 05:21 AM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
sbc-validator-gw c3c37b0 Jul 08 2026, 05:21 AM

@JegoVPN JegoVPN merged commit d09ae55 into main Jul 8, 2026
3 of 4 checks passed
@JegoVPN JegoVPN deleted the feat/upstream-catchup-1.14a40 branch July 8, 2026 05:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant