Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

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

已关闭 适合新手
#6,390 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
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 不匹配视为后续跟进。

由索引模型根据 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
平均合并
3 小时 42 分钟
30 天内合并 PR
938

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

melodic-software/claude-code-plugins 的其他 Issue

查看 melodic-software/claude-code-plugins 的全部 Issue

相似的 Issue

更多 Shell/Bash Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。