Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
9a0b781
ci: pin Rust 1.97.1 in product verification
seonghobae Aug 19, 2026
31dd835
ci: pin Rust 1.97.1 in release preflight
seonghobae Aug 19, 2026
9ba4f21
ci: pin Rust 1.97.1 in dependency audit
seonghobae Aug 19, 2026
08d524e
ci: pin Rust 1.97.1 across release architectures
seonghobae Aug 19, 2026
dfa2611
build: pin Rust 1.97.1
seonghobae Aug 19, 2026
7bc959d
test: enforce the reviewed Rust compiler baseline
seonghobae Aug 19, 2026
47da94a
test: run the Rust toolchain contract in quickcheck
seonghobae Aug 19, 2026
1b3870e
ci: track the pinned Rust toolchain
seonghobae Aug 19, 2026
120d113
docs: record the Rust compiler authority
seonghobae Aug 19, 2026
030922b
test(rust): cover pinned toolchain policy guard
seonghobae Aug 19, 2026
69c0a25
test(rust): reject cross-lane Dependabot evidence
seonghobae Aug 19, 2026
3ba24ba
fix(rust): bind Dependabot policy to toolchain lane
seonghobae Aug 19, 2026
c951edf
docs(rust): correct toolchain authority sources
seonghobae Aug 19, 2026
8c99736
test(rust): reject cross-workflow compiler evidence
seonghobae Aug 19, 2026
cde3084
fix(rust): bind compiler evidence to owning workflows
seonghobae Aug 19, 2026
316ef6d
test(rust): model workflow-owned compiler contracts
seonghobae Aug 19, 2026
85a349f
test(rust): reject cross-job compiler evidence
seonghobae Aug 19, 2026
063c588
fix(rust): bind compiler evidence to owning jobs
seonghobae Aug 19, 2026
9def786
test(rust): model job-owned compiler contracts
seonghobae Aug 19, 2026
8b206a7
test(rust): reject non-executing toolchain evidence
seonghobae Aug 19, 2026
420dfbd
fix(rust): require executable workflow evidence
seonghobae Aug 19, 2026
3342efb
test(rust): reject commented Dependabot evidence
seonghobae Aug 19, 2026
e8981fc
fix(rust): validate effective Dependabot lane fields
seonghobae Aug 19, 2026
57ab593
test(rust): bind supply-chain audit to pinned toolchain
seonghobae Aug 19, 2026
cdf5d56
fix(rust): align supply-chain audit with pinned toolchain
seonghobae Aug 19, 2026
35600dd
fix(ci): satisfy Ruff toolchain test lint
seonghobae Aug 19, 2026
1bf7f7c
fix(ci): normalize Ruff import grouping
seonghobae Aug 19, 2026
dd6b8fd
fix(tests): satisfy Ruff import ordering
seonghobae Aug 19, 2026
35dd5b5
fix(ci): satisfy Ruff import grouping
seonghobae Aug 19, 2026
2d3fd13
test(rust): align supply-chain import layout
seonghobae Aug 20, 2026
d244ee6
test(rust): fix supply-chain import grouping
seonghobae Aug 20, 2026
245486a
test(rust): reject masked toolchain evidence
seonghobae Aug 20, 2026
e476bc9
fix(rust): reject failure-masked workflow evidence
seonghobae Aug 20, 2026
a8dbacd
docs(rust): record unmasked command evidence
seonghobae Aug 20, 2026
94ea841
chore(changelog): record Rust evidence hardening
seonghobae Aug 20, 2026
8c53e91
fix(ci): format Rust toolchain supply-chain test
seonghobae Aug 20, 2026
52099e3
style(tests): satisfy Ruff import grouping
seonghobae Aug 20, 2026
bbdbadf
test(rust): restore Ruff import grouping
seonghobae Aug 20, 2026
35c1f03
test(rust): remove incidental pytest import from toolchain contract
seonghobae Aug 20, 2026
8038fd2
test(rust): restore formatter-clean pytest typing
seonghobae Aug 20, 2026
68a54e4
style(tests): separate local toolchain test import
seonghobae Aug 20, 2026
3369ad2
style(tests): organize Rust toolchain contract imports
seonghobae Aug 20, 2026
a953491
style(tests): align Rust toolchain import groups
seonghobae Aug 20, 2026
b0bc4a9
test(rust): satisfy Ruff import grouping
seonghobae Aug 20, 2026
279710b
test(rust): format supply-chain regression imports
seonghobae Aug 20, 2026
bda03da
style(test): align rust toolchain imports with Ruff
seonghobae Aug 20, 2026
8553647
style(test): separate local conftest import
seonghobae Aug 21, 2026
2f1d013
test(rust): align supply-chain regression imports
seonghobae Aug 21, 2026
cecab72
test(rust): restore Ruff import grouping
seonghobae Aug 21, 2026
fb4426b
fix(rust): format supply-chain regression imports
seonghobae Aug 21, 2026
00bee2f
style(rust-toolchain): satisfy ruff import grouping
seonghobae Aug 21, 2026
9fbfbcb
test(rust-toolchain): reject nested run-shaped evidence
seonghobae Aug 21, 2026
261fa25
fix(rust-toolchain): bind evidence to actual step run keys
seonghobae Aug 21, 2026
cfab395
test(ci): format Rust supply-chain regression imports
seonghobae Aug 21, 2026
2aad4e0
test: format Rust toolchain contract imports
seonghobae Aug 22, 2026
0d92637
test(rust): apply repository Ruff import grouping
seonghobae Aug 22, 2026
98c064e
test(rust): remove unnecessary pytest type-only import
seonghobae Aug 22, 2026
b0f8cf0
test(rust): satisfy Ruff import block spacing
seonghobae Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
version: 2
updates:
- package-ecosystem: "rust-toolchain"
directory: "/"
target-branch: "develop"
schedule:
interval: "weekly"
open-pull-requests-limit: 1
labels:
- "dependencies"
- "rust"

