@su-record/vibe 3.2.6 → 3.2.8

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 (160) hide show
  1. package/CLAUDE.md +5 -2
  2. package/README.en.md +1 -1
  3. package/README.md +1 -1
  4. package/agents/build-error-resolver.md +1 -1
  5. package/agents/code-reviewer.md +1 -1
  6. package/agents/e2e-tester.md +1 -1
  7. package/agents/event/event-ops.md +1 -1
  8. package/agents/event/event-planner.md +1 -1
  9. package/agents/implementer.md +1 -1
  10. package/agents/security-reviewer.md +1 -1
  11. package/agents/tester.md +1 -1
  12. package/agents/ui/design-reviewer.md +1 -1
  13. package/agents/ui/design-system-gen.md +1 -1
  14. package/dist/cli/commands/info.d.ts +9 -0
  15. package/dist/cli/commands/info.d.ts.map +1 -1
  16. package/dist/cli/commands/info.js +32 -0
  17. package/dist/cli/commands/info.js.map +1 -1
  18. package/dist/cli/commands/info.test.js +34 -1
  19. package/dist/cli/commands/info.test.js.map +1 -1
  20. package/dist/cli/commands/upgrade.d.ts +18 -0
  21. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  22. package/dist/cli/commands/upgrade.js +60 -2
  23. package/dist/cli/commands/upgrade.js.map +1 -1
  24. package/dist/cli/commands/upgrade.test.js +51 -1
  25. package/dist/cli/commands/upgrade.test.js.map +1 -1
  26. package/dist/cli/generate-release-notes.js +8 -6
  27. package/dist/cli/generate-release-notes.js.map +1 -1
  28. package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
  29. package/dist/cli/postinstall/claude-agents.js +3 -1
  30. package/dist/cli/postinstall/claude-agents.js.map +1 -1
  31. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  32. package/dist/cli/postinstall/constants.js +27 -21
  33. package/dist/cli/postinstall/constants.js.map +1 -1
  34. package/dist/tests/curated-release-notes.test.js +55 -1
  35. package/dist/tests/curated-release-notes.test.js.map +1 -1
  36. package/dist/tools/release/releaseNotes.d.ts +22 -0
  37. package/dist/tools/release/releaseNotes.d.ts.map +1 -1
  38. package/dist/tools/release/releaseNotes.js +45 -0
  39. package/dist/tools/release/releaseNotes.js.map +1 -1
  40. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
  41. package/hooks/scripts/__tests__/code-check-detectors.test.js +58 -0
  42. package/hooks/scripts/code-check.js +7 -0
  43. package/package.json +2 -2
  44. package/skills/vibe/SKILL.md +27 -86
  45. package/skills/vibe/references/routing-examples.md +85 -0
  46. package/skills/vibe.agents-md/SKILL.md +12 -10
  47. package/skills/vibe.analyze/SKILL.md +22 -211
  48. package/skills/vibe.analyze/references/mode1-feature.md +81 -0
  49. package/skills/vibe.analyze/references/mode2-document.md +50 -0
  50. package/skills/vibe.analyze/references/mode3-website.md +47 -0
  51. package/skills/vibe.analyze/references/mode4-quality.md +35 -0
  52. package/skills/vibe.analyze/references/output-templates.md +2 -2
  53. package/skills/vibe.brand-assets/SKILL.md +2 -2
  54. package/skills/vibe.brand-assets/references/mobile-assets.md +6 -0
  55. package/skills/vibe.capability-loop/SKILL.md +14 -80
  56. package/skills/vibe.capability-loop/references/escalate.md +86 -0
  57. package/skills/vibe.chub-usage/SKILL.md +3 -132
  58. package/skills/vibe.clone/SKILL.md +43 -358
  59. package/skills/vibe.clone/references/phase-commands.md +118 -0
  60. package/skills/vibe.clone/references/setup-and-layout.md +34 -0
  61. package/skills/vibe.clone/references/verification-loops.md +64 -0
  62. package/skills/vibe.commit-push-pr/SKILL.md +10 -4
  63. package/skills/vibe.context7-usage/SKILL.md +3 -99
  64. package/skills/vibe.continue/SKILL.md +17 -7
  65. package/skills/{vibe.handoff → vibe.continue}/agents/context-summarizer.md +1 -1
  66. package/skills/{vibe.handoff → vibe.continue}/agents/document-writer.md +1 -1
  67. package/skills/{vibe.handoff → vibe.continue}/agents/state-collector.md +1 -1
  68. package/skills/{vibe.handoff → vibe.continue}/agents/verifier.md +1 -1
  69. package/skills/{vibe.handoff/rubrics/completeness.md → vibe.continue/references/handoff-completeness.md} +1 -1
  70. package/skills/{vibe.handoff/templates → vibe.continue/references}/handoff.md +37 -2
  71. package/skills/vibe.contract/SKILL.md +4 -27
  72. package/skills/vibe.create-prd/SKILL.md +8 -1
  73. package/skills/vibe.design/SKILL.md +18 -5
  74. package/skills/vibe.design/references/design-context.md +184 -0
  75. package/skills/vibe.design-refine/SKILL.md +7 -0
  76. package/skills/vibe.design-review/SKILL.md +7 -0
  77. package/skills/vibe.design-teach/SKILL.md +2 -175
  78. package/skills/vibe.devlog/SKILL.md +14 -11
  79. package/skills/vibe.devlog/references/auto-push.md +10 -0
  80. package/skills/vibe.docs/SKILL.md +27 -198
  81. package/skills/vibe.docs/references/agent.md +55 -0
  82. package/skills/vibe.docs/references/arch.md +28 -0
  83. package/skills/vibe.docs/references/codemaps.md +17 -0
  84. package/skills/vibe.docs/references/diagram.md +24 -0
  85. package/skills/vibe.docs/references/guide.md +23 -0
  86. package/skills/vibe.docs/references/readme.md +45 -0
  87. package/skills/vibe.docs/references/release.md +31 -0
  88. package/skills/vibe.documentation-provider/SKILL.md +22 -0
  89. package/skills/vibe.documentation-provider/references/chub.md +141 -0
  90. package/skills/vibe.documentation-provider/references/context7.md +107 -0
  91. package/skills/vibe.educational-content/SKILL.md +7 -0
  92. package/skills/vibe.event/SKILL.md +47 -146
  93. package/skills/vibe.event/references/comms.md +173 -0
  94. package/skills/vibe.event/references/operations.md +208 -0
  95. package/skills/vibe.event/references/orchestration-legacy.md +97 -0
  96. package/skills/vibe.event/references/planning.md +145 -0
  97. package/skills/vibe.event-comms/SKILL.md +3 -165
  98. package/skills/vibe.event-ops/SKILL.md +3 -200
  99. package/skills/vibe.event-planning/SKILL.md +3 -137
  100. package/skills/vibe.figma/SKILL.md +26 -692
  101. package/skills/vibe.figma/references/branch1-read-convention.md +82 -0
  102. package/skills/vibe.figma/references/branch2-read-standalone.md +69 -0
  103. package/skills/vibe.figma/references/branch3-write.md +122 -0
  104. package/skills/vibe.figma/references/core-implementation.md +453 -0
  105. package/skills/vibe.git-worktree/SKILL.md +2 -6
  106. package/skills/vibe.git-worktree/references/troubleshooting.md +9 -0
  107. package/skills/vibe.handoff/SKILL.md +2 -103
  108. package/skills/vibe.harness/SKILL.md +17 -12
  109. package/skills/vibe.image/SKILL.md +8 -1
  110. package/skills/vibe.llm/SKILL.md +8 -1
  111. package/skills/vibe.loop/SKILL.md +9 -11
  112. package/skills/vibe.loop/references/install-adapters.md +10 -0
  113. package/skills/vibe.presentation/SKILL.md +7 -0
  114. package/skills/vibe.prioritization/SKILL.md +7 -0
  115. package/skills/vibe.priority-todos/SKILL.md +2 -57
  116. package/skills/vibe.react-best-practices/SKILL.md +1 -1
  117. package/skills/vibe.reason/SKILL.md +9 -2
  118. package/skills/vibe.regress/SKILL.md +6 -28
  119. package/skills/vibe.regress/templates/{test-jest.md → test-template.md} +1 -0
  120. package/skills/vibe.review/SKILL.md +62 -52
  121. package/skills/vibe.review/references/priority-todos.md +66 -0
  122. package/skills/vibe.review/references/ui-ux-review.md +39 -0
  123. package/skills/vibe.run/SKILL.md +63 -660
  124. package/skills/vibe.run/references/arch-guard.md +178 -0
  125. package/skills/vibe.run/references/e2e-and-autofix.md +40 -0
  126. package/skills/vibe.run/references/exec-plan.md +145 -0
  127. package/skills/vibe.run/references/guidelines-and-tools.md +84 -0
  128. package/skills/vibe.run/references/parallel-agents.md +44 -60
  129. package/skills/vibe.run/references/process-steps.md +179 -0
  130. package/skills/vibe.run/references/restraint.md +66 -0
  131. package/skills/vibe.run/references/ultrawork-mode.md +1 -1
  132. package/skills/vibe.scaffold/SKILL.md +9 -13
  133. package/skills/vibe.scaffold/references/clean-architecture.md +17 -0
  134. package/skills/vibe.spec/SKILL.md +13 -9
  135. package/skills/vibe.spec/references/legacy-artifacts.md +6 -0
  136. package/skills/vibe.test/SKILL.md +93 -70
  137. package/skills/vibe.test/references/report-template.md +101 -0
  138. package/skills/vibe.tool-fallback/SKILL.md +10 -32
  139. package/skills/vibe.tool-fallback/references/external-llm.md +10 -0
  140. package/skills/vibe.tool-fallback/references/file-lookup.md +9 -0
  141. package/skills/vibe.tool-fallback/references/web-search.md +11 -0
  142. package/skills/vibe.trace/SKILL.md +2 -264
  143. package/skills/vibe.ui-ux-pro-max/SKILL.md +1 -3
  144. package/skills/vibe.ui-ux-pro-max/references/charts-and-data.md +7 -0
  145. package/skills/vibe.user-personas/SKILL.md +8 -1
  146. package/skills/vibe.verify/SKILL.md +30 -4
  147. package/skills/vibe.verify/references/trace-mode.md +271 -0
  148. package/vibe/rules/principles/dual-harness-doctrine.md +10 -9
  149. package/skills/vibe.regress/templates/test-vitest.md +0 -30
  150. /package/skills/{vibe.design-teach/rubrics → vibe.design/references}/brand-personality.md +0 -0
  151. /package/skills/{vibe.design-teach → vibe.design}/templates/design-context.json +0 -0
  152. /package/skills/{vibe.context7-usage/rubrics/when-to-use.md → vibe.documentation-provider/references/context7-when-to-use.md} +0 -0
  153. /package/skills/{vibe.event-ops/rubrics → vibe.event/references}/contingency.md +0 -0
  154. /package/skills/{vibe.event-ops/templates/d-day-checklist.md → vibe.event/references/d-day-checklist-template.md} +0 -0
  155. /package/skills/{vibe.event-comms/templates/email-invite.md → vibe.event/references/email-invite-template.md} +0 -0
  156. /package/skills/{vibe.event-planning/templates/event-plan.md → vibe.event/references/event-plan-template.md} +0 -0
  157. /package/skills/{vibe.event-comms/templates/sns-post.md → vibe.event/references/sns-post-template.md} +0 -0
  158. /package/skills/{vibe.event-planning/rubrics → vibe.event/references}/timeline.md +0 -0
  159. /package/skills/{vibe.priority-todos/templates/todo-board.md → vibe.review/references/todo-board-template.md} +0 -0
  160. /package/skills/{vibe.priority-todos/rubrics/prioritization.md → vibe.review/references/todo-prioritization.md} +0 -0
