@tienne/gestalt 0.44.0 → 0.46.0

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 CHANGED
@@ -85,6 +85,7 @@ pnpm tsx bin/gestalt.ts init # gestalt.json + code graph + post-commit hook
85
85
  | PR·브랜치·커밋 코드 리뷰 요청 | `/review` 스킬 사용 |
86
86
  | 받은 리뷰 반영·답글 게시 요청 ("리뷰 반영해줘", "리뷰 코멘트에 답해줘", "받은 리뷰 처리해줘") | `review-reply` 스킬 사용 (스레드 수집 → 유형 분류 승인 → 수정·커밋 → 답글 승인 → 게시) |
87
87
  | PR 작성·생성 요청 ("PR 만들어줘", "PR 작성해줘", "PR 올려줘") | `gestalt:pr` 스킬 사용 |
88
+ | 실행 태스크를 외부 런타임 워커로 뿌리는 요청 ("orca로 실행", "codex로 실행", "워커 띄워서 실행") | `dispatch` 스킬 사용 (런타임 감지 → 같은 워크트리에 터미널 → worker_done 대기 → ready 재계산). 런타임 없으면 execute의 기본 병렬 경로 |
88
89
 
89
90
  ## Project Structure
90
91
  ```
@@ -109,7 +110,7 @@ src/utils/ — 알림 등 공용 유틸
109
110
  src/cli/ — commander 기반 CLI
110
111
  role-agents/ — 내장 Role Agent 9개 (architect, frontend-developer, backend-developer, devops-engineer, qa-engineer, designer, product-planner, researcher, technical-writer) + 스킬 지원용 에이전트(jira-writer, slack-messenger, presentation-writer, code-review-writer, code-review-responder 등) 총 21개
111
112
  review-agents/ — 내장 Review Agent 4개 (security-reviewer, performance-reviewer, quality-reviewer, frontend-reviewer)
112
- skills/ — SKILL.md 16개 (interview, spec, execute, agent, review, review-reply, pr, build-graph, blast-radius, diff-radius, jira-create, slack-send, brief, presentation, solve, setup)
113
+ skills/ — SKILL.md 17개 (interview, spec, execute, dispatch, agent, review, review-reply, pr, build-graph, blast-radius, diff-radius, jira-create, slack-send, brief, presentation, solve, setup) + `_shared/` 공유 규칙(스킬 아님, 레지스트리가 건너뜀)
113
114
  ```
114
115
 
115
116
  ## Conventions
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -102,6 +102,24 @@ authentic 코퍼스 1,300건에 "권장"은 0건이다. 강제성은 "…권장.
102
102
  - **굳어진 음차 화이트리스트**(컴포넌트·토큰·렌더링·모달·트레이드오프 등 정착어)는 그대로 둔다 — ai-tell-quick-rules.md 참조
103
103
  - 수치·파일명·함수명·에러 메시지·코드 스니펫 변형 금지
104
104
 
105
+ **원문 음차는 인용할 때만 그대로 둔다 (B-3 보완)**
106
+
107
+ 리뷰 대상 코드나 문서에 안 굳은 음차(에스케이프 해치, 스파이크, 어피니티 등)가 있을 때,
108
+ **원문에 있다는 이유만으로 화이트리스트를 통과시키지 않는다.** 자리에 따라 다르게 다룬다.
109
+
110
+ | 자리 | 처리 |
111
+ |------|------|
112
+ | 코드블록, `인용`, diff 발췌 | **그대로.** 바꾸면 원문과 대조가 안 돼서 리뷰가 불친절해진다 |
113
+ | 리뷰어 자기 문장(요약, 문제 진술, 제안) | **첫 등장에 한 번 풀어쓴다.** 필요하면 원어를 괄호로 병기 |
114
+
115
+ - ✗ 명시 타깃 에스케이프 해치가 릴리즈 파일 가드를 우회해서
116
+ - ✓ 사용자가 URL을 직접 주면 릴리즈 파일 가드를 건너뛰게 돼서
117
+ - ✗ 레시피에 스파이크 검증 근거가 같이 남아 있어서
118
+ - ✓ 레시피에 실제로 돌려본 결과가 같이 남아 있어서
119
+
120
+ 풀어쓴 ✗ 예시는 F-6(명사구 압축)에도 걸린다 — 명사를 세 개 이어붙이면 뭘 어쨌다는 동사가
121
+ 사라진다. 안 굳은 음차가 보이면 명사구 압축도 같이 의심한다.
122
+
105
123
  **깎지 말 것 (중요) — 이건 AI-tell이 아니라 리뷰어의 진짜 voice다**
106
124
 
107
125
  아래 패턴은 인라인·대화형 **두 레지스터 모두에서 보존한다**. 특히 "~것 같아요/같습니다"는
@@ -115,6 +133,32 @@ authentic 코퍼스에서 282건으로 인라인 리뷰의 핵심 제안 어투
115
133
  | "~해주세요~", "~할게요~" 물결 친근체 | voice 시그니처 |
116
134
  | 🙏 😀 👍 이모지 (코멘트당 1개 안팎) | 온기 |
117
135
 
136
+ **보존은 밀도까지 보존하는 것이다 — 매 문장에 쓰라는 말이 아니다**
137
+
138
+ 282건은 코퍼스 1,300건 중 20% 남짓이고, 실측 종결어미는 여러 갈래로 흩어져 있다 —
139
+ "것 같아요" 282, "어떨까요?" 144, "좋아보입니다" 54, "필요해보이네요" 29.
140
+ 한 갈래로 몰면 문장 하나하나는 authentic한데 리뷰 전체가 기계로 읽힌다.
141
+ 실제로 코멘트 9건에 "~것 같" 17회, 그중 8건이 `[문제] ~것 같아요 → [제안] ~것 같습니다`
142
+ 같은 리듬으로 나온 사례가 있다.
143
+
144
+ - 한 코멘트에 "~것 같" 계열은 **1회까지**. 문제 진술과 제안에 각각 붙여 두 번 쓰지 않는다.
145
+ - 리뷰 한 건에서 "~것 같"으로 닫는 코멘트는 **절반 이하**. 나머지는 "~는 건 어떨까요?",
146
+ "좋아보입니다", "~네요", 단정형으로 흩는다.
147
+ - **코드를 읽고 확인한 결함은 단정한다.** 전부 헤지하면 확신도 신호가 사라져서 리뷰이가
148
+ "이건 확실한 버그, 저건 그냥 의심"을 구분하지 못한다.
149
+ - 확신이 없으면 헤지를 겹치지 말고 **질문으로 닫는다**("이 경로도 타나요?").
150
+
151
+ | 헤지 몰림 | 이렇게 |
152
+ |-----------|--------|
153
+ | 릴리즈 파일에 프레임이 생성될 것 같아요 | 릴리즈 파일에 그대로 프레임이 생깁니다 *(코드로 확인한 사실)* |
154
+ | 같은 페이지가 또 생길 수 있을 것 같아요 | 같은 페이지가 또 생길 것 같은데, 맞나요? *(추측 → 질문)* |
155
+ | 상태까지 보여주는 게 좋을 것 같습니다 | 상태까지 같이 보여주는 건 어떨까요 *(제안 → 종결 분산)* |
156
+
157
+ **분량도 severity에 맞춘다.** 모든 코멘트를 `[문제 문단 + 제안 문단 + 코드블록]` 3단으로
158
+ 찍어내지 않는다. `a:`나 명백한 불일치 지적은 한 줄로 끝낸다
159
+ (`a: 실제 노드명이 ✎Contents라 여기도 맞춰주세요.`).
160
+ 한 리뷰의 코멘트가 전부 같은 길이면 그 자체가 AI-tell이다.
161
+
118
162
  ## Severity 기준
119
163
 