- package-ecosystem: "npm"
directory: "/"
target-branch: "develop"
Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/build-baseline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ jobs:
with:
version: "0.8.6"
enable-cache: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Add Windows target
run: rustup target add $env:BANDSCOPE_TARGET_TRIPLE --toolchain stable
run: rustup target add $env:BANDSCOPE_TARGET_TRIPLE --toolchain 1.97.1
- name: Verify Windows antivirus baseline
shell: pwsh
run: |
Expand Down Expand Up @@ -142,10 +142,10 @@ jobs:
with:
version: "0.8.6"
enable-cache: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Add Windows arm target
run: rustup target add $env:BANDSCOPE_TARGET_TRIPLE --toolchain stable
run: rustup target add $env:BANDSCOPE_TARGET_TRIPLE --toolchain 1.97.1
- name: Verify Windows antivirus baseline
shell: pwsh
run: |
Expand Down Expand Up @@ -248,10 +248,10 @@ jobs:
with:
version: "0.8.6"
enable-cache: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Add macOS Intel target
run: rustup target add "$BANDSCOPE_TARGET_TRIPLE" --toolchain stable
run: rustup target add "$BANDSCOPE_TARGET_TRIPLE" --toolchain 1.97.1
- name: Install create-dmg
run: brew install create-dmg
- name: Install node dependencies
Expand Down Expand Up @@ -306,10 +306,10 @@ jobs:
with:
version: "0.8.6"
enable-cache: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Add macOS arm target
run: rustup target add "$BANDSCOPE_TARGET_TRIPLE" --toolchain stable
run: rustup target add "$BANDSCOPE_TARGET_TRIPLE" --toolchain 1.97.1
- name: Install create-dmg
run: brew install create-dmg
- name: Install node dependencies
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ jobs:
run: npm ci
- name: Sync Python dependencies
run: uv sync --project services/analysis-engine --group dev --frozen
- name: Install stable Rust toolchain
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1 toolchain
run: rustup toolchain install 1.97.1 --profile minimal
- name: Build and install Rust numeric extension
run: |
VENV_PY="$PWD/services/analysis-engine/.venv/bin/python"
Expand All @@ -58,13 +58,13 @@ jobs:
with:
node-version: 22.22.3
cache: npm
- name: Install stable Rust toolchain
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1 toolchain
run: rustup toolchain install 1.97.1 --profile minimal
- name: Install node dependencies
run: npm ci
- name: Build frontend
run: npm run build --workspace @bandscope/desktop
- name: Check Tauri shell
run: cargo +stable check --manifest-path apps/desktop/src-tauri/Cargo.toml --locked
run: cargo +1.97.1 check --manifest-path apps/desktop/src-tauri/Cargo.toml --locked
- name: Test Tauri shell
run: cargo +stable test --manifest-path apps/desktop/src-tauri/Cargo.toml --locked
run: cargo +1.97.1 test --manifest-path apps/desktop/src-tauri/Cargo.toml --locked
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ jobs:
with:
version: "0.8.6"
enable-cache: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1
run: rustup toolchain install 1.97.1 --profile minimal
- name: Install node dependencies
run: npm ci
- name: Sync Python dependencies
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/security-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ jobs:
run: uv sync --project services/analysis-engine --group dev --frozen
- name: Audit Python dependencies
run: uv run --project services/analysis-engine --with pip-audit==2.8.0 pip-audit --local --strict
- name: Install stable Rust toolchain
run: rustup toolchain install stable --profile minimal
- name: Install Rust 1.97.1 toolchain
run: rustup toolchain install 1.97.1 --profile minimal
- name: Install cargo-audit
run: cargo +stable install cargo-audit --locked
run: cargo +1.97.1 install cargo-audit --locked
- name: Audit Rust dependencies
working-directory: apps/desktop/src-tauri
run: cargo +stable audit
run: cargo +1.97.1 audit
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
- Display the analyzed song tempo (BPM) as a badge in the rehearsal workspace.
- 각 합주 역할(Role)별 개인 연습 진행도를 0~100% 범위로 기록 및 시각화할 수 있는 연습 진척도(`practiceProgress`) 트래커 기능 추가. UI 컨트롤(슬라이더 및 +/- 버튼)과 한/영 다국어 지원 포함.

