@uzysjung/agent-harness 26.83.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 (212) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +279 -0
  3. package/README.md +306 -0
  4. package/dist/chunk-SDVAM5JZ.js +775 -0
  5. package/dist/chunk-SDVAM5JZ.js.map +1 -0
  6. package/dist/index.js +5412 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/trust-tier-drift.js +67 -0
  9. package/dist/trust-tier-drift.js.map +1 -0
  10. package/package.json +53 -0
  11. package/scripts/prune-ecc.sh +310 -0
  12. package/templates/CLAUDE.md +86 -0
  13. package/templates/agents/build-error-resolver.md +114 -0
  14. package/templates/agents/code-reviewer.md +237 -0
  15. package/templates/agents/data-analyst.md +69 -0
  16. package/templates/agents/plan-checker.md +118 -0
  17. package/templates/agents/reviewer.md +128 -0
  18. package/templates/agents/security-reviewer.md +108 -0
  19. package/templates/agents/silent-failure-hunter.md +50 -0
  20. package/templates/agents/strategist.md +86 -0
  21. package/templates/antigravity/AGENTS.md.template +58 -0
  22. package/templates/codex/AGENTS.md.template +94 -0
  23. package/templates/codex/README.md +69 -0
  24. package/templates/codex/config.toml.template +108 -0
  25. package/templates/codex/hooks/README.md +40 -0
  26. package/templates/codex/hooks/gate-check.sh +7 -0
  27. package/templates/codex/hooks/hito-counter.sh +7 -0
  28. package/templates/codex/hooks/session-start.sh +7 -0
  29. package/templates/codex/hooks/uncommitted-check.sh +7 -0
  30. package/templates/codex/skills/uzys-build/SKILL.md +24 -0
  31. package/templates/codex/skills/uzys-plan/SKILL.md +24 -0
  32. package/templates/codex/skills/uzys-review/SKILL.md +24 -0
  33. package/templates/codex/skills/uzys-ship/SKILL.md +24 -0
  34. package/templates/codex/skills/uzys-spec/SKILL.md +28 -0
  35. package/templates/codex/skills/uzys-test/SKILL.md +24 -0
  36. package/templates/commands/ecc/checkpoint.md +32 -0
  37. package/templates/commands/ecc/e2e.md +105 -0
  38. package/templates/commands/ecc/eval.md +88 -0
  39. package/templates/commands/ecc/evolve.md +7 -0
  40. package/templates/commands/ecc/harness-audit.md +73 -0
  41. package/templates/commands/ecc/instinct-status.md +8 -0
  42. package/templates/commands/ecc/promote.md +10 -0
  43. package/templates/commands/ecc/security-scan.md +10 -0
  44. package/templates/commands/uzys/auto.md +190 -0
  45. package/templates/commands/uzys/build.md +42 -0
  46. package/templates/commands/uzys/plan.md +55 -0
  47. package/templates/commands/uzys/review.md +44 -0
  48. package/templates/commands/uzys/ship.md +49 -0
  49. package/templates/commands/uzys/spec.md +93 -0
  50. package/templates/commands/uzys/test.md +58 -0
  51. package/templates/docs/PLAN.template.md +102 -0
  52. package/templates/hooks/agentshield-gate.sh +101 -0
  53. package/templates/hooks/checkpoint-snapshot.sh +115 -0
  54. package/templates/hooks/gate-check.sh +138 -0
  55. package/templates/hooks/hito-counter.sh +26 -0
  56. package/templates/hooks/karpathy-gate.sh +59 -0
  57. package/templates/hooks/mcp-pre-exec.sh +104 -0
  58. package/templates/hooks/protect-files.sh +41 -0
  59. package/templates/hooks/session-start.sh +40 -0
  60. package/templates/hooks/spec-drift-check.sh +86 -0
  61. package/templates/mcp-allowlist.example +24 -0
  62. package/templates/mcp.json +20 -0
  63. package/templates/opencode/.opencode/commands/uzys-build.md +22 -0
  64. package/templates/opencode/.opencode/commands/uzys-plan.md +22 -0
  65. package/templates/opencode/.opencode/commands/uzys-review.md +22 -0
  66. package/templates/opencode/.opencode/commands/uzys-ship.md +22 -0
  67. package/templates/opencode/.opencode/commands/uzys-spec.md +28 -0
  68. package/templates/opencode/.opencode/commands/uzys-test.md +22 -0
  69. package/templates/opencode/.opencode/plugins/uzys-harness.ts +146 -0
  70. package/templates/opencode/AGENTS.md.template +98 -0
  71. package/templates/opencode/README.md +34 -0
  72. package/templates/opencode/opencode.json.template +42 -0
  73. package/templates/project-claude/_base.md +23 -0
  74. package/templates/project-claude/fragments/csr-fastapi/active-rules.md +13 -0
  75. package/templates/project-claude/fragments/csr-fastapi/agents.md +5 -0
  76. package/templates/project-claude/fragments/csr-fastapi/boundaries.md +18 -0
  77. package/templates/project-claude/fragments/csr-fastapi/commands.md +6 -0
  78. package/templates/project-claude/fragments/csr-fastapi/plugins.md +2 -0
  79. package/templates/project-claude/fragments/csr-fastapi/skills.md +5 -0
  80. package/templates/project-claude/fragments/csr-fastapi/stack.md +6 -0
  81. package/templates/project-claude/fragments/csr-fastapi/tagline.md +1 -0
  82. package/templates/project-claude/fragments/csr-fastapi/workflow.md +8 -0
  83. package/templates/project-claude/fragments/csr-fastify/active-rules.md +13 -0
  84. package/templates/project-claude/fragments/csr-fastify/agents.md +5 -0
  85. package/templates/project-claude/fragments/csr-fastify/boundaries.md +18 -0
  86. package/templates/project-claude/fragments/csr-fastify/commands.md +6 -0
  87. package/templates/project-claude/fragments/csr-fastify/plugins.md +2 -0
  88. package/templates/project-claude/fragments/csr-fastify/skills.md +5 -0
  89. package/templates/project-claude/fragments/csr-fastify/stack.md +6 -0
  90. package/templates/project-claude/fragments/csr-fastify/tagline.md +1 -0
  91. package/templates/project-claude/fragments/csr-fastify/workflow.md +8 -0
  92. package/templates/project-claude/fragments/csr-supabase/active-rules.md +12 -0
  93. package/templates/project-claude/fragments/csr-supabase/agents.md +5 -0
  94. package/templates/project-claude/fragments/csr-supabase/boundaries.md +19 -0
  95. package/templates/project-claude/fragments/csr-supabase/commands.md +6 -0
  96. package/templates/project-claude/fragments/csr-supabase/plugins.md +4 -0
  97. package/templates/project-claude/fragments/csr-supabase/skills.md +7 -0
  98. package/templates/project-claude/fragments/csr-supabase/stack.md +6 -0
  99. package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +21 -0
  100. package/templates/project-claude/fragments/csr-supabase/tagline.md +1 -0
  101. package/templates/project-claude/fragments/csr-supabase/workflow.md +8 -0
  102. package/templates/project-claude/fragments/data/active-rules.md +10 -0
  103. package/templates/project-claude/fragments/data/agents.md +6 -0
  104. package/templates/project-claude/fragments/data/boundaries.md +20 -0
  105. package/templates/project-claude/fragments/data/commands.md +6 -0
  106. package/templates/project-claude/fragments/data/plugins.md +2 -0
  107. package/templates/project-claude/fragments/data/skills.md +3 -0
  108. package/templates/project-claude/fragments/data/stack.md +7 -0
  109. package/templates/project-claude/fragments/data/tagline.md +1 -0
  110. package/templates/project-claude/fragments/data/workflow.md +9 -0
  111. package/templates/project-claude/fragments/executive/active-rules.md +6 -0
  112. package/templates/project-claude/fragments/executive/agents.md +6 -0
  113. package/templates/project-claude/fragments/executive/boundaries.md +17 -0
  114. package/templates/project-claude/fragments/executive/commands.md +11 -0
  115. package/templates/project-claude/fragments/executive/plugins.md +1 -0
  116. package/templates/project-claude/fragments/executive/skills.md +7 -0
  117. package/templates/project-claude/fragments/executive/stack.md +4 -0
  118. package/templates/project-claude/fragments/executive/tagline.md +1 -0
  119. package/templates/project-claude/fragments/executive/workflow.md +10 -0
  120. package/templates/project-claude/fragments/growth-marketing/active-rules.md +7 -0
  121. package/templates/project-claude/fragments/growth-marketing/agents.md +6 -0
  122. package/templates/project-claude/fragments/growth-marketing/boundaries.md +17 -0
  123. package/templates/project-claude/fragments/growth-marketing/commands.md +11 -0
  124. package/templates/project-claude/fragments/growth-marketing/plugins.md +9 -0
  125. package/templates/project-claude/fragments/growth-marketing/skills.md +8 -0
  126. package/templates/project-claude/fragments/growth-marketing/stack.md +7 -0
  127. package/templates/project-claude/fragments/growth-marketing/tagline.md +1 -0
  128. package/templates/project-claude/fragments/growth-marketing/workflow.md +11 -0
  129. package/templates/project-claude/fragments/project-management/active-rules.md +7 -0
  130. package/templates/project-claude/fragments/project-management/agents.md +6 -0
  131. package/templates/project-claude/fragments/project-management/boundaries.md +16 -0
  132. package/templates/project-claude/fragments/project-management/commands.md +10 -0
  133. package/templates/project-claude/fragments/project-management/plugins.md +6 -0
  134. package/templates/project-claude/fragments/project-management/skills.md +5 -0
  135. package/templates/project-claude/fragments/project-management/stack.md +4 -0
  136. package/templates/project-claude/fragments/project-management/tagline.md +1 -0
  137. package/templates/project-claude/fragments/project-management/workflow.md +12 -0
  138. package/templates/project-claude/fragments/ssr-htmx/active-rules.md +11 -0
  139. package/templates/project-claude/fragments/ssr-htmx/agents.md +5 -0
  140. package/templates/project-claude/fragments/ssr-htmx/boundaries.md +20 -0
  141. package/templates/project-claude/fragments/ssr-htmx/commands.md +6 -0
  142. package/templates/project-claude/fragments/ssr-htmx/plugins.md +2 -0
  143. package/templates/project-claude/fragments/ssr-htmx/skills.md +3 -0
  144. package/templates/project-claude/fragments/ssr-htmx/stack.md +6 -0
  145. package/templates/project-claude/fragments/ssr-htmx/tagline.md +1 -0
  146. package/templates/project-claude/fragments/ssr-htmx/workflow.md +8 -0
  147. package/templates/project-claude/fragments/ssr-nextjs/active-rules.md +12 -0
  148. package/templates/project-claude/fragments/ssr-nextjs/agents.md +5 -0
  149. package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +20 -0
  150. package/templates/project-claude/fragments/ssr-nextjs/commands.md +6 -0
  151. package/templates/project-claude/fragments/ssr-nextjs/plugins.md +2 -0
  152. package/templates/project-claude/fragments/ssr-nextjs/skills.md +5 -0
  153. package/templates/project-claude/fragments/ssr-nextjs/stack.md +5 -0
  154. package/templates/project-claude/fragments/ssr-nextjs/tagline.md +1 -0
  155. package/templates/project-claude/fragments/ssr-nextjs/workflow.md +8 -0
  156. package/templates/project-claude/fragments/tooling/active-rules.md +11 -0
  157. package/templates/project-claude/fragments/tooling/agents.md +5 -0
  158. package/templates/project-claude/fragments/tooling/boundaries.md +17 -0
  159. package/templates/project-claude/fragments/tooling/commands.md +4 -0
  160. package/templates/project-claude/fragments/tooling/skills.md +4 -0
  161. package/templates/project-claude/fragments/tooling/stack.md +5 -0
  162. package/templates/project-claude/fragments/tooling/tagline.md +1 -0
  163. package/templates/project-claude/fragments/tooling/workflow.md +5 -0
  164. package/templates/rules/api-contract.md +33 -0
  165. package/templates/rules/change-management.md +80 -0
  166. package/templates/rules/cli-development.md +39 -0
  167. package/templates/rules/code-style.md +23 -0
  168. package/templates/rules/data-analysis.md +61 -0
  169. package/templates/rules/database.md +29 -0
  170. package/templates/rules/design-workflow.md +17 -0
  171. package/templates/rules/error-handling.md +23 -0
  172. package/templates/rules/gates-taxonomy.md +21 -0
  173. package/templates/rules/git-policy.md +102 -0
  174. package/templates/rules/htmx.md +42 -0
  175. package/templates/rules/nextjs.md +35 -0
  176. package/templates/rules/playwright-launch.md +66 -0
  177. package/templates/rules/pyside6.md +59 -0
  178. package/templates/rules/shadcn.md +33 -0
  179. package/templates/rules/ship-checklist.md +24 -0
  180. package/templates/rules/tauri.md +40 -0
  181. package/templates/rules/test-policy.md +62 -0
  182. package/templates/settings.json +71 -0
  183. package/templates/skills/agent-introspection-debugging/SKILL.md +153 -0
  184. package/templates/skills/continuous-learning-v2/SKILL.md +365 -0
  185. package/templates/skills/continuous-learning-v2/config.json +8 -0
  186. package/templates/skills/continuous-learning-v2/hooks/observe.sh +428 -0
  187. package/templates/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
  188. package/templates/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
  189. package/templates/skills/deep-research/SKILL.md +155 -0
  190. package/templates/skills/deep-research/agents/openai.yaml +7 -0
  191. package/templates/skills/e2e-testing/SKILL.md +326 -0
  192. package/templates/skills/e2e-testing/agents/openai.yaml +7 -0
  193. package/templates/skills/eval-harness/SKILL.md +279 -0
  194. package/templates/skills/eval-harness/agents/openai.yaml +7 -0
  195. package/templates/skills/gh-issue-workflow/ISSUE.template.md +58 -0
  196. package/templates/skills/gh-issue-workflow/SKILL.md +184 -0
  197. package/templates/skills/investor-materials/SKILL.md +96 -0
  198. package/templates/skills/investor-outreach/SKILL.md +91 -0
  199. package/templates/skills/market-research/SKILL.md +75 -0
  200. package/templates/skills/market-research/agents/openai.yaml +7 -0
  201. package/templates/skills/nextjs-turbopack/SKILL.md +44 -0
  202. package/templates/skills/north-star/NORTH_STAR.template.md +114 -0
  203. package/templates/skills/north-star/SKILL.md +103 -0
  204. package/templates/skills/python-patterns/SKILL.md +750 -0
  205. package/templates/skills/python-testing/SKILL.md +816 -0
  206. package/templates/skills/spec-scaling/SKILL.md +89 -0
  207. package/templates/skills/strategic-compact/SKILL.md +131 -0
  208. package/templates/skills/strategic-compact/suggest-compact.sh +54 -0
  209. package/templates/skills/ui-visual-review/SKILL.md +154 -0
  210. package/templates/skills/verification-loop/SKILL.md +126 -0
  211. package/templates/skills/verification-loop/agents/openai.yaml +7 -0
  212. package/templates/track-mcp-map.tsv +15 -0
