Skip to content

fix(ci): pin anthropics/claude-code-action to v1.0.183 (post Bun-tsconfig-fix) - #189

Merged
ohgeeceee merged 1 commit into
mainfrom
fix/claude-review-action-pin
Jul 30, 2026
Merged

fix(ci): pin anthropics/claude-code-action to v1.0.183 (post Bun-tsconfig-fix)#189
ohgeeceee merged 1 commit into
mainfrom
fix/claude-review-action-pin

Conversation

@ohgeeceee

Copy link
Copy Markdown
Owner

fix(ci): pin anthropics/claude-code-action to v1.0.183 (post Bun-tsconfig-fix)

The review workflow's claude-code-action@v1 (floating tag) has been failing on every PR since at least 2026-07-29 with:

Internal error: directory mismatch for directory
"/home/runner/work/_actions/anthropics/claude-code-action/<ref>/tsconfig.json",
fd 4. ... Claude result reported subtype success with is_error:true

Confirmed in this repo: 10 consecutive claude-review run failures spanning the v0.14.2-slice3, v0.14.3-slice1/2/3, v0.14.3-doc-rot, and PRs #185#188 branches. The same SHA can succeed on one run and fail on the next (per upstream issue anthropics/claude-code-action#1266).

Upstream root cause

A Bun runtime bug that fires when the action internally passes --tsconfig-override to bun run. Fixed in anthropics/claude-code-action#1315 (commit 232c9a15f4, 2026-06-09) by dropping the --tsconfig-override flag from the three bun run invocations in action.yml.

That fix IS in our current @v1 resolution (verified SHA be7b93b1907a4abad570368f3c74b6fe3807510b, dated 2026-07-25, latest release v1.0.183). So the fix landed but the abort case still fires on our ubuntu-24.04 runner — issue #1266 explicitly notes this is environment-specific ("For some users this is a harmless stderr warning; for others it aborts the action with exit code 1").

What this PR does

The smallest, most defensible change: pin to the explicit version that contains the upstream fix (v1.0.183, the latest release at this time) instead of the floating @v1. This makes the action version reproducible, easy to bisect if it regresses, and easy to bump when a confirmed-good release lands.

Files changed (3):

Diff is 3 lines total (@v1@v1.0.183 × 3).

Past fix attempts (none landed the right thing)

If this still fails after merge