@@ -0,0 +1,271 @@
1
+ ---
2
+ name: verify-trace-mode-reference
3
+ description: Generate and display Requirements Traceability Matrix (RTM) — REQ → SPEC → Feature → Code 관계 추적
4
+ argument-hint: "feature-name [--html] [--save]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # /vibe.trace
9
+
10
+ Generate and display Requirements Traceability Matrix (RTM).
11
+
12
+ ## Usage
13
+
14
+ ```bash
15
+ /vibe.trace "feature-name" # Generate RTM for feature
16
+ /vibe.trace "feature-name" --html # Output as HTML
17
+ /vibe.trace "feature-name" --save # Save to file
18
+ ```
19
+
20
+ > **⏱️ Timer**: Query the system clock at START and record the result as `{start_time}`.
21
+
22
+ ## Description
23
+
24
+ Requirements Traceability Matrix (RTM) tracks the relationship between:
25
+ - **Requirements** (REQ-xxx-xxx)
26
+ - **SPEC sections** (Phase tasks)
27
+ - **Feature scenarios** (BDD)
28
+ - **Test files** (unit/integration tests)
29
+
30
+ ## Process
31
+
32
+ ### 1. Load Files
33
+
34
+ **Search order (check BOTH file AND folder):**
35
+
36
+ ```
37
+ Step 1: Check if SPLIT structure exists (folder)
38
+ 📁 .vibe/specs/{feature-name}/ → Folder with _index.md + phase files
39
+ 📁 .vibe/features/{feature-name}/ → Folder with _index.feature + phase files
40
+
41
+ Step 2: If no folder, check single file
42
+ 📄 .vibe/specs/{feature-name}.md → Single SPEC file
43
+ 📄 .vibe/features/{feature-name}.feature → Single Feature file
44
+
45
+ Step 3: If neither exists → Error
46
+ ```
47
+
48
+ **Split structure (folder) detected:**
49
+ ```
50
+ 📁 .vibe/specs/{feature-name}/
51
+ ├── _index.md → Master SPEC (read first)
52
+ ├── phase-1-{name}.md → Phase 1 SPEC
53
+ └── ...
54
+
55
+ 📁 .vibe/features/{feature-name}/
56
+ ├── _index.feature → Master Feature (read first)
57
+ ├── phase-1-{name}.feature → Phase 1 scenarios
58
+ └── ...
59
+
60
+ → Load all phase files, generate RTM across all phases
61
+ ```
62
+
63
+ **Single file detected:**
64
+ ```
65
+ 📄 .vibe/specs/{feature-name}.md → SPEC
66
+ 📄 .vibe/features/{feature-name}.feature → Feature
67
+ ```
68
+
69
+ **Additional (auto-detect):**
70
+ ```
71
+ 📄 src/**/*.test.ts → Tests (auto-detect)
72
+ ```
73
+
74
+ **Error if NEITHER file NOR folder found:**
75
+ ```
76
+ ❌ SPEC not found. Searched:
77
+ - .vibe/specs/{feature-name}/ (folder)
78
+ - .vibe/specs/{feature-name}.md (file)
79
+
80
+ Run /vibe.spec "{feature-name}" first.
81
+ ```
82
+
83
+ ### 2. Extract Mappings
84
+
85
+ For each requirement ID (REQ-xxx-xxx):
86
+ 1. Find corresponding SPEC section
87
+ 2. Find matching Feature scenario
88
+ 3. Find related test file
89
+
90
+ ### 3. Calculate Coverage
91
+
92
+ ```
93
+ Coverage = (Full coverage items / Total requirements) × 100%
94
+
95
+ Full coverage = Has SPEC + Feature + Test
96
+ Partial = Missing one or more
97
+ None = Only in SPEC
98
+ ```
99
+
100
+ ### 4. Output RTM
101
+
102
+ ```
103
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
104
+ 📊 REQUIREMENTS TRACEABILITY MATRIX: {feature-name}
105
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
106
+
107
+ ## Summary
108
+ | Metric | Value |
109
+ |-------------------|----------|
110
+ | Total Requirements| 10 |
111
+ | SPEC Coverage | 10/10 |
112
+ | Feature Coverage | 8/10 |
113
+ | Test Coverage | 6/10 |
114
+ | **Overall** | **60%** |
115
+
116
+ ## Traceability Matrix
117
+
118
+ | Requirement | SPEC | Feature | Test | Coverage |
119
+ |-------------|------|---------|------|----------|
120
+ | REQ-login-001 | ✅ Phase 1 | ✅ Scenario 1 | ✅ login.test.ts | ✅ Full |
121
+ | REQ-login-002 | ✅ Phase 1 | ✅ Scenario 2 | ❌ | ⚠️ Partial |
122
+ | REQ-login-003 | ✅ Phase 2 | ❌ | ❌ | ❌ None |
123
+
124
+ ## Uncovered Requirements
125
+
126
+ The following requirements lack full coverage:
127
+
128
+ - **REQ-login-002**: Password validation
129
+ - Missing: Test file
130
+
131
+ - **REQ-login-003**: Remember me functionality
132
+ - Missing: Feature scenario, Test file
133
+
134
+ ## Recommendations
135
+
136
+ ⚠️ Coverage is at 60%. Consider:
137
+ - Add Feature scenarios for uncovered requirements
138
+ - Add test cases for uncovered requirements
139
+
140
+ ⏱️ Started: {start_time}
141
+ ⏱️ Completed: {system clock result}
142
+
143
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
144
+ ```
145
+
146
+ ## Example
147
+
148
+ ```
149
+ User: /vibe.trace "login"
150
+
151
+ Active harness:
152
+ 📊 Generating RTM for "login"...
153
+
154
+ Loading files:
155
+ ✅ SPEC: .vibe/specs/login.md (5 requirements)
156
+ ✅ Feature: .vibe/features/login.feature (4 scenarios)
157
+ ✅ Tests: 3 test files found
158
+
159
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
160
+ 📊 REQUIREMENTS TRACEABILITY MATRIX: login
161
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
162
+
163
+ ## Summary
164
+ | Metric | Value |
165
+ |-------------------|----------|
166
+ | Total Requirements| 5 |
167
+ | SPEC Coverage | 5/5 |
168
+ | Feature Coverage | 4/5 |
169
+ | Test Coverage | 3/5 |
170
+ | **Overall** | **60%** |
171
+
172
+ ## Traceability Matrix
173
+
174
+ | Requirement | SPEC | Feature | Test | Coverage |
175
+ |-------------|------|---------|------|----------|
176
+ | REQ-login-001 | ✅ | ✅ | ✅ | ✅ Full |
177
+ | REQ-login-002 | ✅ | ✅ | ✅ | ✅ Full |
178
+ | REQ-login-003 | ✅ | ✅ | ✅ | ✅ Full |
179
+ | REQ-login-004 | ✅ | ✅ | ❌ | ⚠️ Partial |
180
+ | REQ-login-005 | ✅ | ❌ | ❌ | ❌ None |
181
+
182
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
183
+ ```
184
+
185
+ ## Tool Integration
186
+
187
+ The RTM generation uses core tools:
188
+
189
+ ```bash
190
+ # Generate RTM (generateTraceabilityMatrix is synchronous — no .then())
191
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsMarkdown(m)); })"
192
+
193
+ # Generate HTML
194
+ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const m = t.generateTraceabilityMatrix('login', {projectPath: process.cwd()}); console.log(t.formatMatrixAsHtml(m)); })"
195
+ ```
196
+
197
+ > **Note:** Default SPEC path is `.vibe/specs/<feature>.md` (falls back to `.claude/vibe/specs/` then `.claude/specs/` for legacy projects).
198
+ > `status === 'empty'` means the gate MUST be treated as failed/not-applicable, never as 100% pass.
199
+
200
+ ## Post-Trace Gates
201
+
202
+ After `/vibe.trace` completes and the RTM is displayed, two downstream mechanisms consume the result.
203
+
204
+ ### Empty-result gate
205
+
206
+ `generateTraceabilityMatrix` returns `status: 'empty'` when no `REQ-<feature>-NNN` IDs are found in the SPEC. This state **must be treated as a gate failure**, not as 100% coverage. When the matrix status is `empty`, report it explicitly and do not proceed as if the feature is verified.
207
+
208
+ ```
209
+ RTM status === 'empty'
210
+ → Coverage gate: FAILED (no requirements to trace)
211
+ → Action: run /vibe.spec to add REQ-IDs before re-running /vibe.trace
212
+ ```
213
+
214
+ ### Run-ledger flow
215
+
216
+ `/vibe.verify` records its outcome through `hooks/scripts/verify-ledger.js`, binding the current run ID and command-result evidence. This writes `verifyPassed` and `verifyAt` into `.vibe/metrics/run-ledger.json`. Downstream gates consume this record:
217
+
218
+ | Gate | Behavior |
219
+ |------|----------|
220
+ | `auto-commit` | Commits only when `verifyPassed === true` AND `verifyAt > runStarted` |
221
+ | Explicit JUDGE | Run `/vibe.verify`; it must record `verifyPassed` and command evidence before completion |
222
+ | Lifecycle hook (optional) | May warn when `runStarted && !verifyPassed`; never substitutes for the explicit JUDGE |
223
+
224
+ **To register a passing trace as verified**, run `/vibe.verify` after `/vibe.trace` reports acceptable coverage. The verify skill records the current run ID and command evidence internally — you do not invoke the ledger CLI manually.
225
+
226
+ ```
227
+ /vibe.trace "login" → RTM: 9/9 (100%)
228
+ /vibe.verify "login" → runs checks → records pass + run ID + command results
229
+ → .vibe/metrics/run-ledger.json updated
230
+ auto-commit / Stop gate → verifyPassed=true, gate clears
231
+ ```
232
+
233
+ If `/vibe.verify` is skipped, `auto-commit` will log the skip reason and abort the commit.
234
+
235
+ ## Options
236
+
237
+ | Option | Description |
238
+ |--------|-------------|
239
+ | `--html` | Output as HTML file |
240
+ | `--save` | Save to `.vibe/reports/{feature}-rtm.md` |
241
+ | `--json` | Output as JSON |
242
+
243
+ ## Coverage Targets
244
+
245
+ | Coverage Level | Status |
246
+ |----------------|--------|
247
+ | 90-100% | ✅ Excellent - Ready for release |
248
+ | 70-89% | ⚠️ Good - Minor gaps |
249
+ | 50-69% | ⚠️ Fair - Significant gaps |
250
+ | 0-49% | ❌ Poor - Major gaps |
251
+
252
+ ---
253
+
254
+ ## `.last-feature` 포인터 삭제 (워크플로 완주)
255
+
256
+ ```
257
+ /vibe.trace가 정상 완료되면 (RTM 출력 + 사용자 확인 후):
258
+ Delete ".vibe/.last-feature"
259
+
260
+ 이유: /vibe.trace는 vibe 워크플로의 마지막 Phase (Phase 7).
261
+ 완주 후에는 다음 /vibe.spec 호출 시 "빈 시작" 또는 진행 중 목록에서 다른 feature를 시작해야 한다.
262
+ 삭제하지 않으면 완료된 feature가 계속 "이어서?" 로 뜬다.
263
+
264
+ 예외:
265
+ - /vibe.trace가 에러로 중단된 경우 → 삭제하지 않음 (재시도 가능)
266
+ - --save 또는 --html 플래그와 무관하게 항상 삭제
267
+ ```
268
+
269
+ ---
270
+
271
+ ARGUMENTS: {feature-name}
@@ -34,17 +34,18 @@
34
34
 
