Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

test(testing): build test-scan suite payloads without MSYS path conversion

オープン 初心者向け
#6,390 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
72/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
bash, git, shell

調査の方向性

plugins/testing/hooks/test-scan.test.sh から始める: 各 jq --arg パスビルダー(payload()、bash_payload()、diff_of()、および 516、522、548、607 行付近のインライン呼び出し)に、呼び出しごとに MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*' を前置する。PR #6356 と同様で、それらの変数は export しない。297a19f13bd5fbd8 の session-key oracle は変更しない。ネイティブ jq の Windows Git Bash で bash plugins/testing/hooks/test-scan.test.sh を実行する。列挙した assertion で残る .file/.repo の不一致は、まだ失敗する場合は follow-up として扱う。

索引モデルが issue の本文から書いたものです。

説明

good first issue needs-triage priority: low

Summary

On Windows Git Bash with a native jq.exe, plugins/testing/hooks/test-scan.test.sh builds its hook payloads by passing POSIX paths to jq through --arg, and MSYS rewrites those arguments to Windows form. The hook then hashes a converted transcript_path against an unconverted CLAUDE_PROJECT_DIR, so the project-key checks cannot match their literal. This is the same fixture defect #6266 fixed for the test-judge suites; PR #6356 added the per-call MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*' prefix there but did not touch test-scan.test.sh, which carries no such prefix anywhere.

This is a test-fixture defect. Live sessions are unaffected for the reasons #6266 gives: Claude Code supplies drive-letter paths, which MSYS leaves alone.

plugins/testing/skills/audit/scripts/cant-fail-scan.test.sh was checked and is not affected: its only jq call (:1734) reads a file operand, where conversion is wanted. A full local run on Windows Git Bash passed 1195 of 1195.

Steps to reproduce

  1. On Windows Git Bash where jq resolves to a native Windows binary, run bash plugins/testing/hooks/test-scan.test.sh.
  2. Look at the pkey: checks.

Not run this pass (see Evidence); the failure is derived from the code.

Expected

The pkey: checks pass, as they do on Linux: the record lands under sessions/297a19f13bd5fbd8/.

Actual (derived)

payload() passes TPATH=/nonexistent/transcripts/-proj/a.jsonl through --arg tp. MSYS converts it to a path under the Git install root (for example C:/Program Files/Git/nonexistent/transcripts/-proj/a.jsonl), while CLAUDE_PROJECT_DIR=/nonexistent/proj reaches the hook unconverted through the environment. testing::pkey hashes the mixed pair, so the key is not 297a19f13bd5fbd8 and the checks at :437, :439, :441 and :446 fail. :446 also passes PCWD=$P through --arg c, which is converted too.

Evidence (file:line, origin/main 9680bdaa1)

  • plugins/testing/hooks/test-scan.test.sh:135-141: payload() runs jq -cn --arg t ... --arg f "$2" ... --arg tp "$TPATH" --arg c "$PCWD" with no MSYS prefix.
  • test-scan.test.sh:434-446: P=/nonexistent/proj, TP=/nonexistent/transcripts/-proj; CLAUDE_PROJECT_DIR=$P is set as an environment prefix (not converted), TPATH and PCWD go through payload() (converted). Assertions expect /sessions/297a19f13bd5fbd8/.
  • plugins/testing/hooks/test-scan.sh:55-63 reads .cwd and .transcript_path raw from the payload, and :90 calls testing::pkey "${CLAUDE_PROJECT_DIR:-$pcwd}" "$tpath".
  • plugins/testing/hooks/scanner-run.sh:37-44: testing::pkey hashes $1 and the directory of $2 with no path-form normalization.
  • Other --arg path builders in the same file with no prefix: bash_payload() :474 (--arg tp, --arg c), diff_of() :481 (--arg f), and inline builders at :516, :522, :548, :607.
  • Likely second failure, inferred: :378-379 asserts .file == "$REPO/src/mixed.test.ts" and .repo == "$REPO" with $REPO under mktemp -d (a /c/... or /tmp/... path). The recorded .file comes from the converted payload path, and .repo from the git toplevel, which Git for Windows reports in C:/... form. The per-call prefix alone may not fix this one, because test-scan.sh:94 itself passes --arg file "$FILE" to native jq; PR #6356's Related section names the same hook-side follow-up for the judge hooks.
  • Precedent for the fix: PR #6356 (judge-test-helpers.sh, test-judge.test.sh, test-judge-start.test.sh), and lib/hook-utils.test.sh:393-399.
  • Not run: this suite was not executed on Windows this pass, so no failure count is measured. The mechanism rests on the code above and on the native jq.exe established in #6266.

Suggested fix

Prefix each jq call in test-scan.test.sh that passes a filesystem path through --arg into a payload (payload(), bash_payload(), diff_of(), and the inline builders at :516, :522, :548, :607) with MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*', per call, as PR #6356 did. Do not export either variable; the node exec-bash.mjs calls at :159 and :503 need conversion. Leave the 297a19f13bd5fbd8 literal as the independent oracle. Then run the suite on Windows Git Bash and handle any remaining .file/.repo path-form mismatches at :378-379, :544 and :610 separately.

Related: #6266, PR #6356, #6135.

主要言語
Shell
スター
22
フォーク
2
平均マージ
5時間 11分
マージ済み PR(30日)
838

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

melodic-software/claude-code-plugins のほかの issue

melodic-software/claude-code-plugins の issue をすべて見る

似ている issue

Shell/Bash の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。