120
164
  - **critical** (`r:`) — 머지 시 즉시 장애·데이터 손상·보안 사고로 이어지는 버그. 꼭 반영해야 한다.
@@ -158,4 +202,22 @@ GitHub 마크다운은 **한 줄 개행(`\n`)을 무시하고 같은 문단으
158
202
  - **목록을 쓸 때도 목록 바로 앞에 빈 줄**을 하나 둔다 (GitHub에서 목록이 앞 문단에 먹히지 않도록).
159
203
  - 짧고 명확한 지적(한 줄이면 충분한 것)은 굳이 블록을 나누지 말고 한 문장으로 둔다 — 억지로 문단을 쪼개지 않는다.
160
204
 
161
- 이슈가 여러 개면 severity 높은 순(critical → suggestion)으로 정렬한다. 발견된 이슈가 없으면 그 이유를 한 줄로 명시한다("로직·경계값·에러 처리 모두 적절. 머지 가능.").
205
+ 이슈가 여러 개면 severity 높은 순(critical → suggestion)으로 정렬한다. 발견된 이슈가 없으면 그 이유를 한 줄로 명시한다("로직, 경계값, 에러 처리 모두 적절. 머지 가능.").
206
+
207
+ ## 내보내기 전 자가점검
208
+
209
+ 코멘트를 개별로 보면 다 멀쩡한데 **묶어놓으면 기계로 읽히는** 경우가 많다. 세트 전체를
210
+ 내놓기 전에 아래를 센다. 걸리면 초안을 그대로 내지 말고 고쳐서 낸다.
211
+
212
+ 1. "~것 같" 계열이 **한 코멘트에 2회 이상**인 곳 → 1회로 줄인다
213
+ 2. "~것 같"으로 닫는 코멘트가 **전체의 절반을 넘는지** → 다른 종결로 분산한다
214
+ 3. 코드로 확인한 결함을 헤지로 진술한 곳 → 단정으로 바꾼다
215
+ 4. 모든 코멘트가 **같은 3단 구조에 같은 분량**인지 → 사소한 건 한 줄로 줄인다
216
+ 5. 사소한 지적이 섞여 있는데 `a:`가 하나도 없는지 → severity를 다시 매긴다
217
+ 6. 가운뎃점(·) 나열이 남았는지 (C-12, 표·용어목록·합성어는 예외)
218
+ 7. 리뷰어 자기 문장에 풀어쓰지 않은 원문 음차가 남았는지 (B-3)
219
+ 8. 명사구 압축(F-6)·비유 명사(F-7)가 남았는지 — "사슬의 마지막 고리가 조용히 실패하는 셈"
220
+ 같은 문학적 비유는 리뷰 코멘트에선 담백한 서술로 내린다
221
+
222
+ 1~5는 개별 문장이 아니라 **세트 전체의 분포**를 보는 항목이라, 코멘트를 하나씩 다듬는
223
+ 동안에는 안 잡힌다. 반드시 마지막에 전체를 놓고 센다.
@@ -33,6 +33,22 @@
33
33
  "~하는 건 어떨까요?" 144 · "좋아보입니다/좋아보이네요" 54 · "필요해보이네요" 29 ·
34
34
  "~해서요(이유)" 49 · "개인적으로" 24 · 이모지 64 · 물결(~) 56.
35
35
 
36
+ ### 이 숫자는 분포지 지침이 아니다
37
+
38
+ 가장 흔한 실패는 시그니처를 안 쓰는 게 아니라 **한 갈래에 몰아 쓰는 것**이다.
39
+ 282는 코퍼스 1,300건 중 20% 남짓이고, 나머지는 "어떨까요?" 144, "좋아보입니다" 54처럼
40
+ 여러 갈래로 흩어져 있다. "보존하라"를 "매 문장에 쓰라"로 읽으면 문장 하나하나는
41
+ authentic한데 글 전체가 기계로 읽힌다 — 시그니처가 일정 간격으로 박히는 순간
42
+ 그 규칙성 자체가 새 AI-tell이 된다.
43
+
44
+ - 한 갈래가 전체 종결의 **절반을 넘지 않게** 흩는다.
45
+ - 확인한 사실은 헤지 없이 단정한다. 다 헤지하면 확신도 신호가 사라진다.
46
+ - 이모지·물결도 마찬가지 — 문단마다 하나씩 꽂으면 계산된 티가 난다.
47
+
48
+ 이건 문장 단위로는 안 잡히고 **글 전체를 놓고 세어야** 보인다.
49
+ 소비자 쪽 구체 상한은 각 에이전트가 정한다(예: `code-review-writer`의
50
+ "코멘트당 1회, 리뷰 전체의 절반 이하").
51
+
36
52
  ---
37
53
 
38
54
  ## 레지스터 A — 인라인 리뷰 코멘트 (코드 라인에 다는 지적)
@@ -168,7 +184,7 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
168
184
 
169
185
  | humanize가 깎으려는 것 | 실제로는 |
170
186
  |------------------------|----------|
171
- | "~것 같아요", "~인 것 같습니다" (헤징) | **보존** — 제안형 어투의 핵심. 표본 282건. |
187
+ | "~것 같아요", "~인 것 같습니다" (헤징) | **보존** — 제안형 어투의 핵심. 표본 282건. 단 밀도는 관리한다(위 "이 숫자는 분포지 지침이 아니다"). |
172
188
  | "~해주세요~", "~할게요~" 물결 친근체 | **보존** — voice 시그니처. |
173
189
  | "개인적으로", "제 취향이긴 한데" | **보존** — 의견 프레이밍 방식. |