35
35
  CC의 풍부한 hook 모델(PreToolUse/PostToolUse/UserPromptSubmit/Stop)에는 Codex에 완전한 등가물이 없다. hook의 **의도**별로 하네스에 맞는 메커니즘에 매핑한다.
36
36
 
37
+ Codex도 이제 네이티브 hook을 지원한다(`codex features list` → `hooks: stable`). vibe는 두 메커니즘을 **모두** 사용하며, hook의 **의도**별로 매핑한다.
38
+
37
39
  | hook 의도 | Claude Code | Codex |
38
40
  |---|---|---|
39
- | 라이프사이클 (turn 완료, 세션 시작/종료) | `Stop` / `SessionStart` hook | `config.toml`의 `notify` 프로그램 (agent-turn-complete 시 JSON 발화) |
40
- | pre-edit / scope guard | `PreToolUse` (동기 deny) | 동기 인터셉트 없음 AGENTS.md 운영 규칙 + notify 기반 사후 검증 |
41
- | 키워드 디스패치 (ralph/ultrawork) | `UserPromptSubmit` | AGENTS.md 지시 (Codex가 직역 실행) |
42
- | 금지 패턴 차단 | `PreToolUse` | AGENTS.md 규칙 + 에이전트에게 실행하라 지시한 check 명령 |
41
+ | 라이프사이클 (turn 완료) | `Stop` hook | `config.toml`의 `notify` (agent-turn-complete 시 JSON 발화) |
42
+ | 세션 시작 | `SessionStart` hook | `.codex/hooks.json``SessionStart` |
43
+ | pre-edit / scope guard | `PreToolUse` (동기 deny) | `.codex/hooks.json` `PreToolUse` (동기 deny) |
44
+ | 키워드 디스패치 | `UserPromptSubmit` | `.codex/hooks.json` `UserPromptSubmit` |
45
+ | 금지 패턴 차단 | `PreToolUse` | `PreToolUse` + AGENTS.md 규칙 (이중 방어) |
43
46
 
