@walwal-harness/cli 6.1.1 → 6.1.3
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 +29 -0
- package/README.md +306 -367
- package/assets/templates/config.json +7 -0
- package/assets/templates/progress.json.template +13 -0
- package/gotchas/README.md +40 -8
- package/gotchas/conductor.md +12 -82
- package/gotchas/coo-developer.md +21 -12
- package/gotchas/cqo.md +22 -0
- package/gotchas/cto.md +22 -0
- package/gotchas/dispatcher.md +12 -87
- package/gotchas/documentationer.md +21 -12
- package/gotchas/evaluator-architecture.md +22 -0
- package/gotchas/evaluator-code-quality.md +11 -20
- package/gotchas/evaluator-functional.md +10 -30
- package/gotchas/evaluator-security.md +22 -0
- package/gotchas/evaluator-visual.md +10 -19
- package/gotchas/generator-backend-laravel.md +11 -77
- package/gotchas/generator-backend.md +19 -2
- package/gotchas/generator-designer.md +22 -0
- package/gotchas/generator-devops.md +22 -0
- package/gotchas/generator-frontend.md +13 -22
- package/gotchas/meeting-manager.md +22 -0
- package/gotchas/planner.md +19 -2
- package/gotchas/service-ops.md +13 -18
- package/package.json +1 -1
- package/scripts/conductor-tick.sh +167 -21
- package/scripts/harness-meeting-doc.sh +146 -2
- package/scripts/harness-session-start.sh +61 -0
- package/scripts/harness-token-limit.sh +99 -0
- package/scripts/harness-user-prompt-submit.sh +23 -0
- package/scripts/lib/harness-progress-migrate.sh +58 -0
- package/skills/conductor/SKILL.md +1 -0
- package/skills/coo-developer/SKILL.md +35 -5
- package/skills/documentationer/SKILL.md +55 -9
- package/skills/meeting-manager/SKILL.md +114 -4
- package/skills/planner/SKILL.md +45 -0
|
@@ -342,6 +342,13 @@
|
|
|
342
342
|
"auto_route_dispatcher": true,
|
|
343
343
|
"auto_route_dispatcher_description": "true 이면 사용자의 모든 프롬프트가 harness-dispatcher 경유로 분류/라우팅 된다. 사용자가 'harness skip' 등을 말하면 단일 메시지 한정으로 건너뛴다."
|
|
344
344
|
},
|
|
345
|
+
"token_limit": {
|
|
346
|
+
"comment": "모델 토큰 제한으로 작업이 중단됐을 때의 저비용 재개 정책. 별도 probe 호출 없이 시간 기반으로만 재개 알림을 계산한다.",
|
|
347
|
+
"stop_reason_flag": "TokenLimit",
|
|
348
|
+
"retry_after_seconds": 3600,
|
|
349
|
+
"re_notify_every_seconds": 3600,
|
|
350
|
+
"owner": "session-start"
|
|
351
|
+
},
|
|
345
352
|
"mode_selection": {
|
|
346
353
|
"comment": "v6.0 — Solo/Team 모드를 사용자가 아닌 Conductor 가 결정. progress.json.mode='auto' 일 때 Conductor 가 feature-list 의 ready_count + 의존성 깊이 + sprint feature 수를 보고 룰을 적용. 사용자는 /harness-solo 또는 /harness-team 으로 override 가능하며 그 결정은 progress.json.mode_decision.user_override 에 기록된다.",
|
|
347
354
|
"default_mode": "auto",
|
|
@@ -28,6 +28,19 @@
|
|
|
28
28
|
"message": null,
|
|
29
29
|
"retry_target": null
|
|
30
30
|
},
|
|
31
|
+
"task_stop": {
|
|
32
|
+
"active": false,
|
|
33
|
+
"reason": null,
|
|
34
|
+
"stopped_at": null,
|
|
35
|
+
"resume_after": null,
|
|
36
|
+
"resume_ready": false,
|
|
37
|
+
"resume_notified_at": null,
|
|
38
|
+
"wake_target": null,
|
|
39
|
+
"stopped_agent": null,
|
|
40
|
+
"stopped_next_agent": null,
|
|
41
|
+
"task_session_path": null,
|
|
42
|
+
"hold_count": 0
|
|
43
|
+
},
|
|
31
44
|
"artifacts": {
|
|
32
45
|
"plan.md": { "status": "pending", "updated_by": null, "updated_at": null },
|
|
33
46
|
"feature-list.json": { "status": "pending", "updated_by": null, "updated_at": null },
|
package/gotchas/README.md
CHANGED
|
@@ -8,12 +8,31 @@
|
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
.harness/gotchas/
|
|
11
|
-
├── README.md # 이 파일
|
|
12
|
-
|
|
13
|
-
├──
|
|
14
|
-
├──
|
|
15
|
-
├──
|
|
16
|
-
|
|
11
|
+
├── README.md # 이 파일 (형식·관리 규칙)
|
|
12
|
+
│
|
|
13
|
+
├── conductor.md # Conductor (자율 실행 엔진)
|
|
14
|
+
├── dispatcher.md # Dispatcher (CEO)
|
|
15
|
+
├── meeting-manager.md # Meeting-Manager (회의 사회)
|
|
16
|
+
├── planner.md # Planner (COO + HR)
|
|
17
|
+
├── cto.md # CTO (Gen 총괄)
|
|
18
|
+
├── cqo.md # CQO (Eval 총괄)
|
|
19
|
+
├── service-ops.md # Service-Ops (운용)
|
|
20
|
+
│
|
|
21
|
+
├── coo-developer.md # COO Hypothesis Cell — Developer
|
|
22
|
+
├── documentationer.md # COO Hypothesis Cell — Documentationer
|
|
23
|
+
│
|
|
24
|
+
├── generator-backend.md # Generator-Backend
|
|
25
|
+
├── generator-frontend.md # Generator-Frontend
|
|
26
|
+
├── generator-designer.md # Generator-Designer
|
|
27
|
+
├── generator-devops.md # Generator-DevOps
|
|
28
|
+
│
|
|
29
|
+
├── evaluator-code-quality.md # Eval-Code-Quality
|
|
30
|
+
├── evaluator-functional.md # Eval-Functional
|
|
31
|
+
├── evaluator-visual.md # Eval-Visual
|
|
32
|
+
├── evaluator-architecture.md # Eval-Architecture
|
|
33
|
+
├── evaluator-security.md # Eval-Security
|
|
34
|
+
│
|
|
35
|
+
└── generator-backend-<stack>.md # 스택별 가드 (예: -laravel)
|
|
17
36
|
```
|
|
18
37
|
|
|
19
38
|
## 항목 형식
|
|
@@ -22,8 +41,8 @@
|
|
|
22
41
|
### [G-NNN] 간결한 제목 <!-- rule_id: <unique-key> -->
|
|
23
42
|
- **Status**: unverified | verified | resolved
|
|
24
43
|
- **Date**: YYYY-MM-DD
|
|
25
|
-
- **Source**: <작성 주체> (예: "evaluator-functional:F-003" / "dispatcher:manual")
|
|
26
|
-
- **Trigger**: 사용자가 한 말 또는 "Eval 자동 감지"
|
|
44
|
+
- **Source**: <작성 주체> (예: "evaluator-functional:F-003" / "dispatcher:manual" / "meeting:M-...:track-2")
|
|
45
|
+
- **Trigger**: 사용자가 한 말 또는 "Eval 자동 감지" 또는 "track abandon"
|
|
27
46
|
- **Wrong**: 에이전트가 했던 잘못된 행동
|
|
28
47
|
- **Right**: 올바른 행동
|
|
29
48
|
- **Why**: 왜 잘못인지 근거
|
|
@@ -32,6 +51,19 @@
|
|
|
32
51
|
- **Last-Seen**: YYYY-MM-DD
|
|
33
52
|
```
|
|
34
53
|
|
|
54
|
+
### Source 필드 (v6.2 — parallel tracks 추적)
|
|
55
|
+
|
|
56
|
+
`Source` 는 항목이 어디서 생겼는지 추적한다. 가능한 형식:
|
|
57
|
+
|
|
58
|
+
| 형식 | 의미 |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `dispatcher:manual` | 사용자가 명시적으로 지적 |
|
|
61
|
+
| `evaluator-<axis>:F-<id>` | Evaluator 가 자동 감지한 사건 (gotcha_candidates) |
|
|
62
|
+
| `service-ops:incident-<id>` | Service-Ops 인시던트에서 도출 |
|
|
63
|
+
| `meeting:M-<id>:track-<n>` | parallel-tracks 회의의 특정 트랙에서 도출 (v6.2) |
|
|
64
|
+
| `meeting:M-<id>:rendezvous` | followup-review 통합 결정에서 도출 |
|
|
65
|
+
| `planner:manual` | Planner 가 sprint 전환 시 등록 |
|
|
66
|
+
|
|
35
67
|
## 작성 주체
|
|
36
68
|
|
|
37
69
|
- **Dispatcher**: 사용자의 명시적 실수 지적을 Gotcha Flow 로 기록
|
package/gotchas/conductor.md
CHANGED
|
@@ -1,92 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
docmeta:
|
|
3
3
|
id: gotchas-conductor
|
|
4
|
-
title: Gotchas —
|
|
4
|
+
title: Gotchas — uconductor
|
|
5
5
|
type: input
|
|
6
|
-
createdAt: 2026-05-
|
|
7
|
-
updatedAt: 2026-05-
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
8
|
source:
|
|
9
|
-
producer:
|
|
9
|
+
producer: user
|
|
10
10
|
skillId: harness-dispatcher
|
|
11
|
-
inputs:
|
|
12
|
-
|
|
13
|
-
uri: (inline — Owner 의 "잘 워킹하고 있다는 느낌이 들지 않는다" 지적)
|
|
14
|
-
relation: output-from
|
|
15
|
-
sections:
|
|
16
|
-
- sourceRange: { startLine: 1, endLine: 1 }
|
|
17
|
-
targetRange: { startLine: 17, endLine: 60 }
|
|
18
|
-
tags: [gotchas, conductor, autonomy, visibility, ghost-spawn]
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, conductor]
|
|
19
13
|
---
|
|
20
14
|
|
|
21
|
-
# Gotchas —
|
|
15
|
+
# Gotchas — uconductor
|
|
22
16
|
|
|
23
|
-
>
|
|
17
|
+
> Dispatcher 가 관리. uconductor 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
- **Date**: 2026-05-07
|
|
27
|
-
- **Status**: verified
|
|
28
|
-
- **Trigger**: v6.0.2 install 환경에서 Conductor 가 `evaluator-uiux` (정의 X) 를 spawn 하려다 "별도 SKILL 이 없으므로 Conductor 가 직접 검증" 식으로 inline 처리. Owner 가 "잘 워킹하고 있다는 느낌이 들지 않는다" 보고.
|
|
29
|
-
- **Wrong**: spawn 대상이 `.claude/skills/harness-<name>/SKILL.md` 에 없을 때 (a) Conductor 가 inline 검증으로 우회 (b) 사용자 모르게 fallback 으로 진행.
|
|
30
|
-
- **Right**: spawn 직전 SKILL 존재 검사. 없으면 즉시 escalate:
|
|
31
|
-
```bash
|
|
32
|
-
bash scripts/harness-progress-set.sh . \
|
|
33
|
-
'.failure = {"agent":"conductor","location":"spawn","message":"unknown agent: evaluator-uiux","retry_target":null} |
|
|
34
|
-
.next_agent = "dispatcher" |
|
|
35
|
-
.agent_status = "blocked"'
|
|
36
|
-
```
|
|
37
|
-
Dispatcher 가 받아 Owner 에게 "정의되지 않은 부서 호출 시도. 표준 chain (code-quality/functional/visual) 또는 신규 SKILL 등록 필요" 보고.
|
|
38
|
-
- **Why**: M-001 ("선언만 된 유령 스킬") 의 Conductor 차원 적용. inline 우회는 (a) 사용자 신뢰 깨짐 (b) audit 흔적 부재 (c) verify 명령으로 catch 불가능.
|
|
39
|
-
- **Scope**: 모든 spawn 결정. Tick Loop §5 spawn 결정 트리.
|
|
40
|
-
|
|
41
|
-
### [G-002] Spawn 핸드오프 시 회의실 활용 (visibility)
|
|
42
|
-
- **Date**: 2026-05-07
|
|
43
|
-
- **Status**: verified
|
|
44
|
-
- **Trigger**: Owner 발화 "CQO/COO/회의실 등에 모이지도 않고…"
|
|
45
|
-
- **Wrong**: spawn 핸드오프 시 progress.json 만 갱신하고 `meetings.active` 미사용. dashboard 에서 회의실이 텅 빔.
|
|
46
|
-
- **Right**: 핸드오프 직전 from→to 짧은 회의를 시각화:
|
|
47
|
-
```bash
|
|
48
|
-
# 핸드오프 시작
|
|
49
|
-
bash scripts/harness-progress-set.sh . \
|
|
50
|
-
'.meetings.active = ["dispatcher","planner"] | .meetings.cadence = "handoff"'
|
|
51
|
-
sleep 1.5 # 시각적으로 회의실에 잠깐 모임
|
|
52
|
-
# 실제 spawn
|
|
53
|
-
bash scripts/harness-progress-set.sh . \
|
|
54
|
-
'.meetings.active = [] | .current_agent = "planner" | .agent_status = "running"'
|
|
55
|
-
```
|
|
56
|
-
- **Why**: NEXUS 메타포 — 핸드오프 = 짧은 회의. dashboard 에서 회의실로 두 미니피규어 텔레포트 → 회사가 진짜 일한다는 신뢰.
|
|
57
|
-
- **Scope**: 모든 inter-agent 핸드오프.
|
|
58
|
-
|
|
59
|
-
### [G-003] Visibility Checklist 4 시점 누락 금지 (Inviolable)
|
|
60
|
-
- **Date**: 2026-05-07
|
|
61
|
-
- **Status**: verified
|
|
62
|
-
- **Trigger**: G-002 의 일반화. Conductor 가 매 tick 마다 progress.json 의 4 시점 partial update 를 누락하면 dashboard 가 stale.
|
|
63
|
-
- **Wrong**: Conductor 가 spawn → 검증 → 결과 처리 사이에 progress.json 갱신을 잊거나 일부만 함.
|
|
64
|
-
- **Right**: 매 tick 의 4 시점에 의무 update (skills/conductor/SKILL.md §0.5 참조):
|
|
65
|
-
1. **tick 시작**: `current_agent="conductor"`, `agent_status="running"`, `conductor.last_tick`, `tick_count++`
|
|
66
|
-
2. **spawn 직전**: `meetings.active=[from,to]`, `meetings.cadence="handoff"` (1~2초)
|
|
67
|
-
3. **spawn 직후**: `meetings.active=[]`, `current_agent="<spawned>"`, `agent_status="running"`
|
|
68
|
-
4. **tick 완료**: `current_agent` 그대로 (다음 에이전트 작업 중) 또는 `null` + `agent_status="completed"`
|
|
69
|
-
- **Scope**: 모든 tick 사이클. 1~3 시점 누락 시 dashboard 의 회의실 텔레포트 / 미니피규어 활동 시각화 깨짐.
|
|
70
|
-
|
|
71
|
-
### [G-005] Team mode 직렬 회귀 금지 — ready ≥ 2 면 병렬 spawn (status: verified)
|
|
72
|
-
- **Date**: 2026-05-07
|
|
73
|
-
- **Trigger**: Owner 보고 "솔로모드로 만 동작하는것처럼 다중 에이전트 상태가 아님" (moon_web 2026-05-07). progress.json.mode="team" 인데도 Conductor 가 한 번에 한 generator 만 spawn 하고 evaluator 핸드오프도 직렬.
|
|
74
|
-
- **Wrong**: Tick 마다 ready 목록에서 1개만 골라 spawn. tmux 의 T1/T2/T3 패널이 비어있어도 무시.
|
|
75
|
-
- **Right**: 매 tick 시작 시 ready 목록 (depends_on 충족 + agent_status≠running) 을 계산. mode="team" 이면 **min(ready, 3)** 만큼 동시 spawn — 각 팀 슬롯 (T1/T2/T3) 에 배정 + progress.json.team_state.team_<n>.assigned_feature, .assigned_agent 갱신. 동시 spawn 직전 meetings.active=["t1-lead","t2-lead","t3-lead"] 로 짧은 standup 시각화.
|
|
76
|
-
- **Scope**: §4 Tick Loop, §5 Spawn 결정 트리. Solo 모드는 1개 spawn 유지.
|
|
77
|
-
- **Why**: Team 자동 결정 룰 (ready≥3, features≥6, depth≤2) 을 만족시켜놓고 직렬로 돌리면 Team mode 가 형식상 활성이지만 실효 없음. 비용 + 시각적 신뢰 모두 낭비.
|
|
78
|
-
|
|
79
|
-
### [G-006] Build/Deploy 실행 중 service-ops/monitor 동반 spawn (status: verified)
|
|
80
|
-
- **Date**: 2026-05-07
|
|
81
|
-
- **Trigger**: Owner 보고 "Service ops 는 build/배포 환경 로그 모니터링하면서 에러 캐치해야 하는데 공석". moon_web 빌드 중 `flutter test --platform chrome` 의 WebSocketChannelException 이 stderr 에 흘렀지만 service-ops 룸은 빈 채.
|
|
82
|
-
- **Wrong**: generator-frontend / evaluator-functional 이 build·test 명령을 단독 실행. cron 사이 공백 동안 stderr 무감시.
|
|
83
|
-
- **Right**: build/test/deploy 를 트리거하는 spawn 직전, 동일 tick 에 service-ops/monitor 를 stream-mode 로 함께 spawn (handoff-bridge). 자식 프로세스 종료 시까지 stream_active=true. 스트림 매칭 정규식 (error|exception|TestFailure|Cannot find|Failed to compile) 시 즉시 red-alert.
|
|
84
|
-
- **Scope**: §5 Spawn 결정 트리에 "[generator-* or evaluator-functional spawn 직전] → service-ops/monitor stream-mode 동시 spawn" 라인 추가.
|
|
85
|
-
|
|
86
|
-
### [G-004] Owner 에게 진행 동의 묻지 말 것 (Dispatcher [G-002] 의 Conductor 적용)
|
|
87
|
-
- **Date**: 2026-05-07
|
|
88
|
-
- **Status**: verified
|
|
89
|
-
- **Trigger**: NEXUS P3 위반 패턴 재발 방지
|
|
90
|
-
- **Wrong**: Conductor 가 Eval PASS 후 "다음 sprint 시작할까요?" 같은 질문을 Dispatcher 통해 전달.
|
|
91
|
-
- **Right**: PASS → 다음 평가자 chain / sprint advance 자동. FAIL → retry_target 자동 라우팅. 3 회 연속 FAIL / 인시던트 / GOAL 위반 시에만 escalation.
|
|
92
|
-
- **Scope**: Tick Loop §6 Escalation 트리거.
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
package/gotchas/coo-developer.md
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-coo-developer
|
|
4
|
+
title: Gotchas — ucoo-udeveloper
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, coo-developer]
|
|
13
|
+
---
|
|
2
14
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Scope**: `coo-developer`의 모든 실험 작업
|
|
12
|
-
- **Occurrences**: 1
|
|
13
|
-
- **Last-Seen**: 2026-05-08
|
|
15
|
+
# Gotchas — ucoo-udeveloper
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. ucoo-udeveloper 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
package/gotchas/cqo.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-cqo
|
|
4
|
+
title: Gotchas — ucqo
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, cqo]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Gotchas — ucqo
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. ucqo 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
package/gotchas/cto.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-cto
|
|
4
|
+
title: Gotchas — ucto
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, cto]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Gotchas — ucto
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. ucto 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
package/gotchas/dispatcher.md
CHANGED
|
@@ -1,97 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
docmeta:
|
|
3
3
|
id: gotchas-dispatcher
|
|
4
|
-
title: Gotchas —
|
|
4
|
+
title: Gotchas — udispatcher
|
|
5
5
|
type: input
|
|
6
|
-
createdAt: 2026-05-
|
|
7
|
-
updatedAt: 2026-05-
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
8
|
source:
|
|
9
|
-
producer:
|
|
9
|
+
producer: user
|
|
10
10
|
skillId: harness-dispatcher
|
|
11
|
-
inputs:
|
|
12
|
-
|
|
13
|
-
uri: (inline — Owner 의 정체성/자율 실행 룰 위반 지적)
|
|
14
|
-
relation: output-from
|
|
15
|
-
note: inline 입력으로 sourceRange 는 단일 1..1 placeholder. 각 [G-NNN] 항목이 별개 발화 사건.
|
|
16
|
-
sections:
|
|
17
|
-
- sourceRange: { startLine: 1, endLine: 1 } # "왜 나를 CEO로 이해하지?" 발화
|
|
18
|
-
targetRange: { startLine: 17, endLine: 25 } # [G-001] Identity confusion
|
|
19
|
-
- sourceRange: { startLine: 1, endLine: 1 } # "왜 나에게 next를 물어볼까?" 발화
|
|
20
|
-
targetRange: { startLine: 27, endLine: 34 } # [G-002] 자율 실행 위반
|
|
21
|
-
- sourceRange: { startLine: 1, endLine: 1 } # G-002 의 명료화 boundary 추론
|
|
22
|
-
targetRange: { startLine: 36, endLine: 43 } # [G-003] 명료화는 짧게
|
|
23
|
-
- sourceRange: { startLine: 1, endLine: 1 } # AGENTS.md 단일 대화 창구 룰 (관련 docref)
|
|
24
|
-
targetRange: { startLine: 45, endLine: 52 } # [G-004] 직접 라우팅 금지
|
|
25
|
-
- documentId: AGENTS-md-template
|
|
26
|
-
uri: ../assets/templates/AGENTS.md.template
|
|
27
|
-
relation: output-from
|
|
28
|
-
note: 단일 대화 창구 룰 (Owner ↔ Dispatcher) 의 권위 출처.
|
|
29
|
-
sections:
|
|
30
|
-
- sourceRange: { startLine: 1, endLine: 1 }
|
|
31
|
-
targetRange: { startLine: 45, endLine: 52 }
|
|
32
|
-
tags: [gotchas, dispatcher, ceo, identity, autonomy]
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, dispatcher]
|
|
33
13
|
---
|
|
34
14
|
|
|
35
|
-
# Gotchas —
|
|
15
|
+
# Gotchas — udispatcher
|
|
36
16
|
|
|
37
|
-
> Dispatcher
|
|
17
|
+
> Dispatcher 가 관리. udispatcher 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
38
21
|
|
|
39
|
-
|
|
40
|
-
- **Date**: 2026-05-07
|
|
41
|
-
- **Status**: verified
|
|
42
|
-
- **Trigger**: 사용자 발화 "왜 나를 CEO로 이해하지? 내가 CEO에게 이야기 하는것인데?"
|
|
43
|
-
- **Wrong**: Dispatcher 가 응답에서 "CEO 직접 리뷰 기반…" 같이 사용자를 CEO 로 지칭하거나, 사용자가 CEO 의 권한 (GOAL 자유 변경, 부서 직접 명령) 을 가진 듯 동작.
|
|
44
|
-
- **Right**: 사용자 = **Owner**, Dispatcher = **CEO**. Owner 는 미션을 던지고, CEO 가 GOAL 으로 정립한 뒤 회사를 자율 운영한다. Owner 는 회사의 운영 방식이 아니라 **방향과 평가** 를 제시한다.
|
|
45
|
-
- **Why**: 정체성이 흐려지면 (a) Owner 에게 회사 내부 결정을 떠넘김, (b) Dispatcher 의 단일 대화 창구 룰이 약화, (c) Conductor/Planner 가 Owner 를 직접 호출하는 위반이 연쇄.
|
|
46
|
-
- **Scope**: 모든 응답 문구, GOAL 작성, 부서 호출 안내, escalation 보고.
|
|
47
|
-
|
|
48
|
-
### [G-002] 자율 실행 위반 — 사용자에게 진행 여부를 묻지 말 것
|
|
49
|
-
- **Date**: 2026-05-07
|
|
50
|
-
- **Status**: verified
|
|
51
|
-
- **Trigger**: 사용자 발화 "왜 나에게 next를 물어볼까? Goal이 정해졌으면 바로 하네스 넥서스 회사가 자율적으로 움직여야 하는것 아닌가?"
|
|
52
|
-
- **Wrong**: GOAL 확정 후에도 "/harness-next 자동 진행하시겠습니까?", "다음 단계로 진행할까요?" 같은 사용자 펌프 질문 출력.
|
|
53
|
-
- **Right**: GOAL 이 명확해지면 즉시 **Conductor 자율 시동**. 사용자 개입 없이 Planner → Gen → Eval chain 무인 진행. 사용자에게 돌아오는 시점은 (a) GOAL 자체가 모호해 명료화 필요, (b) 결과 보고, (c) escalation (3회 FAIL / 인시던트 / GOAL 위반) 셋 뿐.
|
|
54
|
-
- **Why**: NEXUS 도큐트린 P3 "Continuous Loop > End-of-Pipeline" 위반. 사용자 펌프 = 자율성 부재. 회사가 매 단계 사용자 허락을 구하면 NEXUS 메타포 자체가 무너짐.
|
|
55
|
-
- **Scope**: dispatcher → planner / dispatcher → conductor 핸드오프 모든 시점, eval PASS 후 다음 단계 진입, sprint 경계 (단 새 sprint 의 GOAL 이 모호하면 명료화 한 번만).
|
|
56
|
-
|
|
57
|
-
### [G-003] GOAL 모호성 명료화는 **짧게** 한 번만
|
|
58
|
-
- **Date**: 2026-05-07
|
|
59
|
-
- **Status**: unverified
|
|
60
|
-
- **Trigger**: G-002 의 boundary case
|
|
61
|
-
- **Wrong**: GOAL 명료화를 빌미로 사용자에게 5~10 개 질문 폭탄, 또는 매 sprint 시작 때마다 재명료화.
|
|
62
|
-
- **Right**: 미션이 진짜로 양 갈래일 때 단 1~2 개 질문, AskUserQuestion 으로 객관식. 그 외에는 합리적 해석으로 GOAL 작성 후 Conductor 시동. 결과가 의도와 다르면 사용자가 사후 교정.
|
|
63
|
-
- **Why**: 명료화 인터럽트가 자율성 위반의 우회 통로가 되지 않도록.
|
|
64
|
-
- **Scope**: dispatcher 의 GOAL 정립 단계.
|
|
65
|
-
|
|
66
|
-
### [G-005] 사용자에게 슬래시 명령을 입력하라고 요구하지 말 것
|
|
67
|
-
- **Date**: 2026-05-07
|
|
68
|
-
- **Status**: verified
|
|
69
|
-
- **Trigger**: Owner 발화 "회사인데 왜 자꾸 나에게 무언가 요청하는가? CEO 가 알아서 결정하면 될것을"
|
|
70
|
-
- **Wrong**: 응답에 "/harness-next 입력하세요", "/harness-evaluator-functional 호출하세요", "다음은 /harness-planner 슬래시 명령" 식으로 Owner 에게 회사 내부 진행 도구를 노출/요구.
|
|
71
|
-
- **Right**: 모든 슬래시 핸드오프 (`/harness-next`, `/harness-planner`, `/harness-evaluator-*` 등) 는 **회사 내부 자동화** 다. SKILL 의 On Complete 에서 직접 핸드오프하거나 `scripts/harness-next.sh` 를 호출. Owner 는 결과 보고와 escalation 만 본다.
|
|
72
|
-
- **Why**: NEXUS 메타포 — Owner 는 회사가 어떤 도구로 일하는지 신경쓰지 않는다. 슬래시 노출은 (a) 자율 실행 깨짐 (b) 정체성 (Owner ≠ CEO) 흐림.
|
|
73
|
-
- **Scope**: 모든 응답 문구. 단 사용자 명시 override 명령 (`/harness-solo`, `/harness-team`, `/harness-stop`) 은 예외 — 이건 Owner 의 권한이며 Owner 가 먼저 묻거나 Conductor 결정에 불만 있을 때만.
|
|
74
|
-
|
|
75
|
-
### [G-006] Owner 와 대화하는 동안 dashboard 가시화 의무
|
|
76
|
-
- **Date**: 2026-05-07
|
|
77
|
-
- **Status**: verified
|
|
78
|
-
- **Trigger**: Owner 발화 "dispatcher 로 대화 중일때도 CEO 는 자리에 없었고… 잘 워킹하고 있다는 느낌이 들지 않는다"
|
|
79
|
-
- **Wrong**: Dispatcher 가 Owner 의 메시지를 받고 응답을 작성하는 동안 progress.json 의 `current_agent` 가 셋되지 않아 Brick Office dashboard 의 CEO 룸이 idle 로 표시됨.
|
|
80
|
-
- **Right**: Owner 메시지 수신 즉시 첫 행동:
|
|
81
|
-
```bash
|
|
82
|
-
bash scripts/harness-progress-set.sh . '.current_agent = "dispatcher" | .agent_status = "running" | .updated_at = "<iso>"'
|
|
83
|
-
```
|
|
84
|
-
응답 송신 직전 마지막 행동:
|
|
85
|
-
```bash
|
|
86
|
-
bash scripts/harness-progress-set.sh . '.agent_status = "completed" | .updated_at = "<iso>"'
|
|
87
|
-
```
|
|
88
|
-
→ CEO 미니피규어가 typing → idle 깜빡임. Owner 가 dashboard 에서 "회사가 일하고 있다" 신뢰 획득.
|
|
89
|
-
- **Scope**: 모든 inbound owner message 처리.
|
|
90
|
-
|
|
91
|
-
### [G-004] Owner ↔ Conductor / Planner / Generator / Evaluator 직접 라우팅 금지
|
|
92
|
-
- **Date**: 2026-05-07
|
|
93
|
-
- **Status**: verified
|
|
94
|
-
- **Trigger**: AGENTS.md 단일 대화 창구 룰
|
|
95
|
-
- **Wrong**: Dispatcher 가 "Conductor 가 작업 중이니 직접 물어보세요" 또는 사용자 발화를 Conductor 응답으로 직접 전달.
|
|
96
|
-
- **Right**: 모든 부서 ↔ Owner 통신은 Dispatcher 경유. Conductor 의 escalation 도 Dispatcher 가 받아 Owner 에게 요약 보고. Owner 의 추가 입력도 Dispatcher 가 정제해 부서로 전달.
|
|
97
|
-
- **Scope**: 모든 inbound/outbound owner 통신.
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-documentationer
|
|
4
|
+
title: Gotchas — udocumentationer
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, documentationer]
|
|
13
|
+
---
|
|
2
14
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Scope**: `documentationer`의 모든 보고서와 브리프
|
|
12
|
-
- **Occurrences**: 1
|
|
13
|
-
- **Last-Seen**: 2026-05-08
|
|
15
|
+
# Gotchas — udocumentationer
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. udocumentationer 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-evaluator-architecture
|
|
4
|
+
title: Gotchas — uevaluator-uarchitecture
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, evaluator-architecture]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Gotchas — uevaluator-uarchitecture
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. uevaluator-uarchitecture 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
docmeta:
|
|
3
|
-
id: evaluator-code-quality
|
|
4
|
-
title: Gotchas —
|
|
3
|
+
id: gotchas-evaluator-code-quality
|
|
4
|
+
title: Gotchas — uevaluator-ucode-uquality
|
|
5
5
|
type: input
|
|
6
|
-
createdAt: 2026-
|
|
7
|
-
updatedAt: 2026-
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
8
|
source:
|
|
9
9
|
producer: user
|
|
10
10
|
skillId: harness-dispatcher
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- evaluator
|
|
14
|
-
- code-quality
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, evaluator-code-quality]
|
|
15
13
|
---
|
|
16
14
|
|
|
17
|
-
# Gotchas —
|
|
15
|
+
# Gotchas — uevaluator-ucode-uquality
|
|
18
16
|
|
|
19
|
-
> Dispatcher가 관리.
|
|
17
|
+
> Dispatcher 가 관리. uevaluator-ucode-uquality 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
20
21
|
|
|
21
22
|
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
22
|
-
|
|
23
|
-
## [G-001] 런타임 버그 인지 후 PASS 판정 금지 (verified · 2026-04-27)
|
|
24
|
-
|
|
25
|
-
**Status**: verified · **Severity**: HIGH
|
|
26
|
-
|
|
27
|
-
**규칙**: Code-quality eval 단계에서 SSR/RSC↔CC 경계 위반, 잘못된 라우트 타입, missing not-found/error.tsx 등 **런타임에 깨질 정적 결함**을 발견하면 즉시 FAIL. "스타일/구조 문제만 본다" 는 자기 합리화로 런타임 결함을 functional 단계로 넘기지 말 것.
|
|
28
|
-
|
|
29
|
-
**Why**: 사용자 명시 — "오류가 있는 것을 인지한 채로 스프린트를 넘어가는 행위는 절대 용납할 수 없다." Code-quality 가 정적 분석으로 잡을 수 있었던 결함을 통과시키면 evaluator chain 전체가 신뢰성을 잃는다.
|
|
30
|
-
|
|
31
|
-
**How to apply**: tsc/eslint 외에도 Next.js App Router 규칙 (use client 경계, typed routes), 라우트 세그먼트 필수 파일 (not-found/error/loading) 누락 여부를 정적으로 검사. 1 건이라도 발견 시 VERDICT=FAIL, retry_target=결함 위치 Generator.
|
|
@@ -1,42 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
docmeta:
|
|
3
|
-
id: evaluator-functional
|
|
4
|
-
title: Gotchas —
|
|
3
|
+
id: gotchas-evaluator-functional
|
|
4
|
+
title: Gotchas — uevaluator-ufunctional
|
|
5
5
|
type: input
|
|
6
|
-
createdAt: 2026-
|
|
7
|
-
updatedAt: 2026-
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
8
|
source:
|
|
9
9
|
producer: user
|
|
10
10
|
skillId: harness-dispatcher
|
|
11
11
|
inputs: []
|
|
12
|
-
tags: [
|
|
12
|
+
tags: [gotchas, evaluator-functional]
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
# Gotchas —
|
|
15
|
+
# Gotchas — uevaluator-ufunctional
|
|
16
16
|
|
|
17
|
-
> Dispatcher가 관리.
|
|
17
|
+
> Dispatcher 가 관리. uevaluator-ufunctional 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
18
21
|
|
|
19
22
|
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
20
|
-
|
|
21
|
-
## [G-001] 런타임 버그 인지 후 PASS 판정 금지 (verified · 2026-04-27)
|
|
22
|
-
|
|
23
|
-
**Status**: verified
|
|
24
|
-
**Severity**: HIGH
|
|
25
|
-
**Occurrences**: 1+ (실제 사례: harness-clue Sprint 3 F-209)
|
|
26
|
-
|
|
27
|
-
**규칙**: Evaluator (functional / visual / code-quality 모두) 가 평가 중 런타임 버그를 발견했거나 worker 가 보고서에 런타임 버그를 명시한 경우, **PASS 판정 절대 금지**. carry-over / 다음 sprint 처리 / follow-up 으로 미루기도 금지. 같은 sprint 안에서 fix 완료 후에만 PASS.
|
|
28
|
-
|
|
29
|
-
**검출 시그널** (eval 자체 + worker report 둘 다 스캔):
|
|
30
|
-
- "runtime bug", "런타임 버그/에러", "runtime error"
|
|
31
|
-
- RSC ↔ Client Component 경계 위반 (`use client` 누락 등)
|
|
32
|
-
- `not-found.tsx`, `error.tsx`, `loading.tsx` 누락/오류
|
|
33
|
-
- typed-routes / TypeScript route 타입 미스매치
|
|
34
|
-
- Hydration error, Hydration mismatch
|
|
35
|
-
- 콘솔 uncaught error, unhandled promise rejection
|
|
36
|
-
- worker 가 자기 결과를 "carry-over", "다음 sprint", "추후", "follow-up" 으로 표현
|
|
37
|
-
|
|
38
|
-
**처리**: 위 시그널 1 건 이상 → VERDICT=FAIL, score 무관, retry_target = 결함 위치 Generator. 점수가 2.80+ 이어도 FAIL 강제 (Adversarial Rule).
|
|
39
|
-
|
|
40
|
-
**Why**: 사용자 명시 — "오류가 있는 것을 인지한 채로 스프린트를 넘어가는 행위는 절대 용납할 수 없다. 견고하게 기반을 다져나가야 한다."
|
|
41
|
-
|
|
42
|
-
**How to apply**: Eval 종료 직전 자기 보고서 + Generator 보고서를 위 키워드로 grep. 1 건이라도 매치하면 verdict 를 FAIL 로 강제 변환하고 evaluation-*.md 의 결론 섹션에 "Hard Gate G-001 위반: <검출 키워드> — 같은 sprint 내 fix 후 재평가 필요" 명시.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
docmeta:
|
|
3
|
+
id: gotchas-evaluator-security
|
|
4
|
+
title: Gotchas — uevaluator-usecurity
|
|
5
|
+
type: input
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
+
source:
|
|
9
|
+
producer: user
|
|
10
|
+
skillId: harness-dispatcher
|
|
11
|
+
inputs: []
|
|
12
|
+
tags: [gotchas, evaluator-security]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Gotchas — uevaluator-usecurity
|
|
16
|
+
|
|
17
|
+
> Dispatcher 가 관리. uevaluator-usecurity 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
21
|
+
|
|
22
|
+
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
docmeta:
|
|
3
|
-
id: evaluator-visual
|
|
4
|
-
title: Gotchas —
|
|
3
|
+
id: gotchas-evaluator-visual
|
|
4
|
+
title: Gotchas — uevaluator-uvisual
|
|
5
5
|
type: input
|
|
6
|
-
createdAt: 2026-
|
|
7
|
-
updatedAt: 2026-
|
|
6
|
+
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
+
updatedAt: 2026-05-08T00:00:00Z
|
|
8
8
|
source:
|
|
9
9
|
producer: user
|
|
10
10
|
skillId: harness-dispatcher
|
|
11
11
|
inputs: []
|
|
12
|
-
tags: [
|
|
12
|
+
tags: [gotchas, evaluator-visual]
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
# Gotchas —
|
|
15
|
+
# Gotchas — uevaluator-uvisual
|
|
16
16
|
|
|
17
|
-
> Dispatcher가 관리.
|
|
17
|
+
> Dispatcher 가 관리. uevaluator-uvisual 는 세션 시작 시 이 파일을 읽고 같은 실수를 반복하지 않습니다.
|
|
18
|
+
>
|
|
19
|
+
> 항목 형식은 `gotchas/README.md` 참조. Dispatcher 가 사용자의 실수 지적을 감지하면 자동으로
|
|
20
|
+
> `### [G-NNN]` 항목을 append 합니다. 사용자가 직접 편집해도 무방합니다.
|
|
18
21
|
|
|
19
22
|
<!-- 항목이 추가되면 아래에 기록됩니다 -->
|
|
20
|
-
|
|
21
|
-
## [G-001] 런타임 버그 인지 후 PASS 판정 금지 (verified · 2026-04-27)
|
|
22
|
-
|
|
23
|
-
**Status**: verified · **Severity**: HIGH
|
|
24
|
-
|
|
25
|
-
**규칙**: Visual eval 중 콘솔 에러/Hydration mismatch/RSC↔CC 경계 위반/렌더 실패가 한 번이라도 관찰되면 PASS 절대 금지. 스크린샷이 멀쩡해 보여도 console.error 가 1 건 이상이면 FAIL. carry-over/follow-up 으로 미루기 금지.
|
|
26
|
-
|
|
27
|
-
**검출 시그널**: console error/warning, Hydration error, "use client" 누락, not-found/error.tsx 미렌더, layout shift 비정상, 404/500 응답.
|
|
28
|
-
|
|
29
|
-
**처리**: VERDICT=FAIL, retry_target=generator-frontend, evaluation-visual.md 결론에 "Hard Gate G-001 위반" 명시. 같은 sprint 내 fix 완료 후에만 재평가.
|
|
30
|
-
|
|
31
|
-
**Why**: 사용자 명시 — "오류가 있는 것을 인지한 채로 스프린트를 넘어가는 행위는 절대 용납할 수 없다."
|