feat(spec): add §10.5 local/CI toolchain parity and validator rule#34
Merged
niclaslindstedt merged 1 commit intomainfrom Apr 18, 2026
Merged
feat(spec): add §10.5 local/CI toolchain parity and validator rule#34niclaslindstedt merged 1 commit intomainfrom
niclaslindstedt merged 1 commit intomainfrom
Conversation
Pins every generated project's language toolchain in a single repository-root file that both the developer's toolchain manager and the CI workflow read — stopping the classic "clippy green locally, red on CI" drift. Adds one pin file per supported language (Rust, Python, Node, Go, + a .tool-versions note for polyglot), switches the CI templates to *-version-file inputs where supported, and teaches `oss-spec validate` to enforce presence, non-floating channel, and pin/CI version parity. Spec bumped 2.0.2 → 2.1.0. https://claude.ai/code/session_01PGUEDocqzUDJ1G6Yt9Jwj1
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
Closes the gap where
cargo clippy(orruff, oreslint, orgo vet)passes on a contributor's machine with a newer toolchain than CI uses,
then fails on CI because a new diagnostic fired. The spec now mandates
a single source of truth for each language's toolchain version, read by
both the local developer and the CI workflow.
per-language table of pin files and concrete examples: Rust
rust-toolchain.toml, Python.python-version, Node.nvmrc,Go
go.mod'stoolchaindirective, and.tool-versionsforpolyglot projects. Rationale kept to three bullets; no fluff.
oss-spec validatedetects each project'slanguages from their root manifest and emits a
§10.5violation ifthe matching pin file is missing, holds a floating channel
(
stable,latest, …), or disagrees withci.yml. Genericprojects with no language manifest skip the check.
ship with the pin file, and the CI workflow template reads from
it via
python-version-file,node-version-file,go-version-fileinstead of duplicating the version in YAML.rust-toolchain.tomlat the repo root so theself-conformance test keeps passing.
Test plan
cargo clean && cargo build— include_dir! picks up the newtemplate files
cargo fmt --all -- --check— cleancargo clippy --all-targets -- -D warnings— cleancargo test— 63 passed (18 new §10.5 tests + the existing 45)cargo test --test self_conformance_test— repo still conformsoss-spec validate --no-ai --path .— "repo conforms to OSS_SPEC.md"rust-toolchain.tomlaside producesexactly one §10.5 violation, no cascade; restoring clears it
locally with
oss-spec init --no-ai ... --lang <lang>) to confirmeach generated project ships the pin file and passes validate
without manual fix-up
https://claude.ai/code/session_01PGUEDocqzUDJ1G6Yt9Jwj1