Skip to content

Commit 640eb80

Browse files
Shahinyanmclaude
andcommitted
fix(ci): unblock MSRV linux + windows tests for v0.2.5
Two pre-existing CI breakages that have kept main red since 2026-05-06, both surfaced again on the v0.2.5 push. MSRV (rust 1.83) — failed to parse rmcp-macros 0.3.2 manifest: feature `edition2024` is required (stabilized in Rust 1.85). Pin rmcp-macros = "=0.3.1" in tj-mcp; cargo update -p rmcp-macros downgrades rmcp 0.3.2 → 0.3.1 in lockfile. Project tracks rmcp 0.3 line, so this is a within-line constraint, not an API regression. Windows tests — every JsonlWriter-backed test panicked with: acquire exclusive file lock — Access is denied (os error 5) fd_lock's LockFileEx requires GENERIC_READ on the handle. The file was opened with create+append only, which gives FILE_APPEND_DATA but not GENERIC_READ, so the lock failed on Windows. Linux's flock has no such requirement, so the issue was invisible on POSIX. Adding read(true) to OpenOptions gives the right access mask without changing append semantics. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 4c24dac commit 640eb80

4 files changed

Lines changed: 25 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ no more manual `bashrc` / `settings.json` edits to use `aimux`, `direnv`,
3434
interactive bash, so the env var was invisible to the classifier
3535
and 401s kept piling up in `pending/`. The `--classifier-command`
3636
flag closes that loop end-to-end.
37+
- CI: pinned `rmcp-macros` to `=0.3.1` so MSRV (Rust 1.83) builds
38+
again. `rmcp-macros 0.3.2` requires the `edition2024` Cargo
39+
feature, stabilized only in Rust 1.85+. Re-evaluate when MSRV is
40+
raised.
41+
- CI: opened the JSONL append handle with `read(true)` in addition
42+
to `append(true)`. `fd_lock`'s `LockFileEx` on Windows requires
43+
GENERIC_READ access on the handle; without it tests panicked with
44+
`acquire exclusive file lock — Access is denied (os error 5)`.
45+
Linux's `flock` was unaffected, so the issue was Windows-only.
3746

3847
## [0.2.4] - 2026-05-07
3948

Cargo.lock

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/tj-core/src/storage.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,15 @@ impl JsonlWriter {
2626
if let Some(parent) = path.parent() {
2727
std::fs::create_dir_all(parent).with_context(|| format!("create dir {parent:?}"))?;
2828
}
29+
// `read(true)` is required on Windows: `fd_lock` calls
30+
// `LockFileEx` on the underlying handle, which fails with
31+
// `os error 5 (Access is denied)` if the file was opened
32+
// append-only — the API needs GENERIC_READ access on the
33+
// handle. Linux's flock() doesn't care, so the omission was
34+
// silent on POSIX. See windows-rs / fd_lock notes.
2935
let file = OpenOptions::new()
3036
.create(true)
37+
.read(true)
3138
.append(true)
3239
.open(&path)
3340
.with_context(|| format!("open {path:?} for append"))?;

crates/tj-mcp/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ tokio = { workspace = true }
2222
tracing = { workspace = true }
2323
tracing-subscriber = { workspace = true }
2424
rmcp = { workspace = true }
25+
# Pin rmcp-macros to a version compiled with edition 2021 — 0.3.2 requires
26+
# `edition2024`, stabilized only in Rust 1.85, which breaks our MSRV (1.83).
27+
# Re-evaluate when MSRV is bumped to ≥1.85.
28+
rmcp-macros = "=0.3.1"
2529
serde = { workspace = true }
2630
serde_json = { workspace = true }
2731
schemars = { workspace = true }

0 commit comments

Comments
 (0)