### Changed

- Pin repository-owned Rust build, audit, release, and native packaging evidence to Rust 1.97.1, and fail closed when required Rust commands are hidden in non-executing text, borrowed from another workflow/job, or chained through shell control flow that can mask their exit status.

## [0.1.3] - 2026-04-29

### Fixed
Expand Down
51 changes: 51 additions & 0 deletions docs/doctoring/rust-toolchain-freshness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Rust toolchain freshness and reproducibility

## Decision

BandScope pins Rust `1.97.1` as the repository build compiler. The root
`rust-toolchain.toml`, product CI, release preflight, dependency audit, and
Windows/macOS amd64/arm64 packaging workflows all use that exact point release.
A floating `stable` selector is not accepted because it can change scientific,
security, and release evidence without a repository diff.

The compiler pin does not add or raise `package.rust-version` in the workspace.
This change governs BandScope's reviewed build environment; it does not create a
new downstream minimum-supported-Rust promise for reusable crates.

GitHub Dependabot monitors the root manifest through the `rust-toolchain`
ecosystem against the protected `develop` branch. GitHub documents this
integration as a Dependabot version-update capability rather than a Rust
security-update feed. A future compiler update must therefore arrive as a
reviewable pull request and pass the unchanged-head Windows, macOS,
analysis-engine, Tauri, release-preflight, audit, coverage, and supply-chain
gates. GitHub's platform-level default cooldown for Dependabot version updates
is additional noise control; it is not treated as a repository security or
freshness guarantee.

`scripts/checks/verify_rust_toolchain.py` runs in the canonical quickcheck and
fails when any executable workflow reintroduces `rustup toolchain install
stable`, `cargo +stable`, or `--toolchain stable`. The same guard binds
`directory`, target branch, and schedule evidence to the actual
`rust-toolchain` Dependabot lane so an unrelated ecosystem entry cannot satisfy
the compiler-update policy.

Required Rust command evidence is also bound to one inline executable `run:`
step whose exit status cannot be replaced by shell chaining, pipelines, or
background control operators. Arguments such as `--manifest-path`, `--locked`,
and an explicit target triple remain valid, but forms such as `|| true`,
`| cat`, or `; true` fail closed. This prevents an unsuccessfully installed,
checked, tested, or audited Rust toolchain from becoming success-shaped policy
evidence merely because a later shell command returns zero.

## References

GitHub. (2025, August 19). *Dependabot now supports Rust toolchain updates*.
GitHub Changelog.
https://github.blog/changelog/2025-08-19-dependabot-now-supports-rust-toolchain-updates/

GitHub. (2026, July 14). *Dependabot version updates introduce default package
cooldown*. GitHub Changelog.
https://github.blog/changelog/2026-07-14-dependabot-version-updates-introduce-default-package-cooldown/

The Rust Release Team. (2026, July 16). *Announcing Rust 1.97.1*. Rust Blog.
https://blog.rust-lang.org/2026/07/16/Rust-1.97.1/
3 changes: 3 additions & 0 deletions rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[toolchain]
channel = "1.97.1"
profile = "minimal"
Loading
Loading