44
- **핵심 통찰: Codex 직역 성향이 AGENTS.md "soft hook"을 신뢰성 있게 만든다.** CC는 soft 지시를 가끔 무시해 hard hook이 필요하지만, Codex적힌 대로 실행한다. 따라서:
47
+ **구현**: `hooks/scripts/codex-hook-adapter.js`가 Codex hook 이벤트를 기존 vibe hook 스크립트로 번역하고 deny 결정(JSON)을 보존한다. 설치는 `installProjectCodexHooks()` `.codex/hooks.json` (프로젝트 로컬, gitignored). 라이프사이클 후처리(auto-commit·devlog)`codex-notify.js`가 `notify` 경로로 담당한다.
45
48
 
46
- - **하드 라이프사이클 이벤트** Codex `config.toml notify` (실제·결정적). `stop-dispatcher` 로직(auto-commit, devlog, review gate) 재사용 가능.
47
- - **행동 가드** → AGENTS.md 운영 규칙. 직역이라 *오히려* 신뢰성 있음.
48
- - **진짜 동기 pre-edit 차단은 Codex에서 불가** — 사후 검증을 완화책으로 수용한다.
49
+ **핵심 통찰: Codex의 직역 성향이 AGENTS.md "soft hook"을 신뢰성 있게 만든다.** CC는 soft 지시를 가끔 무시해 hard hook이 필요하지만, Codex 적힌 대로 실행한다. 따라서 AGENTS.md 운영 규칙은 네이티브 hook이 생긴 뒤에도 **폐기하지 않고 2차 방어선으로 유지한다** — hook이 설치되지 않은 환경(전역 설치만 경우, 다른 클론)에서도 가드가 남는다.
49
50
 
