@su-record/vibe 3.2.12 → 3.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CLAUDE.md +15 -14
  2. package/README.en.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/__tests__/engines-contract.test.d.ts +2 -0
  5. package/dist/__tests__/engines-contract.test.d.ts.map +1 -0
  6. package/dist/__tests__/engines-contract.test.js +72 -0
  7. package/dist/__tests__/engines-contract.test.js.map +1 -0
  8. package/dist/__tests__/instruction-drift.test.d.ts +2 -0
  9. package/dist/__tests__/instruction-drift.test.d.ts.map +1 -0
  10. package/dist/__tests__/instruction-drift.test.js +116 -0
  11. package/dist/__tests__/instruction-drift.test.js.map +1 -0
  12. package/dist/__tests__/stakes-contract.test.js +7 -0
  13. package/dist/__tests__/stakes-contract.test.js.map +1 -1
  14. package/dist/__tests__/stuck-semantics.test.js +52 -0
  15. package/dist/__tests__/stuck-semantics.test.js.map +1 -1
  16. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  17. package/dist/cli/commands/upgrade.js +7 -7
  18. package/dist/cli/commands/upgrade.js.map +1 -1
  19. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  20. package/dist/cli/postinstall/fs-utils.js +53 -4
  21. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  22. package/dist/cli/postinstall/fs-utils.test.js +48 -0
  23. package/dist/cli/postinstall/fs-utils.test.js.map +1 -1
  24. package/dist/cli/setup/ProjectSetup.d.ts +6 -0
  25. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  26. package/dist/cli/setup/ProjectSetup.js +19 -13
  27. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  28. package/hooks/hooks.json +1 -1
  29. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  30. package/hooks/scripts/__tests__/anchor-inbox.test.js +119 -0
  31. package/hooks/scripts/__tests__/code-check-false-positive.test.js +74 -0
  32. package/hooks/scripts/__tests__/fixtures/seq-harness.js +13 -0
  33. package/hooks/scripts/__tests__/fixtures/seq-step.js +22 -0
  34. package/hooks/scripts/__tests__/stop-dispatcher-sequential.test.js +74 -0
  35. package/hooks/scripts/code-check.js +60 -50
  36. package/hooks/scripts/lib/anchor.js +74 -0
  37. package/hooks/scripts/lib/console-allow.js +66 -0
  38. package/hooks/scripts/lib/dispatcher.js +28 -16
  39. package/hooks/scripts/lib/inbox.js +60 -0
  40. package/hooks/scripts/loop-ledger.js +24 -1
  41. package/hooks/scripts/post-edit-dispatcher.js +4 -3
  42. package/hooks/scripts/post-edit.js +2 -2
  43. package/package.json +5 -3
  44. package/skills/vibe/SKILL.md +2 -1
  45. package/skills/vibe.clone/references/verification-loops.md +6 -3
  46. package/skills/vibe.loop/SKILL.md +7 -4
  47. package/skills/vibe.review/SKILL.md +5 -1
  48. package/skills/vibe.run/references/e2e-and-autofix.md +1 -1
  49. package/skills/vibe.run/references/process-steps.md +1 -1
  50. package/vibe/constitution.md +1 -1
  51. package/vibe/rules/loop-contract.md +40 -3
  52. package/vibe/rules/quality/checklist.md +3 -3
  53. package/vibe/templates/constitution-template.md +1 -1
package/CLAUDE.md CHANGED
@@ -7,12 +7,14 @@
7
7
  > - `AGENTS.md` — **Codex** (100% supported)
8
8
  >
9
9
  > `AGENTS.md` is regenerated from this file via `/vibe.docs agent`. Edit here first.
10
+ > **Translation rule** (so this file never carries both syntaxes): `/vibe.*` → `$vibe.*`, and
11
+ > Codex has no top-level `/vibe.*` slash commands — entrypoints are skills, reachable via `/skills`.
10
12
 
11
13
  ## Hard Rules
12
14
 
13
15
  ### Behavior
14
16
  - **Modify only requested scope** — Every changed line traces to the user's request
15
- - **Edit existing files over creating new** — Fix at source
17
+ - **Edit existing files over creating new** — Fix at source. Creating files is correct when the user asks for a new feature, module, or scaffold — an explicit request overrides this default
16
18
  - **Preserve existing style** — Match conventions even if you'd do it differently
17
19
  - **Respect Ctrl+C / Escape** — Previous task CANCELLED
18
20
  - **State assumptions, ask when uncertain** — Don't pick silently when ambiguity exists; push back if a simpler approach exists
