- 0: sing-box gen overrides fragment listen/port from the inbound row (empty listen -> "::"), Update/Add recompute the stored fragment; non-loopback E2E against the real core binary. - 1: agent fetches the sing-box core from the Gitea release when missing, self-checks it, and only then latches the switch. - 2: node list shows the sing-box core version (heartbeat field, persisted on the node row), xray version as fallback. - 3: public-page fallback returns 404 to anonymous visitors when the page is disabled. - 4: settings restart hint bar removed, dead i18n keys cleaned. - 5: two PUT calls missing JSON headers fixed (audit: only those two), batch probe-task creation endpoint + UI. - 6: cf-probe retirement card and coverage pipeline removed. - 7: generated vless links no longer carry spx (panel export + sub); parser still accepts spx; golden fixtures updated. - probe batch: dedicated probe settings tab (public-page settings, tasks, per-node meta), retention_days editable, per-node traffic calibration + stat-interface pinning, runtime metrics split into a lightweight fast report (default 3s, 1-60s adjustable). - 8: sing-box core processes start with GOMEMLIMIT=32MiB, GOGC=50. - 9: dead /getTwoFactorEnable docs entries removed (frontend call and contract entry already gone at base; verified by grep).
ITEM6 golden fixtures (B0)
Per-protocol × representative-transport fixtures for the xray→sing-box
migration. Consumed by B1 (data model + migrator) and B2 (config builder)
as the acceptance baseline; see ITEM6-CONVERSION-SPEC.md in
~/workspace/xui-lite-work/ for the normative mapping behind every file.
Layout
testdata/golden/<case>/
input.json current-shape sample (see below)
expected-singbox.json expected converter output fragment
expected-link.txt expected share link for the primary client
input.json fields: case, title, source (where the shape was taken
from — frontend defaults / backend tests / production backup traits),
disposition, risk (ITEM6-SCOPE N-number or null), notes, inbound
(a model.Inbound row shape: settings / streamSettings / sniffing
as embedded objects), clientEmail, client (the primary client's
settings-mirror entry — the same object embedded in settings.clients
where the protocol carries one).
expected-singbox.json is a fragment: inbounds[] (and endpoints[]
for WireGuard). Keys starting with _ are fixture metadata (_b0:
disposition, unmapped concepts awaiting Q1, notes) and are stripped
before comparison. Blocked cases intentionally contain no fabricated
output — inbounds is empty and _b0.unmapped records exactly what has
no sing-box carrier, pending the user's Q1 decision.
Provenance of the link baselines
expected-link.txt files were generated on 2026-10-23 by running the
current code (main 8e89960) SubService.GetLink over each
input.json inbound — i.e. they are the pre-migration outputs the
migration must reproduce byte for byte (ITEM6-SCOPE §2.4). A throwaway
harness test produced them and was deleted afterwards; regenerate only
by re-running GetLink against the same inputs on pre-migration code.
Empty files are real current behaviour for http-auth, tun and
tunnel-dokodemo (no share link exists today).
All credentials in this corpus are fake (sequential-byte X25519/WireGuard
keys, fx- passwords, TEST-NET 203.0.113.10). In fixtures, listen
doubles as the resolved share address, mirroring the characterization
tests in internal/sub; bind-address defaults are B2 base-config
business, not fixture content.
Baseline scope: links only
Per the 2026-10-23 product decision, the JSON and Clash subscription families are being deleted wholesale (separate work line); subscriptions converge on the link format only. No Clash/JSON baselines are built or kept here, and ITEM6-SCOPE Q2 is closed by that decision.
Dispositions
direct— full mapping defined; B2 must reproduce the fragment.partial-pending-q1— mappable body is in the fragment;_b0.unmappedlists concepts with no sing-box carrier, awaiting Q1.blocked-pending-q1— no valid output exists until Q1 picks a carrier; fragment is an explicit marker, not a silent drop.external-runtime— protocol never enters the core (mtproto, amneziawg); the migration duty is verbatim data passthrough only.