@su-record/vibe 2.13.0 → 2.14.1
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.
- package/CLAUDE.md +18 -15
- package/README.en.md +7 -5
- package/README.md +8 -6
- package/dist/cli/detect/matcher.d.ts +15 -0
- package/dist/cli/detect/matcher.d.ts.map +1 -0
- package/dist/cli/detect/matcher.js +278 -0
- package/dist/cli/detect/matcher.js.map +1 -0
- package/dist/cli/detect/signatures.d.ts +76 -0
- package/dist/cli/detect/signatures.d.ts.map +1 -0
- package/dist/cli/detect/signatures.js +175 -0
- package/dist/cli/detect/signatures.js.map +1 -0
- package/dist/cli/detect/workspace.d.ts +7 -0
- package/dist/cli/detect/workspace.d.ts.map +1 -0
- package/dist/cli/detect/workspace.js +112 -0
- package/dist/cli/detect/workspace.js.map +1 -0
- package/dist/cli/detect.characterization.test.d.ts +7 -0
- package/dist/cli/detect.characterization.test.d.ts.map +1 -0
- package/dist/cli/detect.characterization.test.js +294 -0
- package/dist/cli/detect.characterization.test.js.map +1 -0
- package/dist/cli/detect.d.ts.map +1 -1
- package/dist/cli/detect.js +64 -488
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +1 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +5 -4
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/infra/lib/ui-ux/CsvDataLoader.d.ts +10 -1
- package/dist/infra/lib/ui-ux/CsvDataLoader.d.ts.map +1 -1
- package/dist/infra/lib/ui-ux/CsvDataLoader.js +11 -5
- package/dist/infra/lib/ui-ux/CsvDataLoader.js.map +1 -1
- package/dist/infra/lib/ui-ux/CsvDataLoader.test.js +8 -8
- package/dist/infra/lib/ui-ux/CsvDataLoader.test.js.map +1 -1
- package/dist/infra/lib/ui-ux/SearchService.test.js +1 -1
- package/dist/infra/lib/ui-ux/SearchService.test.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/loop/index.d.ts +6 -0
- package/dist/tools/loop/index.d.ts.map +1 -0
- package/dist/tools/loop/index.js +5 -0
- package/dist/tools/loop/index.js.map +1 -0
- package/dist/tools/loop/validateLoopDefinition.d.ts +38 -0
- package/dist/tools/loop/validateLoopDefinition.d.ts.map +1 -0
- package/dist/tools/loop/validateLoopDefinition.js +224 -0
- package/dist/tools/loop/validateLoopDefinition.js.map +1 -0
- package/dist/tools/loop/validateLoopDefinition.test.d.ts +14 -0
- package/dist/tools/loop/validateLoopDefinition.test.d.ts.map +1 -0
- package/dist/tools/loop/validateLoopDefinition.test.js +229 -0
- package/dist/tools/loop/validateLoopDefinition.test.js.map +1 -0
- package/hooks/scripts/__tests__/.vibe/command-log.txt +39 -0
- package/hooks/scripts/__tests__/.vibe/memories/memories.db-shm +0 -0
- package/hooks/scripts/__tests__/.vibe/memories/memories.db-wal +0 -0
- package/hooks/scripts/__tests__/keyword-detector.test.js +26 -18
- package/hooks/scripts/__tests__/loop-ledger.test.js +321 -0
- package/hooks/scripts/keyword-detector.js +22 -22
- package/hooks/scripts/lib/hook-context.js +31 -2
- package/hooks/scripts/lib/loop-ledger.js +118 -0
- package/hooks/scripts/loop-ledger.js +56 -0
- package/package.json +3 -2
- package/skills/vibe/SKILL.md +40 -23
- package/skills/vibe.loop/SKILL.md +116 -0
- package/skills/vibe.run/SKILL.md +22 -18
- package/skills/vibe.run/references/ralph-loop.md +18 -17
- package/skills/vibe.run/references/ultrawork-mode.md +36 -33
- package/vibe/rules/loop-contract.md +54 -0
- package/vibe/templates/loop-template.md +69 -0
package/skills/vibe/SKILL.md
CHANGED
|
@@ -7,7 +7,9 @@ user-invocable: true
|
|
|
7
7
|
|
|
8
8
|
# /vibe
|
|
9
9
|
|
|
10
|
-
**vibe의 메인 진입점.** 사용자는 "무엇을 만들지 / 무엇을 할지"만 자연어로 말한다. vibe가 의도를 분석해 어떤 `/vibe.*` 스킬을 어떤 순서로 호출할지 파이프라인을 동적으로 설계하고, **1회 승인 후 실행**한다.
|
|
10
|
+
**vibe의 메인 진입점.** 사용자는 "무엇을 만들지 / 무엇을 할지"만 자연어로 말한다. vibe가 의도를 분석해 어떤 `/vibe.*` 스킬을 어떤 순서로 호출할지 파이프라인을 동적으로 설계하고, **SPEC 확정 1회 승인 후 게이트 통과까지 루프 실행**한다.
|
|
11
|
+
|
|
12
|
+
> **루프 시맨틱 SSOT**: `vibe/rules/loop-contract.md` — 이 문서가 ANCHOR→ACT→JUDGE→RECORD 계약과 모든 파라미터(exit, stuck, max_iterations, automationLevel)를 정의한다.
|
|
11
13
|
|
|
12
14
|
## Usage
|
|
13
15
|
|
|
@@ -17,7 +19,8 @@ user-invocable: true
|
|
|
17
19
|
/vibe "로그인 회귀 테스트 다시 돌려서 통과시켜줘"
|
|
18
20
|
/vibe "이 SPEC 리뷰만 한번 봐줘" + 📎 .vibe/specs/login.md
|
|
19
21
|
/vibe "PRD 문서 기반으로 진행" + 📎 docs/prd.pdf
|
|
20
|
-
/vibe "..."
|
|
22
|
+
/vibe "..." --interactive # 단계별 확인 모드 (회전마다 승인)
|
|
23
|
+
/vibe "..." --max-iter 1 # 1회 시도만
|
|
21
24
|
```
|
|
22
25
|
|
|
23
26
|
## Philosophy
|
|
@@ -29,7 +32,7 @@ user-invocable: true
|
|
|
29
32
|
- **무제한 라우팅**: 라우팅 표는 빠른 경로일 뿐 닫힌 화이트리스트가 아니다. 설치된 모든 `vibe.*` 스킬이 라우팅 후보이며, 표에 없는 요구사항도 description 기반 의미 매칭으로 처리한다 (Catch-all).
|
|
30
33
|
- **하네스 정규화 (추론 앞단)**: vibe는 CC(추론)·Codex(직역) 어느 하네스의 암묵적 동작에도 의존하지 않는다. `/vibe`가 모호한 NL을 **명시적·직역 가능한 지시로 먼저 전개**하고, 하위 skill은 모호한 입력을 받지 않는다. 이로써 모든 하네스에서 동일 결과 + CC급 편의를 제공한다. 전문: `vibe/rules/principles/dual-harness-doctrine.md`.
|
|
31
34
|
- **Smart Resume**: `.vibe/{interviews,plans,specs,features}/` 감지하여 "이어서 진행?" 자동 제안.
|
|
32
|
-
- **1회 승인
|
|
35
|
+
- **SPEC 확정 1회 승인 → 루프**: SPEC(Done의 정의 + 수용 기준)을 사용자와 확정하는 것이 유일한 의무적 사람 개입. 승인 후에는 `vibe/rules/loop-contract.md`의 ANCHOR→ACT→JUDGE→RECORD 루프를 게이트 전부 통과할 때까지 자동 반복한다. 루프 종료 = 게이트 통과 또는 stuck 또는 max_iterations 도달.
|
|
33
36
|
- **위임자 역할**: `/vibe` 본인은 코드를 직접 쓰지 않는다. 라우팅·설계·실행 위임만 한다.
|
|
34
37
|
|
|
35
38
|
## Process
|
|
@@ -45,7 +48,7 @@ user-invocable: true
|
|
|
45
48
|
| 자연어 텍스트 | 의도 추출 (요구 종류, 도메인, 키워드) |
|
|
46
49
|
| 첨부 파일 (`📎 path`) | 확장자로 분류 (md/feature/pdf/png/jpg/...) |
|
|
47
50
|
| URL | 도메인으로 분류 (figma.com / github.com / 기타) |
|
|
48
|
-
|
|
|
51
|
+
| 옵션 플래그 | `--interactive`, `--max-iter N` 등 루프 파라미터 추출; `ultrawork`/`ralph`/`quick` 등 deprecated 별칭은 loop-contract 매핑표로 변환 |
|
|
49
52
|
|
|
50
53
|
### Phase 1: Intent 분류
|
|
51
54
|
|
|
@@ -113,7 +116,7 @@ user-invocable: true
|
|
|
113
116
|
- **research 명시**: 조사가 필요하면 파이프라인에 명시적 탐색 단계를 넣는다. planning mode 같은 하네스 스위치에 의존하지 않는다.
|
|
114
117
|
- **도메인 지식 흡수**: 사용자가 준 라이브러리·함수·파일 위치를 SPEC 입력으로 전달한다.
|
|
115
118
|
|
|
116
|
-
이어서 분류된 의도 + resume 상태 +
|
|
119
|
+
이어서 분류된 의도 + resume 상태 + 루프 파라미터(automationLevel, --max-iter 등)를 종합해 실행 계획 작성:
|
|
117
120
|
|
|
118
121
|
```
|
|
119
122
|
📋 Pipeline Plan
|
|
@@ -143,9 +146,10 @@ Phase 6: /vibe.trace → RTM 출력
|
|
|
143
146
|
```
|
|
144
147
|
|
|
145
148
|
**Skip 조건:**
|
|
146
|
-
-
|
|
147
|
-
- `
|
|
148
|
-
|
|
149
|
+
- `automationLevel: autonomous` 설정 (`.vibe/config.json`) 또는 `ultrawork`/`ulw` 별칭 → SPEC 승인 게이트만 skip, 루프는 정상 동작
|
|
150
|
+
- `--max-iter 1` 또는 `quick` 별칭 → 1회 시도 후 종료
|
|
151
|
+
|
|
152
|
+
> 참고: Phase 4의 승인 게이트는 **파이프라인 설계 승인**이다. SPEC 확정 시점의 승인(loop-contract의 "유일한 의무 개입")과 구별된다.
|
|
149
153
|
|
|
150
154
|
### Phase 5: 체인 실행
|
|
151
155
|
|
|
@@ -161,10 +165,11 @@ Phase 6: /vibe.trace → RTM 출력
|
|
|
161
165
|
...
|
|
162
166
|
```
|
|
163
167
|
|
|
164
|
-
각 phase 종료
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
+
각 phase 종료 후 JUDGE 단계:
|
|
169
|
+
- 게이트 통과 (P1=0 ∧ verifyPassed) → 루프 종료, Phase 6 보고
|
|
170
|
+
- 게이트 미통과 → RECORD(run-ledger + loop-history.jsonl) 후 다음 ANCHOR로
|
|
171
|
+
- stuck(연속 2회 동일 findings 해시) → `automationLevel: confirm`이면 사용자 질문; `autonomous`이면 TODO 기록 후 루프 종료
|
|
172
|
+
- max_iterations(기본 10) 도달 → 잔여를 인박스로 이월
|
|
168
173
|
|
|
169
174
|
### Phase 6: 종료 보고
|
|
170
175
|
|
|
@@ -228,31 +233,43 @@ Phase 6: /vibe.trace → RTM 출력
|
|
|
228
233
|
1. /vibe.review (단일 phase)
|
|
229
234
|
```
|
|
230
235
|
|
|
231
|
-
### 예시 4: ultrawork
|
|
236
|
+
### 예시 4: automationLevel autonomous (ultrawork 별칭)
|
|
232
237
|
|
|
233
238
|
```
|
|
234
239
|
입력: /vibe "결제 API 만들어줘" ultrawork
|
|
235
240
|
|
|
236
|
-
→
|
|
237
|
-
→
|
|
238
|
-
→
|
|
241
|
+
→ automationLevel: autonomous 설정 → SPEC 승인 게이트 skip
|
|
242
|
+
→ 병렬 ACT 활성화
|
|
243
|
+
→ ANCHOR→ACT→JUDGE→RECORD 루프 (게이트 통과까지 자동 반복)
|
|
244
|
+
→ stuck 시 TODO 기록 후 루프 종료 (사용자 질문 없음)
|
|
239
245
|
```
|
|
240
246
|
|
|
241
247
|
## ⛔ 하지 않는 것
|
|
242
248
|
|
|
243
249
|
- 직접 코드 작성 / 파일 수정 (위임만)
|
|
244
|
-
-
|
|
250
|
+
- SPEC 확정 없이 루프 진입 (SPEC = Done의 정의, 유일한 의무 승인 지점)
|
|
245
251
|
- 사용자가 명시한 phase 를 임의로 추가/제거
|
|
246
252
|
- Resume 상태를 무시하고 처음부터 다시 시작
|
|
247
253
|
|
|
248
|
-
##
|
|
254
|
+
## 루프 옵션
|
|
255
|
+
|
|
256
|
+
| 옵션 | 효과 |
|
|
257
|
+
|---|---|
|
|
258
|
+
| `--interactive` | 매 회전마다 사람 승인 (과거 기본값) |
|
|
259
|
+
| `--max-iter N` | 회전 상한 N 으로 설정 (N=1이면 1회 시도) |
|
|
260
|
+
| `automationLevel: autonomous` (`.vibe/config.json`) | stuck/SPEC 게이트 외 모든 확인 skip |
|
|
261
|
+
|
|
262
|
+
## Deprecated 별칭 (하위 호환 — 새 코드에서 사용하지 말 것)
|
|
263
|
+
|
|
264
|
+
> 아래 키워드는 계속 동작하지만 loop-contract 파라미터로 환원된다. 새 문서나 예시에서 가르치지 않는다. 전문: `vibe/rules/loop-contract.md` Deprecated 별칭 매핑표.
|
|
249
265
|
|
|
250
|
-
|
|
|
266
|
+
| 별칭 | 환원 |
|
|
251
267
|
|---|---|
|
|
252
|
-
| `ultrawork` / `ulw` |
|
|
253
|
-
| `ralph` | 100
|
|
254
|
-
| `quick` |
|
|
255
|
-
| `verify` |
|
|
268
|
+
| `ultrawork` / `ulw` | `automationLevel: autonomous` + 병렬 ACT |
|
|
269
|
+
| `ralph` | 기본 동작과 동일 (no-op); exit=coverage-100으로 해석 가능 |
|
|
270
|
+
| `quick` | `--max-iter 1` + 최소 JUDGE |
|
|
271
|
+
| `verify` | 기본 동작과 동일 (no-op) — JUDGE는 항상 결정론 검증 |
|
|
272
|
+
| `ralplan` | 동일 loop-contract를 계획 단계에 적용 |
|
|
256
273
|
|
|
257
274
|
## Output
|
|
258
275
|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe.loop
|
|
3
|
+
description: Loop engineering — design, install, and run autonomous goal loops whose completion is judged by deterministic gates, not self-report
|
|
4
|
+
argument-hint: "design | install | run | status | list [loop-name]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /vibe.loop
|
|
9
|
+
|
|
10
|
+
**Loop Engineering** — 사람이 프롬프트하는 대신, 에이전트에게 프롬프트하는 루프를 설계한다.
|
|
11
|
+
|
|
12
|
+
> 루프의 완료 판정은 모델의 자기 보고가 아니라 **결정론적 게이트**(run-ledger `verifyPassed`, 테스트 exit code)가 내린다.
|
|
13
|
+
> 루프는 push·release·배포를 절대 수행하지 않는다 — 결과는 항상 사람 리뷰 큐(인박스)로 간다.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/vibe.loop design [name] # 인터뷰 → .vibe/loops/<name>.md 정의 생성
|
|
19
|
+
/vibe.loop install <name> # 실행 환경(CC/Codex/cron)에 스케줄 연결
|
|
20
|
+
/vibe.loop run <name> # 1회 반복 실행 (스케줄러가 호출하는 진입점)
|
|
21
|
+
/vibe.loop status [name] # 실행 이력 + 인박스 요약
|
|
22
|
+
/vibe.loop list # 정의된 루프 목록과 상태
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 경로 상수 (모든 서브커맨드 공통)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
HOOKS_DIR="${VIBE_PATH:-$(npm root -g 2>/dev/null)/@su-record/vibe}/hooks/scripts"
|
|
29
|
+
LOOPS_DIR=".vibe/loops"
|
|
30
|
+
INBOX="$LOOPS_DIR/inbox.md"
|
|
31
|
+
HISTORY=".vibe/metrics/loop-history.jsonl"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## design — 루프 정의 생성
|
|
37
|
+
|
|
38
|
+
1. 다음 5가지를 사용자에게 묻는다 (이미 인자로 답이 있으면 생략):
|
|
39
|
+
- **목표(goal)**: 루프가 0으로 만들려는 것 (예: "open 회귀 0건", "P1 lint 0건")
|
|
40
|
+
- **트리거**: `scheduled`(cron) / `manual` / `on-event`
|
|
41
|
+
- **발견(discover)**: 일거리를 어떻게 찾는가 — 명령 또는 지시
|
|
42
|
+
- **검증(verify)**: `ledger`(vibe.verify 경유, 기본) / `tests`(테스트 명령 exit code) / `none`(보고만)
|
|
43
|
+
- **격리(isolation)**: 병렬 항목이 파일을 수정하면 `worktree`, 아니면 `none`
|
|
44
|
+
2. `{{VIBE_PATH}}/vibe/templates/loop-template.md`를 읽어 `.vibe/loops/<name>.md`를 생성한다.
|
|
45
|
+
3. **생성 직후 반드시 검증한다** — 실패 시 정의를 고치고 재검증, 통과 전에는 install/run 금지:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => { const fs = require('fs'); const r = t.validateLoopDefinition(fs.readFileSync('.vibe/loops/<name>.md', 'utf-8')); console.log(JSON.stringify(r.errors.length ? r.errors : 'valid')); })"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**기본 제안 레시피 — nightly-triage** (사용자가 목표를 정하지 못하면 이것을 제안):
|
|
52
|
+
- discover: ① `.vibe/regressions/`에서 `status: open` 항목 ② `npx vitest run` 실패 ③ `.vibe/contracts/` drift 의심 항목 → 우선순위 목록(P1 먼저)
|
|
53
|
+
- pipeline: `[vibe.run, vibe.verify]` — 항목별로 SPEC 범위 내 수정 → 검증
|
|
54
|
+
- verify: `ledger` / trigger: `scheduled` / schedule: `0 6 * * *` / isolation: `worktree`
|
|
55
|
+
|
|
56
|
+
## install — 스케줄 연결
|
|
57
|
+
|
|
58
|
+
루프 정의는 하네스 중립이다. 현재 환경을 감지해 정확한 설치 명령을 **사용자에게 제시**한다 (직접 등록하지 않는다 — 스케줄 등록은 사용자 결정):
|
|
59
|
+
|
|
60
|
+
| 환경 | 명령 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| Claude Code (세션 루프) | `/loop <interval> "/vibe.loop run <name>"` |
|
|
63
|
+
| Claude Code (클라우드 루틴) | `/schedule` 로 cron `<schedule>` + 프롬프트 `/vibe.loop run <name>` 등록 |
|
|
64
|
+
| OS cron 폴백 | `<schedule> cd <project> && claude -p "/vibe.loop run <name>" --permission-mode acceptEdits` |
|
|
65
|
+
| Codex | Automations 탭에 `<schedule>` + `$vibe.loop run <name>` 등록 |
|
|
66
|
+
|
|
67
|
+
`trigger: manual` 루프는 install 불필요 — run만 안내한다.
|
|
68
|
+
|
|
69
|
+
## run — 1회 반복 실행 (핵심)
|
|
70
|
+
|
|
71
|
+
`status: paused` 루프는 즉시 종료. 실행 순서는 **전부 의무**이며 생략 불가:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. 검증 validateLoopDefinition 통과 확인 (위 design 3의 명령) — 실패 시 인박스에 기록 후 종료
|
|
75
|
+
2. 시작 기록 node "$HOOKS_DIR/loop-ledger.js" start <name>
|
|
76
|
+
3. DISCOVER 정의의 discover 지시 실행 → 일거리 목록 산출
|
|
77
|
+
4. STUCK 검사 DISCOVER_HASH=$(node -e "...hashDiscoverOutput...") # 발견 목록 텍스트의 해시
|
|
78
|
+
node "$HOOKS_DIR/loop-ledger.js" check-stuck <name> "$DISCOVER_HASH"
|
|
79
|
+
→ 'stuck'이면: end <name> stuck 기록 + 인박스에 "동일 발견 2회 연속 — 사람 개입 필요" 후 종료.
|
|
80
|
+
stuck 판단은 이 명령의 출력만 따른다. 모델이 "다시 해보면 될 것 같다"고 무시하는 것 금지.
|
|
81
|
+
5. ACT 발견 항목을 우선순위순으로, max_iterations 한도 내에서 pipeline 체인 실행.
|
|
82
|
+
isolation: worktree면 항목별 worktree에서 (git-worktree 스킬 패턴).
|
|
83
|
+
scope-guard·verifyGate 등 기존 게이트는 그대로 적용된다 — 루프라고 우회하지 않는다.
|
|
84
|
+
6. VERIFY 완료 판정 — verify 모드별 결정론 기준:
|
|
85
|
+
· ledger: cat .vibe/metrics/run-ledger.json → verifyPassed === true 만 성공
|
|
86
|
+
· tests: 정의의 test_command 실행 → exit 0 만 성공
|
|
87
|
+
· none: 판정 생략(보고만). "코드를 보니 잘 된 것 같다"는 판정이 아니다.
|
|
88
|
+
7. 종료 기록 node "$HOOKS_DIR/loop-ledger.js" end <name> <ok|fail|stuck> "<한 줄 요약>"
|
|
89
|
+
8. 인박스 $INBOX 상단에 결과 블록 prepend:
|
|
90
|
+
## <name> — <ISO 시각> — <ok|fail|stuck>
|
|
91
|
+
- 발견: N건 / 처리: M건 / 검증: <기준과 결과>
|
|
92
|
+
- 리뷰 필요: <항목들 — 없으면 "없음">
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**금지**: `git push`, `gh pr merge`, `npm publish`, 버전 범프, 릴리즈 — 루프는 커밋까지만 가며(auto-commit verify 게이트 통과 시), 그 이상은 인박스를 본 사람이 한다.
|
|
96
|
+
|
|
97
|
+
## status / list
|
|
98
|
+
|
|
99
|
+
- `list`: `$LOOPS_DIR/*.md`의 frontmatter(name, trigger, status, goal) 테이블.
|
|
100
|
+
- `status [name]`: `$HISTORY`에서 해당 루프(생략 시 전체)의 최근 10개 이벤트 + 인박스의 미처리 블록 수.
|
|
101
|
+
|
|
102
|
+
## Auto-integration
|
|
103
|
+
|
|
104
|
+
- `/vibe.regress`의 open 항목, `/vibe.contract`의 drift는 nightly-triage discover의 1차 입력이다.
|
|
105
|
+
- 루프 안에서 verify 실패 시 기존 규칙대로 회귀 자동 등록(vibe.verify 경유)이 그대로 동작한다.
|
|
106
|
+
|
|
107
|
+
## 설계 원칙 (요약)
|
|
108
|
+
|
|
109
|
+
| 원칙 | 구현 |
|
|
110
|
+
|------|------|
|
|
111
|
+
| 완료는 게이트가 판정 | run-ledger `verifyPassed` / 테스트 exit code (REQ-005) |
|
|
112
|
+
| stuck은 해시가 판정 | loop-ledger check-stuck, 동일 발견 2회 연속 (REQ-009) |
|
|
113
|
+
| 이해 부채 가드 | 인박스 리뷰 큐 + push/release 금지 (REQ-008) |
|
|
114
|
+
| 기록 없는 실행 없음 | loop-history.jsonl start/end 의무 (REQ-006) |
|
|
115
|
+
|
|
116
|
+
SPEC: `.vibe/specs/loop-engineering.md`
|
package/skills/vibe.run/SKILL.md
CHANGED
|
@@ -14,10 +14,12 @@ Execute **Scenario-Driven Implementation** with automatic quality verification.
|
|
|
14
14
|
## Usage
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
/vibe.run "feature-name" # Full implementation
|
|
17
|
+
/vibe.run "feature-name" # Full implementation (loops to convergence)
|
|
18
18
|
/vibe.run "feature-name" --phase 1 # Specific Phase only
|
|
19
|
-
/vibe.run "feature-name"
|
|
20
|
-
/vibe.run "feature-name"
|
|
19
|
+
/vibe.run "feature-name" --interactive # Step-by-step confirmation per iteration
|
|
20
|
+
/vibe.run "feature-name" --max-iter 1 # Single-pass (no loop)
|
|
21
|
+
/vibe.run "feature-name" ultrawork # deprecated alias: automationLevel autonomous + parallel
|
|
22
|
+
/vibe.run "feature-name" ulw # deprecated alias: same as ultrawork
|
|
21
23
|
```
|
|
22
24
|
|
|
23
25
|
---
|
|
@@ -47,7 +49,7 @@ Execute **Scenario-Driven Implementation** with automatic quality verification.
|
|
|
47
49
|
Load skill `regress` with: list --feature "{feature-name}"
|
|
48
50
|
```
|
|
49
51
|
|
|
50
|
-
- Open regressions exist →
|
|
52
|
+
- Open regressions exist → automationLevel confirm: ask user; autonomous: auto-invoke `/vibe.regress generate <slug>`
|
|
51
53
|
- No open regressions → silently continue
|
|
52
54
|
|
|
53
55
|
Also load `.vibe/contracts/{feature-name}.md` if present — use it as the contract reference during implementation.
|
|
@@ -60,8 +62,8 @@ test -f DESIGN.md
|
|
|
60
62
|
|
|
61
63
|
- **DESIGN.md present OR no UI stack** → silently continue
|
|
62
64
|
- **DESIGN.md absent AND UI stack present**:
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
+
- automationLevel confirm: 한 줄 안내 — "UI 작업에 `DESIGN.md` 시각 SSOT 가 없습니다. `/vibe.design init` 으로 생성하면 시각 드리프트가 자동 검출됩니다. (생략 가능 — 1 회만 안내)"
|
|
66
|
+
- automationLevel autonomous: 무음 스킵
|
|
65
67
|
|
|
66
68
|
> **권유 > 강제**. DESIGN.md 부재는 절대 vibe.run 을 블록하지 않는다.
|
|
67
69
|
|
|
@@ -89,7 +91,7 @@ test -f DESIGN.md
|
|
|
89
91
|
└─────────────────────────────────────────────────────────────────┘
|
|
90
92
|
```
|
|
91
93
|
|
|
92
|
-
> **하네스-안전 증분 (Dual-Harness Doctrine)**: 시나리오는 **가장 작은 검증 단위**다. 한 시나리오 구현 → 즉시 검증 → 다음. `
|
|
94
|
+
> **하네스-안전 증분 (Dual-Harness Doctrine)**: 시나리오는 **가장 작은 검증 단위**다. 한 시나리오 구현 → 즉시 검증 → 다음. `automationLevel: autonomous`이라도 이 단위는 무너뜨리지 않는다 (병렬은 시나리오 간, 검증은 시나리오별). 전문: `vibe/rules/principles/dual-harness-doctrine.md`.
|
|
93
95
|
|
|
94
96
|
### Automated Verification (Closed Loop)
|
|
95
97
|
|
|
@@ -129,20 +131,22 @@ Scenario verification failed
|
|
|
129
131
|
Repeat until pass (stuck 감지로 종료)
|
|
130
132
|
```
|
|
131
133
|
|
|
132
|
-
**Termination conditions:**
|
|
134
|
+
**Termination conditions (loop-contract JUDGE):**
|
|
133
135
|
- PASS → 다음 scenario
|
|
134
|
-
-
|
|
136
|
+
- stuck (같은 failure가 이전 라운드와 동일, `loop-ledger.js check-stuck`) → automationLevel confirm: 사용자 질문; autonomous: TODO + next scenario
|
|
135
137
|
|
|
136
138
|
---
|
|
137
139
|
|
|
138
|
-
## **ULTRAWORK Mode** (ulw)
|
|
140
|
+
## **ULTRAWORK Mode** (ulw) — deprecated alias
|
|
139
141
|
|
|
140
|
-
>
|
|
142
|
+
> 루프 시맨틱은 `vibe/rules/loop-contract.md`를 따른다. `ultrawork`/`ulw`는 `automationLevel: autonomous` + 병렬 ACT의 deprecated 별칭이다.
|
|
143
|
+
> 전체 Boulder Loop 다이어그램, automation level 정의, confirmation matrix: `references/ultrawork-mode.md`
|
|
141
144
|
|
|
142
|
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
145
|
+
`ultrawork` 또는 `ulw` 포함 시 vibe.run-specific 동작:
|
|
146
|
+
- 병렬 탐색 (3+ Task agents 동시)
|
|
147
|
+
- 비대화형 (중단점 없음)
|
|
148
|
+
- Race Review (GPT+Antigravity) 기본 활성화
|
|
149
|
+
- stuck 시 TODO 기록 후 다음 시나리오로 (사용자 질문 없음)
|
|
146
150
|
|
|
147
151
|
---
|
|
148
152
|
|
|
@@ -316,9 +320,9 @@ After all scenarios: GPT + Antigravity review in parallel. ULTRAWORK enables thi
|
|
|
316
320
|
|
|
317
321
|
Auto-update scenario status with `Last verified` timestamp and quality score.
|
|
318
322
|
|
|
319
|
-
### 8.
|
|
323
|
+
### 8. Coverage Verification Loop (RTM)
|
|
320
324
|
|
|
321
|
-
>
|
|
325
|
+
> 루프 시맨틱은 `vibe/rules/loop-contract.md`를 따른다. 여기서의 exit 기준은 `coveragePercent === 100`. RTM 다이어그램, 출력 형식, 반복 규칙: `references/ralph-loop.md`
|
|
322
326
|
|
|
323
327
|
After ALL phases complete:
|
|
324
328
|
|
|
@@ -329,7 +333,7 @@ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
|
|
|
329
333
|
|
|
330
334
|
> Default SPEC path is `.vibe/specs/<feature>.md`. `status === 'empty'` must be treated as failed/not-applicable — never as 100% pass.
|
|
331
335
|
|
|
332
|
-
|
|
336
|
+
JUDGE: `coveragePercent === 100` → 루프 종료. stuck(연속 2회 동일 커버리지) → automationLevel confirm이면 사용자 질문; autonomous이면 TODO + done.
|
|
333
337
|
|
|
334
338
|
---
|
|
335
339
|
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
# Ralph Loop —
|
|
1
|
+
# Ralph Loop — Coverage Verification Reference
|
|
2
2
|
|
|
3
|
-
> Loaded by vibe.run SKILL.md
|
|
3
|
+
> Loaded by vibe.run SKILL.md for RTM/coverage verification. **루프 시맨틱(ANCHOR/ACT/JUDGE/RECORD/stuck/max_iterations)의 SSOT는 `vibe/rules/loop-contract.md`다.** 이 파일은 vibe.run-specific한 RTM 기반 커버리지 검증 메커니즘을 문서화한다.
|
|
4
|
+
>
|
|
5
|
+
> `ralph`는 loop-contract의 deprecated 별칭으로, "exit: coverage-100"이 설정된 기본 루프와 동일하다. 더 이상 별도 모드가 아니다.
|
|
4
6
|
|
|
5
|
-
##
|
|
7
|
+
## Coverage Verification Loop
|
|
6
8
|
|
|
7
9
|
> **Inspired by [ghuntley.com/ralph](https://ghuntley.com/ralph)**: "Deterministically bad in an undeterministic world" — Keep iterating until TRULY complete.
|
|
8
10
|
|
|
9
11
|
**Problem**: AI often claims "complete" when implementation is partial.
|
|
10
12
|
|
|
11
|
-
**Solution**: RTM-based automated coverage verification
|
|
13
|
+
**Solution**: RTM-based automated coverage verification — loop-contract의 JUDGE 기준은 `coveragePercent === 100`.
|
|
12
14
|
|
|
13
15
|
```
|
|
14
16
|
┌─────────────────────────────────────────────────────────────────┐
|
|
15
|
-
│
|
|
17
|
+
│ COVERAGE VERIFICATION LOOP (loop-contract + RTM) │
|
|
16
18
|
│ │
|
|
17
19
|
│ After ALL phases complete: │
|
|
18
20
|
│ │
|
|
@@ -50,15 +52,15 @@
|
|
|
50
52
|
│ │
|
|
51
53
|
│ │ │
|
|
52
54
|
│ ↓ │
|
|
53
|
-
│
|
|
55
|
+
│ stuck? (loop-ledger.js check-stuck: 연속 2회 동일 커버리지) │
|
|
54
56
|
│ │ │
|
|
55
|
-
│ ├─
|
|
57
|
+
│ ├─ automationLevel confirm: Ask user │
|
|
56
58
|
│ │ 1. Provide resolution → retry │
|
|
57
59
|
│ │ 2. "proceed" → TODO + done │
|
|
58
60
|
│ │ 3. "abort" → stop │
|
|
59
|
-
│ └─
|
|
61
|
+
│ └─ automationLevel autonomous: TODO + done │
|
|
60
62
|
│ │
|
|
61
|
-
│
|
|
63
|
+
│ max_iterations 기본 10 — 도달 시 잔여 인박스 이월 │
|
|
62
64
|
│ ZERO TOLERANCE for silent scope reduction │
|
|
63
65
|
└─────────────────────────────────────────────────────────────────┘
|
|
64
66
|
```
|
|
@@ -84,16 +86,15 @@ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
|
|
|
84
86
|
| `coveragePercent` | Overall coverage percentage |
|
|
85
87
|
| `uncoveredRequirements` | List of missing REQ-* IDs |
|
|
86
88
|
|
|
87
|
-
##
|
|
89
|
+
## Coverage Loop Rules
|
|
88
90
|
|
|
89
91
|
| Rule | Description |
|
|
90
92
|
|------|-------------|
|
|
91
93
|
| **No Scope Reduction** | Never say "simplified" or "basic version" — implement FULL request |
|
|
92
|
-
| **Iteration Tracking** | Display `[{{ITER}}]` to show progress
|
|
94
|
+
| **Iteration Tracking** | Display `[{{ITER}}]` to show progress; max_iterations 기본 10 |
|
|
93
95
|
| **RTM-Based Gap List** | Use `uncoveredRequirements` array — no manual comparison |
|
|
94
|
-
| **Coverage Threshold** |
|
|
95
|
-
| **
|
|
96
|
-
| **Stuck Handling** | If coverage % unchanged between iterations → ask user (proceed/abort/fix), or ultrawork → TODO + done |
|
|
96
|
+
| **Coverage Threshold** | JUDGE: `coveragePercent === 100` → exit (loop-contract exit=coverage-100) |
|
|
97
|
+
| **Stuck Handling** | `loop-ledger.js check-stuck`: 연속 2회 동일 커버리지 → confirm이면 질문; autonomous이면 TODO + done |
|
|
97
98
|
| **Diminishing Returns** | Iteration 3+ → focus on core requirements (REQ-*-001~003) first; P2/P3 continue but lower priority |
|
|
98
99
|
|
|
99
100
|
## Ralph Loop Output Format
|
|
@@ -155,11 +156,11 @@ RTM saved: .vibe/rtm/login-rtm.md
|
|
|
155
156
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
156
157
|
```
|
|
157
158
|
|
|
158
|
-
## When to Trigger
|
|
159
|
+
## When to Trigger Coverage Loop
|
|
159
160
|
|
|
160
|
-
1. After all phases complete
|
|
161
|
+
1. After all phases complete (기본 동작 — 별도 키워드 불필요)
|
|
161
162
|
2. Before final quality report
|
|
162
|
-
3.
|
|
163
|
+
3. `ralph` 별칭 감지 시 — 기본 동작과 동일, exit=coverage-100으로 해석
|
|
163
164
|
|
|
164
165
|
## Forbidden Responses (VIOLATIONS)
|
|
165
166
|
|
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
# ULTRAWORK Mode —
|
|
1
|
+
# ULTRAWORK Mode — Automation Level Reference
|
|
2
2
|
|
|
3
3
|
> Loaded by vibe.run SKILL.md when user includes `ultrawork` or `ulw` keyword.
|
|
4
|
+
>
|
|
5
|
+
> **루프 시맨틱(ANCHOR/ACT/JUDGE/RECORD/stuck/max_iterations)의 SSOT는 `vibe/rules/loop-contract.md`다.** `ultrawork`/`ulw`는 `automationLevel: autonomous` + 병렬 ACT의 deprecated 별칭이다. 루프 자체는 모든 실행의 기본 동작이며, ultrawork는 그 루프를 자율(비대화형)·병렬 모드로 돌리는 축을 제어한다.
|
|
4
6
|
|
|
5
|
-
## What
|
|
7
|
+
## What `automationLevel: autonomous` Enables
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
`ultrawork` (또는 `ulw`, `.vibe/config.json`의 `automationLevel: autonomous`) 설정 시 활성화:
|
|
8
10
|
|
|
9
11
|
| Feature | Description |
|
|
10
12
|
|---------|-------------|
|
|
11
|
-
| **Parallel Exploration** | 3+ Task(haiku) agents run simultaneously |
|
|
12
|
-
| **
|
|
13
|
+
| **Parallel Exploration** | 3+ Task(haiku) agents run simultaneously (ACT 병렬화) |
|
|
14
|
+
| **Loop (기본 동작)** | 모든 실행의 기본 — exit=게이트 통과 또는 stuck 또는 max_iterations |
|
|
13
15
|
| **Context Compression** | Aggressive auto-save at 70%+ context |
|
|
14
|
-
| **No Pause** |
|
|
16
|
+
| **No Pause** | stuck·SPEC 게이트 외 확인 없음 (`automationLevel: autonomous`) |
|
|
15
17
|
| **External LLMs** | Auto-consults GPT/Antigravity if enabled |
|
|
16
|
-
| **Error Recovery** |
|
|
17
|
-
| **Race Review
|
|
18
|
+
| **Error Recovery** | stuck 시 TODO 기록 후 다음으로 (사용자 질문 없음) |
|
|
19
|
+
| **Race Review** | Multi-LLM review (GPT+Antigravity) with cross-validation |
|
|
18
20
|
|
|
19
|
-
## Boulder Loop
|
|
21
|
+
## Boulder Loop — Parallel ACT Visualization
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
루프 자체는 loop-contract의 기본 동작이다. Boulder Loop는 `automationLevel: autonomous`에서 **병렬 ACT**가 어떻게 실행되는지를 보여주는 다이어그램이다:
|
|
22
24
|
|
|
23
25
|
```
|
|
24
26
|
┌─────────────────────────────────────────────────────────────────┐
|
|
@@ -45,23 +47,24 @@ Like Sisyphus rolling the boulder, ULTRAWORK **keeps going until done**:
|
|
|
45
47
|
│ ↓ ↓ │
|
|
46
48
|
│ [Continue] [Complete!] │
|
|
47
49
|
│ │
|
|
48
|
-
│
|
|
50
|
+
│ loop-contract EXIT: 게이트 통과 │ stuck │ max_iterations │
|
|
49
51
|
└─────────────────────────────────────────────────────────────────┘
|
|
50
52
|
```
|
|
51
53
|
|
|
52
|
-
##
|
|
54
|
+
## Example Session (automationLevel: autonomous)
|
|
53
55
|
|
|
54
56
|
```
|
|
55
57
|
User: /vibe.run "brick-game" ultrawork
|
|
56
58
|
|
|
57
59
|
Claude:
|
|
58
|
-
|
|
60
|
+
AUTONOMOUS MODE (automationLevel: autonomous)
|
|
59
61
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
60
62
|
|
|
61
63
|
SPEC: .vibe/specs/brick-game.md
|
|
62
64
|
4 Phases detected
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
Loop: ENABLED (exit = 게이트 통과 | stuck | max_iterations=10)
|
|
66
|
+
Parallel ACT: ON
|
|
67
|
+
automationLevel: autonomous (stuck → auto-TODO, no confirmation)
|
|
65
68
|
Context compression: AGGRESSIVE
|
|
66
69
|
|
|
67
70
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -101,37 +104,37 @@ Retries: 2
|
|
|
101
104
|
Context saved: 3 checkpoints
|
|
102
105
|
```
|
|
103
106
|
|
|
104
|
-
##
|
|
107
|
+
## confirm vs autonomous Comparison
|
|
105
108
|
|
|
106
|
-
| Aspect |
|
|
107
|
-
|
|
108
|
-
|
|
|
109
|
-
|
|
|
109
|
+
| Aspect | `automationLevel: confirm` (default) | `automationLevel: autonomous` (ultrawork) |
|
|
110
|
+
|--------|--------------------------------------|-------------------------------------------|
|
|
111
|
+
| Loop | ANCHOR→ACT→JUDGE→RECORD (기본 동작) | 동일 |
|
|
112
|
+
| Confirmation gates | stuck·SPEC에서 질문 | stuck 포함 전부 skip → TODO |
|
|
113
|
+
| On error | Reports, asks before retry | Auto-retries, auto-TODO on stuck |
|
|
110
114
|
| Context 70%+ | Warning only | Auto-compress + save |
|
|
111
115
|
| Exploration | Sequential possible | FORCED parallel |
|
|
112
|
-
| Completion | Phase-by-phase | Until ALL done |
|
|
113
116
|
|
|
114
117
|
## Automation Level System
|
|
115
118
|
|
|
116
|
-
|
|
119
|
+
**automationLevel**은 루프가 사람 개입 없이 얼마나 자율적으로 진행하는지를 제어한다. `.vibe/config.json`에서 설정하거나, deprecated 별칭 키워드로 런타임 오버라이드 가능.
|
|
117
120
|
|
|
118
121
|
### Level Definitions
|
|
119
122
|
|
|
120
|
-
| Level | Name |
|
|
121
|
-
|
|
123
|
+
| Level | Name | 설정 방법 | Auto-advance | Auto-retry | Stuck Behavior | Parallel Agents | Checkpoints |
|
|
124
|
+
|-------|------|-----------|--------------|------------|----------------|-----------------|-------------|
|
|
122
125
|
| L0 | Manual | `manual` | No | No | Ask user every step | No | All |
|
|
123
|
-
| L1 | Guided | `guided`, `verify` | No | No | Ask user on stuck | No | All |
|
|
124
|
-
| L2 |
|
|
125
|
-
| L3 |
|
|
126
|
-
| L4 | Full-auto | `ralph
|
|
126
|
+
| L1 | Guided | `guided`, `verify`(deprecated) | No | No | Ask user on stuck | No | All |
|
|
127
|
+
| L2 | confirm | default | Yes | Yes (low cap: 2) | Ask user after 2 retries | No | Key points |
|
|
128
|
+
| L3 | autonomous | `automationLevel: autonomous` / `ultrawork`(dep) / `ulw`(dep) | Yes | Yes (no cap) | Auto-TODO + proceed | Yes | Checkpoint-only |
|
|
129
|
+
| L4 | Full-auto | `ralph`(deprecated) / `ralplan`(deprecated) | Yes | Yes (no cap) | Auto-TODO + proceed | Yes | None |
|
|
127
130
|
|
|
128
|
-
### Detection Rule
|
|
131
|
+
### Detection Rule (deprecated aliases)
|
|
129
132
|
|
|
130
133
|
```
|
|
131
|
-
/vibe.run "login" → L2
|
|
132
|
-
/vibe.run "login" ultrawork → L3
|
|
133
|
-
/vibe.run "login" ralph → L4 Full-auto
|
|
134
|
-
/vibe.run "login" verify → L1 Guided
|
|
134
|
+
/vibe.run "login" → L2 confirm (default)
|
|
135
|
+
/vibe.run "login" ultrawork → L3 autonomous (deprecated alias)
|
|
136
|
+
/vibe.run "login" ralph → L4 Full-auto (deprecated alias, exit=coverage-100)
|
|
137
|
+
/vibe.run "login" verify → L1 Guided (deprecated alias)
|
|
135
138
|
```
|
|
136
139
|
|
|
137
140
|
### Confirmation Matrix
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Loop Contract — vibe 실행의 기본 계약 (SSOT)
|
|
2
|
+
|
|
3
|
+
> `/vibe`의 기본 동작은 **단계별 1회 실행이 아니라 완성까지의 루프**다.
|
|
4
|
+
> 루프가 기본이 될 수 있는 이유: 폭주 방어가 모델의 양심이 아니라 결정론적 가드(코드)이기 때문.
|
|
5
|
+
> 이 문서가 루프 시맨틱의 유일한 정의다 — ralph/Boulder/Convergence 등 과거 명칭은 전부 이 계약의 파라미터로 환원된다.
|
|
6
|
+
|
|
7
|
+
## 적용 범위
|
|
8
|
+
|
|
9
|
+
- **적용**: 검증 가능한 목표가 있는 실행 — `vibe.run`, `vibe.verify`, `vibe.review`, `vibe.loop` 및 이들을 체인하는 `/vibe` 파이프라인
|
|
10
|
+
- **제외**: 단발 조회·생성 작업 (`vibe.docs`, `vibe.analyze`, `vibe.scaffold` 등) — 루프 의례를 강제하지 않는다
|
|
11
|
+
|
|
12
|
+
## 계약
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/vibe {요구사항}
|
|
16
|
+
→ SPEC 확정 ← 유일한 의무적 사람 개입 지점 (DONE의 정의 = REQ-ID + 수용 기준 승인)
|
|
17
|
+
→ 루프:
|
|
18
|
+
ANCHOR 디스크에서 재고정: SPEC + run-ledger + scope.json (+ 직전 인박스)
|
|
19
|
+
ACT 파이프라인 실행 (스킬 체인)
|
|
20
|
+
JUDGE 결정론 판정만 인정: run-ledger verifyPassed │ 테스트 exit code │ RTM status
|
|
21
|
+
— 모델의 "완료했습니다" 자기 보고는 종료 조건이 될 수 없다
|
|
22
|
+
RECORD run-ledger(현재 회전) + loop-history.jsonl(회전 이력, 스케줄 루프)
|
|
23
|
+
→ 종료(EXIT): 게이트 전부 통과 │ stuck │ max_iterations │ 예산 상한
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### ANCHOR가 컨텍스트 오염 방어인 이유
|
|
27
|
+
루프 상태는 컨텍스트가 아니라 디스크에 산다. 매 회전이 아티팩트에서 다시 시작하므로 컨텍스트가 오염되거나 compact로 소실돼도 루프는 깨지지 않으며, 회전마다 fresh 컨텍스트(서브에이전트)로 돌려도 된다.
|
|
28
|
+
|
|
29
|
+
### stuck (결정론)
|
|
30
|
+
연속 2회 회전의 발견(discover/findings) 해시가 동일 → 중단하고 사람에게 (`loop-ledger.js check-stuck`이 판정·기록). "다시 해보면 될 것 같다"는 모델 판단으로 무시 금지.
|
|
31
|
+
|
|
32
|
+
## 파라미터 (기본값)
|
|
33
|
+
|
|
34
|
+
| 파라미터 | 기본 | 의미 |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `max_iterations` | 10 | 회전 상한. 도달 시 잔여를 인박스로 이월 |
|
|
37
|
+
| `exit` | 게이트 통과 (P1=0 ∧ verifyPassed) | 종료 기준. coverage 100% 등으로 상향 가능 |
|
|
38
|
+
| `--interactive` | off | 단계별 확인 모드 (회전마다 사람 승인 — 과거의 기본값) |
|
|
39
|
+
| `--max-iter N` | — | 회전 상한 명시 (N=1이면 1회 시도) |
|
|
40
|
+
| `automationLevel` | `confirm` | `confirm`(SPEC·stuck에서 질문) / `autonomous`(기록 후 계속, 비대화형) — `.vibe/config.json` |
|
|
41
|
+
|
|
42
|
+
## 금지 (루프 권한 경계)
|
|
43
|
+
|
|
44
|
+
루프는 push·release·배포·버전 범프를 수행하지 않는다. 커밋은 auto-commit verify 게이트 통과 시만. 결과는 인박스(사람 리뷰 큐)로.
|
|
45
|
+
|
|
46
|
+
## Deprecated 별칭 (하위 호환 매핑 — 새 문서에서 가르치지 않는다)
|
|
47
|
+
|
|
48
|
+
| 별칭 | 환원 |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `ralph` | 기본 동작과 동일 (no-op). 굳이 구분하면 `exit: coverage-100` |
|
|
51
|
+
| `verify` | 기본 동작과 동일 (no-op) — JUDGE는 항상 결정론 검증 |
|
|
52
|
+
| `quick` | `--max-iter 1` + 최소 JUDGE |
|
|
53
|
+
| `ralplan` | 같은 계약을 계획 단계에 적용 |
|
|
54
|
+
| `ultrawork` / `ulw` | `automationLevel: autonomous` + 병렬 ACT — 루프 시맨틱이 아니라 자율성·병렬성 축 |
|