@@ -88,11 +90,10 @@ Legacy: 기존 `.claude/vibe/` 는 런타임에 자동 인식되며 `vibe init`/
88
90
 
89
91
  ## Workflow
90
92
 
91
- Claude Code uses `/vibe` as the **single slash entry point**. Codex exposes the same Vibe entrypoints as skills, so use `$vibe`, `$vibe.spec`, or `/skills` instead of expecting top-level `/vibe.*` slash commands in the Codex popup. Natural-language requirement (+ optional URL/image/PDF/file attachments) → vibe analyzes intent, confirms the SPEC once (the only mandatory human gate), then loops per `vibe/rules/loop-contract.md` until gates pass. `automationLevel: autonomous` skips the confirmation for non-interactive runs.
93
+ `/vibe` is the **single slash entry point**. Natural-language requirement (+ optional URL/image/PDF/file attachments) → vibe analyzes intent, confirms the SPEC once (the only mandatory human gate), then loops per `vibe/rules/loop-contract.md` until gates pass. `automationLevel: autonomous` skips the confirmation for non-interactive runs.
92
94
 
93
95
  ```
94
- $vibe "<requirement>" [+ 📎 attachments] # Codex
95
- /vibe "<requirement>" [+ 📎 attachments] # Claude Code
96
+ /vibe "<requirement>" [+ 📎 attachments]
96
97
  → Intent classification (new feature / figma-driven / clone / resume / review / regress / contract / scaffold / docs / analyze / harness / test / continue / image)
97
98
  → Smart Resume detection (.vibe/{specs,features}/ — legacy interviews/plans 는 입력 컨텍스트로만 인식)
98
99
  → SPEC confirmation (1-time approval; skipped on automationLevel: autonomous)
@@ -100,20 +101,20 @@ $vibe "<requirement>" [+ 📎 attachments] # Codex
100
101
  ```
101
102
 
102
103
  **Advanced (explicit phase) entrypoints** — still available for power users when you know exactly which phase to run:
103
- - Codex: `$vibe.spec` / Claude Code: `/vibe.spec` — single-pass SPEC (인라인 질문 → SPEC 1패스 → 승인 1회; 구 interview/plan/spec-review 4단계는 폐지)
104
- - Codex: `$vibe.figma` / Claude Code: `/vibe.figma` — Figma ↔ code (UI track)
105
- - Codex: `$vibe.run` / Claude Code: `/vibe.run` — SPEC-driven implementation
106
- - Codex: `$vibe.verify` / Claude Code: `/vibe.verify` — implementation vs SPEC verification
107
- - Codex: `$vibe.regress` / Claude Code: `/vibe.regress` — regression test auto-evolution. Auto-registers on verify failure; `generate` produces preventive tests; `cluster` promotes recurring patterns.
108
- - Codex: `$vibe.contract` / Claude Code: `/vibe.contract` — API contract drift detection. Compares the contract extracted from the SPEC against the implementation; P1 drift auto-propagates to regress.
109
- - Codex: `$vibe.trace` / Claude Code: `/vibe.trace` — Requirements Traceability Matrix
110
- - Codex: `$vibe.loop` / Claude Code: `/vibe.loop` — loop engineering. Goal loops whose completion is judged by deterministic gates (run-ledger/tests), with stuck detection by discover-hash and a human triage inbox. Loops never push/release.
111
- - Codex: `$vibe.test` / Claude Code: `/vibe.test` — vibe self-test across the CC ↔ Codex harnesses. Subcommands: `parity` (static), `report` (runtime), `compare` (diff). P1 drift auto-propagates to regress. Recommended before every release.
104
+ - `/vibe.spec` — single-pass SPEC (인라인 질문 → SPEC 1패스 → 승인 1회; 구 interview/plan/spec-review 4단계는 폐지)
105
+ - `/vibe.figma` — Figma ↔ code (UI track)
106
+ - `/vibe.run` — SPEC-driven implementation
107
+ - `/vibe.verify` — implementation vs SPEC verification
108
+ - `/vibe.regress` — regression test auto-evolution. Auto-registers on verify failure; `generate` produces preventive tests; `cluster` promotes recurring patterns.
109
+ - `/vibe.contract` — API contract drift detection. Compares the contract extracted from the SPEC against the implementation; P1 drift auto-propagates to regress.
110
+ - `/vibe.trace` — Requirements Traceability Matrix
111
+ - `/vibe.loop` — loop engineering. Goal loops whose completion is judged by deterministic gates (run-ledger/tests), with stuck detection by discover-hash and a human triage inbox. Loops never push/release.
112
+ - `/vibe.test` — vibe self-test across the CC ↔ Codex harnesses. Subcommands: `parity` (static), `report` (runtime), `compare` (diff). P1 drift auto-propagates to regress. Recommended before every release.
112
113
 