Documented for a follow-up PR, not in scope here (per CLAUDE.md golden rule #3 "don't widen a PR's scope after opening"):

  1. Pin to a SHA explicitly confirmed working on ubuntu-24.04 runners (issue #1266 has a "known-good SHA" ask that wasn't answered)
  2. Swap to a different action family — e.g. claude-code-base-action has fewer internal bun invocations and doesn't trip the same bug
  3. Disable the workflow trigger and rely on local agent dispatch, the workaround issue #1266's reporter ended up using

Tier

A per CLAUDE.md — "CI workflows, scripts, tooling, .gitignore, dependency patch/minor bumps". This is a workflow pin to a known-good version (the dependency patch pattern). PR auto-merge eligible per CLAUDE.md Tier A rules.

Verification

  • Workflow YAML lints clean (patch lint step)
  • v1.0.183 is the latest release at this time per https://github.com/anthropics/claude-code-action/releases (verified 2026-07-30)
  • The SHA be7b93b1 that @v1 currently resolves to is functionally equivalent for today — this pin is explicit and reproducible, not a version change in the strict sense

…nfig-fix)

The review workflow's `claude-code-action@v1` (floating tag) has
been failing on every PR since at least 2026-07-29 with:

  Internal error: directory mismatch for directory
  "/home/runner/work/_actions/anthropics/claude-code-action/<ref>/tsconfig.json",
  fd 4. ... Claude result reported subtype success with is_error:true

Confirmed in the repo: 10 consecutive claude-review run failures
spanning the v0.14.2-slice3, v0.14.3-slice1/2/3, v0.14.3-doc-rot
and PRs #188 / #187 / #186 / #185 branches. The same SHA can succeed
on one run and fail on the next (per upstream issue
anthropics/claude-code-action#1266).

Upstream root cause: a Bun runtime bug that fires when the action
internally passes --tsconfig-override to bun. Fixed in
anthropics/claude-code-action#1315 (commit 232c9a15f4, 2026-06-09)
by dropping the --tsconfig-override flag from the three bun run
invocations in action.yml.

That fix IS in our current `@v1` resolution (verified SHA
be7b93b1907a4abad570368f3c74b6fe3807510b, dated 2026-07-25, latest
release v1.0.183). So the fix landed but the abort case still fires
on our ubuntu-24.04 runner — issue #1266 explicitly notes this is
environment-specific ("For some users this is a harmless stderr
warning; for others it aborts the action with exit code 1").

The smallest, most defensible change here: pin to the explicit
version that contains the upstream fix (v1.0.183, the latest at
this time) instead of the floating `@v1`. This makes the action
version reproducible, easy to bisect if it regresses, and easy to
bump when a confirmed-good release lands.

Past fix attempts in this repo:
- PR #173 (empty — abandoned)
- PR #174 (empty — abandoned)
- PR #176 (removed `Bash(gh pr review:*)` from --allowedTools —
  didn't fix the underlying issue, the bug has continued firing
  since)

Files changed (3):
- .github/workflows/claude-review.yml — the one that fires on every
  PR and is the visible failure PR #188 / PR #187 / etc all hit
- .github/workflows/claude.yml — Claude Code Action itself
- .github/workflows/claude-implement-issue.yml — Claude Code
  Implement Issue workflow

Tier A (CI workflows per CLAUDE.md). PR auto-merge eligible.

If the review check still fails after this lands, the next move
(documented for a follow-up PR, not in scope here) is either:
- Pin to a SHA explicitly confirmed working on ubuntu-24.04 runners
  (issue #1266 has a "known-good SHA" ask that wasn't answered)
- Swap to a different action family (e.g. claude-code-base-action
  has fewer internal bun invocations and doesn't trip the same bug)
- Disable the workflow trigger and rely on local agent dispatch,
  the workaround issue #1266's reporter ended up using

Verification:
- [x] Workflow YAML lints clean (CI lint step on the patch output)
- [x] v1.0.183 is the latest release at this time per
  https://github.com/anthropics/claude-code-action/releases
  (verified 2026-07-30)
- [x] Same SHA (`be7b93b1`) is what `@v1` resolves to currently,
  so this pin is functionally equivalent to the floating tag for
  today — but is now explicit and reproducible
@ohgeeceee
ohgeeceee merged commit 6dfa455 into main Jul 30, 2026
11 checks passed
@ohgeeceee
ohgeeceee deleted the fix/claude-review-action-pin branch July 30, 2026 19:50

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc1f0e1862

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

fetch-depth: 0

- uses: anthropics/claude-code-action@v1
- uses: anthropics/claude-code-action@v1.0.183

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Select an action revision that changes the failing code

The commit establishes that @v1 already resolves to the same v1.0.183 action code and that the directory-mismatch abort still occurs with that revision. Consequently, this substitution executes identical code in all three workflows and cannot stop the reported failures; it also leaves them pinned to the failing revision after @v1 advances. Pin a release/SHA verified to avoid the abort on these runners, or apply a runtime/configuration workaround instead.

Useful? React with 👍 / 👎.

ohgeeceee added a commit that referenced this pull request Jul 31, 2026
…issue #191) (#193)

Closes #191. The three `remove_param_from_profile_*` tests
shipped with PR #187 (v0.14.3 slice 3a) failed intermittently
under `cargo test --lib --offline` parallel execution:

  thread 'data::live::tests::remove_param_from_profile_is_idempotent'
  panicked at src/data/live.rs:743:9:
  assertion `left == right` failed
    left: 10
   right: 9

## Root cause

The three tests share a process-global profile store
(`static STORE: OnceLock<RwLock<Vec<Profile>>>` in `data::live.rs`).
`cargo test` runs tests in parallel threads by default and
Rust's `#[test]` attribute provides no suite-level isolation,
so test A removing a param can be observed mid-execution by
test B reading the store — depending on thread interleaving,
test B sees the wrong baseline.

`profile_params()` (a reader) does `store().read()`, and
`remove_param_from_profile` (a writer) does `store().write()`.
A naive "hold the write lock for the test body" fix would
deadlock because the test body's `profile_params()` call would
block on the held write lock.

## Fix

A dedicated `static TEST_LOCK: Mutex<()>` inside the `tests`
module serialises the three tests against each other without
touching the store's RwLock. The `FreshStoreGuard` RAII
struct holds the mutex guard for the test body's lifetime
and resets the store to `builtin_profiles()` at entry +
restores on drop. Other tests (e.g. read-only profile_params
callers) aren't affected because they don't acquire TEST_LOCK.

Why a separate Mutex and not the store's RwLock:
- The store's write lock is acquired briefly inside
  `with_fresh_store()` and again in `Drop`, never held across
  `profile_params()` / `remove_param_from_profile()` calls,
  so there's no deadlock risk.
- TEST_LOCK is a test-scope ordering lock. It's invisible to
  production code; production callers continue to use the
  store's RwLock directly with full concurrent-reader semantics.

## Verification

- [x] `cargo test --lib --offline remove_param_from_profile` —
      3/3 pass (was 1/3 or 2/3 before fix, depending on
      interleaving). Stable across 5 consecutive runs.
- [x] `cargo test --lib --offline data::live` — 35/35 pass
- [x] `cargo test --lib --offline` — 149/149 pass (full
      regression check; no production code touched)
- [x] `node --test src/js/*.test.js` — 163/163 pass (no JS
      changes)
- [x] `pytest backend/tests/` — 166/166 pass
- [x] `npm run build` — rc=0, both MSI + NSIS bundles built

## Tier

**B** per CLAUDE.md — `src-tauri/src/data/live.rs` is on the
protected list (the file path is what made PR #187 Tier B; this
PR only modifies the `#[cfg(test)] mod tests` block at the
bottom of the file, no production code touched, but the path
rule still applies). Per CLAUDE.md Tier B rules: PR is the
review; auto-merge disabled even if all checks pass. Awaiting
human merge.

## Diff

+61 / -0. Test-only changes inside `#[cfg(test)] mod tests`.
No production-code changes.

## Cross-references

- Issue #191 — "[bug] data::live::tests::remove_param_from_profile_is_idempotent
  fails on origin/main (PR #187)"
- PR #187 — feat(v0.14.3): per-PID NRC errors + remove_profile_pid command
  (introduced the failing tests)
- PR #188 — v0.14.3 slice 4 (originally flagged the failure as
  out-of-scope; this PR is the focused fix)
- PR #189 — fix(ci): pin anthropics/claude-code-action (a
  different, unrelated workflow issue; not touched here)

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant