@walwal-harness/cli 6.1.4 → 6.1.5
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/CHANGELOG.md +28 -0
- package/README.md +43 -74
- package/assets/launchd/com.walwal.harness-wake.plist.template +32 -0
- package/assets/templates/CONVENTIONS.md +12 -0
- package/assets/templates/HARNESS.md +8 -8
- package/assets/templates/config.json +25 -27
- package/assets/templates/memory.md +16 -2
- package/assets/templates/progress.json.template +6 -5
- package/bin/init.js +179 -90
- package/conventions/shared.md +16 -0
- package/gotchas/conductor.md +16 -0
- package/gotchas/dispatcher.md +16 -0
- package/gotchas/meeting-manager.md +8 -0
- package/gotchas/service-ops.md +8 -0
- package/package.json +4 -4
- package/scripts/conductor-tick.sh +61 -53
- package/scripts/harness-archive.sh +7 -5
- package/scripts/harness-dashboard-up.sh +11 -3
- package/scripts/harness-hourly-review.sh +303 -0
- package/scripts/harness-meeting-doc.sh +55 -16
- package/scripts/harness-next.sh +1 -1
- package/scripts/harness-queue-manager.sh +12 -5
- package/scripts/harness-service-ops-monitor.sh +228 -0
- package/scripts/harness-session-start.sh +60 -31
- package/scripts/harness-statusline.sh +8 -12
- package/scripts/harness-stop.sh +85 -0
- package/scripts/harness-user-prompt-submit.sh +11 -29
- package/scripts/harness-wake-install.sh +179 -0
- package/scripts/harness-wake.sh +258 -0
- package/scripts/harness-worker-dispatch.sh +157 -0
- package/scripts/lib/harness-progress-migrate.sh +6 -1
- package/scripts/lib/harness-render-progress.sh +3 -3
- package/skills/brainstorming/SKILL.md +2 -2
- package/skills/conductor/SKILL.md +67 -55
- package/skills/cqo/SKILL.md +1 -0
- package/skills/cto/SKILL.md +1 -0
- package/skills/dispatcher/SKILL.md +33 -14
- package/skills/evaluator-code-quality/SKILL.md +4 -4
- package/skills/evaluator-functional/SKILL.md +6 -6
- package/skills/evaluator-visual/SKILL.md +4 -4
- package/skills/generator-backend/SKILL.md +4 -4
- package/skills/generator-frontend/SKILL.md +5 -5
- package/skills/meeting-manager/SKILL.md +82 -12
- package/skills/planner/SKILL.md +3 -3
- package/skills/service-ops/SKILL.md +25 -0
- package/commands/harness-solo.md +0 -103
- package/commands/harness-stop.md +0 -53
- package/commands/harness-team.md +0 -530
- package/scripts/harness-dashboard.sh +0 -509
- package/scripts/harness-goal-init.sh +0 -72
- package/scripts/harness-goal-show.sh +0 -37
- package/scripts/harness-gotcha-memory.sh +0 -348
- package/scripts/harness-monitor.sh +0 -398
- package/scripts/harness-prompt-history.sh +0 -164
- package/scripts/harness-tmux.sh +0 -372
package/CHANGELOG.md
CHANGED
|
@@ -29,6 +29,34 @@ docmeta:
|
|
|
29
29
|
|
|
30
30
|
# Changelog
|
|
31
31
|
|
|
32
|
+
## 6.2.0 — Always-on company runtime + legacy purge (2026-05-08)
|
|
33
|
+
|
|
34
|
+
### Why
|
|
35
|
+
회사모드 only 정렬. 솔로/팀 모드의 잔재 스크립트와 분기 로직이 SKILL/문서 곳곳에 남아 있어 Owner 가 "지금 어떤 모드인지" 혼동하고, 한 시간이 지나도 자율 활동이 일어나지 않는 (스케줄러 부재) 문제 발생. 추가로 Claude 가 미래 시각으로 progress.log 라인을 미리 적어 가짜 진행을 보고하는 환각이 관찰됨.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- **Stop 훅** (`scripts/harness-stop.sh`) — Claude turn 종료 시 conductor 가 running 이면 자동으로 다음 tick 으로 연쇄. `behavior.auto_chain_on_stop=false` 로 비활성, `behavior.auto_chain_max_per_sprint` 로 상한 (기본 200).
|
|
39
|
+
- **launchd hourly wake** (`scripts/harness-wake.sh`, `scripts/harness-wake-install.sh`, `assets/launchd/com.walwal.harness-wake.plist.template`) — 1시간마다 idle ≥ 55분 프로젝트의 tmux 에 wake prompt 송출.
|
|
40
|
+
- **Truthful Logging Heal** — `harness-session-start.sh` 가 `progress.log` 의 미래 시각 라인을 자동으로 `progress.log.future-quarantine.<ts>` 로 격리 + 메인 로그에서 제거.
|
|
41
|
+
- **conductor / dispatcher SKILL 의 정직성 룰** — "미래 시각 progress.log 항목 금지" Inviolable 섹션 추가, Owner "최근 1시간 뭐 했냐" 질문 시 디스크 mtime 으로 정직 답변하도록 명시.
|
|
42
|
+
- **meeting-manager SKILL 의 라이브 가시화 계약** — `meetings.active` 가 평탄한 agent ID 배열이라는 데이터 계약을 명시. convene 시 active=[참석자], dispatch 시 active=[] 로 갱신해야 미니피규어가 회의실로 텔레포트.
|
|
43
|
+
|
|
44
|
+
### Removed (legacy purge)
|
|
45
|
+
- `scripts/harness-dashboard.sh` — tmux ASCII 대시보드 pane (3D Brick Office 가 대체).
|
|
46
|
+
- `scripts/harness-monitor.sh` — 3-team worker pane (회사모드는 동적 worker pool).
|
|
47
|
+
- `scripts/harness-prompt-history.sh` — tmux Studio 전용 pane.
|
|
48
|
+
- `scripts/harness-gotcha-memory.sh` — tmux Studio 전용 pane.
|
|
49
|
+
- `scripts/harness-tmux.sh` — tmux Studio launcher (회사모드는 단일 Claude CLI + 브라우저 대시보드).
|
|
50
|
+
- `scripts/harness-goal-init.sh`, `scripts/harness-goal-show.sh` — 외부 호출 0 건의 고아.
|
|
51
|
+
- `commands/harness-company.md` — Studio launch 명령 (런타임 자동화로 불필요).
|
|
52
|
+
- `bin/init.js`: `runTeamStudio()` + `company` / `studio` / `studio-v4` / `v4` subcommand 제거.
|
|
53
|
+
|
|
54
|
+
### Migration
|
|
55
|
+
기존 프로젝트는 `npx walwal-harness --force` 또는 다음만 수동 적용:
|
|
56
|
+
1. `.claude/settings.json` 에 Stop 훅 추가 (matcher: "", command: `bash scripts/harness-stop.sh`).
|
|
57
|
+
2. `bash scripts/harness-wake-install.sh install <project-root>` 로 1시간 안전망 등록 (선택).
|
|
58
|
+
3. `~/<project>/scripts/` 에서 위 7개 legacy 스크립트 제거.
|
|
59
|
+
|
|
32
60
|
## 6.1.4 — Template + package files alignment with v6 NEXUS (2026-05-08)
|
|
33
61
|
|
|
34
62
|
### Why
|
package/README.md
CHANGED
|
@@ -224,74 +224,27 @@ bash scripts/harness-token-limit.sh . mark 300
|
|
|
224
224
|
|
|
225
225
|
핵심은 운영 품질이 아니라 빠른 사실 확인입니다.
|
|
226
226
|
|
|
227
|
-
## 런타임
|
|
227
|
+
## 런타임 (회사모드 always-on)
|
|
228
228
|
|
|
229
|
-
|
|
229
|
+
회사모드는 유일한 런타임이며 항상 켜져 있습니다. `progress.mode == "company"` 가 항상 참이고, 별도 모드 전환 명령은 없습니다.
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
자율 진행은 두 메커니즘으로 유지됩니다:
|
|
232
232
|
|
|
233
|
-
|
|
233
|
+
- **Stop 훅** — Claude 가 한 turn 을 끝내려는 시점에 발화. `conductor.state == "running"` 이고 다음 부서가 있으면 자동으로 turn 을 한 번 더 굴려 끊김 없이 연쇄.
|
|
234
|
+
- **launchd hourly wake (선택)** — 1시간마다 macOS 가 `scripts/harness-wake.sh` 를 호출. idle ≥ 55분이고 `paused/completed/escalated` 가 아닌 프로젝트만 깨움.
|
|
234
235
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
-
|
|
238
|
-
- control-plane 과 worker-plane 분리
|
|
239
|
-
- feature queue 기반 병렬 처리
|
|
240
|
-
- tmux studio 사용 가능
|
|
241
|
-
|
|
242
|
-
강제 전환:
|
|
243
|
-
|
|
244
|
-
```text
|
|
245
|
-
/harness-team
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Solo
|
|
249
|
-
|
|
250
|
-
비상용 fallback 입니다.
|
|
251
|
-
|
|
252
|
-
사용 시점:
|
|
253
|
-
|
|
254
|
-
- 디버깅
|
|
255
|
-
- 스크립트 장애
|
|
256
|
-
- 짧은 수동 복구
|
|
257
|
-
|
|
258
|
-
강제 전환:
|
|
259
|
-
|
|
260
|
-
```text
|
|
261
|
-
/harness-solo
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Stop
|
|
265
|
-
|
|
266
|
-
Team 모드를 안전하게 멈추고 진행 중이던 feature 를 ready 로 복구합니다.
|
|
267
|
-
|
|
268
|
-
```text
|
|
269
|
-
/harness-stop
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
## Team Studio
|
|
273
|
-
|
|
274
|
-
Team 모드에서는 tmux 기반 Studio 레이아웃을 사용합니다.
|
|
275
|
-
|
|
276
|
-
시작:
|
|
277
|
-
|
|
278
|
-
```text
|
|
279
|
-
/harness-team
|
|
280
|
-
```
|
|
236
|
+
```bash
|
|
237
|
+
# 1시간 안전망 wake 등록
|
|
238
|
+
bash scripts/harness-wake-install.sh install .
|
|
281
239
|
|
|
282
|
-
|
|
240
|
+
# 상태 확인
|
|
241
|
+
bash scripts/harness-wake-install.sh status
|
|
283
242
|
|
|
284
|
-
|
|
285
|
-
|
|
243
|
+
# 즉시 한 번 발화 (테스트)
|
|
244
|
+
bash scripts/harness-wake-install.sh run-now
|
|
286
245
|
```
|
|
287
246
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
- Dashboard
|
|
291
|
-
- Gotchas
|
|
292
|
-
- Conventions
|
|
293
|
-
- Memory
|
|
294
|
-
- Team 1~3 worker pane
|
|
247
|
+
회의 결정의 `tracks[]` 는 진행 흐름의 fork-join 단위이며 런타임 모드와는 별개입니다 (`tracks.length ≥ 2` 일 때 parallel).
|
|
295
248
|
- Archive prompt
|
|
296
249
|
|
|
297
250
|
Queue 관련 유용한 명령:
|
|
@@ -345,15 +298,22 @@ bash scripts/harness-queue-manager.sh idle-slots .
|
|
|
345
298
|
|
|
346
299
|
| 스크립트 | 역할 |
|
|
347
300
|
|---|---|
|
|
348
|
-
| `scripts/
|
|
349
|
-
| `scripts/
|
|
350
|
-
| `scripts/harness-
|
|
351
|
-
| `scripts/harness-
|
|
352
|
-
| `scripts/harness-
|
|
353
|
-
| `scripts/harness-
|
|
354
|
-
| `scripts/harness-
|
|
355
|
-
| `scripts/harness-
|
|
301
|
+
| `scripts/conductor-tick.sh` | 회사 루프 라우터 — 다음 부서 결정 |
|
|
302
|
+
| `scripts/harness-next.sh` | turn 종료 후 handoff 생성 + gotcha/convention 자동 등록 + audit gate |
|
|
303
|
+
| `scripts/harness-progress-set.sh` | progress.json partial update 헬퍼 |
|
|
304
|
+
| `scripts/harness-session-start.sh` | SessionStart 훅 (+ future-dated 라인 자동 격리) |
|
|
305
|
+
| `scripts/harness-user-prompt-submit.sh` | UserPromptSubmit 훅 |
|
|
306
|
+
| `scripts/harness-stop.sh` | Stop 훅 — turn 종료 시 자동 연쇄 |
|
|
307
|
+
| `scripts/harness-wake.sh` | 1시간 안전망 wake (launchd 가 호출) |
|
|
308
|
+
| `scripts/harness-wake-install.sh` | launchd 등록/관리 CLI |
|
|
309
|
+
| `scripts/harness-statusline.sh` | 1줄 statusLine 렌더 |
|
|
310
|
+
| `scripts/harness-queue-manager.sh` | feature queue 관리 |
|
|
356
311
|
| `scripts/harness-meeting-doc.sh` | 회의 문서 skeleton / decision 처리 |
|
|
312
|
+
| `scripts/harness-task-session.sh` | agent 별 task session (TokenLimit) |
|
|
313
|
+
| `scripts/harness-token-limit.sh` | TokenLimit hold/resume 마킹 |
|
|
314
|
+
| `scripts/harness-archive.sh` | sprint 종료 archive |
|
|
315
|
+
| `scripts/harness-gotcha-register.sh` | evaluator output 의 gotcha_candidates 자동 등록 |
|
|
316
|
+
| `scripts/harness-dashboard-up.sh` | Brick Office (브라우저 3D 대시보드) 기동 |
|
|
357
317
|
|
|
358
318
|
## 디렉토리 구조
|
|
359
319
|
|
|
@@ -414,17 +374,26 @@ cat .harness/progress.json | jq '.task_stop'
|
|
|
414
374
|
bash scripts/harness-queue-manager.sh status .
|
|
415
375
|
```
|
|
416
376
|
|
|
417
|
-
###
|
|
377
|
+
### Stop 훅 자동 연쇄가 안 도는지 점검
|
|
418
378
|
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
/
|
|
422
|
-
|
|
379
|
+
```bash
|
|
380
|
+
# config 확인 — auto_chain_on_stop 이 true 여야 함
|
|
381
|
+
jq '.behavior.auto_chain_on_stop // true' .harness/config.json
|
|
382
|
+
|
|
383
|
+
# stop_chain_count 와 sprint 상한 확인
|
|
384
|
+
jq '{count: .conductor.stop_chain_count, max: 200}' .harness/progress.json
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### 1시간 wake 가 발화 안 하는지 점검
|
|
388
|
+
|
|
389
|
+
```bash
|
|
390
|
+
bash scripts/harness-wake-install.sh status
|
|
391
|
+
tail -30 ~/.walwal-harness/logs/wake.log
|
|
423
392
|
```
|
|
424
393
|
|
|
425
394
|
## 버전 호환성
|
|
426
395
|
|
|
427
|
-
README 는 v6.
|
|
396
|
+
README 는 v6.x 계열 always-on 회사모드 기준입니다 (solo/team 모드 영구 제거).
|
|
428
397
|
|
|
429
398
|
이 문서에서 전제하는 기능:
|
|
430
399
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.walwal.harness-wake</string>
|
|
7
|
+
|
|
8
|
+
<key>ProgramArguments</key>
|
|
9
|
+
<array>
|
|
10
|
+
<string>/bin/bash</string>
|
|
11
|
+
<string>{{WAKE_SCRIPT}}</string>
|
|
12
|
+
</array>
|
|
13
|
+
|
|
14
|
+
<key>StartInterval</key>
|
|
15
|
+
<integer>3600</integer>
|
|
16
|
+
|
|
17
|
+
<key>RunAtLoad</key>
|
|
18
|
+
<false/>
|
|
19
|
+
|
|
20
|
+
<key>StandardOutPath</key>
|
|
21
|
+
<string>{{LOG_DIR}}/wake.stdout.log</string>
|
|
22
|
+
|
|
23
|
+
<key>StandardErrorPath</key>
|
|
24
|
+
<string>{{LOG_DIR}}/wake.stderr.log</string>
|
|
25
|
+
|
|
26
|
+
<key>EnvironmentVariables</key>
|
|
27
|
+
<dict>
|
|
28
|
+
<key>PATH</key>
|
|
29
|
+
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
|
|
30
|
+
</dict>
|
|
31
|
+
</dict>
|
|
32
|
+
</plist>
|
|
@@ -14,6 +14,18 @@
|
|
|
14
14
|
- 모노리스보다 모듈러 아키텍처 선호
|
|
15
15
|
-->
|
|
16
16
|
|
|
17
|
+
### Walwal-Harness Company Contract
|
|
18
|
+
|
|
19
|
+
walwal-harness는 단순 작업 파이프라인이 아니라 "회사 구조 + 자율 구조 + 하네스"다.
|
|
20
|
+
|
|
21
|
+
- Owner는 최초 GOAL과 escalation에만 관여한다. 최초 GOAL 이후 Owner 입력은 interrupt/additional request이며 회사가 대기하는 이유가 아니다.
|
|
22
|
+
- Dispatcher/CEO는 Owner와의 유일한 외부 창구다.
|
|
23
|
+
- Planner/COO는 GOAL을 work package, queue, 가설, plan으로 바꾼다.
|
|
24
|
+
- CTO는 구현, 아키텍처, 기술선택, runtime recovery 책임자다.
|
|
25
|
+
- CQO는 품질, 회귀, evidence, PASS/FAIL 책임자다.
|
|
26
|
+
- Service-Ops는 운영 신호, KPI, incident, monitor cadence 책임자다.
|
|
27
|
+
- Meeting-Manager는 상태표가 아니라 임원 회의록을 남긴다. 회의록에는 CEO/COO/CTO/CQO/Service-Ops의 Position, Evidence, Action이 있어야 한다.
|
|
28
|
+
|
|
17
29
|
## Code Style
|
|
18
30
|
|
|
19
31
|
<!-- 코드 스타일 규칙을 여기에 작성하세요 -->
|
|
@@ -92,7 +92,7 @@ scripts/ # 하네스 스크립트 (init.js 가 동기화)
|
|
|
92
92
|
```
|
|
93
93
|
.harness/
|
|
94
94
|
├── HARNESS.md # 이 파일
|
|
95
|
-
├── config.json # 하네스 설정 (
|
|
95
|
+
├── config.json # 하네스 설정 (company_mode, behavior, flow gates)
|
|
96
96
|
├── progress.json # 기계 판독 상태 (세션 오케스트레이션 SoT)
|
|
97
97
|
├── progress.log # 사람 판독 히스토리 (append-only)
|
|
98
98
|
├── handoff.json # 세션 전환 문서 (prompt, model, artifacts, regression)
|
|
@@ -143,7 +143,7 @@ Planner ─ ┐
|
|
|
143
143
|
▼
|
|
144
144
|
CTO ── 실행 분할 ── ┐
|
|
145
145
|
▼ ▼
|
|
146
|
-
Gen-BE ⇄ Gen-FE (병렬
|
|
146
|
+
Gen-BE ⇄ Gen-FE (회사모드 병렬 worker pool)
|
|
147
147
|
│
|
|
148
148
|
▼
|
|
149
149
|
CQO 적대적 검증 (early-exit chain)
|
|
@@ -183,12 +183,11 @@ Archive (sprint advance)
|
|
|
183
183
|
- followup-review 자체에서 또 fork 금지 (무한 fork 방지).
|
|
184
184
|
- 한 sprint 내 parallel fork ≥ 3 회면 다음 fork 는 single 강제.
|
|
185
185
|
|
|
186
|
-
##
|
|
186
|
+
## Company / Hypothesis 실행
|
|
187
187
|
|
|
188
|
-
|
|
|
188
|
+
| 실행 | 트리거 | 동작 |
|
|
189
189
|
|------|--------|------|
|
|
190
|
-
| **
|
|
191
|
-
| **Team** | `progress.json.mode = "team"` (Owner 또는 Conductor 결정) | 매 tick `min(ready, 3)` 동시 spawn, parallel evaluator |
|
|
190
|
+
| **Company** | 기본값 | Conductor 가 매 tick `min(ready, 3)` 병렬 worker 를 자동 배정 |
|
|
192
191
|
| **Hypothesis** | Planner `requested_mode = "hypothesis"` | `documentationer → coo-developer → documentationer → planner` 가설 검증 루프 |
|
|
193
192
|
|
|
194
193
|
## 품질 게이트
|
|
@@ -215,9 +214,10 @@ Archive (sprint advance)
|
|
|
215
214
|
| `npx walwal-harness` | 첫 설치 / 안전 init (G-NNN, C-NNN 보존) |
|
|
216
215
|
| `npx walwal-harness --force` | 시스템 파일 강제 갱신 (G/C entry 는 여전히 보존) |
|
|
217
216
|
| `npx walwal-harness migrate` | 구버전 progress.json / config.json schema 정상화 |
|
|
218
|
-
| `npx walwal-harness
|
|
217
|
+
| `npx walwal-harness verify` | 설치 정합성 검증 |
|
|
219
218
|
| `bash scripts/harness-dashboard-up.sh` | Brick Office 라이브 대시보드 (http://localhost:3001) |
|
|
220
|
-
| `bash scripts/harness-
|
|
219
|
+
| `bash scripts/harness-wake-install.sh install .` | 1시간 안전망 wake 등록 (launchd) |
|
|
220
|
+
| `bash scripts/harness-wake-install.sh status` | wake 상태 / 등록 프로젝트 확인 |
|
|
221
221
|
|
|
222
222
|
## 다음 단계
|
|
223
223
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"harness": {
|
|
3
3
|
"name": "walwal-harness — NEXUS company harness",
|
|
4
4
|
"version": "6.1.4",
|
|
5
|
-
"description": "NEXUS-adapted company metaphor for AI-agent engineering. Owner ↔ Dispatcher(CEO) ↔ Conductor + Meeting-Manager ↔ Planner(COO/HR) + CTO + CQO + Service-Ops. Generators (BE/FE/Designer/DevOps) + Evaluators (Functional/Visual/Code-Quality/Architecture/Security) + COO Hypothesis Cell.
|
|
5
|
+
"description": "NEXUS-adapted company metaphor for AI-agent engineering. Owner ↔ Dispatcher(CEO) ↔ Conductor + Meeting-Manager ↔ Planner(COO/HR) + CTO + CQO + Service-Ops. Generators (BE/FE/Designer/DevOps) + Evaluators (Functional/Visual/Code-Quality/Architecture/Security) + COO Hypothesis Cell. Always-on company mode, parallel worker pool, parallel-tracks fork-join meetings, hierarchical Conventions/Gotchas. React/Next.js/Flutter FE, NestJS/Laravel BE.",
|
|
6
6
|
"source": "https://www.anthropic.com/engineering/harness-design-long-running-apps"
|
|
7
7
|
},
|
|
8
8
|
"agents": {
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"on_fail": "reroute_to_generator"
|
|
208
208
|
},
|
|
209
209
|
"team": {
|
|
210
|
-
"comment": "
|
|
210
|
+
"comment": "Company worker pool 설정. 회사모드에서 항상 사용.",
|
|
211
211
|
"concurrency": 3,
|
|
212
212
|
"max_retries_per_feature": 5,
|
|
213
213
|
"escalate_after": 3,
|
|
@@ -349,32 +349,30 @@
|
|
|
349
349
|
"re_notify_every_seconds": 3600,
|
|
350
350
|
"owner": "session-start"
|
|
351
351
|
},
|
|
352
|
-
"
|
|
353
|
-
"comment": "v6.
|
|
354
|
-
"default_mode": "
|
|
352
|
+
"company_mode": {
|
|
353
|
+
"comment": "v6.3 — 회사모드는 항시 활성이다. 사용자 모드 선택과 tie-breaker 는 제거됐다. Conductor 는 feature-list/queue 를 기반으로 매 tick 가능한 병렬 작업을 자동 배정한다.",
|
|
354
|
+
"default_mode": "company",
|
|
355
355
|
"owner": "conductor",
|
|
356
|
-
"
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
"/harness-team (force team)",
|
|
377
|
-
"사용자 발화: 'solo 로', 'team 으로', 'auto 다시' (auto 복귀)"
|
|
356
|
+
"worker_concurrency": 3,
|
|
357
|
+
"worker_spawn": "claude",
|
|
358
|
+
"worker_spawn_description": "claude 이면 idle worker 배정 시 `claude -p` 백그라운드 프로세스를 띄운다. record 로 두면 prompt/log만 생성한다.",
|
|
359
|
+
"autonomous": true,
|
|
360
|
+
"parallel_by_default": true
|
|
361
|
+
},
|
|
362
|
+
"runtime": {
|
|
363
|
+
"production": {
|
|
364
|
+
"comment": "Owner+CEO+CTO 합의로만 services[] 를 수정한다. live=true 이고 services[] 가 있으면 Service-Ops 는 매 hourly review 마다 port/health/log 상태를 운영보고서에 남긴다.",
|
|
365
|
+
"live": false,
|
|
366
|
+
"services": [
|
|
367
|
+
{
|
|
368
|
+
"name": "example-api",
|
|
369
|
+
"host": "127.0.0.1",
|
|
370
|
+
"port": 3000,
|
|
371
|
+
"health_path": "/health",
|
|
372
|
+
"expected_status": 200,
|
|
373
|
+
"log_path": null,
|
|
374
|
+
"cadence_seconds": 3600
|
|
375
|
+
}
|
|
378
376
|
]
|
|
379
377
|
}
|
|
380
378
|
},
|
|
@@ -65,7 +65,7 @@ docmeta:
|
|
|
65
65
|
5. `result PASS`는 **SCORE ≥ 2.80**인 경우에만 기록. score=1.00을 PASS로 기록 금지.
|
|
66
66
|
6. 각 단계마다 **어떤 도구/방법으로 검증했는지**(tsc/eslint/curl/playwright 등) 명시.
|
|
67
67
|
- **Context**: 사용자가 대시보드 로그만 보고 진행 상황을 파악해야 하는데, 기존 축약 로그로는 4대 질문에 답이 안 보인다는 피드백.
|
|
68
|
-
- **Applies to**:
|
|
68
|
+
- **Applies to**: Company Worker(Generator + Evaluator), 모든 `logev` 호출 지점.
|
|
69
69
|
|
|
70
70
|
### [M-NEXUS-P3] Owner ↔ CEO 단일 창구 + 자율 실행 (Inviolable)
|
|
71
71
|
- **Date**: 2026-05-07
|
|
@@ -77,10 +77,24 @@ docmeta:
|
|
|
77
77
|
- **Context**: v6.0.0 publish 직후 dispatcher 응답이 사용자를 "CEO 직접 리뷰…" 로 호명하고 "/harness-next 자동 진행하시겠습니까?" 로 사용자 펌프를 요구함. Owner 의 명시적 교정.
|
|
78
78
|
- **Applies to**:
|
|
79
79
|
- **Dispatcher**: 사용자 호칭/응답 문구, GOAL 정립, 모든 inbound/outbound owner 통신. → anti-pattern: `.harness/gotchas/dispatcher.md` [G-001]~[G-004].
|
|
80
|
-
- **Conductor**: GOAL 확정 직후 자동 시동 (사용자 허락 X), Eval PASS/FAIL 직후 자동 advance/retry,
|
|
80
|
+
- **Conductor**: GOAL 확정 직후 자동 시동 (사용자 허락 X), Eval PASS/FAIL 직후 자동 advance/retry, 회사모드 병렬 worker pool 관리.
|
|
81
81
|
- **Planner / CTO / CQO / Generator / Evaluator / Service-Ops**: Owner 와 직접 대화 X. 모든 통신은 Dispatcher 경유.
|
|
82
82
|
- **Why this matters**: 회사가 매 단계 사용자 허락을 구하면 NEXUS 메타포 자체가 무너진다. P3 "Continuous Loop > End-of-Pipeline" 가 약속하는 95% 결함 차단·40~60% 단축은 자율 루프에서만 성립한다.
|
|
83
83
|
|
|
84
|
+
### [M-SYS-EXEC-ROLE-CONTRACT] 회사 역할 계약은 하네스 SoT에서 자동 적용되어야 한다
|
|
85
|
+
- **Date**: 2026-05-10
|
|
86
|
+
- **Status**: verified
|
|
87
|
+
- **TTL**: 영구
|
|
88
|
+
- **Lesson**: CEO/COO/CTO/CQO/Service-Ops가 무엇을 해야 하고 무엇을 하면 안 되는지는 일회성 wake prompt나 개별 회의 문구가 아니라 하네스의 convention/gotcha/memory SoT에 있어야 한다. 모든 에이전트는 세션 시작 시 `CONVENTIONS.md`, `.harness/conventions/shared.md`, 자기 role convention, 자기 gotcha, `.harness/memory.md` 순서로 읽고 이 계약을 적용한다.
|
|
89
|
+
- **Context**: Owner가 Paperclip과 비교하며 현재 하네스는 각 임원이 자기 역할을 명확히 이해하고 일한다는 느낌이 없다고 지적했다. 원인은 역할 계약이 문서에는 있었지만 hourly/review 실행 경로와 worker prompt가 이를 자동 적용하지 않고 상태 리포트만 만든 데 있었다.
|
|
90
|
+
- **Applies to**:
|
|
91
|
+
- **Dispatcher/CEO**: Owner-facing 창구와 GOAL/escalation 책임.
|
|
92
|
+
- **Planner/COO**: GOAL → work package/queue/가설 변환 책임.
|
|
93
|
+
- **CTO**: 구현/아키텍처/runtime recovery 책임.
|
|
94
|
+
- **CQO**: evidence/PASS/FAIL/회귀 검증 책임.
|
|
95
|
+
- **Service-Ops**: 운영 신호를 회의 evidence와 CTO/CQO action으로 연결.
|
|
96
|
+
- **Meeting-Manager**: 상태표가 아니라 임원 회의록을 남김.
|
|
97
|
+
|
|
84
98
|
### [M-002] FE Evaluation은 Playwright 필수
|
|
85
99
|
- **Date**: 2026-04-20
|
|
86
100
|
- **Status**: verified
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 4,
|
|
3
|
-
"mode": "
|
|
3
|
+
"mode": "company",
|
|
4
4
|
"mode_decision": {
|
|
5
5
|
"owner": "conductor",
|
|
6
6
|
"decided_at": null,
|
|
7
|
-
"rationale":
|
|
8
|
-
"
|
|
7
|
+
"rationale": "company mode is always-on",
|
|
8
|
+
"policy": "always_company_parallel"
|
|
9
9
|
},
|
|
10
10
|
"project_name": "",
|
|
11
11
|
"pipeline": null,
|
|
@@ -47,8 +47,9 @@
|
|
|
47
47
|
"api-contract.json": { "status": "pending", "updated_by": null, "updated_at": null },
|
|
48
48
|
"sprint-contract.md": { "status": "pending", "updated_by": null, "updated_at": null }
|
|
49
49
|
},
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"company_state": {
|
|
51
|
+
"active_workers": 0,
|
|
52
|
+
"concurrency": 3,
|
|
52
53
|
"paused_at": null,
|
|
53
54
|
"resume_from": null
|
|
54
55
|
},
|