113
114
  | Task Size | Approach |
114
115
  |---|---|
115
116
  | 1–2 files | Plan Mode |
116
- | 3+ files | `$vibe "<requirement>"` in Codex, `/vibe "<requirement>"` in Claude Code (or the explicit `vibe.spec` entrypoint) |
117
+ | 3+ files | `/vibe "<requirement>"` (or `/vibe.spec` to start at the SPEC phase) |
117
118
 
118
119
  ## Loop Contract (default execution model)
119
120
 
package/README.en.md CHANGED
@@ -254,7 +254,7 @@ Full guides, skill reference, and configuration details are in the [Wiki](https:
254
254
 
255
255
  ## Requirements
256
256
 
257
- - Node.js >= 18.0.0
257
+ - Node.js >= 20.12.0 (`better-sqlite3` needs Node 20+, `@clack/prompts` needs 20.12+)
258
258
  - Claude Code or Codex CLI
259
259
  - GPT, Antigravity (optional — second opinions only)
260
260
 
package/README.md CHANGED
@@ -222,7 +222,7 @@ codex
222
222
 
223
223
  ## 요구사항
224
224
 
225
- - Node.js >= 18.0.0
225
+ - Node.js >= 20.12.0 (`better-sqlite3` 는 Node 20+, `@clack/prompts` 는 20.12+ 요구)
226
226
  - Claude Code 또는 Codex CLI 중 하나
227
227
  - GPT, Antigravity (선택 — 세컨드 오피니언 전용)
228
228
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=engines-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engines-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/engines-contract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * engines.node 계약 테스트
3
+ *
4
+ * `package.json` 의 engines.node 는 프로덕션 의존성이 실제로 요구하는 최소 Node
5
+ * 버전보다 낮으면 안 된다. 낮으면 npm 이 "지원됨" 이라고 안내한 환경에서
6
+ * better-sqlite3 네이티브 빌드가 깨지거나 런타임에 실패한다.
7
+ *
8
+ * 배경: v3.2.13 까지 engines.node 가 ">=18.0.0" 이었으나 better-sqlite3 는 Node 20+,
9
+ * @clack/prompts 는 20.12+ 를 요구했다. 둘 다 optionalDependencies 가 아니라
10
+ * dependencies 이므로 Node 18 사용자에게 그대로 도달했다.
11
+ */
12
+ import { describe, it, expect } from 'vitest';
13
+ import fs from 'fs';
14
+ import path from 'path';
15
+ import { fileURLToPath } from 'url';
16
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
+ const ROOT = path.resolve(__dirname, '..', '..');
18
+ function readJson(file) {
19
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
20
+ }
21
+ /**
22
+ * engines 범위 문자열에서 허용되는 최소 버전을 [major, minor] 로 뽑는다.
23
+ * `20.x || 22.x || 23.x` → [20, 0] · `>= 20.12.0` → [20, 12] · `18 || 20 || >=22` → [18, 0]
24
+ */
25
+ function minSupported(range) {
26
+ // 버전 토큰은 통째로 잡는다 — `\d+(\.\d+)?` 로 자르면 "20.12.0" 이 ["20.12", "0"] 이 된다
27
+ const tokens = range.match(/\d+(?:\.\d+)*/g) ?? [];
28
+ const versions = tokens.map((t) => {
29
+ const [maj, min] = t.split('.');
30
+ return [Number(maj), Number(min ?? 0)];
31
+ });
32
+ if (versions.length === 0)
33
+ return [0, 0];
34
+ return versions.reduce((lo, v) => (v[0] !== lo[0] ? (v[0] < lo[0] ? v : lo) : v[1] < lo[1] ? v : lo));
35
+ }
36
+ function gte(a, b) {
37
+ return a[0] !== b[0] ? a[0] > b[0] : a[1] >= b[1];
38
+ }
39
+ const rootPkg = readJson(path.join(ROOT, 'package.json'));
40
+ const declared = minSupported(rootPkg.engines?.node ?? '');
41
+ describe('engines.node 계약', () => {
42
+ it('engines.node 가 선언돼 있다', () => {
43
+ expect(rootPkg.engines?.node).toBeTruthy();
44
+ });
45
+ it('모든 프로덕션 의존성의 최소 Node 요구를 만족한다', () => {
46
+ const deps = Object.keys(rootPkg.dependencies ?? {});
47
+ expect(deps.length).toBeGreaterThan(0);
48
+ const violations = [];
49
+ for (const dep of deps) {
50
+ const depPkgPath = path.join(ROOT, 'node_modules', dep, 'package.json');
51
+ if (!fs.existsSync(depPkgPath))
52
+ continue; // 미설치 환경에서는 건너뛴다
53
+ const depRange = readJson(depPkgPath).engines?.node;
54
+ if (!depRange)
55
+ continue;
56
+ const required = minSupported(depRange);
57
+ if (!gte(declared, required)) {
58
+ violations.push(`${dep} requires node "${depRange}" (min ${required.join('.')}) but package.json declares "${rootPkg.engines?.node}"`);
59
+ }
60
+ }
61
+ expect(violations).toEqual([]);
62
+ });
63
+ it('README 의 Node 요구사항이 package.json 과 일치한다', () => {
64
+ for (const readme of ['README.md', 'README.en.md']) {
65
+ const text = fs.readFileSync(path.join(ROOT, readme), 'utf-8');
66
+ const match = text.match(/Node\.js\s*>=\s*(\d+\.\d+\.\d+)/);
67
+ expect(match, `${readme} 에 "Node.js >= X.Y.Z" 요구사항 줄이 없다`).toBeTruthy();
68
+ expect(minSupported(match[1]), `${readme} 의 Node 요구사항이 package.json 과 다르다`).toEqual(declared);
69
+ }
70
+ });
71
+ });
72
+ //# sourceMappingURL=engines-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engines-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/engines-contract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=instruction-drift.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-drift.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/instruction-drift.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { adaptToCodex, buildGlobalSection } from '../cli/setup/ProjectSetup.js';
5
+ /**
6
+ * 지침 표면 드리프트 가드 — 감사 2026-07-27.
7
+ *
8
+ * 같은 규칙이 여러 파일에 적혀 있는 것 자체는 결함이 아니다. agent 프롬프트와
9
+ * skill reference 는 임의의 사용자 프로젝트로 배포되므로 자기완결적이어야 하고,
10
+ * 포인터로 바꾸면 dual-harness-doctrine 의 "암묵적 동작에 의존하지 않는다" 를
11
+ * 위반한다. 실제 위험은 **드리프트** — 한 곳만 고치면 나머지가 조용히 낡는다.
12
+ *
13
+ * 실제로 갈라져 있던 것:
14
+ * constitution.md "Functions ≤30 lines (recommended), ≤50 (allowed)" ← CLAUDE.md 는 ≤50
15
+ * ProjectSetup.ts 전역 Git include 가 repo CLAUDE.md 의 부분집합
16
+ * ProjectSetup.ts 3+ files 진입점이 `/vibe.spec`, 같은 파일 hard trigger 는 `/vibe`
17
+ */
18
+ const ROOT = path.resolve(__dirname, '..', '..');
19
+ function read(rel) {
20
+ return fs.readFileSync(path.join(ROOT, rel), 'utf-8');
21
+ }
22
+ /** SSOT: CLAUDE.md "Complexity Limits" */
23
+ // 간격에서 `≤` 를 제외한다 — 포함하면 "Nesting ≤3 · Params ≤5" 에서 nesting 이 5 를 집는다
24
+ const LIMITS = [
25
+ { name: '함수 길이', re: /functions?\b[^.\n|≤]{0,24}≤\s*(\d+)\s*lines/gi, value: 50 },
26
+ { name: '중첩 깊이', re: /nesting\b[^.\n|≤]{0,24}≤\s*(\d+)/gi, value: 3 },
27
+ { name: '파라미터 수', re: /params?(?:eters)?\b[^.\n|≤]{0,24}≤\s*(\d+)/gi, value: 5 },
28
+ { name: '순환 복잡도', re: /cyclomatic\b[^.\n|≤]{0,24}≤\s*(\d+)/gi, value: 10 },
29
+ ];
30
+ /** 복잡도 한계를 숫자로 다시 적는 문서 — 새로 적는 문서가 생기면 여기 등록한다 */
31
+ const DOCS_RESTATING_LIMITS = [
32
+ 'CLAUDE.md',
33
+ 'AGENTS.md',
34
+ 'vibe/constitution.md',
35
+ 'vibe/templates/claudemd-template.md',
36
+ 'vibe/templates/constitution-template.md',
37
+ 'vibe/rules/standards/complexity-metrics.md',
38
+ 'vibe/rules/quality/checklist.md',
39
+ 'agents/implementer.md',
40
+ 'agents/code-reviewer.md',
41
+ 'skills/vibe.run/references/race-review.md',
42
+ 'skills/vibe.run/references/guidelines-and-tools.md',
43
+ 'skills/vibe.capability-loop/agents/implementer.md',
44
+ ];
45
+ describe('복잡도 한계가 모든 재기술 지점에서 같다', () => {
46
+ it.each(DOCS_RESTATING_LIMITS)('%s', (rel) => {
47
+ const doc = read(rel);
48
+ for (const limit of LIMITS) {
49
+ for (const [, n] of doc.matchAll(limit.re)) {
50
+ expect(Number(n), `${rel}: ${limit.name} 한계가 SSOT(CLAUDE.md)와 다르다`).toBe(limit.value);
51
+ }
52
+ }
53
+ });
54
+ });
55
+ /**
56
+ * 전역 규약(`~/.claude/CLAUDE.md`)은 ProjectSetup.buildGlobalSection 이 생성한다.
57
+ * 설치본은 손댈 수 없으므로 생성기 소스와 repo CLAUDE.md 를 비교한다.
58
+ */
59
+ describe('전역 규약 생성기가 repo CLAUDE.md 와 어긋나지 않는다', () => {
60
+ const GENERATOR = 'src/cli/setup/ProjectSetup.ts';
61
+ /** `.vibe/{a,b,c}` 중괄호 안 항목 집합 */
62
+ function vibeIncludeSet(text) {
63
+ const m = text.match(/Include\*{0,2}:\s*`\.vibe\/\{([^}]+)\}`/);
64
+ if (!m)
65
+ throw new Error('Include 목록을 찾지 못했다');
66
+ return new Set(m[1].split(',').map(s => s.trim()));
67
+ }
68
+ it('Git include 목록이 같다', () => {
69
+ expect(vibeIncludeSet(read(GENERATOR))).toEqual(vibeIncludeSet(read('CLAUDE.md')));
70
+ });
71
+ it('3+ files 진입점이 hard trigger 와 같은 `/vibe` 를 가리킨다', () => {
72
+ const table = buildGlobalSection('en');
73
+ const row = table.match(/\| 3\+ files \| ([^|]+)\|/);
74
+ expect(row?.[1], '표와 hard trigger 가 다른 진입점을 지시하면 같은 조건에 지시가 둘이 된다')
75
+ .toMatch(/`\/vibe`/);
76
+ expect(table).toContain('run `/vibe` FIRST');
77
+ });
78
+ });
79
+ /**
80
+ * Codex 전역 규약은 buildGlobalSection 출력을 변환해 만든다. 행별 정확 문자열
81
+ * 치환이던 시절, 생성기 문구를 고치면 변환이 조용히 누락됐다 — 결과물로 검증한다.
82
+ */
83
+ describe('Codex 변환이 슬래시 커맨드를 남기지 않는다', () => {
84
+ const codex = adaptToCodex(buildGlobalSection('en'));
85
+ it('vibe 진입점이 모두 `$vibe` 형태다', () => {
86
+ // Codex 안내 문장 자체의 `/vibe.*` 표기(= 존재하지 않는다는 설명)만 예외
87
+ const leftovers = codex
88
+ .split('\n')
89
+ .filter(l => /\/vibe\b/.test(l) && !l.includes('not top-level'));
90
+ expect(leftovers, `변환되지 않은 줄:\n${leftovers.join('\n')}`).toEqual([]);
91
+ });
92
+ it('hard trigger 도 함께 변환된다', () => {
93
+ expect(codex).toContain('run `$vibe` FIRST');
94
+ });
95
+ it('Codex 는 commands/ 를 제외 목록에서 뺀다', () => {
96
+ expect(codex).toContain('`~/.codex/{rules,agents,skills}/`');
97
+ });
98
+ it('`.claude/` 경로가 남지 않는다', () => {
99
+ expect(codex).not.toMatch(/~\/\.claude\//);
100
+ });
101
+ });
102
+ /**
103
+ * console.log 탐지 범위 규칙은 lib/console-allow.js 하나만 둔다.
104
+ * code-check.js 와 post-edit.js 가 각자 들고 있던 시절, allow-list 없는 쪽이
105
+ * 있는 쪽의 예외 설계를 무력화해 `src/cli/**` 에서도 경고가 남았다.
106
+ */
107
+ describe('console.log 허용 경로 규칙이 한 곳에만 있다', () => {
108
+ const HOOKS = ['hooks/scripts/code-check.js', 'hooks/scripts/post-edit.js'];
109
+ it.each(HOOKS)('%s 가 공용 모듈을 쓴다', (rel) => {
110
+ expect(read(rel)).toMatch(/from '\.{1,2}\/lib\/console-allow\.js'/);
111
+ });
112
+ it.each(HOOKS)('%s 가 허용 글로브를 자체 정의하지 않는다', (rel) => {
113
+ expect(read(rel), `${rel}: 허용 경로 목록이 다시 등장`).not.toMatch(/DEFAULT_CONSOLE_ALLOW_GLOBS/);
114
+ });
115
+ });
116
+ //# sourceMappingURL=instruction-drift.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-drift.test.js","sourceRoot":"","sources":["../../src/__tests__/instruction-drift.test.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,13 @@ describe('D2 — loop-contract.md: Stakes 매핑 SSOT', () => {
34
34
  expect(doc).toContain('P2');
35
35
  expect(doc).toMatch(/게이트 통과 여부를 바꾸지 않는다/);
36
36
  });
