Repository navigation
Unblock the weekly gates, refuse unsupported modes, and state the compatibility promise - #126
Merged
Merged
Conversation
Seven targets at 300 s each, plus the build, exceeded SEC-FUZZ's 30-minute timeout, so every scheduled gate run since 0.2.1 was blocked by a timeout rather than a finding. The scheduled stage now splits 30 minutes across all targets after building them, under a 45-minute timeout, and a new target shortens each run instead of overrunning it. The repository job also failed every scheduled run by naming two gates that stage does not select. It now runs only the gates the plan selects, as the rust and console jobs already do.
Cluster and control modes ship in the binary but are unsupported and outside any compatibility promise. A stray mode value put a deployment on that footing without anyone choosing it. Start-up and doctor now fail the deployment_mode check unless server.unsupported_cluster_mode acknowledges it, and the cluster and node CLI commands are hidden from --help.
Compatibility and Support lists the covered interfaces, what each kind of release may change, the supported upgrade path, deprecation, and which releases receive fixes. The releasing guide now defers to it, and the README no longer calls the shipped audit chain in development.
SEC-AUDIT-NPM started failing on new high-severity advisories against next 16.3.7 (six, all fixed in 16.3.8), sharp 0.35.4 and source-map-js 1.2.1. Next.js and eslint-config-next move to 16.3.8; sharp and source-map-js move to their patched releases within existing ranges.
SEC-AUDIT-RUST started failing on three new high-severity RustSec advisories (RUSTSEC-2026-0338, -0340, -0343) against quinn-proto 0.11.17, which reqwest pulls in through quinn. All are fixed in 0.11.18; Cargo.lock now resolves 0.11.19.
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.
What this adds
Three changes that stand between 0.2.1 and a 1.0 release candidate.
The weekly Gates run is green again. Every scheduled run since 0.2.1 was
BLOCKED, for two unrelated reasons:SEC-FUZZtimed out without finding anything. Seven targets at 300 s each, plus the build, exceeded the gate's 30-minute timeout. The scheduled stage now gives all targets 30 minutes together, split evenly after building them, under a 45-minute timeout. A new target shortens each target's run rather than overrunning the gate.tests/fuzz-smoke.shtakesFUZZ_TOTAL_SECONDS; matrix version is now2026.10.08-1.repositoryjob namedDOC-BOUNDARYandSEC-SECRETS, which the scheduled stage does not select, sorun-stage.shexited 1. It now selects from the plan as therustandconsolejobs do.Unsupported deployment modes are refused.
server.mode = clusterorcontrolnow fails a newdeployment_modestart-up check, whichdoctoralso reports, unlessserver.unsupported_cluster_mode(RECORD_STORE_UNSUPPORTED_CLUSTER_MODE) acknowledges it. The acknowledged case is a warning. TheclusterandnodeCLI commands are hidden from--help. Standalone deployments see one new passing check and nothing else.A written compatibility promise.
docs/reference/compatibility.mdlists the covered interfaces and what a patch, minor and major release may change. It also covers the supported upgrade path, deprecation and which releases get fixes. The releasing guide defers to it, and the upgrading guide links it. The README no longer calls the audit chain "in development"; it shipped in 0.2.0.What it deliberately does not do
CMP-UPGRADEtests. Allowing skipped minor releases needs that gate extended first.Limits a user needs to know
Why it is built this way
Config::validateruns in config tests and innode joinbefore the node starts. Preflight is where start-up already refuses machine-level conditions by name, sodoctorreports the refusal with its remedy and nothing is opened first. I checked by hand: withRECORD_STORE_MODE=clusterthe server exits before creating the data directory.record_store_server::initializedirectly. A config field reaches them; an environment-only switch would not. The overlay contract tests cover the new variable.cargo fmt --all --checkcargo clippy --workspace --all-targets --all-features -- -D warningscargo test --workspace --all-features --locked— 1117 passedbash tests/rust-audit.sh— no new advisory or yanked cratemkdocs build --strict, if documentation changedbash tests/compatibility/run.sh, if the S3 surface changed — not applicableCHANGELOG.mdupdated under## [Unreleased], written for the person upgradingRun locally: the affected crates' tests (
record-store-config,-server,-cli: 159 passed),tests/gates/test_evaluate.py(20 OK),doc_boundary.py(PASS), andFUZZ_TOTAL_SECONDS=14 tests/fuzz-smoke.sh, which built once and ran all 7 targets for 2 s each. The first scheduled Gates run after merge is the real check of the new budget.