@walwal-harness/cli 7.1.9 → 7.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/HR-Resource/ceo/SKILL.md +4 -4
  2. package/HR-Resource/cqo/SKILL.md +3 -3
  3. package/HR-Resource/cto/SKILL.md +4 -4
  4. package/README.md +25 -7
  5. package/apps/harness-dashboard/app/globals.css +9 -0
  6. package/apps/harness-dashboard/components/Drawer.tsx +52 -5
  7. package/apps/harness-dashboard/components/MissionTimeline.tsx +5 -1
  8. package/apps/harness-dashboard/components/OrgTree.tsx +7 -4
  9. package/apps/harness-dashboard/components/Scene.tsx +108 -100
  10. package/apps/harness-dashboard/components/drawer/MissionFlowTab.tsx +4 -1
  11. package/apps/harness-dashboard/components/drawer/OwnerHistoryTab.tsx +4 -0
  12. package/apps/harness-dashboard/lib/harness-state.ts +44 -13
  13. package/apps/harness-dashboard/lib/types.ts +2 -2
  14. package/assets/templates/AGENTS-ko.md.template +19 -6
  15. package/assets/templates/AGENTS.md.template +20 -7
  16. package/assets/templates/HARNESS.md +75 -199
  17. package/assets/templates/config.json +2 -2
  18. package/bin/init.js +11 -11
  19. package/commands/goal.md +6 -4
  20. package/commands/hot-fix.md +16 -13
  21. package/commands/submission.md +28 -0
  22. package/conventions/ceo.md +3 -3
  23. package/conventions/shared.md +4 -3
  24. package/package.json +1 -1
  25. package/scripts/harness-session-start.sh +1 -1
  26. package/scripts/harness-stop.sh +1 -1
  27. package/scripts/harness-user-prompt-submit.sh +12 -4
  28. package/scripts/harness-worker-evidence-validate.sh +8 -3
  29. package/scripts/import-agency-agents.js +1 -1
  30. package/scripts/init-agents-md.sh +17 -2
  31. package/assets/templates/AGENTS-ko /341/204/207/341/205/251/341/206/250/341/204/211/341/205/241/341/204/207/341/205/251/341/206/253.md" +0 -114