174
190
  | 🙏 😀 👍 등 이모지 (코멘트당 1개 안팎) | **보존** — 온기. |
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: dispatch
3
+ version: "1.0.0"
4
+ description: "실행 세션의 착수 가능 태스크를 외부 에이전트 런타임(Orca)의 터미널로 뿌려 병렬 실행한다. 워커별로 다른 에이전트 CLI를 쓰거나, 진행을 터미널로 들여다봐야 하거나, 오래 걸리는 실행을 추적해야 할 때 쓴다. opt-in 대안 백엔드다 — 외부 런타임이 없으면 execute 스킬의 기본 병렬 경로(호스트 Agent 도구)가 그대로 낫고, 이 스킬은 그 사실을 밝히고 물러난다. 계획 수립이나 평가는 execute 스킬이 담당한다."
5
+ triggers:
6
+ - "orca로 실행"
7
+ - "orca로 병렬"
8
+ - "워커로 뿌려"
9
+ - "터미널로 뿌려"
10
+ - "병렬 디스패치"
11
+ - "다른 에이전트로 실행"
12
+ - "codex로 실행"
13
+ - "워커 띄워서 실행"
14
+ inputs:
15
+ sessionId:
16
+ type: string
17
+ required: false
18
+ description: "실행 세션 ID. active 또는 latest도 가능. 비우면 active로 본다"
19
+ agent:
20
+ type: string
21
+ required: false
22
+ description: "워커에 띄울 에이전트 CLI(claude, codex, gemini 등). 비우면 확인 후 결정"
23
+ maxConcurrent:
24
+ type: number
25
+ required: false
26
+ description: "동시에 띄울 워커 수 상한. 비우면 ready 집합 크기와 4 중 작은 값"
27
+ outputs:
28
+ - dispatched_tasks
29
+ - worker_results
30
+ ---
31
+
32
+ # Dispatch Skill
33
+
34
+ 실행 세션에서 지금 착수 가능한 태스크를 외부 에이전트 런타임의 터미널로 뿌려 병렬 실행한다. 게슈탈트가 무엇을 언제 할 수 있는지 계산하고, 외부 런타임이 워커를 띄우고 생애주기를 추적한다.
35
+
36
+ > **도구가 없을 때** → [`../_shared/tool-availability.md`](../_shared/tool-availability.md)
37
+ > 이 스킬은 외부 CLI에 의존한다. 없으면 흉내내지 않고, 어느 경로로 갈지 밝히고 기본 경로로 넘긴다.
38
+
39
+ ## 이 스킬을 쓸 이유가 없는 경우가 많다
40
+
41
+ `execute` 스킬은 이미 `parallelGroups`를 읽어 호스트의 Agent 도구로 병렬 실행한다. 외부 런타임 없이 동작하고 더 가볍다. **기본값은 그쪽이다.**
42
+
43
+ 이 스킬로 얻는 것은 병렬 자체가 아니라 세 가지다.
44
+
45
+ | 얻는 것 | 기본 경로로는 |
46
+ |---------|---------------|
47
+ | 워커별로 다른 에이전트 CLI (codex, gemini 등 혼용) | 불가 — 호스트 모델 하나 |
48
+ | 사람이 워커 진행을 터미널로 들여다보기 | 불가 — Agent 도구 내부는 안 보임 |
49
+ | `worker_done` 생애주기, 결정 게이트, 연속 실패 차단 | 없음 |
50
+
51
+ 셋 다 필요하지 않으면 이 스킬을 쓰지 않는다. 사용자가 "orca로", "codex로", "워커 띄워서"처럼 **명시적으로 외부 런타임이나 다른 CLI를 지목했을 때만** 발동한다. 단지 병렬로 빠르게 돌리고 싶다는 요청은 execute 스킬로 보낸다.
52
+
53
+ ## 0단계: 런타임 감지 — 없으면 여기서 끝낸다
54
+
55
+ **존재 여부만으로 판단하지 않는다.** 리눅스에서 `orca`는 GNOME 스크린리더 이름이다. `which orca`로 찾으면 엉뚱한 프로그램에 명령을 보내게 된다.
56
+
57
+ 실행 파일 결정 순서:
58
+
59
+ 1. 리눅스이고 Orca 관리 터미널 밖이면 `orca-ide`
60
+ 2. 그 외에는 `orca`
61
+
62
+ 결정한 실행 파일로 런타임이 실제로 응답하는지 확인한다.
63
+
64
+ ```bash
65
+ <실행파일> status --json
66
+ ```
67
+
68
+ 이 응답이 정상 JSON이고 런타임이 도달 가능할 때만 진행한다. 이후 모든 명령에 같은 실행 파일을 쓴다.
69
+
70
+ **감지에 실패하면 아래를 사용자에게 말하고 멈춘다.**
71
+
72
+ ```
73
+ Orca 런타임이 붙지 않아 워커 디스패치는 못 합니다.
74
+ 대신 execute 스킬의 기본 병렬 경로(호스트 Agent 도구)로 진행할 수 있어요 — 이건 외부 도구 없이 동작합니다.
75
+ 그쪽으로 갈까요?
76
+ ```
77
+
78
+ **감지 실패를 성공으로 보고하지 않는다.** Agent 도구로 돌렸으면 "Orca로 디스패치했다"고 말하지 않는다. 어느 경로로 돌았는지 완료 보고에 명시한다.
79
+
80
+ ## 1단계: 착수 가능한 태스크 읽기
81
+
82
+ ```json
83
+ { "action": "status", "sessionId": "active" }
84
+ ```
85
+
86
+ 응답의 `nextTaskIds`가 지금 동시에 착수 가능한 태스크 집합이다. `sessionId`에는 `active`나 `latest`를 그대로 넣을 수 있다.
87
+
88
+ - `nextTaskIds`가 비어 있으면 진행할 게 없다. 모든 태스크가 끝났으면 evaluate로 넘기고, 아니면 왜 비었는지(의존성 미충족, 실패 태스크) 확인해 보고한다.
89
+ - `nextTaskIds`가 1개면 디스패치 이득이 없다. 그 사실을 말하고 기본 경로를 권한다.
90
+ - 2개 이상일 때만 아래로 간다.
91
+
92
+ ## 2단계: 워커를 어디에 띄울지 — 기본은 같은 워크트리
93
+
94
+ **병렬 실행은 워크트리를 나눌 이유가 아니다.** 같은 워크트리에 에이전트 터미널을 여럿 띄우는 것이 기본이다. 이유가 둘이다.
95
+
96
+ 1. Orca 자체 가이드가 그렇게 말한다 — 독립 태스크, 병렬 실행, 편의, 체크아웃 분리 선호는 모두 격리 요건이 아니다. 파일 충돌로 공유가 불가능할 때만 워크트리를 만든다.
97
+ 2. 같은 워크트리면 `.gestalt/`를 공유한다. 코드 그래프와 memory가 그대로 살아 있다. 워크트리를 나누면 워커마다 그래프가 비어 blast-radius를 못 쓰고 memory도 빈 상태로 시작한다.
98
+
99
+ ```bash
100
+ <실행파일> terminal create --worktree active --title <task-id> --command "<agent>" --json
101
+ <실행파일> terminal wait --terminal <handle> --for tui-idle --timeout-ms 60000 --json
102
+ ```
103
+
104
+ `tui-idle`을 기다리는 건 프롬프트가 씹히는 것을 막기 위한 것이다. 항상 `--timeout-ms`를 넘긴다.
105
+
106
+ 워크트리를 새로 만드는 것은 **ready 집합의 태스크들이 같은 파일을 건드릴 때만**이다. 그 경우 먼저 사용자에게 충돌을 짚고 워크트리 분리가 필요하다고 말한 뒤 진행한다. 워크트리를 나눴다면 그 워커는 코드 그래프와 memory가 비어 있다는 사실도 함께 알린다.
107
+
108
+ ## 3단계: 태스크를 디스패치한다
109
+
110
+ 태스크마다 Orca 오케스트레이션 태스크를 만들고 워커에 넣는다. `--inject`가 워커에게 생애주기 프리앰블을 붙여 `worker_done`을 보내게 한다.
111
+
112
+ ```bash
113
+ <실행파일> orchestration task-create --spec "<태스크 브리핑>" --json
114
+ <실행파일> orchestration dispatch --task <task_id> --to <handle> --inject --json
115
+ ```
116
+
117
+ **태스크 브리핑에 반드시 담을 것:**
118
+
119
+ - 게슈탈트 실행 세션 ID(UUID 원문 — 워커는 다른 프로세스라 `active`가 다르게 해석될 수 있다)
120
+ - 이 워커가 맡은 게슈탈트 taskId
121
+ - `taskContext.taskPrompt` 내용
122
+ - 완료 후 `ges_execute action=execute_task`로 결과를 제출하라는 지시
123
+ - **다른 태스크는 건드리지 말라는 경계** — 워커가 ready 집합을 보고 남의 태스크까지 하려 들면 충돌한다
124
+
125
+ 동시 워커 수는 `maxConcurrent`로 제한한다. 지정이 없으면 ready 집합 크기와 4 중 작은 값을 쓴다. 워커마다 에이전트 프로세스와 게슈탈트 MCP 서버가 하나씩 뜨므로 무제한으로 띄우지 않는다.
126
+
127
+ ## 4단계: 기다린다 — 폴링하지 않는다
128
+
129
+ ```bash
130
+ <실행파일> orchestration check --wait --types worker_done,escalation,decision_gate --timeout-ms 900000 --json
131
+ ```
132
+
133
+ - **타임아웃은 실패가 아니라 체크포인트다.** 코딩 태스크는 15~60분이 흔하다. `worker_done`이나 `escalation`을 받거나, 터미널이 사라지거나, 사용자가 멈추라고 하기 전까지 대기를 계속 건다.
134
+ - 하트비트와 터미널 활동은 살아 있다는 뜻이지 끝났다는 뜻이 아니다. 완료 메시지가 없다는 이유로 워커를 죽이거나 재시작하지 않는다.
135
+ - `check --wait`는 한 번에 하나를 돌려준다. 워커 N개가 동시에 끝날 수 있으면 N번 돌린다.
136
+ - `decision_gate`가 오면 사용자에게 판단을 받아 `orchestration reply`로 답하고 계속 기다린다.
137
+
138
+ ## 5단계: `worker_done`마다 ready 집합을 다시 읽는다
139
+
140
+ **캐시된 세션 상태를 믿지 않는다.** 워커마다 게슈탈트 MCP 서버 프로세스가 따로 뜨고, 각 프로세스가 인메모리 세션을 따로 들고 있다. 이벤트는 append-only라 replay하면 수렴하지만, 다른 프로세스가 방금 넣은 결과는 이쪽 파생 상태(`nextTaskIds`)에 아직 반영되지 않는다.
141
+
142
+ 그래서 `worker_done`을 받을 때마다 다시 읽는다.
143
+
144
+ ```json
145
+ { "action": "status", "sessionId": "<UUID>" }
146
+ ```
147
+
148
+ 새로 ready가 된 태스크가 있으면 2~3단계로 디스패치한다. **ready 집합을 앞으로 굴리는 것은 이 코디네이터 한 명만 한다.** 워커에게 다음 태스크를 알아서 집으라고 시키면 둘이 같은 태스크를 잡는다.
149
+
150
+ ## 6단계: 막힌 것은 게이트로 올린다
151
+
152
+ 게슈탈트가 human escalation으로 세션을 끝냈으면(`terminationReason: 'human_escalation'`) 그 사실을 Orca 게이트로 올려 사람 눈에 보이게 한다.
153
+
154
+ ```bash
155
+ <실행파일> orchestration gate-create --task <task_id> --question "<막힌 지점과 필요한 판단>" --json
156
+ <실행파일> worktree set --worktree active --comment "blocked: 사람 판단 필요" --json
157
+ ```
158
+
159
+ 카드 코멘트를 남기면 터미널을 열지 않고도 `worktree ps`나 모바일에서 상태가 보인다. 의미 있는 체크포인트마다 코멘트를 갱신한다.
160
+
161
+ ## Do-NOT
162
+
163
+ - **execute 스킬을 대체하지 않는다.** 계획 수립(Planning), 평가(Evaluate), 개선(Evolve)은 execute가 한다. 이 스킬은 Phase 2 실행을 다른 백엔드로 돌리는 것뿐이다.
164
+ - **런타임이 없을 때 흉내내지 않는다.** 0단계에서 멈추고 기본 경로를 권한다.
165
+ - **병렬 실행을 이유로 워크트리를 만들지 않는다.** 파일 충돌만이 사유다.
166
+ - **워커에게 ready 집합을 굴리게 하지 않는다.** 코디네이터만 한다.
167
+ - **`worker_done` 없이 완료로 보고하지 않는다.** 터미널이 조용한 것은 완료가 아니다.
168
+ - **워커를 무제한으로 띄우지 않는다.** 워커마다 에이전트와 MCP 서버 프로세스가 하나씩 붙는다.
169
+
170
+ ## 에러 처리
171
+
172
+ | 상황 | 대응 |
173
+ |------|------|
174
+ | CLI 없음 또는 `status --json` 실패 | 0단계에서 멈추고 기본 경로 제안 |
175
+ | `ready` 집합이 0개 | 이유(전체 완료/의존성 미충족/실패 태스크)를 확인해 보고 |
176
+ | `ready` 집합이 1개 | 디스패치 이득 없음을 말하고 기본 경로 권유 |
177
+ | 터미널 핸들이 `terminal_handle_stale` | `terminal list`로 다시 조회해 교체 핸들만 쓴다. 낡은 핸들과 새 핸들에 이중 전송하지 않는다 |
178
+ | 워커가 같은 태스크를 3회 연속 실패 | 그 태스크 디스패치를 멈추고 사용자에게 보고. evolve 파이프라인으로 넘길지 확인 |
179
+ | `check --wait` 타임아웃 | 실패가 아니다. `task-list`나 `terminal read`로 생존을 확인하고 대기를 다시 건다 |
180
+ | DB 잠금 오류(`SQLITE_BUSY`) | 워커 수를 줄이고 재시도. 게슈탈트 이벤트 DB는 홈 글로벌이라 프로세스가 겹친다 |
181
+
182
+ ## 완료 보고
183
+
184
+ - 어느 경로로 실행했는지 (외부 런타임 워커 / 호스트 Agent 도구)
185
+ - 디스패치한 태스크와 각 결과
186
+ - 워커별로 어떤 에이전트를 썼는지
187
+ - 실패한 태스크와 다음 행동
188
+ - 워크트리를 나눴다면 그 워커의 코드 그래프와 memory가 비어 있었다는 사실
@@ -206,6 +206,10 @@ ges_status() → { reasoningModel: "fable", reasoningModelFallback: "opus", ..
206
206
 
207
207
  `plan_complete` 응답에 `parallelGroups: string[][]`가 포함되어 있으면 병렬 실행을 사용한다. 각 내부 배열은 동시에 실행할 수 있는 태스크 ID 묶음이다.
208
208
 
209
+ > 이 경로가 기본값이고 외부 도구 없이 동작한다. 워커별로 다른 에이전트 CLI를 쓰거나, 진행을 터미널로 들여다봐야 하거나, `worker_done` 추적이 필요하면 `dispatch` 스킬이 같은 단계를 외부 런타임으로 돌린다. 셋 다 필요 없으면 여기 그대로 두는 편이 가볍다.
210
+ >
211
+ > `execute_task` 응답의 `nextTaskIds`는 그 시점에 착수 가능한 태스크 집합이다. `parallelGroups`가 계획 시점의 정적 레이어라면, 이쪽은 지금 완료 상태를 반영한 값이다. 한 태스크가 끝나고 다음을 고를 때는 `nextTaskIds`를 보는 편이 정확하다.
212
+
209
213
  **병렬 그룹 실행 흐름:**
210
214
 
211
215
  1. `parallelGroups[groupIndex]`의 taskId 목록을 확인한다.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AA2FjE,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,MAAM;IAY1B,OAAO,CAAC,UAAU;IAwClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAQ7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAY/C,WAAW,IAAI,aAAa,EAAE;IAQ9B,WAAW,IAAI,aAAa,EAAE;IAQ9B,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAarC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAoCxC,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAenD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAMtD,gBAAgB,IAAI,iBAAiB,EAAE;IAMvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9C,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AA2FjE,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,MAAM;IAa1B,OAAO,CAAC,UAAU;IAwClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAQ7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAY/C,WAAW,IAAI,aAAa,EAAE;IAQ9B,WAAW,IAAI,aAAa,EAAE;IAQ9B,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAarC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAoCxC,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAenD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAMtD,gBAAgB,IAAI,iBAAiB,EAAE;IAMvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9C,KAAK,IAAI,IAAI;CAGd"}
@@ -1,6 +1,7 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { statSync, existsSync, mkdirSync } from 'node:fs';
3
3
  import { dirname } from 'node:path';
4
+ import { SQLITE_BUSY_TIMEOUT_MS } from '../core/constants.js';
4
5
  const _require = createRequire(import.meta.url);
5
6
  function loadSqlite() {
6
7
  const mod = _require('better-sqlite3');
@@ -52,6 +53,7 @@ export class CodeGraphStore {
52
53
  const Database = loadSqlite();
53
54
  this.db = new Database(dbPath);
54
55
  this.db.pragma('journal_mode = WAL');
56
+ this.db.pragma(`busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`);
55
57
  this.db.pragma('foreign_keys = ON');
56
58
  this.initialize();
57
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export declare const CONTINUITY_PENALTY_MAX = 0.15;
14
14
  export declare const PRINCIPLE_QUESTION_STRATEGIES: Record<GestaltPrinciple, string>;
15
15
  export declare const EVENT_STORE_TABLE = "events";
16
16
  export declare const SKILLS_DIR = "skills";
17
+ export declare const SQLITE_BUSY_TIMEOUT_MS = 5000;
17
18
  export declare const DEFAULT_SESSION_TTL_MS: number;
18
19
  export declare const PLANNING_PRINCIPLE_SEQUENCE: readonly [GestaltPrinciple.FIGURE_GROUND, GestaltPrinciple.CLOSURE, GestaltPrinciple.PROXIMITY, GestaltPrinciple.CONTINUITY];
19
20
  export declare const PLANNING_TOTAL_STEPS = 4;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,aAAa,sBAAsB,CAAC;AACjD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAW1E,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,UAAU,WAAW,CAAC;AAGnC,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAG1D,eAAO,MAAM,2BAA2B,8HAK9B,CAAC;AAEX,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShE,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/D,CAAC;AAOF,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAGX,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,aAAa,sBAAsB,CAAC;AACjD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAW1E,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,UAAU,WAAW,CAAC;AAMnC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAG1D,eAAO,MAAM,2BAA2B,8HAK9B,CAAC;AAEX,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShE,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/D,CAAC;AAOF,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAGX,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
@@ -32,6 +32,11 @@ export const PRINCIPLE_QUESTION_STRATEGIES = {
32
32
  };
33
33
  export const EVENT_STORE_TABLE = 'events';
34
34
  export const SKILLS_DIR = 'skills';
35
+ // ─── SQLite 연결 ─────────────────────────────────────────────────
36
+ // MCP 서버는 클라이언트 세션마다 프로세스가 따로 뜨는데 DB는 홈 글로벌 경로를 공유한다.
37
+ // busy_timeout 기본값 0이면 쓰기 잠금이 겹치는 순간 기다리지 않고 SQLITE_BUSY로 즉시
38
+ // 실패하므로, 잠금이 풀릴 때까지 대기할 시간을 준다. 연결마다 설정해야 적용된다.
39
+ export const SQLITE_BUSY_TIMEOUT_MS = 5000;
35
40
  // ─── Session TTL ────────────────────────────────────────────────
36
41
  export const DEFAULT_SESSION_TTL_MS = 24 * 60 * 60 * 1000; // 24h
37
42
  // ─── Execute Engine ──────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/events/store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqBpD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,CAAC,EACN,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,EACJ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IACnF,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAyB3D,OAAO,CAAC,UAAU;IAoBlB,MAAM,CAAC,CAAC,EACN,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC;IAqCjB;;;OAGG;IACH,IAAI,CAAC,CAAC,EACJ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAexB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAgBzE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,WAAW,EAAE;IAkBxD,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAqB5F;;;OAGG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAIjE;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB/C,MAAM,CAAC,KAAK,SAAM,GAAG,WAAW,EAAE;IAYlC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoB9C,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,eAAe;CAkBxB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/events/store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsBpD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,CAAC,EACN,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,EACJ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IACnF,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IA0B3D,OAAO,CAAC,UAAU;IAoBlB,MAAM,CAAC,CAAC,EACN,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC;IAqCjB;;;OAGG;IACH,IAAI,CAAC,CAAC,EACJ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAexB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAgBzE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,WAAW,EAAE;IAkBxD,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAqB5F;;;OAGG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAIjE;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB/C,MAAM,CAAC,KAAK,SAAM,GAAG,WAAW,EAAE;IAYlC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoB9C,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,eAAe;CAkBxB"}
@@ -3,6 +3,7 @@ import { appendFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
3
3
  import { createRequire } from 'node:module';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { dirname, join } from 'node:path';
6
+ import { SQLITE_BUSY_TIMEOUT_MS } from '../core/constants.js';
6
7
  import { EventStoreError } from '../core/errors.js';
7
8
  import { logger } from '../core/logger.js';
8
9
  const require = createRequire(import.meta.url);
@@ -19,6 +20,7 @@ export class EventStore {
19
20
  const Database = loadSqliteDatabase();
20
21
  this.db = new Database(dbPath);
21
22
  this.db.pragma('journal_mode = WAL');
23
+ this.db.pragma(`busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`);
22
24
  this.db.pragma('foreign_keys = ON');
23
25
  this.initialize(this.db);
24
26
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/events/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/events/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -102,6 +102,24 @@ authentic 코퍼스 1,300건에 "권장"은 0건이다. 강제성은 "…권장.
102
102
  - **굳어진 음차 화이트리스트**(컴포넌트·토큰·렌더링·모달·트레이드오프 등 정착어)는 그대로 둔다 — ai-tell-quick-rules.md 참조
103
103
  - 수치·파일명·함수명·에러 메시지·코드 스니펫 변형 금지
104
104
 
105
+ **원문 음차는 인용할 때만 그대로 둔다 (B-3 보완)**
106
+
107
+ 리뷰 대상 코드나 문서에 안 굳은 음차(에스케이프 해치, 스파이크, 어피니티 등)가 있을 때,
108
+ **원문에 있다는 이유만으로 화이트리스트를 통과시키지 않는다.** 자리에 따라 다르게 다룬다.
109
+
110
+ | 자리 | 처리 |
111
+ |------|------|
112
+ | 코드블록, `인용`, diff 발췌 | **그대로.** 바꾸면 원문과 대조가 안 돼서 리뷰가 불친절해진다 |
113
+ | 리뷰어 자기 문장(요약, 문제 진술, 제안) | **첫 등장에 한 번 풀어쓴다.** 필요하면 원어를 괄호로 병기 |
114
+
115
+ - ✗ 명시 타깃 에스케이프 해치가 릴리즈 파일 가드를 우회해서
116
+ - ✓ 사용자가 URL을 직접 주면 릴리즈 파일 가드를 건너뛰게 돼서
117
+ - ✗ 레시피에 스파이크 검증 근거가 같이 남아 있어서
118
+ - ✓ 레시피에 실제로 돌려본 결과가 같이 남아 있어서
119
+
120
+ 풀어쓴 ✗ 예시는 F-6(명사구 압축)에도 걸린다 — 명사를 세 개 이어붙이면 뭘 어쨌다는 동사가
121
+ 사라진다. 안 굳은 음차가 보이면 명사구 압축도 같이 의심한다.
122
+
105
123
  **깎지 말 것 (중요) — 이건 AI-tell이 아니라 리뷰어의 진짜 voice다**
106
124
 
107
125
  아래 패턴은 인라인·대화형 **두 레지스터 모두에서 보존한다**. 특히 "~것 같아요/같습니다"는
@@ -115,6 +133,32 @@ authentic 코퍼스에서 282건으로 인라인 리뷰의 핵심 제안 어투
115
133
  | "~해주세요~", "~할게요~" 물결 친근체 | voice 시그니처 |
116
134
  | 🙏 😀 👍 이모지 (코멘트당 1개 안팎) | 온기 |
117
135
 
136
+ **보존은 밀도까지 보존하는 것이다 — 매 문장에 쓰라는 말이 아니다**
137
+
138
+ 282건은 코퍼스 1,300건 중 20% 남짓이고, 실측 종결어미는 여러 갈래로 흩어져 있다 —
139
+ "것 같아요" 282, "어떨까요?" 144, "좋아보입니다" 54, "필요해보이네요" 29.
140
+ 한 갈래로 몰면 문장 하나하나는 authentic한데 리뷰 전체가 기계로 읽힌다.
141
+ 실제로 코멘트 9건에 "~것 같" 17회, 그중 8건이 `[문제] ~것 같아요 → [제안] ~것 같습니다`
142
+ 같은 리듬으로 나온 사례가 있다.
143
+
144
+ - 한 코멘트에 "~것 같" 계열은 **1회까지**. 문제 진술과 제안에 각각 붙여 두 번 쓰지 않는다.
145
+ - 리뷰 한 건에서 "~것 같"으로 닫는 코멘트는 **절반 이하**. 나머지는 "~는 건 어떨까요?",
146
+ "좋아보입니다", "~네요", 단정형으로 흩는다.
147
+ - **코드를 읽고 확인한 결함은 단정한다.** 전부 헤지하면 확신도 신호가 사라져서 리뷰이가
148
+ "이건 확실한 버그, 저건 그냥 의심"을 구분하지 못한다.
149
+ - 확신이 없으면 헤지를 겹치지 말고 **질문으로 닫는다**("이 경로도 타나요?").
150
+
151
+ | 헤지 몰림 | 이렇게 |
152
+ |-----------|--------|
153
+ | 릴리즈 파일에 프레임이 생성될 것 같아요 | 릴리즈 파일에 그대로 프레임이 생깁니다 *(코드로 확인한 사실)* |
154
+ | 같은 페이지가 또 생길 수 있을 것 같아요 | 같은 페이지가 또 생길 것 같은데, 맞나요? *(추측 → 질문)* |
155
+ | 상태까지 보여주는 게 좋을 것 같습니다 | 상태까지 같이 보여주는 건 어떨까요 *(제안 → 종결 분산)* |
156
+
157
+ **분량도 severity에 맞춘다.** 모든 코멘트를 `[문제 문단 + 제안 문단 + 코드블록]` 3단으로
158
+ 찍어내지 않는다. `a:`나 명백한 불일치 지적은 한 줄로 끝낸다
159
+ (`a: 실제 노드명이 ✎Contents라 여기도 맞춰주세요.`).
160
+ 한 리뷰의 코멘트가 전부 같은 길이면 그 자체가 AI-tell이다.
161
+
118
162
  ## Severity 기준
119
163
 
120
164
  - **critical** (`r:`) — 머지 시 즉시 장애·데이터 손상·보안 사고로 이어지는 버그. 꼭 반영해야 한다.
@@ -158,4 +202,22 @@ GitHub 마크다운은 **한 줄 개행(`\n`)을 무시하고 같은 문단으
158
202
  - **목록을 쓸 때도 목록 바로 앞에 빈 줄**을 하나 둔다 (GitHub에서 목록이 앞 문단에 먹히지 않도록).
159
203
  - 짧고 명확한 지적(한 줄이면 충분한 것)은 굳이 블록을 나누지 말고 한 문장으로 둔다 — 억지로 문단을 쪼개지 않는다.
160
204
 
161
- 이슈가 여러 개면 severity 높은 순(critical → suggestion)으로 정렬한다. 발견된 이슈가 없으면 그 이유를 한 줄로 명시한다("로직·경계값·에러 처리 모두 적절. 머지 가능.").
205
+ 이슈가 여러 개면 severity 높은 순(critical → suggestion)으로 정렬한다. 발견된 이슈가 없으면 그 이유를 한 줄로 명시한다("로직, 경계값, 에러 처리 모두 적절. 머지 가능.").
206
+
207
+ ## 내보내기 전 자가점검
208
+
209
+ 코멘트를 개별로 보면 다 멀쩡한데 **묶어놓으면 기계로 읽히는** 경우가 많다. 세트 전체를
210
+ 내놓기 전에 아래를 센다. 걸리면 초안을 그대로 내지 말고 고쳐서 낸다.
211
+
212
+ 1. "~것 같" 계열이 **한 코멘트에 2회 이상**인 곳 → 1회로 줄인다
213
+ 2. "~것 같"으로 닫는 코멘트가 **전체의 절반을 넘는지** → 다른 종결로 분산한다
214
+ 3. 코드로 확인한 결함을 헤지로 진술한 곳 → 단정으로 바꾼다
215
+ 4. 모든 코멘트가 **같은 3단 구조에 같은 분량**인지 → 사소한 건 한 줄로 줄인다
216
+ 5. 사소한 지적이 섞여 있는데 `a:`가 하나도 없는지 → severity를 다시 매긴다
217
+ 6. 가운뎃점(·) 나열이 남았는지 (C-12, 표·용어목록·합성어는 예외)
218
+ 7. 리뷰어 자기 문장에 풀어쓰지 않은 원문 음차가 남았는지 (B-3)
219
+ 8. 명사구 압축(F-6)·비유 명사(F-7)가 남았는지 — "사슬의 마지막 고리가 조용히 실패하는 셈"
220
+ 같은 문학적 비유는 리뷰 코멘트에선 담백한 서술로 내린다
221
+
222
+ 1~5는 개별 문장이 아니라 **세트 전체의 분포**를 보는 항목이라, 코멘트를 하나씩 다듬는
223
+ 동안에는 안 잡힌다. 반드시 마지막에 전체를 놓고 센다.
@@ -33,6 +33,22 @@
33
33
  "~하는 건 어떨까요?" 144 · "좋아보입니다/좋아보이네요" 54 · "필요해보이네요" 29 ·
34
34
  "~해서요(이유)" 49 · "개인적으로" 24 · 이모지 64 · 물결(~) 56.
35
35
 
36
+ ### 이 숫자는 분포지 지침이 아니다
37
+
38
+ 가장 흔한 실패는 시그니처를 안 쓰는 게 아니라 **한 갈래에 몰아 쓰는 것**이다.
39
+ 282는 코퍼스 1,300건 중 20% 남짓이고, 나머지는 "어떨까요?" 144, "좋아보입니다" 54처럼
40
+ 여러 갈래로 흩어져 있다. "보존하라"를 "매 문장에 쓰라"로 읽으면 문장 하나하나는
41
+ authentic한데 글 전체가 기계로 읽힌다 — 시그니처가 일정 간격으로 박히는 순간
42
+ 그 규칙성 자체가 새 AI-tell이 된다.
43
+
44
+ - 한 갈래가 전체 종결의 **절반을 넘지 않게** 흩는다.
45
+ - 확인한 사실은 헤지 없이 단정한다. 다 헤지하면 확신도 신호가 사라진다.
46
+ - 이모지·물결도 마찬가지 — 문단마다 하나씩 꽂으면 계산된 티가 난다.
47
+
48
+ 이건 문장 단위로는 안 잡히고 **글 전체를 놓고 세어야** 보인다.
49
+ 소비자 쪽 구체 상한은 각 에이전트가 정한다(예: `code-review-writer`의
50
+ "코멘트당 1회, 리뷰 전체의 절반 이하").
51
+
36
52
  ---
37
53
 
38
54
  ## 레지스터 A — 인라인 리뷰 코멘트 (코드 라인에 다는 지적)
@@ -168,7 +184,7 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
168
184
 
169
185
  | humanize가 깎으려는 것 | 실제로는 |
170
186
  |------------------------|----------|
171
- | "~것 같아요", "~인 것 같습니다" (헤징) | **보존** — 제안형 어투의 핵심. 표본 282건. |
187
+ | "~것 같아요", "~인 것 같습니다" (헤징) | **보존** — 제안형 어투의 핵심. 표본 282건. 단 밀도는 관리한다(위 "이 숫자는 분포지 지침이 아니다"). |
172
188
  | "~해주세요~", "~할게요~" 물결 친근체 | **보존** — voice 시그니처. |
173
189
  | "개인적으로", "제 취향이긴 한데" | **보존** — 의견 프레이밍 방식. |
174
190
  | 🙏 😀 👍 등 이모지 (코멘트당 1개 안팎) | **보존** — 온기. |
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: dispatch
3
+ version: "1.0.0"
4
+ description: "실행 세션의 착수 가능 태스크를 외부 에이전트 런타임(Orca)의 터미널로 뿌려 병렬 실행한다. 워커별로 다른 에이전트 CLI를 쓰거나, 진행을 터미널로 들여다봐야 하거나, 오래 걸리는 실행을 추적해야 할 때 쓴다. opt-in 대안 백엔드다 — 외부 런타임이 없으면 execute 스킬의 기본 병렬 경로(호스트 Agent 도구)가 그대로 낫고, 이 스킬은 그 사실을 밝히고 물러난다. 계획 수립이나 평가는 execute 스킬이 담당한다."
5
+ triggers:
6
+ - "orca로 실행"
7
+ - "orca로 병렬"
8
+ - "워커로 뿌려"
9
+ - "터미널로 뿌려"
10
+ - "병렬 디스패치"
11
+ - "다른 에이전트로 실행"
12
+ - "codex로 실행"
13
+ - "워커 띄워서 실행"
14
+ inputs:
15
+ sessionId:
16
+ type: string
17
+ required: false
18
+ description: "실행 세션 ID. active 또는 latest도 가능. 비우면 active로 본다"
19
+ agent:
20
+ type: string
21
+ required: false
22
+ description: "워커에 띄울 에이전트 CLI(claude, codex, gemini 등). 비우면 확인 후 결정"
23
+ maxConcurrent:
24
+ type: number
25
+ required: false
26
+ description: "동시에 띄울 워커 수 상한. 비우면 ready 집합 크기와 4 중 작은 값"
27
+ outputs:
28
+ - dispatched_tasks
29
+ - worker_results
30
+ ---
31
+
32
+ # Dispatch Skill
33
+
34
+ 실행 세션에서 지금 착수 가능한 태스크를 외부 에이전트 런타임의 터미널로 뿌려 병렬 실행한다. 게슈탈트가 무엇을 언제 할 수 있는지 계산하고, 외부 런타임이 워커를 띄우고 생애주기를 추적한다.
35
+
36
+ > **도구가 없을 때** → [`../_shared/tool-availability.md`](../_shared/tool-availability.md)
37
+ > 이 스킬은 외부 CLI에 의존한다. 없으면 흉내내지 않고, 어느 경로로 갈지 밝히고 기본 경로로 넘긴다.
38
+
39
+ ## 이 스킬을 쓸 이유가 없는 경우가 많다
40
+
41
+ `execute` 스킬은 이미 `parallelGroups`를 읽어 호스트의 Agent 도구로 병렬 실행한다. 외부 런타임 없이 동작하고 더 가볍다. **기본값은 그쪽이다.**
42
+
43
+ 이 스킬로 얻는 것은 병렬 자체가 아니라 세 가지다.
44
+
45
+ | 얻는 것 | 기본 경로로는 |
46
+ |---------|---------------|
47
+ | 워커별로 다른 에이전트 CLI (codex, gemini 등 혼용) | 불가 — 호스트 모델 하나 |
48
+ | 사람이 워커 진행을 터미널로 들여다보기 | 불가 — Agent 도구 내부는 안 보임 |
49
+ | `worker_done` 생애주기, 결정 게이트, 연속 실패 차단 | 없음 |
50
+
51
+ 셋 다 필요하지 않으면 이 스킬을 쓰지 않는다. 사용자가 "orca로", "codex로", "워커 띄워서"처럼 **명시적으로 외부 런타임이나 다른 CLI를 지목했을 때만** 발동한다. 단지 병렬로 빠르게 돌리고 싶다는 요청은 execute 스킬로 보낸다.
52
+
53
+ ## 0단계: 런타임 감지 — 없으면 여기서 끝낸다
54
+
55
+ **존재 여부만으로 판단하지 않는다.** 리눅스에서 `orca`는 GNOME 스크린리더 이름이다. `which orca`로 찾으면 엉뚱한 프로그램에 명령을 보내게 된다.
56
+
57
+ 실행 파일 결정 순서:
58
+
59
+ 1. 리눅스이고 Orca 관리 터미널 밖이면 `orca-ide`
60
+ 2. 그 외에는 `orca`
61
+
62
+ 결정한 실행 파일로 런타임이 실제로 응답하는지 확인한다.
63
+
64
+ ```bash
65
+ <실행파일> status --json
66
+ ```
67
+
68
+ 이 응답이 정상 JSON이고 런타임이 도달 가능할 때만 진행한다. 이후 모든 명령에 같은 실행 파일을 쓴다.
69
+
70
+ **감지에 실패하면 아래를 사용자에게 말하고 멈춘다.**
71
+
72
+ ```
73
+ Orca 런타임이 붙지 않아 워커 디스패치는 못 합니다.
74
+ 대신 execute 스킬의 기본 병렬 경로(호스트 Agent 도구)로 진행할 수 있어요 — 이건 외부 도구 없이 동작합니다.
75
+ 그쪽으로 갈까요?
76
+ ```
77
+
78
+ **감지 실패를 성공으로 보고하지 않는다.** Agent 도구로 돌렸으면 "Orca로 디스패치했다"고 말하지 않는다. 어느 경로로 돌았는지 완료 보고에 명시한다.
79
+
80
+ ## 1단계: 착수 가능한 태스크 읽기
81
+
82
+ ```json
83
+ { "action": "status", "sessionId": "active" }
84
+ ```
85
+
86
+ 응답의 `nextTaskIds`가 지금 동시에 착수 가능한 태스크 집합이다. `sessionId`에는 `active`나 `latest`를 그대로 넣을 수 있다.
87
+
88
+ - `nextTaskIds`가 비어 있으면 진행할 게 없다. 모든 태스크가 끝났으면 evaluate로 넘기고, 아니면 왜 비었는지(의존성 미충족, 실패 태스크) 확인해 보고한다.
89
+ - `nextTaskIds`가 1개면 디스패치 이득이 없다. 그 사실을 말하고 기본 경로를 권한다.
90
+ - 2개 이상일 때만 아래로 간다.
91
+
92
+ ## 2단계: 워커를 어디에 띄울지 — 기본은 같은 워크트리
93
+
94
+ **병렬 실행은 워크트리를 나눌 이유가 아니다.** 같은 워크트리에 에이전트 터미널을 여럿 띄우는 것이 기본이다. 이유가 둘이다.
95
+
96
+ 1. Orca 자체 가이드가 그렇게 말한다 — 독립 태스크, 병렬 실행, 편의, 체크아웃 분리 선호는 모두 격리 요건이 아니다. 파일 충돌로 공유가 불가능할 때만 워크트리를 만든다.
97
+ 2. 같은 워크트리면 `.gestalt/`를 공유한다. 코드 그래프와 memory가 그대로 살아 있다. 워크트리를 나누면 워커마다 그래프가 비어 blast-radius를 못 쓰고 memory도 빈 상태로 시작한다.
98
+
99
+ ```bash
100
+ <실행파일> terminal create --worktree active --title <task-id> --command "<agent>" --json
101
+ <실행파일> terminal wait --terminal <handle> --for tui-idle --timeout-ms 60000 --json
102
+ ```
103
+
104
+ `tui-idle`을 기다리는 건 프롬프트가 씹히는 것을 막기 위한 것이다. 항상 `--timeout-ms`를 넘긴다.
105
+
106
+ 워크트리를 새로 만드는 것은 **ready 집합의 태스크들이 같은 파일을 건드릴 때만**이다. 그 경우 먼저 사용자에게 충돌을 짚고 워크트리 분리가 필요하다고 말한 뒤 진행한다. 워크트리를 나눴다면 그 워커는 코드 그래프와 memory가 비어 있다는 사실도 함께 알린다.
107
+
108
+ ## 3단계: 태스크를 디스패치한다
109
+
110
+ 태스크마다 Orca 오케스트레이션 태스크를 만들고 워커에 넣는다. `--inject`가 워커에게 생애주기 프리앰블을 붙여 `worker_done`을 보내게 한다.
111
+
112
+ ```bash
113
+ <실행파일> orchestration task-create --spec "<태스크 브리핑>" --json
114
+ <실행파일> orchestration dispatch --task <task_id> --to <handle> --inject --json
115
+ ```
116
+
117
+ **태스크 브리핑에 반드시 담을 것:**
118
+
119
+ - 게슈탈트 실행 세션 ID(UUID 원문 — 워커는 다른 프로세스라 `active`가 다르게 해석될 수 있다)
120
+ - 이 워커가 맡은 게슈탈트 taskId
121
+ - `taskContext.taskPrompt` 내용
122
+ - 완료 후 `ges_execute action=execute_task`로 결과를 제출하라는 지시
123
+ - **다른 태스크는 건드리지 말라는 경계** — 워커가 ready 집합을 보고 남의 태스크까지 하려 들면 충돌한다
124
+
125
+ 동시 워커 수는 `maxConcurrent`로 제한한다. 지정이 없으면 ready 집합 크기와 4 중 작은 값을 쓴다. 워커마다 에이전트 프로세스와 게슈탈트 MCP 서버가 하나씩 뜨므로 무제한으로 띄우지 않는다.
126
+
127
+ ## 4단계: 기다린다 — 폴링하지 않는다
128
+
129
+ ```bash
130
+ <실행파일> orchestration check --wait --types worker_done,escalation,decision_gate --timeout-ms 900000 --json
131
+ ```
132
+
133
+ - **타임아웃은 실패가 아니라 체크포인트다.** 코딩 태스크는 15~60분이 흔하다. `worker_done`이나 `escalation`을 받거나, 터미널이 사라지거나, 사용자가 멈추라고 하기 전까지 대기를 계속 건다.
134
+ - 하트비트와 터미널 활동은 살아 있다는 뜻이지 끝났다는 뜻이 아니다. 완료 메시지가 없다는 이유로 워커를 죽이거나 재시작하지 않는다.
135
+ - `check --wait`는 한 번에 하나를 돌려준다. 워커 N개가 동시에 끝날 수 있으면 N번 돌린다.
136
+ - `decision_gate`가 오면 사용자에게 판단을 받아 `orchestration reply`로 답하고 계속 기다린다.
137
+
138
+ ## 5단계: `worker_done`마다 ready 집합을 다시 읽는다
139
+
140
+ **캐시된 세션 상태를 믿지 않는다.** 워커마다 게슈탈트 MCP 서버 프로세스가 따로 뜨고, 각 프로세스가 인메모리 세션을 따로 들고 있다. 이벤트는 append-only라 replay하면 수렴하지만, 다른 프로세스가 방금 넣은 결과는 이쪽 파생 상태(`nextTaskIds`)에 아직 반영되지 않는다.
141
+
142
+ 그래서 `worker_done`을 받을 때마다 다시 읽는다.
143
+
144
+ ```json
145
+ { "action": "status", "sessionId": "<UUID>" }
146
+ ```
147
+
148
+ 새로 ready가 된 태스크가 있으면 2~3단계로 디스패치한다. **ready 집합을 앞으로 굴리는 것은 이 코디네이터 한 명만 한다.** 워커에게 다음 태스크를 알아서 집으라고 시키면 둘이 같은 태스크를 잡는다.
149
+
150
+ ## 6단계: 막힌 것은 게이트로 올린다
151
+
152
+ 게슈탈트가 human escalation으로 세션을 끝냈으면(`terminationReason: 'human_escalation'`) 그 사실을 Orca 게이트로 올려 사람 눈에 보이게 한다.
153
+
154
+ ```bash
155
+ <실행파일> orchestration gate-create --task <task_id> --question "<막힌 지점과 필요한 판단>" --json
156
+ <실행파일> worktree set --worktree active --comment "blocked: 사람 판단 필요" --json
157
+ ```
158
+
159
+ 카드 코멘트를 남기면 터미널을 열지 않고도 `worktree ps`나 모바일에서 상태가 보인다. 의미 있는 체크포인트마다 코멘트를 갱신한다.
160
+
161
+ ## Do-NOT
162
+
163
+ - **execute 스킬을 대체하지 않는다.** 계획 수립(Planning), 평가(Evaluate), 개선(Evolve)은 execute가 한다. 이 스킬은 Phase 2 실행을 다른 백엔드로 돌리는 것뿐이다.
164
+ - **런타임이 없을 때 흉내내지 않는다.** 0단계에서 멈추고 기본 경로를 권한다.
165
+ - **병렬 실행을 이유로 워크트리를 만들지 않는다.** 파일 충돌만이 사유다.
166
+ - **워커에게 ready 집합을 굴리게 하지 않는다.** 코디네이터만 한다.
167
+ - **`worker_done` 없이 완료로 보고하지 않는다.** 터미널이 조용한 것은 완료가 아니다.
168
+ - **워커를 무제한으로 띄우지 않는다.** 워커마다 에이전트와 MCP 서버 프로세스가 하나씩 붙는다.
169
+
170
+ ## 에러 처리
171
+
172
+ | 상황 | 대응 |
173
+ |------|------|
174
+ | CLI 없음 또는 `status --json` 실패 | 0단계에서 멈추고 기본 경로 제안 |
175
+ | `ready` 집합이 0개 | 이유(전체 완료/의존성 미충족/실패 태스크)를 확인해 보고 |
176
+ | `ready` 집합이 1개 | 디스패치 이득 없음을 말하고 기본 경로 권유 |
177
+ | 터미널 핸들이 `terminal_handle_stale` | `terminal list`로 다시 조회해 교체 핸들만 쓴다. 낡은 핸들과 새 핸들에 이중 전송하지 않는다 |
178
+ | 워커가 같은 태스크를 3회 연속 실패 | 그 태스크 디스패치를 멈추고 사용자에게 보고. evolve 파이프라인으로 넘길지 확인 |
179
+ | `check --wait` 타임아웃 | 실패가 아니다. `task-list`나 `terminal read`로 생존을 확인하고 대기를 다시 건다 |
180
+ | DB 잠금 오류(`SQLITE_BUSY`) | 워커 수를 줄이고 재시도. 게슈탈트 이벤트 DB는 홈 글로벌이라 프로세스가 겹친다 |
181
+
182
+ ## 완료 보고
183
+
184
+ - 어느 경로로 실행했는지 (외부 런타임 워커 / 호스트 Agent 도구)
185
+ - 디스패치한 태스크와 각 결과
186
+ - 워커별로 어떤 에이전트를 썼는지
187
+ - 실패한 태스크와 다음 행동
188
+ - 워크트리를 나눴다면 그 워커의 코드 그래프와 memory가 비어 있었다는 사실
@@ -206,6 +206,10 @@ ges_status() → { reasoningModel: "fable", reasoningModelFallback: "opus", ..
206
206
 
207
207
  `plan_complete` 응답에 `parallelGroups: string[][]`가 포함되어 있으면 병렬 실행을 사용한다. 각 내부 배열은 동시에 실행할 수 있는 태스크 ID 묶음이다.
208
208
 
209
+ > 이 경로가 기본값이고 외부 도구 없이 동작한다. 워커별로 다른 에이전트 CLI를 쓰거나, 진행을 터미널로 들여다봐야 하거나, `worker_done` 추적이 필요하면 `dispatch` 스킬이 같은 단계를 외부 런타임으로 돌린다. 셋 다 필요 없으면 여기 그대로 두는 편이 가볍다.
210
+ >
211
+ > `execute_task` 응답의 `nextTaskIds`는 그 시점에 착수 가능한 태스크 집합이다. `parallelGroups`가 계획 시점의 정적 레이어라면, 이쪽은 지금 완료 상태를 반영한 값이다. 한 태스크가 끝나고 다음을 고를 때는 `nextTaskIds`를 보는 편이 정확하다.
212
+
209
213
  **병렬 그룹 실행 흐름:**
210
214
 
211
215
  1. `parallelGroups[groupIndex]`의 taskId 목록을 확인한다.