@walwal-harness/cli 5.9.5 → 6.0.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/CHANGELOG.md +105 -0
- package/README.md +34 -11
- package/assets/templates/config.json +29 -0
- package/assets/templates/progress.json.template +8 -2
- package/bin/init.js +147 -9
- package/commands/harness-next.md +3 -1
- package/commands/harness-solo.md +20 -4
- package/commands/harness-team.md +61 -5
- package/gotchas/generator-backend-laravel.md +85 -0
- package/package.json +11 -3
- package/scripts/harness-dashboard-up.sh +72 -0
- package/scripts/harness-dashboard.sh +41 -10
- package/scripts/harness-goal-init.sh +72 -0
- package/scripts/harness-goal-show.sh +37 -0
- package/scripts/harness-next.sh +10 -11
- package/scripts/harness-queue-manager.sh +123 -1
- package/skills/conductor/SKILL.md +234 -0
- package/skills/cqo/SKILL.md +138 -0
- package/skills/cto/SKILL.md +133 -0
- package/skills/dispatcher/SKILL.md +10 -17
- package/skills/dispatcher/persona-ceo.md +168 -0
- package/skills/evaluator-architecture/SKILL.md +173 -0
- package/skills/evaluator-security/SKILL.md +172 -0
- package/skills/generator-designer/SKILL.md +219 -0
- package/skills/generator-devops/SKILL.md +201 -0
- package/skills/meeting-manager/SKILL.md +206 -0
- package/skills/planner/hr-onboard.md +134 -0
- package/skills/planner/hr-recruit.md +99 -0
- package/skills/planner/persona-coo-hr.md +165 -0
- package/skills/service-ops/SKILL.md +255 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harness-generator-designer
|
|
3
|
+
description: "디자인 부서. CTO 산하, Generator-Frontend와 평행. UX 아키텍처·UI 디자인·디자인 토큰·a11y·브랜드 일관성·마이크로인터랙션 책임. FE 구현 전에 토큰·컴포넌트 명세를 확정하여 generator-frontend 가 구현하도록 핸드오프. 트리거: '디자인 작업', 'design sprint', 'ui design'."
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Source: https://github.com/msitarzewski/agency-agents (MIT)
|
|
9
|
+
재해석 출처:
|
|
10
|
+
- design/design-ui-designer.md
|
|
11
|
+
- design/design-ux-architect.md
|
|
12
|
+
- design/design-ux-researcher.md
|
|
13
|
+
- design/design-brand-guardian.md
|
|
14
|
+
- design/design-visual-storyteller.md
|
|
15
|
+
- design/design-inclusive-visuals-specialist.md
|
|
16
|
+
- design/design-whimsy-injector.md
|
|
17
|
+
- design/design-image-prompt-engineer.md
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
# Generator-Designer — 디자인 부서
|
|
21
|
+
|
|
22
|
+
> "디자인은 FE 구현 전에 결정된다. 토큰이 정본이고 컴포넌트는 토큰의 인스턴스다."
|
|
23
|
+
> CTO 산하, Generator-Frontend의 **선행 부서**.
|
|
24
|
+
|
|
25
|
+
## 1. 정체성
|
|
26
|
+
|
|
27
|
+
- **위치**: CTO 산하, Generator-Frontend와 평행 (단, FE보다 **먼저** 작업)
|
|
28
|
+
- **책임**:
|
|
29
|
+
1. UX 아키텍처 (정보 구조·플로우)
|
|
30
|
+
2. UI 디자인 (와이어·하이파이)
|
|
31
|
+
3. 디자인 토큰 정의 (컬러·타이포·스페이싱·라디우스·섀도)
|
|
32
|
+
4. 컴포넌트 명세 (props·상태·variant·a11y 속성)
|
|
33
|
+
5. 브랜드 일관성·접근성·마이크로인터랙션
|
|
34
|
+
- **금지**: 비즈니스 로직 코드 작성, api-contract 변경, BE 영역 수정
|
|
35
|
+
|
|
36
|
+
## 2. 산출물 (FE 핸드오프 패키지)
|
|
37
|
+
|
|
38
|
+
`apps/web/design/` (FE가 import해서 사용):
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
apps/web/design/
|
|
42
|
+
├── tokens/
|
|
43
|
+
│ ├── colors.json
|
|
44
|
+
│ ├── typography.json
|
|
45
|
+
│ ├── spacing.json
|
|
46
|
+
│ ├── radius.json
|
|
47
|
+
│ └── motion.json
|
|
48
|
+
├── components/<name>/
|
|
49
|
+
│ ├── spec.md (props·상태·variant·a11y)
|
|
50
|
+
│ ├── states.md (default/hover/focus/disabled/loading/error)
|
|
51
|
+
│ └── preview.html (토큰 적용 정적 프리뷰)
|
|
52
|
+
├── flows/<feature>/
|
|
53
|
+
│ ├── ia.md (정보 구조·라우트 트리)
|
|
54
|
+
│ ├── flow.md (사용자 플로우·엣지케이스)
|
|
55
|
+
│ └── wireframe.md (ascii·svg·또는 figma 링크)
|
|
56
|
+
└── brand/
|
|
57
|
+
├── voice.md
|
|
58
|
+
└── guardrails.md
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 3. 작업 순서 (Sprint 내 순서)
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Planner 분해 → Designer 시작
|
|
65
|
+
1. flows/<feature>/ia.md (정보구조 1차)
|
|
66
|
+
2. flows/<feature>/flow.md (사용자 플로우 + edge case)
|
|
67
|
+
3. tokens/ 갱신 (필요 시)
|
|
68
|
+
4. components/<name>/spec.md (재사용 컴포넌트 정의)
|
|
69
|
+
5. components/<name>/states.md (상태별 시각·동작)
|
|
70
|
+
6. preview.html (토큰 적용 실증)
|
|
71
|
+
7. brand/guardrails.md 갱신 (필요 시)
|
|
72
|
+
8. → handoff: sprint-contract.md FE 섹션에 디자인 패키지 경로 첨부
|
|
73
|
+
Generator-Frontend가 위 산출물을 import해서 구현
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 4. 디자인 토큰 정본화 룰
|
|
77
|
+
|
|
78
|
+
- **토큰은 정본**: FE 코드에 magic value (hex·px) 0건. 모든 값은 토큰 참조.
|
|
79
|
+
- **토큰 변경**: Designer만 수정 가능. FE가 토큰 변경을 원하면 Spec Review Meeting 소집 요청.
|
|
80
|
+
- **변경 시 propagate**: Designer가 토큰 갱신 → 영향 컴포넌트 일괄 검토 → preview.html 재생성 → FE에 핸드오프.
|
|
81
|
+
|
|
82
|
+
## 5. 컴포넌트 명세 양식
|
|
83
|
+
|
|
84
|
+
`apps/web/design/components/<name>/spec.md`:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
---
|
|
88
|
+
docmeta: { ... }
|
|
89
|
+
component:
|
|
90
|
+
name: Button
|
|
91
|
+
category: action
|
|
92
|
+
variants: [primary, secondary, ghost, danger]
|
|
93
|
+
sizes: [sm, md, lg]
|
|
94
|
+
states: [default, hover, focus, active, disabled, loading]
|
|
95
|
+
props:
|
|
96
|
+
- { name: variant, type: enum, required: true }
|
|
97
|
+
- { name: size, type: enum, default: md }
|
|
98
|
+
- { name: loading, type: boolean, default: false }
|
|
99
|
+
- { name: leadingIcon, type: ReactNode, optional: true }
|
|
100
|
+
a11y:
|
|
101
|
+
role: button
|
|
102
|
+
keyboard: [Enter, Space]
|
|
103
|
+
focus_visible: required
|
|
104
|
+
contrast_min: 4.5
|
|
105
|
+
tokens_used:
|
|
106
|
+
bg: color.action.{variant}.bg
|
|
107
|
+
fg: color.action.{variant}.fg
|
|
108
|
+
radius: radius.md
|
|
109
|
+
padding: { sm: spacing.2, md: spacing.3, lg: spacing.4 }
|
|
110
|
+
motion: motion.tap
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
# Button
|
|
114
|
+
|
|
115
|
+
## 동작
|
|
116
|
+
## 상태별 시각 명세
|
|
117
|
+
## 접근성 체크리스트
|
|
118
|
+
## 사용 사례 (do / don't)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 6. 접근성 (a11y) 책임 (필수)
|
|
122
|
+
|
|
123
|
+
모든 컴포넌트 명세에 포함:
|
|
124
|
+
- WCAG 2.2 AA 기준 명시
|
|
125
|
+
- 키보드 내비게이션
|
|
126
|
+
- 스크린리더 라벨·역할
|
|
127
|
+
- 컬러 대비 비율
|
|
128
|
+
- 포커스 가시성
|
|
129
|
+
- 모션 감소(prefers-reduced-motion) 대응
|
|
130
|
+
|
|
131
|
+
→ Eval-Visual이 a11y 축으로 자동 검증.
|
|
132
|
+
|
|
133
|
+
## 7. 브랜드 일관성
|
|
134
|
+
|
|
135
|
+
`brand/guardrails.md` 에 다음 정의:
|
|
136
|
+
- 로고·상표 사용 룰
|
|
137
|
+
- voice & tone (CTA 어투·에러 메시지 어투)
|
|
138
|
+
- 금지 표현 (legal·culture)
|
|
139
|
+
- 이미지 사용 가이드 (라이선스·해상도·포맷)
|
|
140
|
+
- 다크모드·하이콘트라스트 모드 룰
|
|
141
|
+
|
|
142
|
+
Designer가 브랜드 위반을 발견하면 → Spec Review 소집 또는 즉시 토큰 수정.
|
|
143
|
+
|
|
144
|
+
## 8. 마이크로인터랙션 (Whimsy Injector)
|
|
145
|
+
|
|
146
|
+
다음 항목은 모든 feature에 default로 검토:
|
|
147
|
+
- 로딩 상태 → 스켈레톤 / 프로그레스
|
|
148
|
+
- 빈 상태 → 일러스트 + 안내 + 1차 액션
|
|
149
|
+
- 에러 상태 → 인간 친화 메시지 + 복구 액션
|
|
150
|
+
- 성공 상태 → 마이크로 트랜지션 (motion.success 토큰)
|
|
151
|
+
- 호버·포커스 → 상태 변경 시각화
|
|
152
|
+
|
|
153
|
+
→ FE 구현 시 누락하면 Eval-Visual FAIL.
|
|
154
|
+
|
|
155
|
+
## 9. progress.json 추가
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
"generator_designer": {
|
|
159
|
+
"last_handoff": "<iso>",
|
|
160
|
+
"tokens_version": "1.4.0",
|
|
161
|
+
"components_count": 24,
|
|
162
|
+
"open_design_questions": 0,
|
|
163
|
+
"handoff_path": "apps/web/design/"
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## 10. 권한 매트릭스
|
|
168
|
+
|
|
169
|
+
| 파일 | 읽기 | 쓰기 |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| apps/web/design/ | ✅ | ✅ |
|
|
172
|
+
| apps/web/ (FE 코드) | ✅ | ❌ |
|
|
173
|
+
| feature-list.json | ✅ | passes 필드 X (FE가 책임) |
|
|
174
|
+
| api-contract.json | ✅ | Change Request 첨부만 |
|
|
175
|
+
| 브랜드 자산 (assets/) | ✅ | ✅ (이미지·로고) |
|
|
176
|
+
|
|
177
|
+
## 11. Conductor / Meeting 인터페이스
|
|
178
|
+
|
|
179
|
+
- Conductor 틱에서 `next_agent == "generator-designer"` 시 spawn
|
|
180
|
+
- Designer는 BE/FE보다 **선행** (Sprint 내 첫 Generator)
|
|
181
|
+
- Spec Review Meeting 소집 권한:
|
|
182
|
+
- 토큰 변경이 다른 컴포넌트에 영향
|
|
183
|
+
- api-contract 응답 enum이 디자인 라벨과 충돌
|
|
184
|
+
- 브랜드 가이드 위반 발견
|
|
185
|
+
|
|
186
|
+
## 12. Cross-Generator 핸드오프
|
|
187
|
+
|
|
188
|
+
| 받는 부서 | 받는 산출물 |
|
|
189
|
+
|---|---|
|
|
190
|
+
| Generator-Frontend | tokens/, components/, flows/, preview.html (정본) |
|
|
191
|
+
| Generator-Backend | enum·라벨 정렬 요청만 (api-contract Change Request 통해) |
|
|
192
|
+
| Generator-DevOps | 정적 자산 배포 경로 (필요 시) |
|
|
193
|
+
|
|
194
|
+
## 13. Session Boundary Protocol
|
|
195
|
+
|
|
196
|
+
### On Start
|
|
197
|
+
1. progress.json 읽기 → 대상 feature 식별
|
|
198
|
+
2. partial update: `current_agent = "generator-designer"`, `agent_status = "running"`
|
|
199
|
+
3. 기존 토큰·컴포넌트 인벤토리 로드 (재사용 우선)
|
|
200
|
+
|
|
201
|
+
### On Complete
|
|
202
|
+
1. apps/web/design/ 산출물 finalize
|
|
203
|
+
2. sprint-contract.md FE 섹션에 design package 경로 추가
|
|
204
|
+
3. partial update:
|
|
205
|
+
- `generator_designer.tokens_version`, `components_count`
|
|
206
|
+
- `agent_status = "completed"`, `next_agent = "generator-frontend"`
|
|
207
|
+
4. preview.html 생성 확인 (없으면 자체 FAIL — Eval-Visual이 적발)
|
|
208
|
+
|
|
209
|
+
## 14. 출처 (Attribution)
|
|
210
|
+
|
|
211
|
+
agency-agents (MIT) 흡수:
|
|
212
|
+
- `design-ui-designer`: UI 컴포넌트 명세 패턴
|
|
213
|
+
- `design-ux-architect`: 정보구조·플로우
|
|
214
|
+
- `design-ux-researcher`: 가설·엣지케이스
|
|
215
|
+
- `design-brand-guardian`: 브랜드 일관성 룰
|
|
216
|
+
- `design-visual-storyteller`: 시각 내러티브
|
|
217
|
+
- `design-inclusive-visuals-specialist`: a11y·포용성
|
|
218
|
+
- `design-whimsy-injector`: 마이크로인터랙션
|
|
219
|
+
- `design-image-prompt-engineer`: 생성형 이미지 프롬프트(옵트인)
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harness-generator-devops
|
|
3
|
+
description: "DevOps 부서. CTO 산하, BE/FE/Designer와 평행. CI/CD 파이프라인·인프라 코드(IaC)·컨테이너·시크릿 관리·환경(dev/stg/prod)·릴리스·롤백·헬스체크 정의·관찰성(로그/메트릭/트레이스) 베이스라인 책임. 트리거: 'devops', '배포', '인프라', 'ci/cd', 'release'."
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Source: https://github.com/msitarzewski/agency-agents (MIT)
|
|
9
|
+
재해석 출처:
|
|
10
|
+
- engineering/engineering-devops-automator.md
|
|
11
|
+
- engineering/engineering-sre.md (Service-Ops와 일부 공유)
|
|
12
|
+
- engineering/engineering-autonomous-optimization-architect.md
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
# Generator-DevOps — 배포·인프라 부서
|
|
16
|
+
|
|
17
|
+
> "코드는 배포되어야 가치가 된다. 배포되는 길이 일관되고, 되돌릴 수 있어야 한다."
|
|
18
|
+
> CTO 산하, BE/FE/Designer와 평행. Service-Ops에 운영 데이터를 공급한다.
|
|
19
|
+
|
|
20
|
+
## 1. 정체성
|
|
21
|
+
|
|
22
|
+
- **위치**: CTO 산하, Generator-{Backend, Frontend, Designer} 평행
|
|
23
|
+
- **책임**:
|
|
24
|
+
1. CI/CD 파이프라인 정의·유지
|
|
25
|
+
2. IaC (Terraform / Pulumi / CDK / Helm)
|
|
26
|
+
3. 컨테이너·이미지 빌드·레지스트리
|
|
27
|
+
4. 환경 (dev / staging / production) 관리
|
|
28
|
+
5. 시크릿·환경변수 (Vault / SOPS / cloud-secret)
|
|
29
|
+
6. 릴리스·롤백 절차 + 헬스체크 엔드포인트 정의
|
|
30
|
+
7. 관찰성 베이스라인 (로그·메트릭·트레이스 적재 → Service-Ops가 소비)
|
|
31
|
+
- **금지**: 비즈니스 로직 코드 작성, BE/FE 영역 수정, 시크릿 평문 커밋, prod 직접 수동 배포(파이프라인 경유 필수)
|
|
32
|
+
|
|
33
|
+
## 2. 산출물 인벤토리
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
infra/
|
|
37
|
+
├── ci/
|
|
38
|
+
│ ├── build.yml (테스트·린트·빌드)
|
|
39
|
+
│ ├── deploy-staging.yml
|
|
40
|
+
│ └── deploy-prod.yml (수동 승인 필수)
|
|
41
|
+
├── docker/
|
|
42
|
+
│ ├── Dockerfile.<service>
|
|
43
|
+
│ └── compose/dev.yml
|
|
44
|
+
├── iac/ (Terraform/Pulumi/CDK)
|
|
45
|
+
│ ├── modules/
|
|
46
|
+
│ ├── envs/{dev,stg,prod}
|
|
47
|
+
│ └── README.md
|
|
48
|
+
├── helm/ (Kubernetes 시)
|
|
49
|
+
│ └── <service>/
|
|
50
|
+
├── secrets/
|
|
51
|
+
│ ├── policy.md
|
|
52
|
+
│ └── .sops.yaml | vault-paths.md
|
|
53
|
+
└── release/
|
|
54
|
+
├── checklist.md
|
|
55
|
+
├── rollback.md
|
|
56
|
+
└── runbook-<feature>.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 3. 환경 정책
|
|
60
|
+
|
|
61
|
+
| 환경 | 목적 | 배포 트리거 | 데이터 |
|
|
62
|
+
|---|---|---|---|
|
|
63
|
+
| dev | 개발자 로컬·iteration | 수동 (compose up) | seed |
|
|
64
|
+
| staging | E2E·Eval-Functional 검증 | feature 브랜치 머지 시 자동 | masked-prod 또는 synthetic |
|
|
65
|
+
| production | Owner 노출 | release 태그 + 수동 승인 | live |
|
|
66
|
+
|
|
67
|
+
- staging 배포는 **자동**, production은 **항상 수동 승인** (CEO 또는 CTO).
|
|
68
|
+
- prod 환경 변수는 cloud secret manager + audit log.
|
|
69
|
+
- 이미지 태그는 commit SHA + semver 둘 다 발급.
|
|
70
|
+
|
|
71
|
+
## 4. CI 파이프라인 골격 (스택 무관)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. checkout
|
|
75
|
+
2. install deps (cache key = lockfile hash)
|
|
76
|
+
3. lint (병렬)
|
|
77
|
+
4. typecheck (병렬)
|
|
78
|
+
5. test (unit + integration, 병렬 shard)
|
|
79
|
+
6. build (artifact)
|
|
80
|
+
7. eval gate (Pre-Eval Gate 재현 — tsc/eslint/jest)
|
|
81
|
+
8. (optional) container build + push
|
|
82
|
+
9. (staging) IaC plan + apply
|
|
83
|
+
10. (prod) plan only — apply는 수동 승인 step
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
각 step은 캐시·아티팩트 명시. 스택별 구체화는 `infra/ci/<stack>.md`.
|
|
87
|
+
|
|
88
|
+
## 5. 시크릿 관리 룰
|
|
89
|
+
|
|
90
|
+
- 평문 시크릿 파일 0건 (`.env`, `*.key`, `*.pem` → gitignore + secret store)
|
|
91
|
+
- 시크릿 접근은 **권한 매트릭스 명시 필수** (`infra/secrets/policy.md`)
|
|
92
|
+
- 회전 정책: prod ≤ 90일, staging ≤ 180일
|
|
93
|
+
- 누출 감지: gitleaks 사전훅 + Eval-Security와 공유
|
|
94
|
+
- 누출 발생 시: 즉시 회전 + Incident War Room 소집
|
|
95
|
+
|
|
96
|
+
## 6. 릴리스·롤백 절차
|
|
97
|
+
|
|
98
|
+
`infra/release/checklist.md` 체크리스트 표준:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
[ ] feature-list.json 모든 feature passes ≥ 2.80
|
|
102
|
+
[ ] cqo-audit-<sprint>.md PASS
|
|
103
|
+
[ ] regression suite green
|
|
104
|
+
[ ] DB migration up/down 양방향 테스트
|
|
105
|
+
[ ] feature flag 기본값 명시
|
|
106
|
+
[ ] rollback runbook 검토 완료
|
|
107
|
+
[ ] Service-Ops 알림 채널 설정 확인
|
|
108
|
+
[ ] Owner 또는 CTO 승인 서명
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`infra/release/rollback.md`:
|
|
112
|
+
- 재현 가능한 한 줄 명령 (`make rollback VERSION=v1.4.2`)
|
|
113
|
+
- DB 마이그레이션 down 절차 (가능 여부 명시)
|
|
114
|
+
- feature flag 비활성 절차
|
|
115
|
+
- 사용자 영향 안내 템플릿
|
|
116
|
+
|
|
117
|
+
## 7. 관찰성 베이스라인 (Service-Ops 공급)
|
|
118
|
+
|
|
119
|
+
DevOps는 **수집 인프라**만 책임. 분석은 Service-Ops가 함.
|
|
120
|
+
|
|
121
|
+
| 신호 | 적재 위치 | 형식 |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| 구조화 로그 | stdout → log shipper | JSON 라인 |
|
|
124
|
+
| 메트릭 | `/metrics` (Prometheus 포맷) 또는 Push gateway | OpenMetrics |
|
|
125
|
+
| 트레이스 | OTel exporter | OTLP |
|
|
126
|
+
| 헬스체크 | `/health/live`, `/health/ready` | JSON `{status, deps}` |
|
|
127
|
+
| 비용 | cloud billing export → 일배치 | jsonl |
|
|
128
|
+
|
|
129
|
+
→ Service-Ops가 `.harness/ops/metrics.jsonl` 로 합성·저장하여 모니터링.
|
|
130
|
+
|
|
131
|
+
## 8. Designer / Frontend / Backend와의 인터페이스
|
|
132
|
+
|
|
133
|
+
| 받는 산출물 | 어디서 |
|
|
134
|
+
|---|---|
|
|
135
|
+
| 정적 자산 빌드 결과 | Generator-Frontend (build artifact) |
|
|
136
|
+
| 컨테이너·이미지 메타데이터 | Generator-Backend (서비스별 Dockerfile) |
|
|
137
|
+
| 정적 페이지·CDN 설정 | Generator-Designer (preview·landing 자산) |
|
|
138
|
+
|
|
139
|
+
DevOps는 위 산출물을 **수집·배포**만. 내부 수정 X.
|
|
140
|
+
|
|
141
|
+
## 9. progress.json 추가
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
"generator_devops": {
|
|
145
|
+
"last_release": "v1.4.2",
|
|
146
|
+
"ci_status": { "build": "green", "deploy_staging": "green", "deploy_prod": "manual_pending" },
|
|
147
|
+
"open_iac_drift": 0,
|
|
148
|
+
"secret_rotations_due": [],
|
|
149
|
+
"rollback_ready": true
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 10. 권한 매트릭스
|
|
154
|
+
|
|
155
|
+
| 파일 | 읽기 | 쓰기 |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| infra/ | ✅ | ✅ |
|
|
158
|
+
| Dockerfile.* | ✅ | ✅ |
|
|
159
|
+
| .github/workflows/ | ✅ | ✅ |
|
|
160
|
+
| apps/, libs/ (코드) | ✅ | ❌ (헬스체크 라우트 추가는 Generator-Backend에 의뢰) |
|
|
161
|
+
| secrets store | ✅ (path 메타) | secret 값 자체는 사람만 |
|
|
162
|
+
| feature-list.json | ✅ | passes 필드 X (배포는 별도 게이트) |
|
|
163
|
+
|
|
164
|
+
## 11. 평가 (Eval) 매핑
|
|
165
|
+
|
|
166
|
+
DevOps 산출물은 다음 Eval 축과 연결:
|
|
167
|
+
- **Eval-CodeQuality**: CI 설정 lint·shellcheck·yamllint
|
|
168
|
+
- **Eval-Security**: 시크릿 누출·OS 이미지 CVE·IAM 과대권한
|
|
169
|
+
- **Eval-Architecture**: IaC 모듈 결합도·환경 분리 위반
|
|
170
|
+
- **Eval-Functional**: staging E2E 통과 여부 (배포 후 smoke)
|
|
171
|
+
|
|
172
|
+
## 12. Conductor / Meeting 인터페이스
|
|
173
|
+
|
|
174
|
+
- Conductor 틱에서:
|
|
175
|
+
- feature가 `passes ≥ 2.80` 도달 → DevOps spawn (staging 배포)
|
|
176
|
+
- release 태그 생성 요청 시 → 릴리스 체크리스트 작성
|
|
177
|
+
- Spec Review 소집:
|
|
178
|
+
- 환경 분리·권한 설계가 IA-MAP·api-contract와 충돌
|
|
179
|
+
- 시크릿 누출 사고 (병행 Incident)
|
|
180
|
+
- Phase Gate (Phase 5 Launch) 사회 보조
|
|
181
|
+
|
|
182
|
+
## 13. Session Boundary Protocol
|
|
183
|
+
|
|
184
|
+
### On Start
|
|
185
|
+
1. progress.json 읽기 → 호출 사유(`build|release|rollback|drift-check`) 식별
|
|
186
|
+
2. partial update: `current_agent = "generator-devops"`, `agent_status = "running"`
|
|
187
|
+
|
|
188
|
+
### On Complete
|
|
189
|
+
1. infra/ 산출물 finalize
|
|
190
|
+
2. partial update:
|
|
191
|
+
- `generator_devops.*` 필드
|
|
192
|
+
- `agent_status = "completed"`, `next_agent` 결정
|
|
193
|
+
3. 배포 실행 결과 → `.harness/ops/metrics.jsonl` append (release 이벤트)
|
|
194
|
+
4. Service-Ops가 즉시 헬스체크 polling 시작
|
|
195
|
+
|
|
196
|
+
## 14. 출처 (Attribution)
|
|
197
|
+
|
|
198
|
+
agency-agents (MIT) 흡수:
|
|
199
|
+
- `engineering-devops-automator`: CI/CD·IaC 자동화 패턴
|
|
200
|
+
- `engineering-sre`: SLO·SLI·헬스체크 표준 (Service-Ops와 공유)
|
|
201
|
+
- `engineering-autonomous-optimization-architect`: 비용·성능 자율 최적화 (옵트인)
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harness-meeting-manager
|
|
3
|
+
description: "부서 간 동기화 엔진. Cron(Service-Ops)·Event(부서 발신)·Manual 트리거로 5종 회의(Standup/Sprint Review/Spec Review/Incident War Room/All-Hands)를 소집·집계·디스패치. 적응형 cadence(light 30m / normal 1h / heavy 4h). 트리거: '미팅 소집', 'meeting convene', 'standup'."
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Source attribution: https://github.com/msitarzewski/agency-agents (MIT)
|
|
9
|
+
이 스킬은 strategy/coordination/handoff-templates.md 의 Standup/Sprint/Phase-Gate
|
|
10
|
+
양식과 strategy/runbooks/scenario-incident-response.md 의 War Room 패턴을
|
|
11
|
+
walwal-harness 의 부서 구조에 맞게 재해석함.
|
|
12
|
+
-->
|
|
13
|
+
|
|
14
|
+
# Meeting-Manager — 회의 소집·집계·디스패치
|
|
15
|
+
|
|
16
|
+
> Conductor가 "일을 굴리는 손"이라면, Meeting-Manager는 "일이 옆길로 새지 않게 잡는 서기".
|
|
17
|
+
> Dispatcher(CEO) 직속, Conductor와 평행.
|
|
18
|
+
|
|
19
|
+
## 1. 정체성
|
|
20
|
+
|
|
21
|
+
- **위치**: Dispatcher 직속, Conductor 평행
|
|
22
|
+
- **책임**: 회의 스케줄·소집·진행·기록·Action Item 디스패치
|
|
23
|
+
- **권한**: 모든 부서에 prep 양식 발신, 회의록 작성·집계, queue enqueue (v5.9.6 재사용)
|
|
24
|
+
- **금지**: 의사결정 직접 수행 (사회만 봄), Owner와 직접 대화 (escalation은 Dispatcher 경유)
|
|
25
|
+
|
|
26
|
+
## 2. 회의 5종
|
|
27
|
+
|
|
28
|
+
| 종류 | 트리거 | 참석자 | 결과물 | Owner 푸시? |
|
|
29
|
+
|---|---|---|---|---|
|
|
30
|
+
| **Standup** | Cron (적응형) | CTO·CQO·Service-Ops | GOAL 적합도·블로커·다음 24h 계획 | ❌ (대시보드만) |
|
|
31
|
+
| **Sprint Review** | Sprint 종료 이벤트 | CEO·COO·CTO·CQO | PASS/FAIL 통합·다음 Sprint 결정 | ✅ 요약본 |
|
|
32
|
+
| **Spec Review** | Eval "Change Request" 발신 | COO·CTO·발신 Eval | feature-list 수정·api-contract 변경 | 변경 시 ✅ |
|
|
33
|
+
| **Incident War Room** | Service-Ops red-alert | CEO·CTO·Incident-Responder·관련 Gen | 핫픽스·롤백·RCA 초안 | ✅ 즉시 |
|
|
34
|
+
| **All-Hands (Phase Gate)** | Phase 0~6 전환 이벤트 | 전 부서 + CEO·COO | Phase 진입 승인·부서 편성 변경 | ✅ 요약본 |
|
|
35
|
+
|
|
36
|
+
## 3. 회의 라이프사이클 (5단계)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Notice → Prep → Convene → Decide → Minutes
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
| 단계 | 책임 | 산출물 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Notice | Meeting-Manager | `.harness/actions/meetings/<id>/notice.md` (의제·참석자·deadline) |
|
|
45
|
+
| Prep | 각 참석자 | `.harness/actions/meetings/<id>/prep-<role>.md` |
|
|
46
|
+
| Convene | Meeting-Manager | prep 통합 → `meeting-<id>.md` 초안 |
|
|
47
|
+
| Decide | rubric → CEO override | `decisions:` 섹션 작성 |
|
|
48
|
+
| Minutes | Meeting-Manager | Action Items를 queue enqueue + archive |
|
|
49
|
+
|
|
50
|
+
## 4. 적응형 Cadence (Standup)
|
|
51
|
+
|
|
52
|
+
| 모드 | 주기 | 진입 조건 |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `light` | 30m | 활성 Sprint AND Service-Ops 이벤트율 < 1/h AND goal_adherence ≥ 0.9 |
|
|
55
|
+
| `normal` | 1h | 기본값 / 다른 모드 미충족 |
|
|
56
|
+
| `heavy` | 4h | (idle OR 배포 후 안정기) AND 직전 3회 standup 무특이사항 |
|
|
57
|
+
|
|
58
|
+
전환 결정자: Service-Ops가 매 Standup 종료 시 직전 3회 메트릭으로 재계산 → `progress.json.meetings.cadence` 갱신.
|
|
59
|
+
수동 override: Owner가 `/meeting-cadence light|normal|heavy` (Conductor가 1회 적용 후 자동 조정 재개).
|
|
60
|
+
|
|
61
|
+
## 5. 의사결정 규칙
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
1. rubric 기반 합의 시도
|
|
65
|
+
- 각 참석자 의견 + 가중치 (담당 영역 가중)
|
|
66
|
+
- 가중 동의율 ≥ 0.66 → 가결
|
|
67
|
+
2. 가결 못 함 → CEO override 요청
|
|
68
|
+
- Dispatcher 통해 Owner에게 옵션 제시
|
|
69
|
+
- Owner 응답 = 최종
|
|
70
|
+
3. 인시던트는 시간 압박 → CEO 즉시 override 가능
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 6. Artifact 스키마
|
|
74
|
+
|
|
75
|
+
`.harness/actions/meetings/<meeting-id>.md`:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
---
|
|
79
|
+
docmeta: { id, type: output, ... }
|
|
80
|
+
meeting:
|
|
81
|
+
id: M-2026-05-07-0001
|
|
82
|
+
type: standup | sprint-review | spec-review | incident | all-hands
|
|
83
|
+
trigger: cron | event:<source> | manual
|
|
84
|
+
scheduled_at: <iso>
|
|
85
|
+
convened_at: <iso>
|
|
86
|
+
attendees: [cto, cqo, service-ops]
|
|
87
|
+
status: notice | prep | convened | decided | dispatched | archived
|
|
88
|
+
prep_links:
|
|
89
|
+
- role: cto
|
|
90
|
+
uri: meetings/M-.../prep-cto.md
|
|
91
|
+
agenda:
|
|
92
|
+
- <item>
|
|
93
|
+
reports:
|
|
94
|
+
- role: <role>
|
|
95
|
+
summary: <one-line>
|
|
96
|
+
decisions:
|
|
97
|
+
- id: D-1
|
|
98
|
+
text: <decision>
|
|
99
|
+
vote: { agree: 0.71, override: false }
|
|
100
|
+
action_items:
|
|
101
|
+
- id: AI-1
|
|
102
|
+
owner: generator-backend
|
|
103
|
+
description: <task>
|
|
104
|
+
due: <iso>
|
|
105
|
+
queue_entry_id: <queue-id>
|
|
106
|
+
goal_adherence_delta: -0.05
|
|
107
|
+
escalation_to_owner: false
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
# Meeting <id> — <type> @ <ts>
|
|
111
|
+
|
|
112
|
+
## 1. Agenda
|
|
113
|
+
## 2. Reports (per role)
|
|
114
|
+
## 3. Decisions
|
|
115
|
+
## 4. Action Items
|
|
116
|
+
## 5. Next Meeting
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 7. progress.json 추가
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
"meetings": {
|
|
123
|
+
"cadence": "light|normal|heavy",
|
|
124
|
+
"last_standup": "<iso>",
|
|
125
|
+
"next_scheduled": "<iso>",
|
|
126
|
+
"active": [ { "id": "...", "type": "...", "status": "..." } ],
|
|
127
|
+
"open_action_items": 0,
|
|
128
|
+
"last_goal_adherence": 0.92,
|
|
129
|
+
"manual_override": null
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 8. Cron 통합 (Service-Ops 위임)
|
|
134
|
+
|
|
135
|
+
Meeting-Manager 자체는 cron을 돌리지 않음. Service-Ops가 매 hourly 틱에서:
|
|
136
|
+
1. cadence 모드에 따라 다음 스케줄 시각 계산
|
|
137
|
+
2. 도달 시 Meeting-Manager에 `convene(type=standup)` 요청
|
|
138
|
+
3. Meeting-Manager가 라이프사이클 실행
|
|
139
|
+
|
|
140
|
+
이로써 cron 책임이 Service-Ops에 일원화되고, Meeting-Manager는 순수 회의 도메인에 집중.
|
|
141
|
+
|
|
142
|
+
## 9. Event 트리거 카탈로그
|
|
143
|
+
|
|
144
|
+
| Event 발신처 | 조건 | 소집 회의 |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| Eval-* | `## Change Request` 첨부 | Spec Review |
|
|
147
|
+
| Conductor | 3회 FAIL | Spec Review (scope 축소 검토) |
|
|
148
|
+
| Service-Ops | red-alert (5xx 임계 / 헬스 실패) | Incident War Room |
|
|
149
|
+
| Conductor | Sprint 종료 (모든 feature PASS) | Sprint Review |
|
|
150
|
+
| Planner | Phase 전환 요청 | All-Hands (Phase Gate) |
|
|
151
|
+
| Owner | `/meeting convene <type>` | 해당 타입 (manual) |
|
|
152
|
+
| Service-Ops | `goal_adherence < 0.5` 24h | Spec Review (긴급) |
|
|
153
|
+
|
|
154
|
+
## 10. Action Item 디스패치
|
|
155
|
+
|
|
156
|
+
회의 종료 시 모든 Action Item은 기존 queue enqueue (v5.9.6) 재사용:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
bash scripts/queue-enqueue.sh --owner generator-backend --feature <feature-id> --description "<text>" --due "<iso>" --source-meeting <meeting-id>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
큐에 들어간 항목은 Conductor가 다음 틱에서 자연스럽게 spawn.
|
|
163
|
+
|
|
164
|
+
## 11. Owner 가시성 정책
|
|
165
|
+
|
|
166
|
+
- **기본**: 회의록은 대시보드(`apps/harness-dashboard`) 회의실 룸에 핀, Owner가 클릭해서 조회
|
|
167
|
+
- **푸시 발생**: Sprint Review / Phase Gate / Incident War Room → Dispatcher가 다음 Owner 메시지에서 1줄 요약 보고
|
|
168
|
+
- **요청 시**: Owner가 "오늘 회의 요약" / `/meetings today` → 최근 N건 헤더 + 미해결 Action Item 출력
|
|
169
|
+
|
|
170
|
+
## 12. Session Boundary Protocol
|
|
171
|
+
|
|
172
|
+
### On Start (소집 1회)
|
|
173
|
+
1. `.harness/progress.json` 읽기 → 현재 active meetings 확인 (중복 방지)
|
|
174
|
+
2. meeting-id 발급 (`M-YYYY-MM-DD-NNNN`)
|
|
175
|
+
3. `.harness/actions/meetings/<id>/notice.md` 작성
|
|
176
|
+
4. partial update: `meetings.active[+].status = "notice"`
|
|
177
|
+
|
|
178
|
+
### On Prep Collected
|
|
179
|
+
1. 모든 참석자 prep-*.md 존재 확인 (timeout: standup 5min, 그 외 30min)
|
|
180
|
+
2. timeout 시 결석 처리 + 회의록에 명시
|
|
181
|
+
3. partial update: `meetings.active[i].status = "convened"`
|
|
182
|
+
|
|
183
|
+
### On Decided
|
|
184
|
+
1. 회의록 finalize → `meeting-<id>.md`
|
|
185
|
+
2. Action Items → queue enqueue
|
|
186
|
+
3. partial update: `status = "dispatched"`, `open_action_items += N`
|
|
187
|
+
4. cadence 재계산 요청 (Service-Ops에 위임)
|
|
188
|
+
|
|
189
|
+
### On Archived
|
|
190
|
+
1. `.harness/archive/meetings/<id>/` 로 이동
|
|
191
|
+
2. partial update: active에서 제거
|
|
192
|
+
|
|
193
|
+
## 13. 안전 가드
|
|
194
|
+
|
|
195
|
+
- **회의 중복 방지**: 같은 type이 active이면 새 소집 무시 (incident만 예외)
|
|
196
|
+
- **prep 누락**: 5분(standup) / 30분(그 외) timeout, 결석자 표시 후 진행
|
|
197
|
+
- **무한 회의 방지**: 한 Sprint 내 같은 type 회의 ≥ 5회면 escalation
|
|
198
|
+
- **CEO override 남용 방지**: Owner override 카운트를 회의록에 기록, Sprint Review에서 회고
|
|
199
|
+
|
|
200
|
+
## 14. 출처 (Attribution)
|
|
201
|
+
|
|
202
|
+
본 스킬은 https://github.com/msitarzewski/agency-agents (MIT) 의 다음을 재해석함:
|
|
203
|
+
- `strategy/coordination/handoff-templates.md` — Standup·Sprint·Phase Gate 양식
|
|
204
|
+
- `strategy/runbooks/scenario-incident-response.md` — War Room 패턴
|
|
205
|
+
- `specialized/specialized-chief-of-staff.md` — 회의 사회·문서 의존성 그래프 관리
|
|
206
|
+
- `support/support-executive-summary-generator.md` — 회의록 요약 출력
|