Windows包装: CRLF使每个被包的工作流程无法运行,而fp-check的"停止钩"会让会话陷入僵局(#205的固定从未合并)
作者: rhansen04创建于 2026年8月28日更新于 2026年8月28日
- Every packaged
Workflowis unrunnable on Windows — CRLFWorkflowinvocation is refused before the script runs: >script contains control characters that would be hidden in the approval dialogIt is not the caller's arguments. It is the plugin file: withcore.autocrlf=truethe checkout writesworkflows/*.jswith CRLF, and\ris a control character to the permission handler. $ git ls-files --eol plugins/insecure-defaults/workflows/audit.js i/lf w/crlf attr/ plugins/insecure-defaults/workflows/audit.js $ Python -c "d=open('audit.js','rb').read(); print(d.count(b'\r\n'))" 713 Confirmed oninsecure-defaults:audit-pipelineandvariant-analysis:variants. Both are unusable as shipped —variant-analysishad to be run by hand before the cause was found, andinsecure-defaultsonly ran after copying the script and replacing\r\nwith\n(content otherwise byte-identical, and it then completed normally: 11 agents, 1448 files, 6 candidates, all refuted). Fix: add a.gitattributesat the repo root. The repo has none today. *.js text eol=lf *.mjs text eol=lf Worth considering* text=auto eol=lffor anything else a permission handler or shebang might read. 2.fp-check'sStophook deadlocks the session — and #205's fix never landed The hook re-blocks the end of every turn until Claude Code's consecutive-block cap (9 here) trips and force-ends it. Once triggered, the session cannot end normally no matter what the agent says, and the repeated checklist reads as an agent failure rather than a plugin one. Two causes: (a) Nostop_hook_activeclause. The prompt has no rule releasing the turn after it has already blocked once, so it fires indefinitely. This is not covered by #205. (b) Scope, which #205 already diagnosed — the prompt demands all 7 phases "for EVERY bug that was being verified", with no path for a user who asked to verify one finding out of a set. In my session the user asked for exactly one candidate (V2) out of 13 from avariant-analysissweep; that verification was complete, with all 6 gates and a TRUE POSITIVE verdict, and the hook still blocked 9 times. #205 was closed on the assumption that #188 would land, and #188 was closed unmerged (mergedAt: null).plugins/fp-check/hooks/hooks.jsonstill carries theStopblock at HEAD, unchanged. So the fix that justified closing #205 is not in the tree. Local workaround: delete theStopblock, keepSubagentStop. That lives incache/and is lost on the next plugin update. Suggested fix, on top of what @GotenJBZ proposed in #190/#205: 0. Return{"ok": true}when …
内容来源: trailofbits/skills