mirror of
https://github.com/glittercowboy/get-shit-done
synced 2026-04-25 17:25:23 +02:00
fix: remove editorial parenthetical descriptions from product names (#1778)
Community PRs repeatedly add marketing commentary in parentheses next to product names (licensing model, parent company, architecture). Product listings should contain only the product name. Cleaned across 8 files in 5 languages (EN, KO, JA, ZH, PT) plus install.js code comments and CHANGELOG. Added static analysis guard test that prevents this pattern from recurring. Fixes #1777 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -153,7 +153,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
## [1.29.0] - 2026-03-25
|
||||
|
||||
### Added
|
||||
- **Windsurf runtime support** — Full installation and command conversion for Windsurf (Codeium)
|
||||
- **Windsurf runtime support** — Full installation and command conversion for Windsurf
|
||||
- **Agent skill injection** — Inject project-specific skills into subagents via `agent_skills` config section
|
||||
- **UI-phase and UI-review steps** in autonomous workflow
|
||||
- **Security scanning CI** — Prompt injection, base64, and secret scanning workflows
|
||||
|
||||
@@ -125,21 +125,21 @@ npx get-shit-done-cc@latest
|
||||
npx get-shit-done-cc --claude --global # ~/.claude/ にインストール
|
||||
npx get-shit-done-cc --claude --local # ./.claude/ にインストール
|
||||
|
||||
# OpenCode(オープンソース、無料モデル)
|
||||
# OpenCode
|
||||
npx get-shit-done-cc --opencode --global # ~/.config/opencode/ にインストール
|
||||
|
||||
# Gemini CLI
|
||||
npx get-shit-done-cc --gemini --global # ~/.gemini/ にインストール
|
||||
|
||||
# Kilo(OpenCodeフォーク)
|
||||
# Kilo
|
||||
npx get-shit-done-cc --kilo --global # ~/.config/kilo/ にインストール
|
||||
npx get-shit-done-cc --kilo --local # ./.kilo/ にインストール
|
||||
|
||||
# Codex(スキルファースト)
|
||||
# Codex
|
||||
npx get-shit-done-cc --codex --global # ~/.codex/ にインストール
|
||||
npx get-shit-done-cc --codex --local # ./.codex/ にインストール
|
||||
|
||||
# Copilot(GitHub Copilot CLI)
|
||||
# Copilot
|
||||
npx get-shit-done-cc --copilot --global # ~/.github/ にインストール
|
||||
npx get-shit-done-cc --copilot --local # ./.github/ にインストール
|
||||
|
||||
@@ -147,7 +147,7 @@ npx get-shit-done-cc --copilot --local # ./.github/ にインストール
|
||||
npx get-shit-done-cc --cursor --global # ~/.cursor/ にインストール
|
||||
npx get-shit-done-cc --cursor --local # ./.cursor/ にインストール
|
||||
|
||||
# Antigravity(Google、スキルファースト、Geminiベース)
|
||||
# Antigravity
|
||||
npx get-shit-done-cc --antigravity --global # ~/.gemini/antigravity/ にインストール
|
||||
npx get-shit-done-cc --antigravity --local # ./.agent/ にインストール
|
||||
|
||||
@@ -155,11 +155,11 @@ npx get-shit-done-cc --antigravity --local # ./.agent/ にインストール
|
||||
npx get-shit-done-cc --augment --global # ~/.augment/ にインストール
|
||||
npx get-shit-done-cc --augment --local # ./.augment/ にインストール
|
||||
|
||||
# Trae(ByteDance、スキルファースト)
|
||||
# Trae
|
||||
npx get-shit-done-cc --trae --global # ~/.trae/ にインストール
|
||||
npx get-shit-done-cc --trae --local # ./.trae/ にインストール
|
||||
|
||||
# Cline(.clinerules使用)
|
||||
# Cline
|
||||
npx get-shit-done-cc --cline --global # ~/.cline/ にインストール
|
||||
npx get-shit-done-cc --cline --local # ./.clinerules にインストール
|
||||
|
||||
|
||||
@@ -125,21 +125,21 @@ npx get-shit-done-cc@latest
|
||||
npx get-shit-done-cc --claude --global # ~/.claude/에 설치
|
||||
npx get-shit-done-cc --claude --local # ./.claude/에 설치
|
||||
|
||||
# OpenCode (오픈소스, 무료 모델)
|
||||
# OpenCode
|
||||
npx get-shit-done-cc --opencode --global # ~/.config/opencode/에 설치
|
||||
|
||||
# Gemini CLI
|
||||
npx get-shit-done-cc --gemini --global # ~/.gemini/에 설치
|
||||
|
||||
# Kilo (OpenCode 포크)
|
||||
# Kilo
|
||||
npx get-shit-done-cc --kilo --global # ~/.config/kilo/에 설치
|
||||
npx get-shit-done-cc --kilo --local # ./.kilo/에 설치
|
||||
|
||||
# Codex (스킬 우선)
|
||||
# Codex
|
||||
npx get-shit-done-cc --codex --global # ~/.codex/에 설치
|
||||
npx get-shit-done-cc --codex --local # ./.codex/에 설치
|
||||
|
||||
# Copilot (GitHub Copilot CLI)
|
||||
# Copilot
|
||||
npx get-shit-done-cc --copilot --global # ~/.github/에 설치
|
||||
npx get-shit-done-cc --copilot --local # ./.github/에 설치
|
||||
|
||||
@@ -147,7 +147,7 @@ npx get-shit-done-cc --copilot --local # ./.github/에 설치
|
||||
npx get-shit-done-cc --cursor --global # ~/.cursor/에 설치
|
||||
npx get-shit-done-cc --cursor --local # ./.cursor/에 설치
|
||||
|
||||
# Antigravity (Google, 스킬 우선, Gemini 기반)
|
||||
# Antigravity
|
||||
npx get-shit-done-cc --antigravity --global # ~/.gemini/antigravity/에 설치
|
||||
npx get-shit-done-cc --antigravity --local # ./.agent/에 설치
|
||||
|
||||
@@ -155,11 +155,11 @@ npx get-shit-done-cc --antigravity --local # ./.agent/에 설치
|
||||
npx get-shit-done-cc --augment --global # ~/.augment/에 설치
|
||||
npx get-shit-done-cc --augment --local # ./.augment/에 설치
|
||||
|
||||
# Trae (ByteDance, 스킬 우선)
|
||||
# Trae
|
||||
npx get-shit-done-cc --trae --global # ~/.trae/에 설치
|
||||
npx get-shit-done-cc --trae --local # ./.trae/에 설치
|
||||
|
||||
# Cline (.clinerules 사용)
|
||||
# Cline
|
||||
npx get-shit-done-cc --cline --global # ~/.cline/에 설치
|
||||
npx get-shit-done-cc --cline --local # ./.clinerules에 설치
|
||||
|
||||
|
||||
16
README.md
16
README.md
@@ -137,21 +137,21 @@ npx get-shit-done-cc@latest
|
||||
npx get-shit-done-cc --claude --global # Install to ~/.claude/
|
||||
npx get-shit-done-cc --claude --local # Install to ./.claude/
|
||||
|
||||
# OpenCode (open source, free models)
|
||||
# OpenCode
|
||||
npx get-shit-done-cc --opencode --global # Install to ~/.config/opencode/
|
||||
|
||||
# Gemini CLI
|
||||
npx get-shit-done-cc --gemini --global # Install to ~/.gemini/
|
||||
|
||||
# Kilo (OpenCode fork)
|
||||
# Kilo
|
||||
npx get-shit-done-cc --kilo --global # Install to ~/.config/kilo/
|
||||
npx get-shit-done-cc --kilo --local # Install to ./.kilo/
|
||||
|
||||
# Codex (skills-first)
|
||||
# Codex
|
||||
npx get-shit-done-cc --codex --global # Install to ~/.codex/
|
||||
npx get-shit-done-cc --codex --local # Install to ./.codex/
|
||||
|
||||
# Copilot (GitHub Copilot CLI)
|
||||
# Copilot
|
||||
npx get-shit-done-cc --copilot --global # Install to ~/.github/
|
||||
npx get-shit-done-cc --copilot --local # Install to ./.github/
|
||||
|
||||
@@ -159,11 +159,11 @@ npx get-shit-done-cc --copilot --local # Install to ./.github/
|
||||
npx get-shit-done-cc --cursor --global # Install to ~/.cursor/
|
||||
npx get-shit-done-cc --cursor --local # Install to ./.cursor/
|
||||
|
||||
# Windsurf (Codeium, VS Code-based)
|
||||
# Windsurf
|
||||
npx get-shit-done-cc --windsurf --global # Install to ~/.windsurf/
|
||||
npx get-shit-done-cc --windsurf --local # Install to ./.windsurf/
|
||||
|
||||
# Antigravity (Google, skills-first, Gemini-based)
|
||||
# Antigravity
|
||||
npx get-shit-done-cc --antigravity --global # Install to ~/.gemini/antigravity/
|
||||
npx get-shit-done-cc --antigravity --local # Install to ./.agent/
|
||||
|
||||
@@ -171,11 +171,11 @@ npx get-shit-done-cc --antigravity --local # Install to ./.agent/
|
||||
npx get-shit-done-cc --augment --global # Install to ~/.augment/
|
||||
npx get-shit-done-cc --augment --local # Install to ./.augment/
|
||||
|
||||
# Trae (ByteDance, skills-first)
|
||||
# Trae
|
||||
npx get-shit-done-cc --trae --global # Install to ~/.trae/
|
||||
npx get-shit-done-cc --trae --local # Install to ./.trae/
|
||||
|
||||
# Cline (uses .clinerules)
|
||||
# Cline
|
||||
npx get-shit-done-cc --cline --global # Install to ~/.cline/
|
||||
npx get-shit-done-cc --cline --local # Install to ./.clinerules
|
||||
|
||||
|
||||
@@ -151,11 +151,11 @@ npx get-shit-done-cc --antigravity --local
|
||||
npx get-shit-done-cc --augment --global # Install to ~/.augment/
|
||||
npx get-shit-done-cc --augment --local # Install to ./.augment/
|
||||
|
||||
# Trae (ByteDance, skills-first)
|
||||
# Trae
|
||||
npx get-shit-done-cc --trae --global # Install to ~/.trae/
|
||||
npx get-shit-done-cc --trae --local # Install to ./.trae/
|
||||
|
||||
# Cline (usa .clinerules)
|
||||
# Cline
|
||||
npx get-shit-done-cc --cline --global # Install to ~/.cline/
|
||||
npx get-shit-done-cc --cline --local # Install to ./.clinerules
|
||||
|
||||
|
||||
@@ -123,21 +123,21 @@ npx get-shit-done-cc@latest
|
||||
npx get-shit-done-cc --claude --global # 安装到 ~/.claude/
|
||||
npx get-shit-done-cc --claude --local # 安装到 ./.claude/
|
||||
|
||||
# OpenCode(开源,可用免费模型)
|
||||
# OpenCode
|
||||
npx get-shit-done-cc --opencode --global # 安装到 ~/.config/opencode/
|
||||
|
||||
# Gemini CLI
|
||||
npx get-shit-done-cc --gemini --global # 安装到 ~/.gemini/
|
||||
|
||||
# Kilo(OpenCode 分支)
|
||||
# Kilo
|
||||
npx get-shit-done-cc --kilo --global # 安装到 ~/.config/kilo/
|
||||
npx get-shit-done-cc --kilo --local # 安装到 ./.kilo/
|
||||
|
||||
# Codex(以 skills 为主)
|
||||
# Codex
|
||||
npx get-shit-done-cc --codex --global # 安装到 ~/.codex/
|
||||
npx get-shit-done-cc --codex --local # 安装到 ./.codex/
|
||||
|
||||
# Copilot(GitHub Copilot CLI)
|
||||
# Copilot
|
||||
npx get-shit-done-cc --copilot --global # 安装到 ~/.github/
|
||||
npx get-shit-done-cc --copilot --local # 安装到 ./.github/
|
||||
|
||||
@@ -145,7 +145,7 @@ npx get-shit-done-cc --copilot --local # 安装到 ./.github/
|
||||
npx get-shit-done-cc --cursor --global # 安装到 ~/.cursor/
|
||||
npx get-shit-done-cc --cursor --local # 安装到 ./.cursor/
|
||||
|
||||
# Antigravity(Google,以 skills 为主,基于 Gemini)
|
||||
# Antigravity
|
||||
npx get-shit-done-cc --antigravity --global # 安装到 ~/.gemini/antigravity/
|
||||
npx get-shit-done-cc --antigravity --local # 安装到 ./.agent/
|
||||
|
||||
@@ -153,11 +153,11 @@ npx get-shit-done-cc --antigravity --local # 安装到 ./.agent/
|
||||
npx get-shit-done-cc --augment --global # 安装到 ~/.augment/
|
||||
npx get-shit-done-cc --augment --local # 安装到 ./.augment/
|
||||
|
||||
# Trae(字节跳动,以 skills 为主)
|
||||
# Trae
|
||||
npx get-shit-done-cc --trae --global # 安装到 ~/.trae/
|
||||
npx get-shit-done-cc --trae --local # 安装到 ./.trae/
|
||||
|
||||
# Cline(使用 .clinerules)
|
||||
# Cline
|
||||
npx get-shit-done-cc --cline --global # 安装到 ~/.cline/
|
||||
npx get-shit-done-cc --cline --local # 安装到 ./.clinerules
|
||||
|
||||
|
||||
@@ -1121,7 +1121,7 @@ function convertClaudeAgentToCursorAgent(content) {
|
||||
}
|
||||
|
||||
// --- Windsurf converters ---
|
||||
// Windsurf (by Codeium) uses a tool set similar to Cursor (both VS Code-based).
|
||||
// Windsurf uses a tool set similar to Cursor.
|
||||
// Config lives in .windsurf/ (local) and ~/.windsurf/ (global).
|
||||
|
||||
// Tool name mapping from Claude Code to Windsurf Cascade
|
||||
@@ -1239,7 +1239,7 @@ function convertClaudeAgentToWindsurfAgent(content) {
|
||||
}
|
||||
|
||||
// --- Augment converters ---
|
||||
// Augment (auggie CLI) uses a tool set similar to Cursor/Windsurf (VS Code-based).
|
||||
// Augment uses a tool set similar to Cursor/Windsurf.
|
||||
// Config lives in .augment/ (local) and ~/.augment/ (global).
|
||||
|
||||
const claudeToAugmentTools = {
|
||||
@@ -3134,7 +3134,7 @@ function convertClaudeToOpencodeFrontmatter(content, { isAgent = false } = {}) {
|
||||
return `---\n${newFrontmatter}\n---${body}`;
|
||||
}
|
||||
|
||||
// Kilo CLI — fork of OpenCode, same conversion logic, different config paths.
|
||||
// Kilo CLI — same conversion logic as OpenCode, different config paths.
|
||||
function convertClaudeToKiloFrontmatter(content, { isAgent = false } = {}) {
|
||||
// Replace tool name references in content (applies to all files)
|
||||
let convertedContent = content;
|
||||
|
||||
@@ -110,17 +110,17 @@ npx get-shit-done-cc@latest
|
||||
npx get-shit-done-cc --claude --global # 安装到 ~/.claude/
|
||||
npx get-shit-done-cc --claude --local # 安装到 ./.claude/
|
||||
|
||||
# OpenCode(开源,免费模型)
|
||||
# OpenCode
|
||||
npx get-shit-done-cc --opencode --global # 安装到 ~/.config/opencode/
|
||||
|
||||
# Gemini CLI
|
||||
npx get-shit-done-cc --gemini --global # 安装到 ~/.gemini/
|
||||
|
||||
# Kilo(OpenCode 分支)
|
||||
# Kilo
|
||||
npx get-shit-done-cc --kilo --global # 安装到 ~/.config/kilo/
|
||||
npx get-shit-done-cc --kilo --local # 安装到 ./.kilo/
|
||||
|
||||
# Codex(技能优先)
|
||||
# Codex
|
||||
npx get-shit-done-cc --codex --global # 安装到 ~/.codex/
|
||||
npx get-shit-done-cc --codex --local # 安装到 ./.codex/
|
||||
|
||||
|
||||
110
tests/product-name-purity.test.cjs
Normal file
110
tests/product-name-purity.test.cjs
Normal file
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Regression guard for #1777: product names must not have parenthetical descriptions.
|
||||
*
|
||||
* Community PRs repeatedly add editorial commentary in parentheses next to
|
||||
* product names (licensing, parent company, architecture). This test scans
|
||||
* all README files and ensures install-block comment lines contain only the
|
||||
* product name — no parenthetical text of any kind.
|
||||
*/
|
||||
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, '..');
|
||||
|
||||
// Product names that appear in install blocks as comment headers
|
||||
const PRODUCTS = [
|
||||
'Claude Code', 'Claude', 'OpenCode', 'Kilo', 'Codex', 'Copilot',
|
||||
'Cursor', 'Windsurf', 'Antigravity', 'Trae', 'Cline', 'Augment',
|
||||
'Gemini', 'Gemini CLI',
|
||||
];
|
||||
|
||||
// README files to scan (root + i18n variants + docs)
|
||||
const README_FILES = [
|
||||
'README.md',
|
||||
'README.ko-KR.md',
|
||||
'README.ja-JP.md',
|
||||
'README.zh-CN.md',
|
||||
'README.pt-BR.md',
|
||||
'docs/zh-CN/README.md',
|
||||
'docs/ko-KR/README.md',
|
||||
'docs/ja-JP/README.md',
|
||||
'docs/pt-BR/README.md',
|
||||
'docs/README.md',
|
||||
].filter(f => fs.existsSync(path.join(ROOT, f)));
|
||||
|
||||
describe('product name purity (#1777)', () => {
|
||||
test('no README install-block comments contain parenthetical descriptions', () => {
|
||||
const violations = [];
|
||||
|
||||
for (const file of README_FILES) {
|
||||
const content = fs.readFileSync(path.join(ROOT, file), 'utf-8');
|
||||
const lines = content.split('\n');
|
||||
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
const line = lines[i];
|
||||
// Match shell comment lines that start with # followed by a product name
|
||||
// and then have parenthetical text: # ProductName (something)
|
||||
// Also match fullwidth parens used in CJK: # ProductName(something)
|
||||
const match = line.match(/^#\s+(\S+(?:\s+\S+)?)\s*[((].+[))]/);
|
||||
if (!match) continue;
|
||||
|
||||
const name = match[1];
|
||||
// Check if this is actually a product name line (not a random comment)
|
||||
const isProduct = PRODUCTS.some(p =>
|
||||
name === p || name.startsWith(p)
|
||||
);
|
||||
if (isProduct) {
|
||||
violations.push([
|
||||
file + ':' + (i + 1),
|
||||
line.trim(),
|
||||
].join(' — '));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert.strictEqual(
|
||||
violations.length, 0,
|
||||
[
|
||||
'Product names in README install blocks must not have parenthetical descriptions.',
|
||||
'Found violations:',
|
||||
...violations.map(v => ' ' + v),
|
||||
].join('\n')
|
||||
);
|
||||
});
|
||||
|
||||
test('CHANGELOG does not include parenthetical product descriptions', () => {
|
||||
const changelog = path.join(ROOT, 'CHANGELOG.md');
|
||||
if (!fs.existsSync(changelog)) return;
|
||||
|
||||
const content = fs.readFileSync(changelog, 'utf-8');
|
||||
const violations = [];
|
||||
|
||||
for (const product of PRODUCTS) {
|
||||
// Match "ProductName (something)" but not "ProductName (v1.2.3)" (version refs are ok)
|
||||
const pattern = new RegExp(
|
||||
product.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +
|
||||
'\\s*\\([^)]*(?!v?\\d+\\.\\d)[^)]*\\)',
|
||||
'g'
|
||||
);
|
||||
const matches = content.match(pattern);
|
||||
if (matches) {
|
||||
for (const m of matches) {
|
||||
// Skip version references like "Claude Code (v1.32.0)"
|
||||
if (/\(v?\d+\.\d+/.test(m)) continue;
|
||||
violations.push(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert.strictEqual(
|
||||
violations.length, 0,
|
||||
[
|
||||
'CHANGELOG must not include parenthetical product descriptions.',
|
||||
'Found:',
|
||||
...violations.map(v => ' ' + v),
|
||||
].join('\n')
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user