@uzysjung/agent-harness 26.88.0 → 26.89.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.
Files changed (92) hide show
  1. package/README.ko.md +3 -26
  2. package/README.md +8 -32
  3. package/dist/{chunk-QHYH6P32.js → chunk-EZZOJPG4.js} +1 -11
  4. package/dist/chunk-EZZOJPG4.js.map +1 -0
  5. package/dist/index.js +262 -748
  6. package/dist/index.js.map +1 -1
  7. package/dist/trust-tier-drift.js +1 -1
  8. package/package.json +1 -1
  9. package/templates/agents/plan-checker.md +3 -4
  10. package/templates/agents/reviewer.md +1 -1
  11. package/templates/antigravity/AGENTS.md.template +0 -28
  12. package/templates/codex/AGENTS.md.template +0 -25
  13. package/templates/codex/README.md +5 -15
  14. package/templates/codex/config.toml.template +0 -10
  15. package/templates/codex/hooks/README.md +0 -2
  16. package/templates/hooks/checkpoint-snapshot.sh +1 -22
  17. package/templates/hooks/session-start.sh +1 -1
  18. package/templates/hooks/spec-drift-check.sh +2 -20
  19. package/templates/opencode/AGENTS.md.template +3 -38
  20. package/templates/opencode/README.md +0 -4
  21. package/templates/opencode/opencode.json.template +1 -3
  22. package/templates/project-claude/fragments/csr-fastapi/boundaries.md +0 -1
  23. package/templates/project-claude/fragments/csr-fastapi/commands.md +0 -1
  24. package/templates/project-claude/fragments/csr-fastapi/plugins.md +1 -1
  25. package/templates/project-claude/fragments/csr-fastify/boundaries.md +0 -1
  26. package/templates/project-claude/fragments/csr-fastify/commands.md +0 -1
  27. package/templates/project-claude/fragments/csr-fastify/plugins.md +1 -1
  28. package/templates/project-claude/fragments/csr-supabase/boundaries.md +0 -1
  29. package/templates/project-claude/fragments/csr-supabase/commands.md +0 -1
  30. package/templates/project-claude/fragments/csr-supabase/plugins.md +1 -1
  31. package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +0 -2
  32. package/templates/project-claude/fragments/data/boundaries.md +0 -1
  33. package/templates/project-claude/fragments/data/commands.md +0 -1
  34. package/templates/project-claude/fragments/data/plugins.md +1 -1
  35. package/templates/project-claude/fragments/executive/boundaries.md +0 -1
  36. package/templates/project-claude/fragments/executive/commands.md +0 -1
  37. package/templates/project-claude/fragments/executive/skills.md +1 -1
  38. package/templates/project-claude/fragments/executive/workflow.md +1 -2
  39. package/templates/project-claude/fragments/growth-marketing/boundaries.md +0 -1
  40. package/templates/project-claude/fragments/growth-marketing/commands.md +0 -1
  41. package/templates/project-claude/fragments/growth-marketing/skills.md +1 -1
  42. package/templates/project-claude/fragments/growth-marketing/workflow.md +1 -2
  43. package/templates/project-claude/fragments/project-management/boundaries.md +0 -1
  44. package/templates/project-claude/fragments/project-management/commands.md +0 -1
  45. package/templates/project-claude/fragments/project-management/skills.md +1 -1
  46. package/templates/project-claude/fragments/project-management/workflow.md +1 -2
  47. package/templates/project-claude/fragments/ssr-htmx/boundaries.md +0 -1
  48. package/templates/project-claude/fragments/ssr-htmx/commands.md +0 -1
  49. package/templates/project-claude/fragments/ssr-htmx/plugins.md +1 -1
  50. package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +0 -1
  51. package/templates/project-claude/fragments/ssr-nextjs/commands.md +0 -1
  52. package/templates/project-claude/fragments/ssr-nextjs/plugins.md +1 -1
  53. package/templates/project-claude/fragments/tooling/boundaries.md +0 -1
  54. package/templates/project-claude/fragments/tooling/commands.md +0 -1
  55. package/templates/project-claude/fragments/tooling/skills.md +1 -1
  56. package/templates/rules/git-policy.md +2 -2
  57. package/templates/rules/ship-checklist.md +3 -3
  58. package/templates/settings.json +0 -13
  59. package/templates/skills/gh-issue-workflow/SKILL.md +8 -8
  60. package/templates/skills/north-star/SKILL.md +4 -4
  61. package/templates/skills/ui-visual-review/SKILL.md +6 -6
  62. package/dist/chunk-QHYH6P32.js.map +0 -1
  63. package/templates/codex/hooks/gate-check.sh +0 -7
  64. package/templates/codex/skills/uzys-build/SKILL.md +0 -24
  65. package/templates/codex/skills/uzys-plan/SKILL.md +0 -24
  66. package/templates/codex/skills/uzys-review/SKILL.md +0 -24
  67. package/templates/codex/skills/uzys-ship/SKILL.md +0 -24
  68. package/templates/codex/skills/uzys-spec/SKILL.md +0 -28
  69. package/templates/codex/skills/uzys-test/SKILL.md +0 -24
  70. package/templates/commands/uzys/auto.md +0 -190
  71. package/templates/commands/uzys/build.md +0 -42
  72. package/templates/commands/uzys/plan.md +0 -55
  73. package/templates/commands/uzys/review.md +0 -44
  74. package/templates/commands/uzys/ship.md +0 -49
  75. package/templates/commands/uzys/spec.md +0 -93
  76. package/templates/commands/uzys/test.md +0 -58
  77. package/templates/hooks/agentshield-gate.sh +0 -101
  78. package/templates/hooks/gate-check.sh +0 -138
  79. package/templates/opencode/.opencode/commands/uzys-build.md +0 -22
  80. package/templates/opencode/.opencode/commands/uzys-plan.md +0 -22
  81. package/templates/opencode/.opencode/commands/uzys-review.md +0 -22
  82. package/templates/opencode/.opencode/commands/uzys-ship.md +0 -22
  83. package/templates/opencode/.opencode/commands/uzys-spec.md +0 -28
  84. package/templates/opencode/.opencode/commands/uzys-test.md +0 -22
  85. package/templates/opencode/.opencode/plugins/uzys-harness.ts +0 -146
  86. package/templates/project-claude/fragments/csr-fastapi/workflow.md +0 -8
  87. package/templates/project-claude/fragments/csr-fastify/workflow.md +0 -8
  88. package/templates/project-claude/fragments/csr-supabase/workflow.md +0 -8
  89. package/templates/project-claude/fragments/data/workflow.md +0 -9
  90. package/templates/project-claude/fragments/ssr-htmx/workflow.md +0 -8
  91. package/templates/project-claude/fragments/ssr-nextjs/workflow.md +0 -8
  92. package/templates/project-claude/fragments/tooling/workflow.md +0 -5