@@ -0,0 +1,44 @@
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
+ ```
@@ -0,0 +1,49 @@
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
+ ```
@@ -0,0 +1,93 @@
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
+ ```
@@ -0,0 +1,58 @@
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
+ ```
@@ -0,0 +1,102 @@
1
+ # Plan — [Project Name]
2
+
3
+ > 6개월+ 프로젝트 또는 복수 Phase가 있는 경우 사용. 1-2주 단순 작업은 todo.md만으로 충분.
4
+ > 본 템플릿은 GoalTrack의 `docs/plan.md` 패턴을 일반화한 것.
5
+
6
+ ---
7
+
8
+ ## 0. Sprint Contract
9
+
10
+ - **목표 (이번 sprint에서 달성할 outcome)**: [한 문장]
11
+ - **포함 (scope)**: [3-5개 bullet]
12
+ - **제외 (out of scope)**: [3-5개 bullet — Non-Goals]
13
+ - **완료 기준 (Definition of Done)**: [측정 가능한 조건]
14
+ - **제약 조건**: [기간, 리소스, 의존성]
15
+
16
+ ---
17
+
18
+ ## 1. Phase Overview
19
+
20
+ 전체 프로젝트를 Phase로 나눈 큰 그림. 본 sprint가 어느 Phase에 속하는지 명시.
21
+
22
+ | Phase | 이름 | 목표 | 진입 조건 | 완료 조건 |
23
+ |-------|------|------|----------|----------|
24
+ | P1 | [이름] | [한 문장] | (시작) | [측정 가능 기준] |
25
+ | P2 | [이름] | [한 문장] | P1 완료 | [기준] |
26
+ | P3 | [이름] | [한 문장] | P2 완료 + [추가 조건] | [기준] |
27
+
28
+ ---
29
+
30
+ ## 2. Milestone × Dependency Graph
31
+
32
+ 각 Phase 내부를 Milestone으로 분해 + 의존성 표기.
33
+
34
+ ### 표기 규약
35
+ - `M1 → M2`: M1 완료 후 M2 시작 (직렬)
36
+ - `M1 ∥ M2`: 동시 진행 가능 (병렬)
37
+ - `M1 ⇒ M2`: M1의 산출물이 M2의 입력 (강한 의존)
38
+ - `M1 → {M2, M3} → M4`: M1 후 M2/M3 병렬 → 둘 다 끝나면 M4
39
+
40
+ ### 예시 — Phase 1 분해
41
+
42
+ ```
43
+ M1 (foundation) ⇒ {M2 (auth), M3 (data layer)} → M4 (UI integration) → M5 (E2E)
44
+
45
+ M6 (CLI) ∥ M5
46
+ ```
47
+
48
+ | Milestone | 산출물 | 의존성 | 예상 기간 | Status |
49
+ |-----------|--------|--------|---------|--------|
50
+ | M1 | [foundation 산출물] | (없음) | 3d | ⬜ |
51
+ | M2 | [auth 산출물] | M1 | 5d | ⬜ |
52
+ | M3 | [data layer] | M1 | 4d | ⬜ |
53
+ | M4 | [UI integration] | M2, M3 | 3d | ⬜ |
54
+ | M5 | [E2E suite] | M4 | 2d | ⬜ |
55
+ | M6 | [CLI] | M4 | 2d | ⬜ |
56
+
57
+ ### 임계 경로 (Critical Path)
58
+ 가장 긴 직렬 체인 — 일정 risk가 가장 큰 경로.
59
+ > M1 → M2 → M4 → M5 = 13일
60
+
61
+ 병렬 경로 (M3, M6) 단축은 임계 경로 단축 안 됨. M2/M4 단축이 우선.
62
+
63
+ ---
64
+
65
+ ## 3. Per-Milestone Detail
66
+
67
+ 각 Milestone의 task breakdown은 `docs/todo.md`에 위임.
68
+ 본 문서에는 outcome + AC만.
69
+
70
+ ### M1 — [이름]
71
+ - **Outcome**: [완료 시 무엇이 가능한가]
72
+ - **AC** (Acceptance Criteria):
73
+ - [ ] [측정 가능 조건 1]
74
+ - [ ] [측정 가능 조건 2]
75
+ - **References**: [SPEC §, ADR, 외부 문서]
76
+
77
+ (M2~Mn 동일 구조)
78
+
79
+ ---
80
+
81
+ ## 4. Risk & Mitigation
82
+
83
+ | Risk | Likelihood | Impact | Mitigation | Owner |
84
+ |------|----------|--------|----------|------|
85
+ | [예: 외부 API rate limit] | M | H | mock + cache layer | [name] |
86
+ | [예: 마이그레이션 실패] | L | H | savepoint + rollback 스크립트 | [name] |
87
+
88
+ ---
89
+
90
+ ## 5. Open Questions
91
+
92
+ 해결되지 않은 의사결정. SPEC/NORTH_STAR 갱신 필요할 수도.
93
+
94
+ - [ ] [질문 1] — 결정자: [name], 마감: [date]
95
+ - [ ] [질문 2]
96
+
97
+ ---
98
+
99
+ ## 6. Changelog
100
+
101
+ - YYYY-MM-DD: 초안
102
+ - (이후 갱신 기록)
@@ -0,0 +1,101 @@
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
@@ -0,0 +1,115 @@
1
+ #!/bin/bash
2
+ # ============================================================
3
+ # checkpoint-snapshot.sh — PostToolUse hook
4
+ #
5
+ # 목적: tool call count가 threshold 초과 시 현재 세션 스냅샷을
6
+ # docs/checkpoints/ 에 자동 저장하고 /compact 경고 flag 생성.
7
+ #
8
+ # 제약: Claude Code hook은 /compact 슬래시 커맨드를 직접 호출할 수
9
+ # 없음. 따라서 "자동 compact"는 불가능 — 대신 checkpoint 저장 +
10
+ # session-start 경고로 사용자 수동 /compact 유도.
11
+ #
12
+ # Exit codes: 항상 0 (async hook, 차단 금지)
13
+ # ============================================================
14
+ set -u
15
+
16
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
17
+ THRESHOLD="${CHECKPOINT_THRESHOLD:-40}"
18
+ SESSION_ID="${CLAUDE_SESSION_ID:-${PPID:-default}}"
19
+ COUNTER_FILE="/tmp/claude-checkpoint-count-${SESSION_ID}"
20
+ CHECKPOINT_DIR="$PROJECT_DIR/docs/checkpoints"
21
+ WARNING_FLAG="$PROJECT_DIR/.claude/compact-warning.flag"
22
+
23
+ # Counter increment
24
+ if [ -f "$COUNTER_FILE" ]; then
25
+ count=$(cat "$COUNTER_FILE" 2>/dev/null || echo 0)
26
+ count=$((count + 1))
27
+ echo "$count" > "$COUNTER_FILE"
28
+ else
29
+ count=1
30
+ echo "$count" > "$COUNTER_FILE"
31
+ fi
32
+
33
+ # Threshold 미도달이면 종료
34
+ if [ "$count" -lt "$THRESHOLD" ]; then
35
+ exit 0
36
+ fi
37
+
38
+ # threshold 초과 → checkpoint 저장
39
+ mkdir -p "$CHECKPOINT_DIR" 2>/dev/null || exit 0
40
+
41
+ TS=$(date +%Y%m%d-%H%M%S)
42
+ CHECKPOINT_FILE="$CHECKPOINT_DIR/${TS}.md"
43
+
44
+ # Git 정보 수집 (git 미존재 환경 안전)
45
+ GIT_BRANCH="(unknown)"
46
+ GIT_HEAD="(unknown)"
47
+ GIT_STATUS="(unknown)"
48
+ if command -v git &>/dev/null && [ -d "$PROJECT_DIR/.git" ]; then
49
+ GIT_BRANCH=$(cd "$PROJECT_DIR" && git branch --show-current 2>/dev/null || echo "(detached)")
50
+ GIT_HEAD=$(cd "$PROJECT_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "(no commits)")
51
+ GIT_STATUS=$(cd "$PROJECT_DIR" && git status --short 2>/dev/null | head -20)
52
+ fi
53
+
54
+ # Gate status 수집
55
+ GATE_SUMMARY="(no gate-status.json)"
56
+ GATE_FILE="$PROJECT_DIR/.claude/gate-status.json"
57
+ if [ -f "$GATE_FILE" ] && command -v jq &>/dev/null; then
58
+ GATE_SUMMARY=$(jq -r '
59
+ "define: \(.define.completed // false)\n" +
60
+ "plan: \(.plan.completed // false)\n" +
61
+ "build: \(.build.completed // false)\n" +
62
+ "verify: \(.verify.completed // false)\n" +
63
+ "review: \(.review.completed // false)\n" +
64
+ "ship: \(.ship.completed // false)"
65
+ ' "$GATE_FILE" 2>/dev/null || echo "(parse error)")
66
+ fi
67
+
68
+ # Checkpoint 파일 작성
69
+ cat > "$CHECKPOINT_FILE" <<EOF
70
+ # Checkpoint — $TS
71
+
72
+ > 자동 생성 by checkpoint-snapshot.sh (tool count $count >= $THRESHOLD).
73
+ > 사용자 수동 \`/compact\` 실행 권장. 이 파일은 compact 후 컨텍스트 복원 힌트로 사용.
74
+
75
+ ## Git
76
+
77
+ - Branch: $GIT_BRANCH
78
+ - HEAD: $GIT_HEAD
79
+
80
+ ### Changed Files
81
+ \`\`\`
82
+ $GIT_STATUS
83
+ \`\`\`
84
+
85
+ ## Gate Status
86
+
87
+ \`\`\`
88
+ $GATE_SUMMARY
89
+ \`\`\`
90
+
91
+ ## Session ID
92
+ - \`$SESSION_ID\`
93
+ - Tool count at snapshot: $count
94
+
95
+ ## Recovery Hint
96
+
97
+ compact 후 다음을 확인:
98
+ 1. \`git status\` — 변경 사항 복원
99
+ 2. \`docs/SPEC.md\` + \`docs/todo.md\` — 현재 작업 컨텍스트
100
+ 3. 위 Gate Status — 어느 단계에 있었는지
101
+ 4. 최근 checkpoint: \`ls -t docs/checkpoints/ | head -5\`
102
+ EOF
103
+
104
+ # Counter 리셋
105
+ echo "0" > "$COUNTER_FILE"
106
+
107
+ # Warning flag 생성 (session-start hook이 감지해서 경고 재표시)
108
+ mkdir -p "$(dirname "$WARNING_FLAG")"
109
+ echo "$TS" > "$WARNING_FLAG"
110
+
111
+ # stderr에 즉시 경고 (async이므로 차단 안 됨)
112
+ echo "[checkpoint-snapshot] Tool count $count reached. Saved: $CHECKPOINT_FILE" >&2
113
+ echo "[checkpoint-snapshot] Consider running /compact to reclaim context window." >&2
114
+
115
+ exit 0