@@ -957,15 +957,41 @@ function readMissions(rootDir: string, limit = 15): MissionDoc[] {
957
957
  const docsDir = path.join(rootDir, ".harness", "documents");
958
958
  if (!existsSync(docsDir)) return [];
959
959
 
960
- let entries: Dirent[];
961
- try {
962
- entries = readdirSync(docsDir, { withFileTypes: true });
963
- } catch { return []; }
960
+ const missionDirs: Array<{ rel: string; abs: string }> = [];
961
+ const cxxDocNames = new Set(["ceo.md", "cto.md", "cqo.md", "coo.md", "cdo.md", "ops.md"]);
962
+
963
+ const collectMissionDirs = (baseDir: string, relPrefix = "") => {
964
+ let entries: Dirent[];
965
+ try {
966
+ entries = readdirSync(baseDir, { withFileTypes: true });
967
+ } catch { return; }
968
+
969
+ const hasMissionDoc = entries.some((entry) => entry.isFile() && cxxDocNames.has(entry.name));
970
+ if (hasMissionDoc && relPrefix) {
971
+ missionDirs.push({ rel: relPrefix, abs: baseDir });
972
+ }
973
+
974
+ for (const entry of entries) {
975
+ if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
976
+ if (["workers", "coo", "cdo", "cto", "cqo", "ops"].includes(entry.name)) continue;
977
+ const childRel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
978
+ collectMissionDirs(path.join(baseDir, entry.name), childRel);
979
+ }
980
+ };
981
+
982
+ collectMissionDirs(docsDir);
983
+
984
+ const typeFromId = (id: string): MissionDoc["type"] => {
985
+ const base = id.split("/").pop() ?? id;
986
+ if (/^goal[-_]/i.test(base)) return "goal";
987
+ if (/^submission[-_]/i.test(base)) return "submission";
988
+ if (/^hot[-_]?fix[-_]/i.test(base) || /^hotfix[-_]/i.test(base)) return "hotfix";
989
+ if (/^F\d+/i.test(base)) return "feature";
990
+ return "unknown";
991
+ };
964
992
 
965
- const missions = entries
966
- .filter(d => d.isDirectory() && !d.name.startsWith("."))
967
- .map(d => {
968
- const missionPath = path.join(docsDir, d.name);
993
+ const missions = missionDirs
994
+ .map(({ rel, abs: missionPath }) => {
969
995
  let mtime: Date;
970
996
  try { mtime = statSync(missionPath).mtime; } catch { mtime = new Date(0); }
971
997
 
@@ -1004,12 +1030,13 @@ function readMissions(rootDir: string, limit = 15): MissionDoc[] {
1004
1030
  const cxxRoles = ["ceo", "cto", "cqo", "coo", "cdo", "ops"] as const;
1005
1031
  const cxxPresent = cxxRoles.filter(role => existsSync(path.join(missionPath, `${role}.md`)));
1006
1032
 
1007
- const id = d.name;
1033
+ const id = rel;
1034
+ const label = rel.split("/").pop() ?? rel;
1008
1035
  return {
1009
1036
  missionId: id,
1010
1037
  ts: mtime.toISOString(),
1011
- type: id.startsWith("hotfix") ? "hotfix" : id.match(/^F\d+/) ? "feature" : "unknown",
1012
- label: id,
1038
+ type: typeFromId(id),
1039
+ label,
1013
1040
  ceo: readMd("ceo.md"),
1014
1041
  cto: readMd("cto.md"),
1015
1042
  cqo: readMd("cqo.md"),
@@ -1039,11 +1066,15 @@ function readOwnerHistory(rootDir: string, limit = 30): OwnerPromptEntry[] {
1039
1066
  const parts = line.split(" | ");
1040
1067
  if (parts.length < 4) continue;
1041
1068
  const ts = parts[0]?.trim() ?? "";
1069
+ const eventType = parts[2]?.trim() ?? "input";
1042
1070
  const content = parts.slice(3).join(" | ").trim();
1043
1071
  if (!content) continue;
1044
1072
  const lc = content.toLowerCase();
1045
- const type = content.startsWith("/goal") ? "goal" :
1046
- (content.startsWith("/hot-fix") || lc.includes("/hot-fix")) ? "hot-fix" : "other";
1073
+ const type =
1074
+ eventType === "goal" || content.startsWith("/goal") ? "goal" :
1075
+ eventType === "submission" || content.startsWith("/submission") || lc.includes("/submission") ? "submission" :
1076
+ eventType === "hot-fix" || content.startsWith("/hot-fix") || lc.includes("/hot-fix") ? "hot-fix" :
1077
+ "other";
1047
1078
  entries.push({ ts, content, type });
1048
1079
  }
1049
1080
  return entries.reverse().slice(0, limit);
@@ -291,7 +291,7 @@ export interface WorkerDocEntry {
291
291
  export interface MissionDoc {
292
292
  missionId: string;
293
293
  ts: string;
294
- type: "hotfix" | "feature" | "unknown";
294
+ type: "goal" | "submission" | "hotfix" | "feature" | "unknown";
295
295
  label: string;
296
296
  ceo: string | null;
297
297
  cto: string | null;
@@ -306,7 +306,7 @@ export interface MissionDoc {
306
306
  export interface OwnerPromptEntry {
307
307
  ts: string;
308
308
  content: string;
309
- type: "goal" | "hot-fix" | "other";
309
+ type: "goal" | "submission" | "hot-fix" | "other";
310
310
  }
311
311
 
312
312
  export interface GotchaEntry {
@@ -74,12 +74,13 @@
74
74
 
75
75
  ## 5. 진입점
76
76
 
77
- Owner가 회사에 접근하는 명령은 두 개뿐이다. 그 외의 경로는 없다.
77
+ Owner가 회사에 접근하는 명령은 세 개뿐이다. 그 외의 경로는 없다.
78
78
 
79
79
  | 명령 | 사용 시점 |
80
80
  |---|---|
81
81
  | `/goal` | 미션 설정, 수정, 추가 |
82
- | `/hot-fix` | 활성 goal과 독립된 긴급 수정 |
82
+ | `/submission` | 활성 goal 하위의 추가 요구사항 |
83
+ | `/hot-fix` | 활성 goal 하위의 긴급 수정 |
83
84
 
84
85
  `/ceo`, `/cto`, `/cqo`, `/coo`, `/cdo`, `/ops`, `/hiring`은 slash command가 아니다.
85
86
  내부 라우팅은 agent/skill wiring으로만 처리한다.
@@ -88,7 +89,7 @@ Owner가 회사에 접근하는 명령은 두 개뿐이다. 그 외의 경로는
88
89
 
89
90
  ```
90
91
  Owner
91
- └─ /goal 또는 /hot-fix
92
+ └─ /goal, /submission, 또는 /hot-fix
92
93
  └─ harness-ceo 오케스트레이터 — Owner의 유일한 접점
93
94
  ├─ harness-coo 리서치, 가설, 서비스 방향
94
95
  ├─ harness-cdo 브랜딩, UI/UX, 디자인 리뷰
@@ -99,7 +100,7 @@ Owner
99
100
 
100
101
  각 CXX는:
101
102
  - **독립된 fresh session 컨텍스트**에서 실행된다 — CEO 세션과 메모리를 공유하지 않는다
102
- - 결정을 `.harness/documents/{mission_name}/{cxx}.md`에 기록한다
103
+ - 결정을 `.harness/documents/{goal-or-child-mission}/{cxx}.md`에 기록한다
103
104
  - 모든 전문 작업을 hired worker에게 위임한다 — 직접 실행하지 않는다
104
105
  - 필요한 worker가 없으면 `harness-hiring`을 먼저 호출한다
105
106
 
@@ -114,7 +115,17 @@ CEO는 worker 기록 없이 완료된 산출물을 포함한 CXX 보고서를
114
115
  3. 각 CXX가 worker를 고용하고, 위임하고, 결과를 수집하여 `{cxx}.md`에 기록한다.
115
116
  4. CEO가 CXX 산출물을 종합하여 다음 CXX에 라우팅하거나 Owner에게 보고한다.
116
117
 
117
- **완료 기준:** `.harness/documents/{mission_name}/ceo.md`에 최종 Owner 보고가 존재한다.
118
+ **완료 기준:** `.harness/documents/goal-{index}-{name}/ceo.md`에 최종 Owner 보고가 존재한다.
119
+
120
+ ### Submission
121
+
122
+ 1. CEO가 활성 goal을 `.harness/documents/goal-{index}-{name}/`에서 찾는다.
123
+ 2. CEO가 `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/ceo.md`를 만든다.
124
+ 3. CEO는 추가 요구사항에 필요한 CXX만 라우팅한다.
125
+ 4. 추가 요구사항이 지속 규칙을 바꾸면 관련 CXX가 `.harness/conventions/`를 갱신한다.
126
+ 5. Worker는 `{owning-cxx}/workers/` 아래에 보고하고, CXX는 선택과 위험을 `{cxx}.md`에 요약한다.
127
+
128
+ **완료 기준:** submission 하위 디렉터리에 CEO/CXX 기록, 필요한 worker evidence, 필요한 convention 업데이트가 존재한다.
118
129
 
119
130
  ### Hot Fix
120
131
 
@@ -132,7 +143,9 @@ CEO는 worker 기록 없이 완료된 산출물을 포함한 CXX 보고서를
132
143
 
133
144
  | 경로 | 역할 |
134
145
  |---|---|
135
- | `.harness/documents/{mission}/` | 미션별 CXX 결정 기록 및 worker 보고서 |
146
+ | `.harness/documents/goal-{index}-{name}/` | goal 레벨 CXX 결정 기록 및 worker 보고서 |
147
+ | `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` | 활성 goal 하위의 추가 요구사항 |
148
+ | `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` | 활성 goal 하위의 긴급 수정 |
136
149
  | `.harness/conventions/` | 지속 규칙 (CQO가 작성, 미션을 넘어 유지) |
137
150
  | `.harness/gotchas/` | 재발 방지 기록 (CQO가 hot-fix마다 작성) |
138
151
  | `.harness/memories/` | 장기 공유 컨텍스트 |
@@ -6,12 +6,13 @@
6
6
 
7
7
  ## 1. Entry Points
8
8
 
9
- Two Owner-facing commands. Nothing else reaches the company.
9
+ Three Owner-facing commands. Nothing else reaches the company.
10
10
 
11
11
  | Command | When |
12
12
  |---|---|
13
13
  | `/goal` | Set, update, or extend a mission |
14
- | `/hot-fix` | Emergency fix independent of the active goal |
14
+ | `/submission` | Add a requirement under the active goal |
15
+ | `/hot-fix` | Emergency fix under the active goal |
15
16
 
16
17
  `/ceo`, `/cto`, `/cqo`, `/coo`, `/cdo`, `/ops`, `/hiring` are not slash commands.
17
18
  Internal routing uses agent/skill wiring only.
@@ -36,7 +37,7 @@ For goal: define verifiable success criteria before CEO routes to CXX.
36
37
 
37
38
  ```
38
39
  Owner
39
- └─ /goal or /hot-fix
40
+ └─ /goal, /submission, or /hot-fix
40
41
  └─ harness-ceo orchestrator — Owner's only contact
41
42
  ├─ harness-coo research, hypothesis, service direction
42
43
  ├─ harness-cdo branding, UI/UX, design review
@@ -47,7 +48,7 @@ Owner
47
48
 
48
49
  Each CXX:
49
50
  - Runs in a **fresh session context** — no shared memory with CEO's session
50
- - Records decisions in `.harness/documents/{mission_name}/{cxx}.md`
51
+ - Records decisions in `.harness/documents/{goal-or-child-mission}/{cxx}.md`
51
52
  - Delegates all specialist work to hired workers — never executes directly
52
53
  - If a required worker is absent, invokes `harness-hiring` before assigning
53
54
 
@@ -64,7 +65,17 @@ CEO rejects any CXX report that contains completed deliverables without matching
64
65
  3. Each CXX hires workers, collects reports, records decisions in `{cxx}.md`.
65
66
  4. CEO aggregates CXX outputs, routes to next CXX or reports to Owner.
66
67
 
67
- **Complete when:** `.harness/documents/{mission_name}/ceo.md` contains a final Owner report.
68
+ **Complete when:** `.harness/documents/goal-{index}-{name}/ceo.md` contains a final Owner report.
69
+
70
+ ### Submission
71
+
72
+ 1. CEO locates the active goal under `.harness/documents/goal-{index}-{name}/`.
73
+ 2. CEO creates `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/ceo.md`.
74
+ 3. CEO routes only the CXX needed for the added requirement.
75
+ 4. Relevant CXX update `.harness/conventions/` when the new requirement changes durable project rules.
76
+ 5. Workers report under `{owning-cxx}/workers/`; CXX summarize choices in `{cxx}.md`.
77
+
78
+ **Complete when:** the submission child directory has CEO/CXX records, required worker evidence, and any convention updates required by the new requirement.
68
79
 
69
80
  ### Hot Fix
70
81
 
@@ -84,7 +95,9 @@ Note: A docmeta skip decision on harness documents (ceo.md, cto.md, cqo.md, work
84
95
 
85
96
  | Path | Role |
86
97
  |---|---|
87
- | `.harness/documents/{mission}/` | CXX decisions and worker reports per mission |
98
+ | `.harness/documents/goal-{index}-{name}/` | Goal-level CXX decisions and worker reports |
99
+ | `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` | Additional requirement under the active goal |
100
+ | `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` | Emergency fix under the active goal |
88
101
  | `.harness/conventions/` | Durable rules (CQO writes, survives missions) |
89
102
  | `.harness/gotchas/` | Recurrence-prevention records (CQO writes per hot-fix) |
90
103
  | `.harness/memories/` | Long-term shared context |
@@ -107,7 +120,7 @@ Note: A docmeta skip decision on harness documents (ceo.md, cto.md, cqo.md, work
107
120
  7. **CEO routes only to CXX — never to workers** — CEO must not dispatch, hire, or brief specialist workers directly. Implementation workers are hired by CTO. Evaluator/tester workers are hired by CQO.
108
121
  8. **No CXX self-execution** — CXX agents coordinate and manage only. A CXX that produces deliverables without matching worker records has violated its scope. CEO must reject such reports.
109
122
  9. **No verdict without worker evidence** — CQO cannot issue ACCEPTED/REJECTED without a Worker Evidence Manifest referencing at least one evaluator worker. Self-inspection by CQO is not valid evidence.
110
- 10. **Hierarchical worker ownership** — Hired workers are installed under `.claude/skills/{owning-cxx}/{worker}/` and `.codex/skills/{owning-cxx}/{worker}/`; mission worker reports live under `.harness/documents/{mission}/{owning-cxx}/workers/`. Flat `{mission}/workers/` reports are legacy and signal an ownership violation unless explicitly migrated.
123
+ 10. **Hierarchical worker ownership** — Hired workers are installed under `.claude/skills/{owning-cxx}/{worker}/` and `.codex/skills/{owning-cxx}/{worker}/`; mission worker reports live under `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/`. Flat `{mission}/workers/` reports are legacy and signal an ownership violation unless explicitly migrated.
111
124
  11. **Implementation Notes required** — `ceo.md`, every `{cxx}.md`, and every worker report must end with an English `## Implementation Notes` section containing `Design Decisions`, `Deviations`, `Tradeoffs`, and `Open Questions`. Use `None` for empty subsections.
112
125
 
113
126
  ---
@@ -1,226 +1,102 @@
1
- ---
2
- docmeta:
3
- id: HARNESS
4
- title: walwal-harness — NEXUS Company Harness 가이드
5
- type: output
6
- createdAt: 2026-05-08T00:00:00Z
7
- updatedAt: 2026-05-08T00:00:00Z
8
- source:
9
- producer: agent
10
- skillId: harness-release
11
- inputs:
12
- - documentId: AGENTS
13
- uri: ../../AGENTS.md
14
- relation: output-from
15
- sections:
16
- - sourceRange: { startLine: 121, endLine: 126 }
17
- targetRange: { startLine: 11, endLine: 22 }
18
- - sourceRange: { startLine: 94, endLine: 120 }
19
- targetRange: { startLine: 24, endLine: 45 }
20
- - sourceRange: { startLine: 35, endLine: 81 }
21
- targetRange: { startLine: 49, endLine: 102 }
22
- - sourceRange: { startLine: 170, endLine: 195 }
23
- targetRange: { startLine: 144, endLine: 161 }
24
- - sourceRange: { startLine: 214, endLine: 237 }
25
- targetRange: { startLine: 171, endLine: 179 }
26
- - sourceRange: { startLine: 238, endLine: 243 }
27
- targetRange: { startLine: 181, endLine: 187 }
28
- tags: [harness, template, nexus, v6.1.4, doctrine]
29
- ---
30
-
31
- # walwal-harness — NEXUS Company Harness 가이드
32
-
33
- > Anthropic 블로그 "Harness Design for Long-Running Application Development" 기반.
34
- > v6 NEXUS 도큐트린: 하네스를 **하나의 회사**로 본다. Owner(사용자)는 Dispatcher(CEO)와만 대화하고, 회사 내부 부서가 자율적으로 GOAL 을 실행·검증·운영한다.
35
- >
36
- > 이 파일은 **빠른 운영 가이드** 입니다. 프로젝트별 살아있는 컨텍스트는 `AGENTS.md` (CLAUDE.md = AGENTS.md 심볼릭 링크) 를 참조하세요.
37
-
38
- ## 단일 대화 창구 (Doctrine)
1
+ # walwal-harness Runtime Reference
39
2
 
40
- ```
41
- Owner (사용자)
42
- ↕ (단일 대화 창구)
43
- Dispatcher = CEO ── 부서 식별 · GOAL 협의 · escalation 보고
44
- ```
45
-
46
- - Owner ↔ Dispatcher만 직접 대화. 다른 부서가 Owner와 직접 대화하는 것은 **금지**.
47
- - 모든 escalation은 Dispatcher 경유.
48
- - GOAL 작성·수정은 CEO 전용 (`.harness/actions/goals.md`, CTO와 협의로 구체화).
49
-
50
- ## 조직 구조 (v6 NEXUS)
3
+ This project runs in company mode.
51
4
 
52
- ```
53
- Owner
54
- ↕
55
- Dispatcher (CEO)
56
- ├─ Conductor # 자율 실행 엔진 (Gen↔Eval↔Ops 루프, escalation 트리거)
57
- └─ Meeting-Manager # 동기화 엔진 (6종 회의 · 적응형 cadence · parallel-tracks fork-join)
58
- ↓
59
- Planner (COO + HR) # Sprint·AC·인선·온보딩
60
- └─ COO Hypothesis Cell (직영)
61
- ├─ coo-developer # 가설 검증 spike·백데이터 실험
62
- └─ documentationer # 웹리서치·보고서·가설 판정
63
- ↓
64
- ┌─────┴────────┬──────────────┐
65
- CTO CQO Service-Ops
66
- (Gen 총괄) (Eval 총괄) (운용·모니터·인시던트·자율회고)
67
- ├ Gen-BE ├ Eval-Functional
68
- ├ Gen-FE ├ Eval-Visual
69
- ├ Designer ├ Eval-CodeQuality
70
- └ DevOps ├ Eval-Architecture
71
- └ Eval-Security
72
- ```
5
+ Owner-facing commands are limited to:
73
6
 
74
- 각 역할의 상세 트리거·산출물·금기는 `.claude/skills/harness-<role>/SKILL.md` 와 `gotchas/<role>.md`, `conventions/<role>.md` 에 명시.
7
+ | Command | Purpose | Document root |
8
+ |---|---|---|
9
+ | `/goal` | Set or change the company goal | `.harness/documents/goal-{index}-{name}/` |
10
+ | `/submission` | Add a requirement under the active goal | `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` |
11
+ | `/hot-fix` | Fix an urgent issue under the active goal | `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` |
75
12
 
76
- ## 디렉토리 구조
13
+ No CXX role is a slash command. `/ceo`, `/coo`, `/cdo`, `/cto`, `/cqo`, `/ops`, `/hiring`, and `/resource-manager` are invalid Owner commands.
77
14
 
78
- ### 프로젝트 루트 (개발자가 직접 보는 파일)
15
+ ## Company Structure
79
16
 
80
17
  ```
81
- AGENTS.md # 프로젝트 컨텍스트 (Planner 가 유지) · v6 IA-MAP·조직도·권한 매트릭스
82
- CLAUDE.md # → AGENTS.md 심볼릭 링크 (Claude Code 진입점)
83
- CONVENTIONS.md # 프로젝트 최상위 규칙 (사용자 작성, 에이전트 읽기 전용)
84
- gotchas/<role>.md # 부서별 부정형 규칙 (G-NNN entry append)
85
- conventions/<role>.md # 부서별 긍정형 규칙 (C-NNN entry append)
86
- scripts/ # 하네스 스크립트 (init.js 가 동기화)
87
- .claude/skills/harness-<role>/ # Claude Code 가 로드하는 스킬 정의 (init.js 가 동기화)
18
+ Owner
19
+ └─ /goal, /submission, or /hot-fix
20
+ └─ harness-ceo
21
+ ├─ harness-coo
22
+ ├─ harness-cdo
23
+ ├─ harness-cto
24
+ ├─ harness-cqo
25
+ └─ harness-ops
88
26
  ```
89
27
 
90
- ### `.harness/` 런타임 (회사가 작동하면서 만드는 산출물)
28
+ CEO is the Owner's only internal contact. CEO talks only to CXX agents. CXX agents coordinate, hire, review, and decide; they do not directly produce specialist deliverables.
91
29
 
92
- ```
93
- .harness/
94
- ├── HARNESS.md # 이 파일
95
- ├── config.json # 하네스 설정 (company_mode, behavior, flow gates)
96
- ├── progress.json # 기계 판독 상태 (세션 오케스트레이션 SoT)
97
- ├── progress.log # 사람 판독 히스토리 (append-only)
98
- ├── handoff.json # 세션 전환 문서 (prompt, model, artifacts, regression)
99
- ├── memory.md # 시스템 entry (예: M-NEXUS-P3) + 사용자 메모
100
- ├── doctrine/nexus.md # NEXUS 도큐트린 본문
101
- ├── ref/<role>-<stack>.md # 스택별 best-practice (FE/BE/Designer/DevOps)
102
- ├── prompts/ # 에이전트 프롬프트
103
- ├── baselines/ # Eval baseline (의존 그래프, 시각 baseline 등)
104
- ├── ops/metrics.jsonl # 운영 메트릭 (DevOps append / Service-Ops read)
105
- ├── actions/ # 활성 스프린트 산출물 (각 부서 쓰기)
106
- │ ├── pipeline.json # Dispatcher 결정 (FULLSTACK / FE-ONLY / BE-ONLY)
107
- │ ├── plan.md # Planner — 제품 사양
108
- │ ├── feature-list.json # Planner — Executable AC
109
- │ ├── api-contract.json # Planner — API 계약 (BE/FE 공유)
110
- │ ├── sprint-contract.md # Planner → BE/FE 가 섹션별로 채움
111
- │ ├── evaluation-*.md # Evaluator-* 별 결과
112
- │ ├── goals.md # CEO (Dispatcher) 전용
113
- │ ├── meetings/ # Meeting-Manager — 회의록·prep (followup-review 포함)
114
- │ ├── incidents/ # Service-Ops — 사고 타임라인·RCA
115
- │ ├── escalations/ # Conductor — Owner 보고용
116
- │ ├── onboarding/ # Planner(HR) — 부서 온보딩 패키지
117
- │ ├── hypothesis/<id>/ # COO Hypothesis Cell (spike/, brief.md, report.md, verdict.json)
118
- │ ├── hr-roster.md # Planner(HR) — 활성 부서 명단
119
- │ ├── cto-review-*.md # CTO 전용
120
- │ ├── cqo-audit-*.md # CQO 전용
121
- │ └── ops-report-*.md # Service-Ops 전용
122
- └── archive/ # 완료 스프린트 (불변, Evaluator 가 archive)
123
- └── D-NNN/S-NNN/ # design-NNN / sprint-NNN
124
- ```
30
+ ## Runtime Paths
125
31
 
126
- ## 실행 흐름 (Conductor-driven)
32
+ | Path | Role |
33
+ |---|---|
34
+ | `.harness/documents/goal-{index}-{name}/ceo.md` | Goal framing and CEO routing |
35
+ | `.harness/documents/goal-{index}-{name}/{cxx}.md` | Goal-level CXX decision record |
36
+ | `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` | Additional requirement under the active goal |
37
+ | `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` | Emergency fix under the active goal |
38
+ | `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md` | Worker evidence owned by a CXX |
39
+ | `.harness/conventions/` | Durable rules, including requirement conventions from submissions |
40
+ | `.harness/gotchas/` | Recurrence-prevention records from hot-fixes |
41
+ | `.harness/memories/` | Long-term shared context |
42
+ | `.harness/shared/HR-Resource/` | Hireable worker skill pool |
43
+ | `.harness/shared/hr-roster.json` | Hired worker roster |
44
+ | `.harness/archive/` | CQO-approved completed mission records |
45
+ | `.harness/progress.log` | Append-only command and status history |
46
+ | `.harness/progress.json` | Machine-readable current runtime state |
127
47
 
128
- ```
129
- Owner: "X 만들어줘" (자유 형식)
130
- │
131
- ▼
132
- Dispatcher (CEO)
133
- ├─ Goal 협의 (모호하면 1회 짧게 명료화)
134
- └─ pipeline.json 결정 → Conductor 핸드오프
135
- │
136
- ▼
137
- Conductor (자율 실행 엔진)
138
- │
139
- ▼
140
- Planner ─ ┐
141
- │ ├─ light → 기존 PRD 만 보강
142
- │ └─ full → plan.md + feature-list + api-contract 확정
143
- ▼
144
- CTO ── 실행 분할 ── ┐
145
- ▼ ▼
146
- Gen-BE ⇄ Gen-FE (회사모드 병렬 worker pool)
147
- │
148
- ▼
149
- CQO 적대적 검증 (early-exit chain)
150
- ├─ Eval-CodeQuality (정적 · 저비용)
151
- ├─ Eval-Functional (동작 · 중비용 · Playwright/curl)
152
- ├─ Eval-Visual (렌더 · 고비용 · screenshot)
153
- ├─ Eval-Architecture (IA-MAP·계층 위반·의존 그래프)
154
- └─ Eval-Security (OWASP·SAST·시크릿·CVE)
155
- │
156
- ▼
157
- Service-Ops (상시) ── monitor · auto-retro · incident
158
- │
159
- ▼
160
- Archive (sprint advance)
161
- ```
162
-
163
- 앞단 FAIL 시 뒤 단계는 실행하지 않고 즉시 재작업으로 리라우팅.
164
- 3회 연속 FAIL · GOAL 위반 · 인시던트 → Conductor 가 Dispatcher 통해 Owner에게 escalation.
48
+ Flat `.harness/documents/{mission}/workers/` reports are legacy. New worker evidence must be under `{owning-cxx}/workers/`.
165
49
 
166
- ## 6종 회의 (Meeting-Manager)
50
+ ## Required Flow
167
51
 
168
- | 회의 | 시점 | 결정자 |
169
- |------|------|--------|
170
- | **standup** | 적응형 cadence (light 30m / normal 1h / heavy 4h) | 부서 발신 |
171
- | **sprint-review** | sprint advance 직전 | CTO |
172
- | **spec-review** | Planner 산출물 변경 | CTO |
173
- | **incident-war-room** | Service-Ops 인시던트 발신 | CEO + CTO |
174
- | **all-hands** | 분기/대형 결정 | CEO |
175
- | **followup-review** | parallel-tracks fork 종료 후 | CTO (goal-* fork 면 CEO) |
52
+ ### Goal
176
53
 
177
- ### Parallel Tracks (Fork-Join, v6.2)
54
+ 1. CEO creates or updates `.harness/documents/goal-{index}-{name}/ceo.md`.
55
+ 2. CEO routes only needed CXX agents.
56
+ 3. Each CXX writes its own `{cxx}.md`.
57
+ 4. CXX agents use `harness-resource-manager` and `harness-hiring` before assigning specialist work.
58
+ 5. Workers write evidence under `{owning-cxx}/workers/`.
59
+ 6. CEO reports only after CXX records and required worker evidence exist.
178
60
 
179
- 회의 결정의 `tracks[]` 길이 ≥ 2 면 fork. Conductor 가 트랙 dispatch 와 rendezvous join 을 자동 처리.
61
+ ### Submission
180
62
 
181
- - 대표 패턴: `track-1: cto/bugfix` + `track-2: planner/hypothesis-validation` → followup-review 에서 통합 결정.
182
- - followup-review 에서 결정자가 `apply-now / backlog / more-validation` 중 하나로 마무리.
183
- - followup-review 자체에서 또 fork 금지 (무한 fork 방지).
184
- - 한 sprint 내 parallel fork ≥ 3 회면 다음 fork 는 single 강제.
63
+ 1. CEO locates the active goal directory.
64
+ 2. CEO creates `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/ceo.md`.
65
+ 3. CEO routes only the CXX needed for the additional requirement.
66
+ 4. CXX agents update `.harness/conventions/` when the new requirement creates or changes durable project rules.
67
+ 5. Worker reports and CXX notes stay inside the submission directory.
185
68
 
186
- ## Company / Hypothesis 실행
69
+ ### Hot Fix
187
70
 
188
- | 실행 | 트리거 | 동작 |
189
- |------|--------|------|
190
- | **Company** | 기본값 | Conductor 가 매 tick `min(ready, 3)` 병렬 worker 를 자동 배정 |
191
- | **Hypothesis** | Planner `requested_mode = "hypothesis"` | `documentationer → coo-developer → documentationer → planner` 가설 검증 루프 |
71
+ 1. CEO locates the active goal directory.
72
+ 2. CEO creates `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/ceo.md`.
73
+ 3. CEO routes CTO and CQO first.
74
+ 4. CTO hires implementation workers and records the patch plan in `cto.md`.
75
+ 5. CQO hires evaluator/tester workers and records the verdict in `cqo.md`.
76
+ 6. CQO registers at least one durable lesson in `.harness/gotchas/`, `.harness/conventions/`, or `.harness/memories/`.
192
77
 
193
- ## 품질 게이트
78
+ ## Hard Gates
194
79
 
195
- | 게이트 | 시점 | 동작 |
196
- |--------|------|------|
197
- | **Pre-Eval Gate** | Generator → Evaluator 전환 | tsc / eslint / jest&#124;vitest 자동 실행. 실패 시 Generator 리라우팅 |
198
- | **파일 소유권 검증** | 에이전트 전환 시 | git diff 로 권한 밖 파일 수정 감지 |
199
- | **아티팩트 선행조건** | 에이전트 시작 전 | progress.json.artifacts 상태 확인 |
200
- | **Evaluation PASS 기준** | Evaluator 결과 | 2.80 / 3.00 이상. Evidence 없는 score = 0. AC 부분 통과 = FAIL. Regression 1건 = FAIL |
201
- | **Known-Bug Hard Gate** | sprint advance | 알려진 런타임 버그 보유 시 PASS / sprint advance 금지 |
80
+ - CEO must not dispatch, hire, or brief workers directly.
81
+ - CXX agents must not directly execute specialist deliverables.
82
+ - CTO worker dispatch requires `cto.md` first.
83
+ - CQO verdicts require evaluator/tester worker evidence.
84
+ - Every `ceo.md`, `{cxx}.md`, and worker report must end with:
202
85
 
203
- ## Conventions / Gotchas (Hierarchical)
86
+ ```markdown
87
+ ## Implementation Notes
204
88
 
205
- - **gotchas/**: 부서별 부정형 규칙. Dispatcher 가 Owner 의 실수 지적을 받아 `### [G-NNN]` 으로 append.
206
- - **conventions/**: 부서별 긍정형 규칙. 같은 메커니즘으로 `### [C-NNN]` append.
207
- - **메모리 오염 방어**: 신규 entry 는 `unverified` 로 시작 → Planner 리뷰 시 `verified` 승격. TTL 만료 항목은 sprint 전환 시 갱신/삭제.
208
- - **검증 불가능 항목 즉시 삭제**.
89
+ ### Design Decisions
90
+ - None
209
91
 
210
- ## 자주 쓰는 명령
92
+ ### Deviations
93
+ - None
211
94
 
212
- | 명령 | 설명 |
213
- |------|------|
214
- | `npx walwal-harness` | 첫 설치 / 안전 init (G-NNN, C-NNN 보존) |
215
- | `npx walwal-harness --force` | 시스템 파일 강제 갱신 (G/C entry 는 여전히 보존) |
216
- | `npx walwal-harness migrate` | 구버전 progress.json / config.json schema 정상화 |
217
- | `npx walwal-harness verify` | 설치 정합성 검증 |
218
- | `bash scripts/harness-dashboard-up.sh` | Brick Office 라이브 대시보드 (http://localhost:3001) |
219
- | `bash scripts/harness-wake-install.sh install .` | 1시간 안전망 wake 등록 (launchd) |
220
- | `bash scripts/harness-wake-install.sh status` | wake 상태 / 등록 프로젝트 확인 |
95
+ ### Tradeoffs
96
+ - None
221
97
 
222
- ## 다음 단계
98
+ ### Open Questions
99
+ - None
100
+ ```
223
101
 
224
- 1. `AGENTS.md` 의 `[?]` 태그를 Planner 가 분류하도록 요청.
225
- 2. `gotchas/<role>.md`, `conventions/<role>.md` 의 Preserved Rules 섹션 정리.
226
- 3. Owner 는 "하네스 엔지니어링 시작" 또는 자유 형식 지시로 Dispatcher 를 깨운다 — 이후는 Conductor 가 이어받는다.
102
+ The notes must be written in English. Use `None` when a subsection has no entries.
@@ -2,7 +2,7 @@
2
2
  "harness": {
3
3
  "name": "walwal-harness — NEXUS company harness",
4
4
  "version": "7.1.1",
5
- "description": "v7 company harness. Owner uses /goal or /hot-fix, CEO coordinates CXX agents, CXX agents use resource-manager/hiring, and hired workers produce mission evidence under .harness/documents/{mission}/workers/.",
5
+ "description": "v7 company harness. Owner uses /goal, /submission, or /hot-fix, CEO coordinates CXX agents, CXX agents use resource-manager/hiring, and hired workers produce mission evidence under .harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/.",
6
6
  "source": "https://www.anthropic.com/engineering/harness-design-long-running-apps"
7
7
  },
8
8
  "agents": {
@@ -19,7 +19,7 @@
19
19
  "flow": {
20
20
  "sequence": ["ceo", "coo", "cdo", "cto", "cqo", "ops"],
21
21
  "worker_gate": "CXX agents must use harness-resource-manager and harness-hiring before specialist deliverables.",
22
- "worker_reports_required": ".harness/documents/{mission}/workers/{worker-name}.md",
22
+ "worker_reports_required": ".harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md",
23
23
  "retry_on_fail": true,
24
24
  "max_retries_per_sprint": 5,
25
25
  "escalate_to_ceo_after": 3,