37
+ /**
38
+ * run-ledger 스키마에 경고 필드가 없다 — "run-ledger 에 기록한다" 는 갈 곳 없는 지시였다.
39
+ * 감사 2026-07-28(L4): 문서를 구현에 맞춰 보고용으로 내렸다.
40
+ */
41
+ it('절제 경고를 run-ledger 에 적재한다고 주장하지 않는다', () => {
42
+ expect(doc).not.toMatch(/P2 경고[^\n]{0,20}run-ledger 에 기록/);
43
+ });
37
44
  it('production 기본 동작 불변: max_iterations 기본 10 유지', () => {
38
45
  expect(doc).toMatch(/\|\s*`max_iterations`\s*\|\s*10\s*\|/);
39
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"stakes-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/stakes-contract.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stakes-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/stakes-contract.test.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,13 @@ const DOCS_STATING_STUCK = [
29
29
  'skills/vibe/SKILL.md',
30
30
  'skills/vibe.run/references/automation-level.md',
31
31
  'skills/vibe.run/references/coverage-loop.md',
32
+ // 감사 2026-07-27: 아래 둘이 목록에 없어서, 가드가 있는데도 "stuck → 완료 기록"
33
+ // 위반이 살아남았다. 커버리지 목록 자체가 드리프트의 통로였다.
34
+ 'skills/vibe.run/references/process-steps.md',
35
+ 'skills/vibe.clone/references/verification-loops.md',
36
+ // 감사 2026-07-28(L1): vibe.review 는 같은 상태를 "stuck" 이 아니라 "converged" 라
37
+ // 불러서 위 가드를 통째로 비켜갔다 — 단어가 아니라 의미로도 막는다 (아래 수렴 절).
38
+ 'skills/vibe.review/SKILL.md',
32
39
  ];
33
40
  describe('stuck 시맨틱 — SSOT', () => {
34
41
  const ssot = read('vibe/rules/loop-contract.md');
@@ -66,6 +73,23 @@ describe('stuck 시맨틱 — 문서 간 정합', () => {
66
73
  expect(doc, `${rel}: 미달 처리 규칙 없음`)
67
74
  .toMatch(/완료로 기록하지 않는다|as complete|TODO|인박스/);
68
75
  });
76
+ /**
77
+ * 위 검사는 "미달 처리 규칙을 언급하는가" 만 본다 — 언급하면서 동시에 완료로
78
+ * 기록하라고 적을 수 있다. 실제로 process-steps.md 는 "TODO + done", clone 의
79
+ * verification-loops.md 는 "record TODO ... and complete" 로 적혀 있었다.
80
+ * 위반 문구 자체를 금지한다.
81
+ */
82
+ it.each(DOCS_STATING_STUCK)('%s 가 stuck 을 완료로 기록하라고 적지 않는다', (rel) => {
83
+ const doc = read(rel);
84
+ if (!/stuck/i.test(doc))
85
+ return;
86
+ for (const line of doc.split('\n')) {
87
+ if (!/stuck/i.test(line))
88
+ continue;
89
+ expect(line, `${rel}: stuck 을 완료로 기록하는 지시`)
90
+ .not.toMatch(/TODO \+ done|without prompting and complete\b/i);
91
+ }
92
+ });
69
93
  /**
70
94
  * stuck 은 **발견 해시**로 판정한다. 커버리지 수치로 바꿔 적으면 판정이 달라진다 —
71
95
  * 커버리지가 그대로여도 남은 항목이 바뀌었으면 진전이고, 반대로 커버리지가 올라도
@@ -84,6 +108,34 @@ describe('stuck 시맨틱 — 문서 간 정합', () => {
84
108
  * 요약을 여러 곳에 두었더니 `quick` 의 "최소 JUDGE" 가 빠지고 `ralplan` 이
85
109
  * 누락되는 식으로 어긋났다 — 부분 요약은 전체 사본보다 드리프트를 알아채기 어렵다.
86
110
  */
111
+ /**
112
+ * "발견이 안 바뀜" 은 수렴이 아니라 stuck 이다 — 남은 P1 이 0 일 때만 수렴이다.
113
+ * vibe.review 는 이 상태를 "converged → DONE" 이라 적어, stuck 단어를 쓰지 않는 것만으로
114
+ * 위 가드를 전부 비켜갔다 (감사 2026-07-28 L1). 부르는 이름과 무관하게 막는다.
115
+ */
116
+ describe('발견 불변을 P1 조건 없이 완료로 부르지 않는다', () => {
117
+ const DOCS_STATING_CONVERGENCE = [
118
+ 'skills/vibe.review/SKILL.md',
119
+ 'vibe/rules/loop-contract.md',
120
+ 'CLAUDE.md',
121
+ 'AGENTS.md',
122
+ ];
123
+ it.each(DOCS_STATING_CONVERGENCE)('%s', (rel) => {
124
+ for (const line of read(rel).split('\n')) {
125
+ const claimsDone = /→\s*(?:DONE|완료)|means DONE|= *converged/i.test(line);
126
+ if (!claimsDone)
127
+ continue;
128
+ if (!/unchanged|안 바뀌|동일|no new findings|새 발견/i.test(line))
129
+ continue;
130
+ expect(line, `${rel}: 발견 불변만으로 완료 선언 (P1=0 조건 없음)`)
131
+ .toMatch(/P1 *= *0|P1=0/);
132
+ }
133
+ });
134
+ it('vibe.review 가 P1 잔존 시 stuck 임을 명시한다', () => {
135
+ expect(read('skills/vibe.review/SKILL.md'))
136
+ .toMatch(/P1 *> *0[^\n]*(?:STUCK|stuck)/);
137
+ });
138
+ });
87
139
  describe('deprecated 별칭 매핑 정합', () => {
88
140
  const ssot = read('vibe/rules/loop-contract.md');
89
141
  it('SSOT 에 별칭 5종이 모두 정의돼 있다', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-semantics.test.js","sourceRoot":"","sources":["../../src/__tests__/stuck-semantics.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stuck-semantics.test.js","sourceRoot":"","sources":["../../src/__tests__/stuck-semantics.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAuBzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYjE;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BhE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,GAAE,UAA8B,GAAG,IAAI,CAmDtE"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAuBzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYjE;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BhE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,GAAE,UAA8B,GAAG,IAAI,CAsDtE"}
@@ -129,13 +129,13 @@ export function upgrade(_options = { silent: false }) {
129
129
  log('⬆️ Upgrading to latest version...\n');
130
130
  cleanStaleTempDirs();
131
131
  // --prefer-online: npm 캐시 대신 레지스트리에서 최신 버전 확인
132
- // stdio: 'pipe' 로 npm 노이즈를 숨기지만, postinstall **보고성 라인**은
133
- // 되살려야 한다 그러지 않으면 "철회된 스킬 파일을 지웠다" 같은 사실이 조용히
134
- // 사라진다 (pruneExtraneousSkillFiles no-silent-deletion 계약).
135
- const npmOutput = execSync('npm install -g @su-record/vibe@latest --prefer-online', {
136
- stdio: 'pipe',
137
- encoding: 'utf-8',
138
- });
132
+ // --foreground-scripts: npm 기본적으로 lifecycle script 출력을 **버린다**.
133
+ // 플래그가 없으면 postinstall console.log stdout 아예 오지 않아
134
+ // 아래 extractPostinstallReport 파싱할 것이 없다 (실측 확인).
135
+ // stdio: 'pipe' npm 노이즈는 계속 숨기고, 보고성 라인만 골라 되살린다 —
136
+ // 그러지 않으면 "철회된 스킬 파일을 지웠다" 가 조용히 사라진다
137
+ // (pruneExtraneousSkillFiles 의 no-silent-deletion 계약).
138
+ const npmOutput = execSync('npm install -g @su-record/vibe@latest --prefer-online --foreground-scripts', { stdio: 'pipe', encoding: 'utf-8' });
139
139
  const postinstallReport = extractPostinstallReport(npmOutput);
140
140
  // 설치된 새 버전을 디스크에서 직접 읽기 (현재 프로세스의 캐시된 값이 아닌)
141
141
  let newVersion = 'unknown';
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/fs-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,gBAAgB,2BAAqB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkB3D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAahE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAYnE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,IAAI,CAON;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,MAAM,EAAE,CAiBV;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,QAAQ,CAAC;AAEtG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AA0CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,EACrC,gBAAgB,EAAE,MAAM,EACxB,MAAM,UAAQ,GACb,mBAAmB,EAAE,CA2BvB;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC7C,mBAAmB,EAAE,CAsBvB;AAqCD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAWzE"}
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/fs-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,gBAAgB,2BAAqB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkB3D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAahE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAYnE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyC7E;AAoCD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,IAAI,CAON;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,MAAM,EAAE,CAiBV;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,QAAQ,CAAC;AAEtG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AA0CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,EACrC,gBAAgB,EAAE,MAAM,EACxB,MAAM,UAAQ,GACb,mBAAmB,EAAE,CA2BvB;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC7C,mBAAmB,EAAE,CAsBvB;AAqCD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAWzE"}
@@ -111,11 +111,25 @@ export function pruneExtraneousSkillFiles(src, dest) {
111
111
  const destPath = path.join(dest, entry.name);
112
112
  const srcPath = path.join(src, entry.name);
113
113
  if (!fs.existsSync(srcPath)) {
114
- if (entry.isDirectory())
115
- fs.rmSync(destPath, { recursive: true, force: true });
116
- else
114
+ // vibe 가 설치 후 **생성**하는 산출물은 배송본에 없는 것이 정상이다.
115
+ // 지웠다 재생성하면 upgrade 마다 "정리했다" 보고가 뜨는데, 실제로는 철회된
116
+ // 문서가 아니라 vibe 자신의 생성물이라 보고가 노이즈가 된다.
117
+ if (isVibeGeneratedArtifact(destPath))
118
+ continue;
119
+ if (entry.isDirectory()) {
120
+ // 통째로 지우지 않는다 — 생성물이 섞여 있으면 그것까지 날아간다.
121
+ // srcPath 가 없는 상태로 재귀하면 모든 자식이 "배송본에 없음" 으로 평가되어
122
+ // 생성물만 남고 나머지가 정리된다. 비게 되면 디렉토리도 제거한다.
123
+ removed.push(...pruneExtraneousSkillFiles(srcPath, destPath).map((p) => path.join(entry.name, p)));
124
+ if (fs.readdirSync(destPath).length === 0) {
125
+ fs.rmSync(destPath, { recursive: true, force: true });
126
+ removed.push(entry.name);
127
+ }
128
+ }
129
+ else {
117
130
  fs.rmSync(destPath, { force: true });
118
- removed.push(entry.name);
131
+ removed.push(entry.name);
132
+ }
119
133
  continue;
120
134
  }
121
135
  if (entry.isDirectory()) {
@@ -124,6 +138,41 @@ export function pruneExtraneousSkillFiles(src, dest) {
124
138
  }
125
139
  return removed;
126
140
  }
141
+ /**
142
+ * 설치 후 vibe 가 생성한 산출물인지 — 배송본에 없어도 지우지 않는다.
143
+ *
144
+ * 현재 대상: `applyCodexSkillInvocationPolicies` 가 쓰는 `agents/openai.yaml`
145
+ * (`CODEX_POLICY_MARKER` 로 식별). 디렉토리는 내부가 전부 생성물일 때만 생성물로 본다 —
146
+ * 사용자/배송 파일이 섞여 있으면 지우지 않는 쪽이 안전하다.
147
+ */
148
+ function isVibeGeneratedArtifact(destPath) {
149
+ let stat;
150
+ try {
151
+ stat = fs.statSync(destPath);
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ if (stat.isDirectory()) {
157
+ let entries;
158
+ try {
159
+ entries = fs.readdirSync(destPath, { withFileTypes: true });
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ // 빈 디렉토리는 생성물로 보지 않는다 (정리 대상)
165
+ if (entries.length === 0)
166
+ return false;
167
+ return entries.every((e) => isVibeGeneratedArtifact(path.join(destPath, e.name)));
168
+ }
169
+ try {
170
+ return fs.readFileSync(destPath, 'utf-8').includes(CODEX_POLICY_MARKER);
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ }
127
176
  /**
128
177
  * 레거시 스킬 디렉토리 삭제 (이름 변경된 구 디렉토리 정리)
129
178
  */