From c0efb7b9f11845434675ba0f01b24934e4e1bc8d Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Sun, 5 Apr 2026 22:54:12 -0400 Subject: [PATCH] fix(workflows): remove deprecated --no-input flag from claude CLI calls (#1759) (#1842) claude --no-input was removed in Claude Code >= v2.1.81 and causes an immediate crash ("error: unknown option '--no-input'"). The -p/--print flag already handles non-interactive output, so --no-input is redundant. Adds a regression test in tests/workflow-compat.test.cjs that scans all workflow, command, and agent .md files to ensure --no-input never returns. Co-authored-by: Claude Sonnet 4.6 --- get-shit-done/workflows/review.md | 2 +- tests/workflow-compat.test.cjs | 62 +++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 tests/workflow-compat.test.cjs diff --git a/get-shit-done/workflows/review.md b/get-shit-done/workflows/review.md index dd8ef935..734ca1ad 100644 --- a/get-shit-done/workflows/review.md +++ b/get-shit-done/workflows/review.md @@ -148,7 +148,7 @@ gemini -p "$(cat /tmp/gsd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/gsd-revi **Claude (separate session):** ```bash -claude -p "$(cat /tmp/gsd-review-prompt-{phase}.md)" --no-input 2>/dev/null > /tmp/gsd-review-claude-{phase}.md +claude -p "$(cat /tmp/gsd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/gsd-review-claude-{phase}.md ``` **Codex:** diff --git a/tests/workflow-compat.test.cjs b/tests/workflow-compat.test.cjs new file mode 100644 index 00000000..ae8c678e --- /dev/null +++ b/tests/workflow-compat.test.cjs @@ -0,0 +1,62 @@ +/** + * Regression guard for #1759: the --no-input flag was removed from Claude Code + * >= v2.1.81 and causes an immediate crash ("error: unknown option '--no-input'"). + * + * The -p / --print flag already handles non-interactive output so --no-input + * must never appear in workflow, command, or agent files. + */ +const { describe, test } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('fs'); +const path = require('path'); + +const ROOT = path.join(__dirname, '..'); + +/** Recursively collect all .md files under a directory. */ +function collectMdFiles(dir) { + const results = []; + if (!fs.existsSync(dir)) return results; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + results.push(...collectMdFiles(full)); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + results.push(full); + } + } + return results; +} + +const SCAN_DIRS = [ + path.join(ROOT, 'get-shit-done', 'workflows'), + path.join(ROOT, 'get-shit-done', 'references'), + path.join(ROOT, 'commands', 'gsd'), + path.join(ROOT, 'agents'), +]; + +describe('workflow CLI compatibility (#1759)', () => { + test('no workflow/command/agent file uses the deprecated --no-input flag', () => { + const violations = []; + + for (const dir of SCAN_DIRS) { + for (const file of collectMdFiles(dir)) { + const content = fs.readFileSync(file, 'utf-8'); + if (content.includes('--no-input')) { + const rel = path.relative(ROOT, file); + violations.push(rel); + } + } + } + + assert.strictEqual( + violations.length, + 0, + [ + '--no-input was removed in Claude Code >= v2.1.81 and must not appear in any workflow/command/agent file.', + 'Use -p / --print instead (already implies non-interactive output).', + 'Violations found:', + ...violations.map(v => ' ' + v), + ].join('\n') + ); + }); +});