test(fixtures): pk-box config corpus + the three diagnostic gaps it exposed#347
Merged
Conversation
Adding one upstream no longer forces a full ~70-repo corpus rebuild: --append keeps every other repo's fixtures/manifest/rejected entries verbatim and re-ingests only the named --repo(s). Sources may carry maxFixtures to override the per-repo cap (legit large curated collections). Raw fetches move to the authenticated contents API — ~50 anonymous raw.githubusercontent fetches tripped 429s. Total cap 240->320 so a full refresh cannot silently truncate the committed corpus. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…14a31) Curated per-release template collection: 8 pass the matched real binary (1.13.10-11 + alphas 12-20), 9 are display-class (reF1nd-fork extensions vanilla sing-box rejects; one 1.14-removed legacy field). 77 sibling files are JSONC/placeholder teaching templates and land in rejected.json by design. Official gates re-ran over the full corpus with the 1.13.14/alpha.40 pins (pass 34->42; no old-fixture verdict flipped). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diagnostics-vs-binary cross-check over the new corpus found 0 false positives
and 3 false negatives; all binary-verified on 1.12.25 / 1.13.14 / alpha.40:
- dial domain_strategy escalates warning->error on 1.13+ targets: the current
1.13/1.14 binaries fail check outright (env-gated removal). The dns.servers[]
emission stays a warning - those dial fields still accept it on every binary.
- inbound sniff*/domain_strategy escalate warning->error on 1.13+: decode-FATAL
("legacy inbound fields are deprecated").
- new rule-clash-mode-type error: reF1nd-fork array clash_mode decode-FATALs on
vanilla sing-box (route + DNS rules, logical sub-rules included).
Cross-check after: FP=0, FN=0 across all 17 pk-box fixtures.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…shapes - inbound sniff escalation now keys on the VALUE like the binary's legacy gate: sniff:false / sniff_override_destination:false / sniff_timeout:"0s" pass check on 1.13.14+alpha.40 (binary-verified) and stay warnings; only true / non-zero-timeout values error. Non-zero timeout re-verified (300ms: exit 1). - rule-clash-mode-type skips null (decodes as a no-op on all three binaries) - update-external-fixtures: --repo without --append now throws (bare --repo would wipe the corpus and rebuild one repo); total-cap break logs loudly; corpus-size comment corrected to 237 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
sbcv | cffa7a2 | Jul 08 2026, 06:33 AM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ingests huixiao666/pk-box (curated per-release sing-box templates, 1.13.x → every 1.14 alpha) into the external fixture corpus, then closes the diagnostic gaps a full diagnostics-vs-real-binary cross-check exposed.
Corpus (+17 fixtures, 220 → 237)
rejected.jsonby designIngest tooling (
update-external-fixtures.mjs)--append --repo <owner/name>scoped mode — adding one upstream no longer rebuilds ~70 repos; bare--repowithout--appendthrows (would wipe the corpus)maxFixturesoverride; authenticated contents-API fetches (anonymous raw fetches tripped 429s); total cap 240→320 + loud log when the cap bitesDiagnostics (cross-check verdict: FP=0, FN=3 → all fixed, final FP=0 / FN=0)
dial-domain-strategy-deprecated→ error on 1.13+ targets: current binaries fail check outright (ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS); thedns.servers[]emission stays a warning (those dial fields still pass on every binary)inbound-legacy-sniff/domain-strategy-deprecated→ error on 1.13+ only for check-fatal values — the binary's legacy gate keys on non-zero values, sosniff:false/"0s"stay warnings (review finding, binary-verified)rule-clash-mode-typeerror: fork-style arrayclash_modedecode-FATALs on vanilla sing-box (route + DNS + logical sub-rules;nullexempt)Verification
🤖 Generated with Claude Code