@@ -1,190 +0,0 @@
1
- SPEC 확정 후 나머지 5단계(Plan → Build → Test → Review → Ship)를 자동으로 순차 진행하고, **SPEC 정합성이 충족될 때까지 Ralph loop로 반복 검증**한다.
2
-
3
- ## 사전 조건
4
-
5
- 1. `docs/SPEC.md` 존재 확인. 없으면 "/uzys:spec을 먼저 실행하세요" 안내 후 **중단**.
6
- 2. `.claude/gate-status.json`의 `define.completed` = true 확인. false면 **중단**.
7
-
8
- ## 실행 순서
9
-
10
- 각 단계를 **순차 실행**. 각 단계 완료 시 gate-status.json을 자동 업데이트하고 다음 단계로 진행한다.
11
-
12
- ### 1. Plan
13
- - `docs/plan.md` + `docs/todo.md` 생성
14
- - plan-checker agent로 Goal-backward 검증 (Revision Gate, 최대 3회)
15
- - 완료 시: `jq '.plan.completed = true | .plan.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json`
16
-
17
- ### 2. Build
18
- - `docs/todo.md`에서 미완료 task를 순차 선택
19
- - 각 task에 TDD 사이클 적용 (RED → GREEN → REFACTOR)
20
- - 각 task 완료 시 **즉시 커밋** (commit-policy 준수)
21
- - todo.md 체크박스 업데이트
22
- - 모든 task 완료 시: gate-status build.completed = true
23
-
24
- ### 3. Test
25
- - 전체 테스트 스위트 실행
26
- - test-policy.md 커버리지 기준 확인 (UI 60%, API 80%, 로직 90%)
27
- - 미달 시 추가 테스트 작성 시도 (최대 3회)
28
- - 통과 시: gate-status verify.completed = true
29
-
30
- ### 4. Review
31
- - reviewer subagent (context: fork) 호출
32
- - 5축 리뷰: correctness, readability, architecture, security, performance
33
- - CRITICAL 이슈 발견 시 즉시 수정 시도 (최대 3회)
34
- - CRITICAL 0건 시: gate-status review.completed = true
35
-
36
- ### 5. SPEC Compliance Check (Ralph Loop) ← 핵심
37
-
38
- **Ship 전에 반드시 실행**. SPEC.md에 정의된 모든 요구사항이 실제로 구현됐는지 확인하고, 미달이면 Build로 돌아가 수정한다.
39
-
40
- #### 5.1 SPEC 파싱
41
-
42
- `docs/SPEC.md`에서 다음을 자동 추출:
43
- - **Objective** 섹션의 핵심 목표
44
- - **Features** 섹션의 각 기능 항목 (체크리스트 또는 표)
45
- - **Acceptance Criteria** (있으면)
46
- - **Boundaries > DO NOT CHANGE** 영역
47
- - **Non-Goals** 목록
48
-
49
- #### 5.2 구현 검증 (자동)
50
-
51
- 추출된 각 항목에 대해:
52
-
53
- 1. **파일 존재 확인**: 해당 기능이 구현된 파일이 프로젝트에 존재하는가? (Glob/Grep)
54
- 2. **코드 매칭**: 기능 키워드가 소스 코드에 등장하는가? (Grep)
55
- 3. **테스트 존재**: 해당 기능에 대한 테스트 파일이 있는가?
56
- 4. **빌드 통과**: 프로젝트 빌드/타입체크가 PASS인가?
57
- 5. **DO NOT CHANGE 미침범**: 보호 영역이 수정되지 않았는가?
58
- 6. **Non-Goals 미침범**: Non-Goals에 해당하는 구현이 추가되지 않았는가?
59
-
60
- #### 5.3 결과 분류
61
-
62
- 각 항목을 다음 3가지로 분류:
63
- - **PASS**: 구현 확인됨
64
- - **PARTIAL**: 파일은 있지만 불완전 (예: stub, TODO, 빈 함수)
65
- - **MISSING**: 구현 없음
66
-
67
- #### 5.4 Ralph Loop (반복 수정)
68
-
69
- ```
70
- iteration = 0
71
- MAX_ITERATIONS = 5
72
-
73
- while MISSING 또는 PARTIAL 항목 존재:
74
- iteration += 1
75
- if iteration > MAX_ITERATIONS:
76
- → Escalation Gate: 사용자에게 "5회 시도 후에도 미달 항목 N건" 보고
77
- → 사용자 결정 대기 (계속 / 중단 / 수동 수정)
78
- break
79
-
80
- 1. MISSING/PARTIAL 항목 목록 출력
81
- 2. 각 항목에 대해:
82
- - 구현 코드 작성 (Build 단계 로직 재사용)
83
- - 해당 기능의 테스트 작성
84
- - 즉시 커밋
85
- 3. 전체 빌드/테스트 재실행
86
- 4. SPEC Compliance 재검증 (5.2 반복)
87
- 5. 결과 출력: "Iteration {iteration}: PASS {n}, PARTIAL {m}, MISSING {k}"
88
-
89
- if 모든 항목 PASS:
90
- → "SPEC 정합성 100% 달성" 출력
91
- → gate-status verify.completed = true (이미 안 되어있으면)
92
- ```
93
-
94
- #### 5.5 검증 보고서
95
-
96
- 각 iteration 후 보고:
97
-
98
- ```
99
- ## SPEC Compliance Report — Iteration {N}/{MAX}
100
-
101
- | # | Feature | Status | Evidence |
102
- |---|---------|--------|----------|
103
- | 1 | 노트 CRUD | PASS | src/services/note.ts:15 + tests/note.test.ts |
104
- | 2 | 카테고리 트리 | PARTIAL | src/components/Sidebar.tsx 있지만 중첩 미구현 |
105
- | 3 | FTS 검색 | MISSING | 검색 관련 파일 없음 |
106
-
107
- PASS: X / PARTIAL: Y / MISSING: Z
108
- Next: {Y+Z}건 수정 후 재검증
109
- ```
110
-
111
- ### 6. Ship (SPEC 100% 달성 후)
112
- - agentshield-gate 자동 실행 (CRITICAL 차단)
113
- - spec-drift-check ship 모드 실행
114
- - 전부 통과 시: gate-status ship.completed = true
115
- - 최종 커밋 + 태그 제안
116
-
117
- ### 7. Post-Ship: CLAUDE.md 리뷰 (자동)
118
- Ship 완료 후 CLAUDE.md를 자동 검토한다:
119
-
120
- 1. **instinct 확인**: `/ecc:instinct-status` 실행 → confidence ≥ 0.8인 instinct를 CLAUDE.md 또는 `.claude/rules/` 반영 후보로 제안
121
- 2. **패턴 체크**: 이번 세션에서 반복된 교정/실수 패턴이 있으면 CLAUDE.md에 추가 제안
122
- 3. **모순 검출**: 기존 CLAUDE.md 지시와 이번 세션 행동이 충돌한 부분 보고
123
- 4. **rules-distill**: ECC `rules-distill` 스킬로 현재 스킬에서 cross-cutting 원칙 추출 가능성 확인
124
-
125
- **제약**: 제안만. 직접 수정 금지 (인간 승인 필수). 변경 제안을 사용자에게 목록으로 출력.
126
-
127
- **예시 출력**:
128
- ```
129
- ## CLAUDE.md 개선 제안 (Post-Ship Review)
130
-
131
- 1. [instinct] "Rust 에러는 Result<T, E> 반환 강제" (confidence 0.85) → error-handling rule 보강 후보
132
- 2. [반복 교정] 사용자가 3회 "커밋 먼저 해" 교정 → commit-policy 강조 필요
133
- 3. [모순 없음]
134
- 4. [rules-distill] 해당 없음
135
-
136
- 승인 시 적용할 항목 번호를 알려주세요 (또는 "skip"):
137
- ```
138
-
139
- ## 자동 재시도 (Revision Gate 패턴)
140
-
141
- 각 단계에서 실패 시:
142
- 1. 원인 분석 + 즉시 수정 시도
143
- 2. 최대 **3회** 재시도 (단계별)
144
- 3. SPEC Compliance Loop는 **최대 5회** (전체 루프)
145
- 4. 초과 시 **사용자에게 escalation** (Escalation Gate)
146
- 5. 사용자 응답 대기
147
-
148
- ## 중단 조건 (Abort Gate)
149
-
150
- - SPEC.md 300줄 초과 → spec-scaling 제안 + 중단
151
- - 동일 이슈 3회 연속 미해결 → escalation
152
- - SPEC Compliance 5회 반복 후 MISSING 잔존 → escalation
153
- - 사용자 Ctrl+C → 현재 상태 보존
154
-
155
- ## Arguments
156
-
157
- ```
158
- /uzys:auto # Plan부터 시작 (기본)
159
- /uzys:auto from=build # Build부터 (Plan 이미 완료 시)
160
- /uzys:auto from=test # Test부터
161
- /uzys:auto from=review # Review부터
162
- /uzys:auto from=ship # Ship부터 (SPEC compliance 포함)
163
- /uzys:auto from=verify # SPEC compliance check만 실행
164
- ```
165
-
166
- ## Ralph Loop 동작 요약
167
-
168
- ```
169
- /uzys:spec (사용자)
170
-
171
- /uzys:auto (자동 시작)
172
-
173
- Plan → Build → Test → Review
174
-
175
- SPEC Compliance Check ← Ralph Loop 진입
176
- ↓ ↑
177
- MISSING? → Build로 돌아가 수정 → Test → 재검증
178
- ↓ (PASS)
179
- Ship
180
- ```
181
-
182
- **핵심**: Ship은 SPEC.md의 **모든 Feature가 PASS일 때만** 진입 가능. 한 건이라도 MISSING이면 Build로 돌아가 구현. 이 루프가 "될 때까지 계속 돈다".
183
-
184
- ## 참조
185
-
186
- - gate-check.sh는 `/uzys:auto`를 게이트 체크 대상에서 **제외**. auto 커맨드가 내부에서 gate-status를 직접 관리.
187
- - 각 단계의 상세 동작은 개별 `/uzys:plan`, `/uzys:build` 등의 커맨드 정의를 따른다.
188
- - gates-taxonomy.md의 4유형 게이트 (Pre-flight/Revision/Escalation/Abort) 적용.
189
- - verification-loop 스킬 (ECC): Build→Type→Lint→Test→Security→Diff 6단계 검증 사이클. SPEC compliance check 내에서 활용.
190
- - P9 Circuit Breakers: 5회 반복 상한. 무한 루프 방지.
@@ -1,42 +0,0 @@
1
- Build phase — TDD로 점진적 구현한다.
2
-
3
- ## Gate Check
4
-
5
- `docs/todo.md`가 존재하는지 확인한다. 없으면 "Plan 단계(`/uzys:plan`)를 먼저 완료하세요" 경고.
6
-
7
- ## Process
8
-
9
- 1. `docs/todo.md`에서 다음 미완료 task를 선택한다.
10
- 2. agent-skills의 incremental-implementation + test-driven-development 스킬을 따른다:
11
- - RED: 실패하는 테스트 먼저 작성
12
- - GREEN: 테스트를 통과하는 최소 구현
13
- - REFACTOR: 코드 개선 (테스트 유지)
14
- 3. 완료된 task를 todo.md에서 체크한다.
15
- 4. **git-policy.md 적용: 즉시 commit → push**. issue_tracking enabled 시 commit message에 issue 번호 포함:
16
- - 진행 중: `<type>: 설명 (refs #N)`
17
- - task 완전 완료: PR에서 `Closes #N` 권장 (commit 단위 close 지양)
18
- 5. Build 중 새 bug/feature 발견 → `gh-issue-workflow` skill로 backlog 등록 (5섹션 ISSUE 템플릿). 현재 작업 흐름 깨지 않고 비동기 기록.
19
-
20
- ## Context-Aware Skill Selection
21
-
22
- 현재 편집 중인 파일에 따라 추가 스킬을 자동 활성화:
23
-
24
- | 파일 유형 | 추가 활성화 |
25
- |-----------|------------|
26
- | `.tsx`, `.jsx`, `.html`, `.css` | frontend-ui-engineering 스킬 + DESIGN.md/.impeccable.md 참조 |
27
- | API 라우트, 엔드포인트 | api-and-interface-design 스킬 |
28
- | 외부 라이브러리 사용 | source-driven-development 스킬 (공식 문서 확인) |
29
-
30
- ## Auto-Actions
31
-
32
- - SPEC.md가 300줄 초과 시 spec-scaling 스킬로 분리 제안.
33
- - 커밋 없이 다음 task로 넘어가면 경고.
34
- - 각 task 완료 시 todo.md 자동 업데이트.
35
-
36
- ## Gate Status Update
37
-
38
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json`의 `build.completed`를 `true`로, `build.timestamp`를 현재 시각으로 업데이트한다.
39
-
40
- ```bash
41
- jq '.build.completed = true | .build.timestamp = now | .build.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
42
- ```
@@ -1,55 +0,0 @@
1
- Plan phase — 작업을 검증 가능한 작은 단위로 분해한다.
2
-
3
- ## Gate Check
4
-
5
- `docs/SPEC.md`가 존재하는지 확인한다. 없으면 "Define 단계(`/uzys:spec`)를 먼저 완료하세요" 경고.
6
-
7
- ## Plan Depth — 변경 복잡도에 맞춰라
8
-
9
- 모든 SPEC을 동일하게 분해하지 않는다. 복잡도별로 plan 깊이를 조정:
10
-
11
- | 복잡도 | 신호 | Plan 형태 |
12
- |--------|------|----------|
13
- | **Trivial** | diff를 1문장으로 설명 가능 / single file / 명확한 fix | **Plan skip 가능**. todo.md에 1-task entry만 (또는 plan 단계 자체 건너뛰기 사용자 합의 시) |
14
- | **Standard** | multi-file / 여러 모듈 / unfamiliar 코드 일부 | **Milestone plan** (3-5개 outcome). per-task AC는 milestone 수준 |
15
- | **Complex** | 새 기능 / cross-cutting / ambiguous 요구사항 | **Detailed plan** (vertical slice 10+ task, per-task AC, 의존성 그래프) |
16
-
17
- 판단 기준: Anthropic best practices — *"if you can describe the diff in one sentence, skip the plan"*. Opus급 모델은 자율 분해 가능하므로 micro-task 강제 시 ceremony가 됨.
18
-
19
- ## Process
20
-
21
- 1. SPEC.md를 읽고 전체 범위 + **복잡도** 판정 (위 표).
22
- 1.5. **GitHub Issue 우선 fetch (issue_tracking: enabled 시)**:
23
- - `gh issue list --state open --json number,title,body,labels` 호출
24
- - 각 issue body에서 `방향성 (YYYY-MM-DD 확정)` 패턴 grep — 확정된 것만 후보
25
- - 전제(Given) 미충족 issue 제외
26
- - 우선순위 정렬 (label P0 > P1 > P2 > unlabeled)
27
- - 상위 1-3개 issue → todo.md 진입 후보
28
- 2. **Trivial이면**: todo.md만 생성하고 즉시 Build로. plan.md는 1-2줄.
29
- 3. **Standard/Complex이면**: agent-skills의 planning-and-task-breakdown 스킬을 따라 분해:
30
- - Vertical slicing: 수평 레이어가 아닌 수직 기능 단위
31
- - 각 task에 Acceptance Criteria 정의 (Standard는 milestone 수준, Complex는 task 수준)
32
- - 의존성 순서 정렬
33
- 4. **North Star 4-gate 체크 (Complex 복잡도 + `docs/NORTH_STAR.md` 존재 시)**:
34
- - 신규 기능/task가 NORTH_STAR.md §5 Decision Heuristics의 4-gate(Trend/Persona/Capability/Lean)를 모두 통과하는가?
35
- - 1개 이상 fail 시 사용자에게 보고 후 결정 대기 (자동 진행 금지)
36
- - NORTH_STAR.md 부재 시 skip
37
- 5. Sprint Contract: 범위(포함/제외) + 완료 기준 + 제약 조건.
38
- 6. `docs/plan.md` + `docs/todo.md` 생성.
39
-
40
- ## Output
41
-
42
- - `docs/plan.md` — 전체 계획, Phase 분해, 의존성
43
- - `docs/todo.md` — 체크리스트 형태의 할 일 목록
44
-
45
- ## Gate
46
-
47
- plan.md + todo.md가 존재하고, 최소 1개 task가 정의되어 있어야 완료.
48
-
49
- ## Gate Status Update
50
-
51
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json`의 `plan.completed`를 `true`로, `plan.timestamp`를 현재 시각으로 업데이트한다.
52
-
53
- ```bash
54
- jq '.plan.completed = true | .plan.timestamp = now | .plan.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
55
- ```
@@ -1,44 +0,0 @@
1
- Review phase — 다중 관점 리뷰로 품질을 검증한다.
2
-
3
- ## Gate Check
4
-
5
- Verify 단계가 완료되었는지 확인한다. 테스트가 통과하지 않았으면 경고.
6
-
7
- ## Process
8
-
9
- 1. agent-skills의 code-review-and-quality + security-and-hardening 스킬을 활성화한다.
10
- 2. **reviewer subagent를 호출한다** (SOD: 구현과 검증 분리):
11
- - reviewer는 context: fork로 격리 실행
12
- - 5축 리뷰: correctness, readability, architecture, security, performance
13
- 3. 프로젝트 레벨 에이전트도 활성화:
14
- - code-reviewer (ECC, sonnet): 일상적 코드 리뷰
15
- - security-reviewer (ECC, sonnet): OWASP Top 10, 보안 패턴
16
- 4. 산출물 유형에 따라 리뷰 관점 자동 선택:
17
- - 코드: 5축 리뷰
18
- - 문서/제안서: 논리 흐름, 설득력, 범위 커버리지
19
- - UI: 디자인 일관성, 접근성, 반응형
20
- 5. **UI 변경이 있고 `docs/visual-review-<phase>.md`가 존재**하면 visual review 결과를 입력으로 흡수:
21
- - REGRESSION 1건이라도 있으면 **Review Gate 차단** (CRITICAL과 동급)
22
- - CHANGED 항목은 의도성 검증 (커밋 메시지/PR 본문과 매칭)
23
- - 부재 시 ui-visual-review skill 호출 권유 (UI Track 한정)
24
-
25
- ## Severity Classification
26
-
27
- | Severity | Action |
28
- |----------|--------|
29
- | CRITICAL | 즉시 수정 필수. Review 게이트 통과 불가 |
30
- | HIGH | 수정 권장. 합리적 사유 있으면 예외 가능 |
31
- | MEDIUM | 제안. 현재 PR에서 안 해도 됨 |
32
- | LOW | 참고 |
33
-
34
- ## Gate
35
-
36
- CRITICAL 이슈 0건이어야 Review 게이트 통과.
37
-
38
- ## Gate Status Update
39
-
40
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json`의 `review.completed`를 `true`로, `review.timestamp`를 현재 시각으로 업데이트한다.
41
-
42
- ```bash
43
- jq '.review.completed = true | .review.timestamp = now | .review.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
44
- ```
@@ -1,49 +0,0 @@
1
- Ship phase — 프리런치 체크리스트 실행 후 배포한다.
2
-
3
- ## Gate Check
4
-
5
- Review 단계가 완료되었는지 확인한다. CRITICAL 이슈가 남아 있으면 경고.
6
-
7
- ## Process
8
-
9
- 1. agent-skills의 shipping-and-launch 스킬을 활성화한다.
10
- 2. `.claude/rules/ship-checklist.md` 게이트를 순차 확인:
11
-
12
- - [ ] E2E 테스트 전부 PASS
13
- - [ ] test-policy.md 커버리지 기준 충족
14
- - [ ] `npx ecc-agentshield scan` — CRITICAL/HIGH 없음
15
- - [ ] SPEC.md/PRD.md 대비 배포 항목 일치 확인
16
-
17
- 3. 하나라도 실패하면 배포 차단 + 실패 항목 보고.
18
-
19
- 4. 전부 통과하면:
20
- - Railway MCP/플러그인으로 배포 (Railway 사용 시)
21
- - Health check 엔드포인트 응답 확인
22
- - 배포 후 smoke test
23
-
24
- 5. Post-Ship:
25
- - SPEC/PRD 불일치 발견 시 → 업데이트 후 커밋
26
- - 아키텍처 결정이 있었으면 → `docs/decisions/` 에 ADR 기록
27
- - Change Log 최종 확정
28
-
29
- ## Issue Closure (issue_tracking: enabled 시)
30
-
31
- PR body에 다음 컨벤션 강제 — 머지 시 GitHub Issue 자동 close:
32
- - 완전 해결: `Closes #N` 또는 `Fixes #N`
33
- - 부분 진행 (close 안 함): `Refs #N`
34
- - 후속 issue 분기 시 원본 issue body의 "후속 작업" 섹션에 `#M` cross-link
35
-
36
- `gh-issue-workflow` skill의 PR 컨벤션 검증 — 머지 직전 PR body grep으로 1건이라도 issue 참조 누락이면 경고.
37
-
38
- ## Hotfix Mode
39
-
40
- 긴급 수정 시 Build → Verify → Ship 단축 경로 허용.
41
- Define/Plan/Review 게이트 건너뛰기 가능하지만, Verify(테스트)는 필수.
42
-
43
- ## Gate Status Update
44
-
45
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json`의 `ship.completed`를 `true`로, `ship.timestamp`를 현재 시각으로 업데이트한다.
46
-
47
- ```bash
48
- jq '.ship.completed = true | .ship.timestamp = now | .ship.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
49
- ```
@@ -1,93 +0,0 @@
1
- Define phase — 구조화된 스펙을 코드 작성 전에 작성한다.
2
-
3
- ## Process
4
-
5
- 1. 요청이 모호하면 먼저 아이디어를 정제한다 (agent-skills idea-refine 패턴 활용).
6
- 2. agent-skills의 spec-driven-development 스킬을 따라 SPEC.md를 작성한다.
7
- - 6가지 핵심 영역: Objective, Commands, Project Structure, Code Style, Testing Strategy, Boundaries
8
- 3. 대형 프로젝트(비즈니스 맥락 필요)면 PRD 템플릿(Docs/dev/PRD-TEMPLATE-standalone.md)을 참조하여 확장.
9
- 4. Non-Goals를 반드시 명시한다 — "미언급 = 범위 밖" 원칙.
10
- 5. DO NOT CHANGE 영역을 식별하고 SPEC에 기록한다.
11
- 6. SPEC.md를 `docs/SPEC.md`에 저장한다.
12
-
13
- ## Pre-SPEC 필수 접수 (UI/Test/E2E)
14
-
15
- SPEC 작성 **전에** 다음 항목을 사용자에게 질문하고 SPEC에 기록한다. 미기재 시 SPEC 미완료 — Build 단계에서 drift 버그로 이어짐.
16
-
17
- ### A. Test Environment Parity
18
-
19
- 1. **Prod DB 엔진** — Postgres/MySQL/SQLite/Redis 등 + 버전
20
- 2. **테스트 DB 전략** — testcontainer / docker-compose / staging DB / none. SQLite 대체는 Prod가 SQLite인 경우에만 허용 (test-policy.md Dev-Prod Parity)
21
- 3. **외부 의존성** — Stripe, Supabase, Railway, SES 등. 각각 Mock / Live staging 중 어떤 전략인지
22
-
23
- → SPEC.md "Testing Strategy" 섹션에 표로 정리.
24
-
25
- ### B. 핵심 E2E 플로우
26
-
27
- - **Mock 금지 대상 목록**: 인증(login/callback/me), 결제(checkout/webhook), 파일업로드 등
28
- - 각 플로우별 성공 기준 (예: "login → /me 200 + user_id 일치")
29
-
30
- → SPEC.md "Testing Strategy"의 E2E 하위 목록으로.
31
-
32
- ### C. Design Context (UI Track인 경우)
33
-
34
- UI 포함 Track(csr-*/ssr-*/full)이면 SPEC 전에 다음 확인:
35
-
36
- 1. **`DESIGN.md` 존재 여부** — 디자인 방향/톤/레이아웃 원칙 기록. 없으면 `/teach` 또는 `/shape` 스킬로 먼저 작성 유도
37
- 2. **`.impeccable.md` 존재 여부** — 브랜드/청중/톤 컨텍스트. 없으면 `/teach` 선행
38
- 3. **디자인 참조물** — Figma 링크, 스크린샷, 경쟁사 레퍼런스 등
39
-
40
- 디자인 컨텍스트 없이 UI 코드 작성 금지. Generic AI 미학 산출물 방지.
41
-
42
- ### D'. GitHub Issue Tracking (선택)
43
-
44
- `git remote -v`로 GitHub remote 확인 가능 + 사용자가 issue를 backlog/소통 채널로 쓰고 싶으면:
45
-
46
- - `docs/SPEC.md`에 `issue_tracking: enabled` 라인 명시 (opt-in)
47
- - 활성화 시 `gh-issue-workflow` skill이 `/uzys:plan`, `/uzys:build`, `/uzys:ship`에서 자동 결합
48
- - ISSUE 본문은 `templates/skills/gh-issue-workflow/ISSUE.template.md`의 5섹션(배경/전제/방향성/AC/후속) 강제
49
-
50
- 기본은 비활성. SPEC에 명시 없으면 모든 단계에서 skip.
51
-
52
- ### D. North Star (선택, 대형 프로젝트 권장)
53
-
54
- `docs/NORTH_STAR.md` 부재 + 다음 중 1개 이상 해당 시 작성 권장:
55
-
56
- - 6개월 이상 지속 예상되는 프로젝트
57
- - 복수 Phase / 복수 사용자 / 외부 의존성이 명확한 경우
58
- - 신규 기능 우선순위 결정이 잦을 것으로 예상
59
-
60
- 작성 시 `north-star` 스킬 호출 → `templates/skills/north-star/NORTH_STAR.template.md`를 `docs/NORTH_STAR.md`로 복사 후 7개 섹션(NS Statement / NSM / Will-Won't / Phase / 4-gate / Versioning / Changelog) 채움. 단순 1회성 작업이면 skip.
61
-
62
- ---
63
-
64
- 위 A/B/C **세 블록은 SPEC 작성 전 접수** (D는 선택). 답변 없으면 "이 항목 정의가 필요합니다" 질문으로 돌아가 반복. 모두 수집된 후에 본 SPEC 작성 진행.
65
-
66
- ## Gate
67
-
68
- 이 단계가 완료되어야 `/uzys:plan`으로 진행 가능.
69
- SPEC.md가 존재하고, 최소 Objective + Boundaries가 정의되어 있어야 완료.
70
-
71
- ## Auto-Actions
72
-
73
- - SPEC.md가 300줄을 초과하면 spec-scaling 스킬로 기능별 분리 제안.
74
- - change-management.md 규칙 적용: 이후 SPEC 변경 시 CR 분류.
75
-
76
- ## Gate Status Update
77
-
78
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json` 을 다음 두 동작으로 갱신한다:
79
-
80
- 1. `define.completed = true` + `define.timestamp = now`
81
- 2. **후속 5단계 (`plan` / `build` / `verify` / `review` / `ship`) 모두 리셋** — `completed = false`, `timestamp = null`
82
-
83
- **원칙**: SPEC 재정의 = 새 cycle 시작 = 후속 모든 게이트 리셋. 이전 cycle 의 ship 완료 상태가 새 cycle 게이트를 만족시키는 정합성 위반을 차단한다 (gate bypass 방지).
84
-
85
- ```bash
86
- jq '.define.completed = true
87
- | .define.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))
88
- | .plan.completed = false | .plan.timestamp = null
89
- | .build.completed = false | .build.timestamp = null
90
- | .verify.completed = false | .verify.timestamp = null
91
- | .review.completed = false | .review.timestamp = null
92
- | .ship.completed = false | .ship.timestamp = null' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
93
- ```
@@ -1,58 +0,0 @@
1
- Verify phase — TDD 워크플로우와 Track별 커버리지 게이트를 실행한다.
2
-
3
- ## Process
4
-
5
- 1. agent-skills의 test-driven-development 스킬을 따른다.
6
- 2. agent-skills의 **test-engineer 에이전트**를 활성화하여 테스트 전략 설계, 시나리오 분석(happy path, boundary, error path, concurrency)을 수행한다.
7
- 3. `.claude/rules/test-policy.md`의 Track별 커버리지 기준을 참조한다:
8
- - UI 컴포넌트: 60%
9
- - API 엔드포인트: 80%
10
- - 비즈니스 로직: 90%
11
- 3. 브라우저 테스트가 필요한지 판단한다:
12
- - UI 변경이 있으면 → browser-testing 스킬 + Playwright 활성화
13
- - API/로직만이면 → unit/integration 테스트만
14
- 4. 전체 테스트 스위트를 실행하고 결과를 보고한다.
15
- 5. 커버리지가 기준 미달이면 추가 테스트 작성을 제안한다.
16
-
17
- ## 핵심 사용자 기능 플로우 E2E (필수)
18
-
19
- 다음 플로우가 프로젝트에 존재하면 **실환경(staging 또는 로컬 docker-compose) Live E2E 1건 이상 필수**:
20
-
21
- - **인증**: login → magic-link/OAuth callback → /me (또는 보호된 엔드포인트) 200
22
- - **결제**: checkout → webhook → refund (존재 시)
23
- - **외부 API 의존 플로우**: Stripe, Supabase, Railway, SES 등
24
-
25
- 검증 방식: Mock이 아닌 실제 서비스 호출. unit/integration의 Mock 테스트는 보조.
26
- Prod가 Postgres면 테스트도 Postgres (testcontainer/docker-compose) — test-policy.md Dev-Prod Parity 준수.
27
-
28
- ## UI Visual Review (UI Track 자동)
29
-
30
- Track이 csr-*/ssr-*/full이고 E2E 테스트가 PASS인 경우, **`ui-visual-review` 스킬 호출 권유**:
31
-
32
- - 핵심 화면 N개 자동 캡처 (chrome-devtools MCP 또는 Playwright)
33
- - 이전 baseline과 diff (해시 → pixelmatch → 시각 비교 단계적)
34
- - 에이전트 1차 판정 (REGRESSION / CHANGED / PASS)
35
- - `docs/visual-review-<phase>.md` 보고서 → 사용자 승인 게이트
36
-
37
- `docs/visual-pages.json` 부재 시 skill 첫 실행에서 핵심 화면 목록 질의. `data`/`tooling`/`executive` Track은 skip.
38
-
39
- ## Bug Fix Mode
40
-
41
- 버그 수정 시 Prove-It 패턴:
42
- 1. 버그를 재현하는 테스트 작성
43
- 2. 테스트가 실패하는지 확인 (버그 존재 증명)
44
- 3. 수정 구현
45
- 4. 테스트가 통과하는지 확인
46
- 5. 가드 테스트로 유지
47
-
48
- ## Gate
49
-
50
- 모든 테스트 PASS + 커버리지 기준 충족 시 완료.
51
-
52
- ## Gate Status Update
53
-
54
- 이 단계가 성공적으로 완료되면 `.claude/gate-status.json`의 `verify.completed`를 `true`로, `verify.timestamp`를 현재 시각으로 업데이트한다.
55
-
56
- ```bash
57
- jq '.verify.completed = true | .verify.timestamp = now | .verify.timestamp = (now | strftime("%Y-%m-%dT%H:%M:%SZ"))' .claude/gate-status.json > /tmp/gate-tmp.json && mv /tmp/gate-tmp.json .claude/gate-status.json
58
- ```
@@ -1,101 +0,0 @@
1
- #!/bin/bash
2
- # ============================================================
3
- # agentshield-gate.sh — PreToolUse Skill hook (uzys:ship 차단)
4
- #
5
- # 목적: /uzys:ship Skill 실행 전 ECC AgentShield 보안 스캔 실행.
6
- # CRITICAL 발견 + .agentshield-ignore 미매칭 시 exit 2.
7
- #
8
- # 입력: PreToolUse stdin JSON (Skill hook)
9
- # 출력: stderr 경고 + exit 2 (차단) 또는 exit 0 (통과)
10
- #
11
- # 활성화 조건:
12
- # 1. 이 hook이 settings.json Skill matcher에 등록
13
- # 2. npx 명령 사용 가능 (Node.js 환경)
14
- #
15
- # False-positive 허용:
16
- # .agentshield-ignore 파일 — 한 줄에 하나의 정규식.
17
- # 매칭되는 finding은 CRITICAL이어도 무시.
18
- # ============================================================
19
- set -u
20
-
21
- # Skill 이름 파싱 — uzys:ship 만 대상
22
- INPUT=$(cat 2>/dev/null || echo "{}")
23
- SKILL_NAME=""
24
- if command -v jq &>/dev/null; then
25
- SKILL_NAME=$(echo "$INPUT" | jq -r '.tool_input.skill // empty' 2>/dev/null || echo "")
26
- else
27
- SKILL_NAME=$(echo "$INPUT" | grep -oE '"skill"[[:space:]]*:[[:space:]]*"[^"]*"' | sed -E 's/.*"([^"]*)"$/\1/')
28
- fi
29
-
30
- # 대상 아니면 즉시 통과
31
- case "$SKILL_NAME" in
32
- uzys:ship) ;;
33
- *) exit 0 ;;
34
- esac
35
-
36
- PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
37
- IGNORE_FILE="$PROJECT_DIR/.agentshield-ignore"
38
- SCAN_LOG="/tmp/agentshield-scan-$$.log"
39
-
40
- cd "$PROJECT_DIR" || exit 0
41
-
42
- # npx ecc-agentshield 실행 (타임아웃 안전 장치 없음 — ship 시점이라 사용자 대기 허용)
43
- if ! command -v npx &>/dev/null; then
44
- echo "[agentshield-gate] npx not found — scan skipped (manual review required)" >&2
45
- exit 0
46
- fi
47
-
48
- npx ecc-agentshield@1.4.0 scan > "$SCAN_LOG" 2>&1 || true
49
-
50
- # CRITICAL 섹션에서 finding 라인 추출
51
- CRITICAL_FINDINGS=$(awk '
52
- /● CRITICAL/ { in_crit=1; next }
53
- /● HIGH|● MEDIUM|● LOW|● INFO/ { in_crit=0 }
54
- in_crit && /^[[:space:]]*●/ { print }
55
- ' "$SCAN_LOG")
56
-
57
- if [ -z "$CRITICAL_FINDINGS" ]; then
58
- rm -f "$SCAN_LOG"
59
- echo "[agentshield-gate] No CRITICAL findings. Ship allowed." >&2
60
- exit 0
61
- fi
62
-
63
- # ignore 파일 매칭
64
- FILTERED_FINDINGS=""
65
- while IFS= read -r line; do
66
- [ -z "$line" ] && continue
67
- MATCHED=false
68
- if [ -f "$IGNORE_FILE" ]; then
69
- while IFS= read -r pattern; do
70
- # 빈 라인 / 주석 skip
71
- case "$pattern" in
72
- ""|"#"*) continue ;;
73
- esac
74
- # v26.11.2 — grep -F (fixed string) — `.*` 같은 regex로 모든 finding bypass 차단 (M4)
75
- if echo "$line" | grep -qF "$pattern"; then
76
- MATCHED=true
77
- break
78
- fi
79
- done < "$IGNORE_FILE"
80
- fi
81
- if [ "$MATCHED" = false ]; then
82
- FILTERED_FINDINGS="$FILTERED_FINDINGS$line"$'\n'
83
- fi
84
- done <<< "$CRITICAL_FINDINGS"
85
-
86
- if [ -z "$FILTERED_FINDINGS" ]; then
87
- rm -f "$SCAN_LOG"
88
- echo "[agentshield-gate] CRITICAL findings all matched .agentshield-ignore. Ship allowed." >&2
89
- exit 0
90
- fi
91
-
92
- # BLOCK
93
- echo "[agentshield-gate] BLOCKED: CRITICAL security findings detected" >&2
94
- echo "" >&2
95
- echo "$FILTERED_FINDINGS" >&2
96
- echo "" >&2
97
- echo "다음 조치 중 하나 필요:" >&2
98
- echo " 1. 실제 취약점 수정" >&2
99
- echo " 2. false-positive인 경우 .agentshield-ignore에 정규식 추가" >&2
100
- echo " 3. 스캔 로그 확인: $SCAN_LOG" >&2
101
- exit 2