50
- > **Action item (미구현):** `.codex/settings.local.json`에 죽은 hook을 쓰는 것을 중단하고, 대신 `.codex/config.toml`에 `notify` 핸들러를 생성해 `stop-dispatcher` 로직을 재사용하며, 가드 규칙은 AGENTS.md로 방출한다.
51
+ > ⚠️ **훅은 "설치돼 있다"고 가정하지 않는다.** 훅은 프로젝트 로컬 아티팩트라 `vibe upgrade` 만으로는 설치되지 않는다(전역 자산만 갱신). `vibe status` 하네스별 훅 설치 여부를 보고하고, `vibe upgrade` 현재 프로젝트의 누락 훅을 복구한다. 결정론적 가드의 생사는 **관측 가능해야** 한다 — 조용히 죽은 가드는 없는 가드보다 나쁘다.
@@ -1,30 +0,0 @@
1
- /**
2
- * Regression test — {{SLUG}}
3
- *
4
- * Symptom: {{SYMPTOM}}
5
- * Root cause tag: {{ROOT_CAUSE_TAG}}
6
- * Fix commit: {{FIX_COMMIT}}
7
- * Source record: .vibe/regressions/{{SLUG}}.md
8
- *
9
- * DO NOT delete this test when the bug is fixed — it exists to prevent the
10
- * same bug from being reintroduced. Update only if the reproduction steps
11
- * in the source record change.
12
- */
13
-
14
- import { describe, it, expect{{EXTRA_IMPORTS}} } from 'vitest';
15
- {{IMPORTS_FROM_SUT}}
16
-
17
- describe('regression: {{SYMPTOM_SHORT}}', () => {
18
- it('{{TEST_NAME}}', {{ASYNC}}() => {
19
- // Given: {{GIVEN}}
20
- {{GIVEN_CODE}}
21
-
22
- // When: {{WHEN}}
23
- {{WHEN_CODE}}
24
-
25
- // Then: {{THEN}}
26
- {{THEN_ASSERTIONS}}
27
- });
28
-
29
- {{EXTRA_IT_BLOCKS}}
30
- });