@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.
- package/LICENSE +21 -0
- package/README.ko.md +279 -0
- package/README.md +306 -0
- package/dist/chunk-SDVAM5JZ.js +775 -0
- package/dist/chunk-SDVAM5JZ.js.map +1 -0
- package/dist/index.js +5412 -0
- package/dist/index.js.map +1 -0
- package/dist/trust-tier-drift.js +67 -0
- package/dist/trust-tier-drift.js.map +1 -0
- package/package.json +53 -0
- package/scripts/prune-ecc.sh +310 -0
- package/templates/CLAUDE.md +86 -0
- package/templates/agents/build-error-resolver.md +114 -0
- package/templates/agents/code-reviewer.md +237 -0
- package/templates/agents/data-analyst.md +69 -0
- package/templates/agents/plan-checker.md +118 -0
- package/templates/agents/reviewer.md +128 -0
- package/templates/agents/security-reviewer.md +108 -0
- package/templates/agents/silent-failure-hunter.md +50 -0
- package/templates/agents/strategist.md +86 -0
- package/templates/antigravity/AGENTS.md.template +58 -0
- package/templates/codex/AGENTS.md.template +94 -0
- package/templates/codex/README.md +69 -0
- package/templates/codex/config.toml.template +108 -0
- package/templates/codex/hooks/README.md +40 -0
- package/templates/codex/hooks/gate-check.sh +7 -0
- package/templates/codex/hooks/hito-counter.sh +7 -0
- package/templates/codex/hooks/session-start.sh +7 -0
- package/templates/codex/hooks/uncommitted-check.sh +7 -0
- package/templates/codex/skills/uzys-build/SKILL.md +24 -0
- package/templates/codex/skills/uzys-plan/SKILL.md +24 -0
- package/templates/codex/skills/uzys-review/SKILL.md +24 -0
- package/templates/codex/skills/uzys-ship/SKILL.md +24 -0
- package/templates/codex/skills/uzys-spec/SKILL.md +28 -0
- package/templates/codex/skills/uzys-test/SKILL.md +24 -0
- package/templates/commands/ecc/checkpoint.md +32 -0
- package/templates/commands/ecc/e2e.md +105 -0
- package/templates/commands/ecc/eval.md +88 -0
- package/templates/commands/ecc/evolve.md +7 -0
- package/templates/commands/ecc/harness-audit.md +73 -0
- package/templates/commands/ecc/instinct-status.md +8 -0
- package/templates/commands/ecc/promote.md +10 -0
- package/templates/commands/ecc/security-scan.md +10 -0
- package/templates/commands/uzys/auto.md +190 -0
- package/templates/commands/uzys/build.md +42 -0
- package/templates/commands/uzys/plan.md +55 -0
- package/templates/commands/uzys/review.md +44 -0
- package/templates/commands/uzys/ship.md +49 -0
- package/templates/commands/uzys/spec.md +93 -0
- package/templates/commands/uzys/test.md +58 -0
- package/templates/docs/PLAN.template.md +102 -0
- package/templates/hooks/agentshield-gate.sh +101 -0
- package/templates/hooks/checkpoint-snapshot.sh +115 -0
- package/templates/hooks/gate-check.sh +138 -0
- package/templates/hooks/hito-counter.sh +26 -0
- package/templates/hooks/karpathy-gate.sh +59 -0
- package/templates/hooks/mcp-pre-exec.sh +104 -0
- package/templates/hooks/protect-files.sh +41 -0
- package/templates/hooks/session-start.sh +40 -0
- package/templates/hooks/spec-drift-check.sh +86 -0
- package/templates/mcp-allowlist.example +24 -0
- package/templates/mcp.json +20 -0
- package/templates/opencode/.opencode/commands/uzys-build.md +22 -0
- package/templates/opencode/.opencode/commands/uzys-plan.md +22 -0
- package/templates/opencode/.opencode/commands/uzys-review.md +22 -0
- package/templates/opencode/.opencode/commands/uzys-ship.md +22 -0
- package/templates/opencode/.opencode/commands/uzys-spec.md +28 -0
- package/templates/opencode/.opencode/commands/uzys-test.md +22 -0
- package/templates/opencode/.opencode/plugins/uzys-harness.ts +146 -0
- package/templates/opencode/AGENTS.md.template +98 -0
- package/templates/opencode/README.md +34 -0
- package/templates/opencode/opencode.json.template +42 -0
- package/templates/project-claude/_base.md +23 -0
- package/templates/project-claude/fragments/csr-fastapi/active-rules.md +13 -0
- package/templates/project-claude/fragments/csr-fastapi/agents.md +5 -0
- package/templates/project-claude/fragments/csr-fastapi/boundaries.md +18 -0
- package/templates/project-claude/fragments/csr-fastapi/commands.md +6 -0
- package/templates/project-claude/fragments/csr-fastapi/plugins.md +2 -0
- package/templates/project-claude/fragments/csr-fastapi/skills.md +5 -0
- package/templates/project-claude/fragments/csr-fastapi/stack.md +6 -0
- package/templates/project-claude/fragments/csr-fastapi/tagline.md +1 -0
- package/templates/project-claude/fragments/csr-fastapi/workflow.md +8 -0
- package/templates/project-claude/fragments/csr-fastify/active-rules.md +13 -0
- package/templates/project-claude/fragments/csr-fastify/agents.md +5 -0
- package/templates/project-claude/fragments/csr-fastify/boundaries.md +18 -0
- package/templates/project-claude/fragments/csr-fastify/commands.md +6 -0
- package/templates/project-claude/fragments/csr-fastify/plugins.md +2 -0
- package/templates/project-claude/fragments/csr-fastify/skills.md +5 -0
- package/templates/project-claude/fragments/csr-fastify/stack.md +6 -0
- package/templates/project-claude/fragments/csr-fastify/tagline.md +1 -0
- package/templates/project-claude/fragments/csr-fastify/workflow.md +8 -0
- package/templates/project-claude/fragments/csr-supabase/active-rules.md +12 -0
- package/templates/project-claude/fragments/csr-supabase/agents.md +5 -0
- package/templates/project-claude/fragments/csr-supabase/boundaries.md +19 -0
- package/templates/project-claude/fragments/csr-supabase/commands.md +6 -0
- package/templates/project-claude/fragments/csr-supabase/plugins.md +4 -0
- package/templates/project-claude/fragments/csr-supabase/skills.md +7 -0
- package/templates/project-claude/fragments/csr-supabase/stack.md +6 -0
- package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +21 -0
- package/templates/project-claude/fragments/csr-supabase/tagline.md +1 -0
- package/templates/project-claude/fragments/csr-supabase/workflow.md +8 -0
- package/templates/project-claude/fragments/data/active-rules.md +10 -0
- package/templates/project-claude/fragments/data/agents.md +6 -0
- package/templates/project-claude/fragments/data/boundaries.md +20 -0
- package/templates/project-claude/fragments/data/commands.md +6 -0
- package/templates/project-claude/fragments/data/plugins.md +2 -0
- package/templates/project-claude/fragments/data/skills.md +3 -0
- package/templates/project-claude/fragments/data/stack.md +7 -0
- package/templates/project-claude/fragments/data/tagline.md +1 -0
- package/templates/project-claude/fragments/data/workflow.md +9 -0
- package/templates/project-claude/fragments/executive/active-rules.md +6 -0
- package/templates/project-claude/fragments/executive/agents.md +6 -0
- package/templates/project-claude/fragments/executive/boundaries.md +17 -0
- package/templates/project-claude/fragments/executive/commands.md +11 -0
- package/templates/project-claude/fragments/executive/plugins.md +1 -0
- package/templates/project-claude/fragments/executive/skills.md +7 -0
- package/templates/project-claude/fragments/executive/stack.md +4 -0
- package/templates/project-claude/fragments/executive/tagline.md +1 -0
- package/templates/project-claude/fragments/executive/workflow.md +10 -0
- package/templates/project-claude/fragments/growth-marketing/active-rules.md +7 -0
- package/templates/project-claude/fragments/growth-marketing/agents.md +6 -0
- package/templates/project-claude/fragments/growth-marketing/boundaries.md +17 -0
- package/templates/project-claude/fragments/growth-marketing/commands.md +11 -0
- package/templates/project-claude/fragments/growth-marketing/plugins.md +9 -0
- package/templates/project-claude/fragments/growth-marketing/skills.md +8 -0
- package/templates/project-claude/fragments/growth-marketing/stack.md +7 -0
- package/templates/project-claude/fragments/growth-marketing/tagline.md +1 -0
- package/templates/project-claude/fragments/growth-marketing/workflow.md +11 -0
- package/templates/project-claude/fragments/project-management/active-rules.md +7 -0
- package/templates/project-claude/fragments/project-management/agents.md +6 -0
- package/templates/project-claude/fragments/project-management/boundaries.md +16 -0
- package/templates/project-claude/fragments/project-management/commands.md +10 -0
- package/templates/project-claude/fragments/project-management/plugins.md +6 -0
- package/templates/project-claude/fragments/project-management/skills.md +5 -0
- package/templates/project-claude/fragments/project-management/stack.md +4 -0
- package/templates/project-claude/fragments/project-management/tagline.md +1 -0
- package/templates/project-claude/fragments/project-management/workflow.md +12 -0
- package/templates/project-claude/fragments/ssr-htmx/active-rules.md +11 -0
- package/templates/project-claude/fragments/ssr-htmx/agents.md +5 -0
- package/templates/project-claude/fragments/ssr-htmx/boundaries.md +20 -0
- package/templates/project-claude/fragments/ssr-htmx/commands.md +6 -0
- package/templates/project-claude/fragments/ssr-htmx/plugins.md +2 -0
- package/templates/project-claude/fragments/ssr-htmx/skills.md +3 -0
- package/templates/project-claude/fragments/ssr-htmx/stack.md +6 -0
- package/templates/project-claude/fragments/ssr-htmx/tagline.md +1 -0
- package/templates/project-claude/fragments/ssr-htmx/workflow.md +8 -0
- package/templates/project-claude/fragments/ssr-nextjs/active-rules.md +12 -0
- package/templates/project-claude/fragments/ssr-nextjs/agents.md +5 -0
- package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +20 -0
- package/templates/project-claude/fragments/ssr-nextjs/commands.md +6 -0
- package/templates/project-claude/fragments/ssr-nextjs/plugins.md +2 -0
- package/templates/project-claude/fragments/ssr-nextjs/skills.md +5 -0
- package/templates/project-claude/fragments/ssr-nextjs/stack.md +5 -0
- package/templates/project-claude/fragments/ssr-nextjs/tagline.md +1 -0
- package/templates/project-claude/fragments/ssr-nextjs/workflow.md +8 -0
- package/templates/project-claude/fragments/tooling/active-rules.md +11 -0
- package/templates/project-claude/fragments/tooling/agents.md +5 -0
- package/templates/project-claude/fragments/tooling/boundaries.md +17 -0
- package/templates/project-claude/fragments/tooling/commands.md +4 -0
- package/templates/project-claude/fragments/tooling/skills.md +4 -0
- package/templates/project-claude/fragments/tooling/stack.md +5 -0
- package/templates/project-claude/fragments/tooling/tagline.md +1 -0
- package/templates/project-claude/fragments/tooling/workflow.md +5 -0
- package/templates/rules/api-contract.md +33 -0
- package/templates/rules/change-management.md +80 -0
- package/templates/rules/cli-development.md +39 -0
- package/templates/rules/code-style.md +23 -0
- package/templates/rules/data-analysis.md +61 -0
- package/templates/rules/database.md +29 -0
- package/templates/rules/design-workflow.md +17 -0
- package/templates/rules/error-handling.md +23 -0
- package/templates/rules/gates-taxonomy.md +21 -0
- package/templates/rules/git-policy.md +102 -0
- package/templates/rules/htmx.md +42 -0
- package/templates/rules/nextjs.md +35 -0
- package/templates/rules/playwright-launch.md +66 -0
- package/templates/rules/pyside6.md +59 -0
- package/templates/rules/shadcn.md +33 -0
- package/templates/rules/ship-checklist.md +24 -0
- package/templates/rules/tauri.md +40 -0
- package/templates/rules/test-policy.md +62 -0
- package/templates/settings.json +71 -0
- package/templates/skills/agent-introspection-debugging/SKILL.md +153 -0
- package/templates/skills/continuous-learning-v2/SKILL.md +365 -0
- package/templates/skills/continuous-learning-v2/config.json +8 -0
- package/templates/skills/continuous-learning-v2/hooks/observe.sh +428 -0
- package/templates/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
- package/templates/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/templates/skills/deep-research/SKILL.md +155 -0
- package/templates/skills/deep-research/agents/openai.yaml +7 -0
- package/templates/skills/e2e-testing/SKILL.md +326 -0
- package/templates/skills/e2e-testing/agents/openai.yaml +7 -0
- package/templates/skills/eval-harness/SKILL.md +279 -0
- package/templates/skills/eval-harness/agents/openai.yaml +7 -0
- package/templates/skills/gh-issue-workflow/ISSUE.template.md +58 -0
- package/templates/skills/gh-issue-workflow/SKILL.md +184 -0
- package/templates/skills/investor-materials/SKILL.md +96 -0
- package/templates/skills/investor-outreach/SKILL.md +91 -0
- package/templates/skills/market-research/SKILL.md +75 -0
- package/templates/skills/market-research/agents/openai.yaml +7 -0
- package/templates/skills/nextjs-turbopack/SKILL.md +44 -0
- package/templates/skills/north-star/NORTH_STAR.template.md +114 -0
- package/templates/skills/north-star/SKILL.md +103 -0
- package/templates/skills/python-patterns/SKILL.md +750 -0
- package/templates/skills/python-testing/SKILL.md +816 -0
- package/templates/skills/spec-scaling/SKILL.md +89 -0
- package/templates/skills/strategic-compact/SKILL.md +131 -0
- package/templates/skills/strategic-compact/suggest-compact.sh +54 -0
- package/templates/skills/ui-visual-review/SKILL.md +154 -0
- package/templates/skills/verification-loop/SKILL.md +126 -0
- package/templates/skills/verification-loop/agents/openai.yaml +7 -0
- package/templates/track-mcp-map.tsv +15 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: uzys-test
|
|
3
|
+
description: "Verify phase — TDD 워크플로우와 Track별 커버리지 게이트를 실행한다. Codex 포팅 (원본: .claude/commands/uzys/test.md)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /uzys-test — test Phase (Codex)
|
|
7
|
+
|
|
8
|
+
> **Generated from**: `.claude/commands/uzys/test.md` via `scripts/claude-to-codex.sh` (Phase C)
|
|
9
|
+
> **Slash**: `/uzys-test`
|
|
10
|
+
|
|
11
|
+
## Pre-flight
|
|
12
|
+
|
|
13
|
+
이 skill 호출 전 확인:
|
|
14
|
+
- 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
|
|
15
|
+
- `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
|
|
16
|
+
- 직전 phase 미완료 시 exit 2로 차단됨
|
|
17
|
+
|
|
18
|
+
## Goal
|
|
19
|
+
|
|
20
|
+
{SKILL_BODY_PLACEHOLDER}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
*Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/test.md`로부터 포팅됨.*
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
현재 진행 상태의 스냅샷을 생성한다. 게이트 간 savepoint로 활용.
|
|
2
|
+
|
|
3
|
+
## Process
|
|
4
|
+
|
|
5
|
+
아래 항목을 확인하고 체크포인트를 기록한다:
|
|
6
|
+
|
|
7
|
+
1. **테스트 상태** — 전체/통과/실패 수, 커버리지
|
|
8
|
+
2. **빌드 상태** — 성공 또는 에러
|
|
9
|
+
3. **코드 변경** — `git diff --stat` 요약
|
|
10
|
+
4. **완료된 작업** — 체크리스트
|
|
11
|
+
5. **차단 이슈** — 있으면 기술
|
|
12
|
+
6. **다음 단계** — 남은 작업
|
|
13
|
+
|
|
14
|
+
## Output Format
|
|
15
|
+
|
|
16
|
+
```markdown
|
|
17
|
+
### Checkpoint: [YYYY-MM-DD HH:MM]
|
|
18
|
+
|
|
19
|
+
**Tests**: Total X, Pass Y, Fail Z, Coverage XX%
|
|
20
|
+
**Build**: PASS / FAIL
|
|
21
|
+
**Changes since last checkpoint**: `git diff --stat`
|
|
22
|
+
**Completed**: [x] Task 1, [x] Task 2, [ ] Task 3 (진행 중)
|
|
23
|
+
**Blockers**: [있으면 기술]
|
|
24
|
+
**Next**: 1. Step 1, 2. Step 2
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
- 주요 변경 전 savepoint로
|
|
30
|
+
- Phase 전환 시 진행 상태 기록
|
|
31
|
+
- 롤백 결정 시 참조점
|
|
32
|
+
- `git commit -m "chore: checkpoint [설명]"` 과 함께 사용
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate and run E2E tests with Playwright
|
|
3
|
+
agent: everything-claude-code:e2e-runner
|
|
4
|
+
subtask: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# E2E Command
|
|
8
|
+
|
|
9
|
+
Generate and run end-to-end tests using Playwright: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
## Your Task
|
|
12
|
+
|
|
13
|
+
1. **Analyze user flow** to test
|
|
14
|
+
2. **Create test journey** with Playwright
|
|
15
|
+
3. **Run tests** and capture artifacts
|
|
16
|
+
4. **Report results** with screenshots/videos
|
|
17
|
+
|
|
18
|
+
## Test Structure
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { test, expect } from '@playwright/test'
|
|
22
|
+
|
|
23
|
+
test.describe('Feature: [Name]', () => {
|
|
24
|
+
test.beforeEach(async ({ page }) => {
|
|
25
|
+
// Setup: Navigate, authenticate, prepare state
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('should [expected behavior]', async ({ page }) => {
|
|
29
|
+
// Arrange: Set up test data
|
|
30
|
+
|
|
31
|
+
// Act: Perform user actions
|
|
32
|
+
await page.click('[data-testid="button"]')
|
|
33
|
+
await page.fill('[data-testid="input"]', 'value')
|
|
34
|
+
|
|
35
|
+
// Assert: Verify results
|
|
36
|
+
await expect(page.locator('[data-testid="result"]')).toBeVisible()
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test.afterEach(async ({ page }, testInfo) => {
|
|
40
|
+
// Capture screenshot on failure
|
|
41
|
+
if (testInfo.status !== 'passed') {
|
|
42
|
+
await page.screenshot({ path: `test-results/${testInfo.title}.png` })
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Best Practices
|
|
49
|
+
|
|
50
|
+
### Selectors
|
|
51
|
+
- Prefer `data-testid` attributes
|
|
52
|
+
- Avoid CSS classes (they change)
|
|
53
|
+
- Use semantic selectors (roles, labels)
|
|
54
|
+
|
|
55
|
+
### Waits
|
|
56
|
+
- Use Playwright's auto-waiting
|
|
57
|
+
- Avoid `page.waitForTimeout()`
|
|
58
|
+
- Use `expect().toBeVisible()` for assertions
|
|
59
|
+
|
|
60
|
+
### Test Isolation
|
|
61
|
+
- Each test should be independent
|
|
62
|
+
- Clean up test data after
|
|
63
|
+
- Don't rely on test order
|
|
64
|
+
|
|
65
|
+
## Artifacts to Capture
|
|
66
|
+
|
|
67
|
+
- Screenshots on failure
|
|
68
|
+
- Videos for debugging
|
|
69
|
+
- Trace files for detailed analysis
|
|
70
|
+
- Network logs if relevant
|
|
71
|
+
|
|
72
|
+
## Test Categories
|
|
73
|
+
|
|
74
|
+
1. **Critical User Flows**
|
|
75
|
+
- Authentication (login, logout, signup)
|
|
76
|
+
- Core feature happy paths
|
|
77
|
+
- Payment/checkout flows
|
|
78
|
+
|
|
79
|
+
2. **Edge Cases**
|
|
80
|
+
- Network failures
|
|
81
|
+
- Invalid inputs
|
|
82
|
+
- Session expiry
|
|
83
|
+
|
|
84
|
+
3. **Cross-Browser**
|
|
85
|
+
- Chrome, Firefox, Safari
|
|
86
|
+
- Mobile viewports
|
|
87
|
+
|
|
88
|
+
## Report Format
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
E2E Test Results
|
|
92
|
+
================
|
|
93
|
+
PASS: Passed: X
|
|
94
|
+
FAIL: Failed: Y
|
|
95
|
+
SKIPPED: Skipped: Z
|
|
96
|
+
|
|
97
|
+
Failed Tests:
|
|
98
|
+
- test-name: Error message
|
|
99
|
+
Screenshot: path/to/screenshot.png
|
|
100
|
+
Video: path/to/video.webm
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**TIP**: Run with `--headed` flag for debugging: `npx playwright test --headed`
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run evaluation against acceptance criteria
|
|
3
|
+
agent: everything-claude-code:build
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Eval Command
|
|
7
|
+
|
|
8
|
+
Evaluate implementation against acceptance criteria: $ARGUMENTS
|
|
9
|
+
|
|
10
|
+
## Your Task
|
|
11
|
+
|
|
12
|
+
Run structured evaluation to verify the implementation meets requirements.
|
|
13
|
+
|
|
14
|
+
## Evaluation Framework
|
|
15
|
+
|
|
16
|
+
### Grader Types
|
|
17
|
+
|
|
18
|
+
1. **Binary Grader** - Pass/Fail
|
|
19
|
+
- Does it work? Yes/No
|
|
20
|
+
- Good for: feature completion, bug fixes
|
|
21
|
+
|
|
22
|
+
2. **Scalar Grader** - Score 0-100
|
|
23
|
+
- How well does it work?
|
|
24
|
+
- Good for: performance, quality metrics
|
|
25
|
+
|
|
26
|
+
3. **Rubric Grader** - Category scores
|
|
27
|
+
- Multiple dimensions evaluated
|
|
28
|
+
- Good for: comprehensive review
|
|
29
|
+
|
|
30
|
+
## Evaluation Process
|
|
31
|
+
|
|
32
|
+
### Step 1: Define Criteria
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Acceptance Criteria:
|
|
36
|
+
1. [Criterion 1] - [weight]
|
|
37
|
+
2. [Criterion 2] - [weight]
|
|
38
|
+
3. [Criterion 3] - [weight]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 2: Run Tests
|
|
42
|
+
|
|
43
|
+
For each criterion:
|
|
44
|
+
- Execute relevant test
|
|
45
|
+
- Collect evidence
|
|
46
|
+
- Score result
|
|
47
|
+
|
|
48
|
+
### Step 3: Calculate Score
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Final Score = Σ (criterion_score × weight) / total_weight
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 4: Report
|
|
55
|
+
|
|
56
|
+
## Evaluation Report
|
|
57
|
+
|
|
58
|
+
### Overall: [PASS/FAIL] (Score: X/100)
|
|
59
|
+
|
|
60
|
+
### Criterion Breakdown
|
|
61
|
+
|
|
62
|
+
| Criterion | Score | Weight | Weighted |
|
|
63
|
+
|-----------|-------|--------|----------|
|
|
64
|
+
| [Criterion 1] | X/10 | 30% | X |
|
|
65
|
+
| [Criterion 2] | X/10 | 40% | X |
|
|
66
|
+
| [Criterion 3] | X/10 | 30% | X |
|
|
67
|
+
|
|
68
|
+
### Evidence
|
|
69
|
+
|
|
70
|
+
**Criterion 1: [Name]**
|
|
71
|
+
- Test: [what was tested]
|
|
72
|
+
- Result: [outcome]
|
|
73
|
+
- Evidence: [screenshot, log, output]
|
|
74
|
+
|
|
75
|
+
### Recommendations
|
|
76
|
+
|
|
77
|
+
[If not passing, what needs to change]
|
|
78
|
+
|
|
79
|
+
## Pass@K Metrics
|
|
80
|
+
|
|
81
|
+
For non-deterministic evaluations:
|
|
82
|
+
- Run K times
|
|
83
|
+
- Calculate pass rate
|
|
84
|
+
- Report: "Pass@K = X/K"
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
**TIP**: Use eval for acceptance testing before marking features complete.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Harness Audit Command
|
|
2
|
+
|
|
3
|
+
Run a deterministic repository harness audit and return a prioritized scorecard.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
`/harness-audit [scope] [--format text|json] [--root path]`
|
|
8
|
+
|
|
9
|
+
- `scope` (optional): `repo` (default), `hooks`, `skills`, `commands`, `agents`
|
|
10
|
+
- `--format`: output style (`text` default, `json` for automation)
|
|
11
|
+
- `--root`: audit a specific path instead of the current working directory
|
|
12
|
+
|
|
13
|
+
## Deterministic Engine
|
|
14
|
+
|
|
15
|
+
Always run:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
node scripts/harness-audit.js <scope> --format <text|json> [--root <path>]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
This script is the source of truth for scoring and checks. Do not invent additional dimensions or ad-hoc points.
|
|
22
|
+
|
|
23
|
+
Rubric version: `2026-03-30`.
|
|
24
|
+
|
|
25
|
+
The script computes 7 fixed categories (`0-10` normalized each):
|
|
26
|
+
|
|
27
|
+
1. Tool Coverage
|
|
28
|
+
2. Context Efficiency
|
|
29
|
+
3. Quality Gates
|
|
30
|
+
4. Memory Persistence
|
|
31
|
+
5. Eval Coverage
|
|
32
|
+
6. Security Guardrails
|
|
33
|
+
7. Cost Efficiency
|
|
34
|
+
|
|
35
|
+
Scores are derived from explicit file/rule checks and are reproducible for the same commit.
|
|
36
|
+
The script audits the current working directory by default and auto-detects whether the target is the ECC repo itself or a consumer project using ECC.
|
|
37
|
+
|
|
38
|
+
## Output Contract
|
|
39
|
+
|
|
40
|
+
Return:
|
|
41
|
+
|
|
42
|
+
1. `overall_score` out of `max_score` (70 for `repo`; smaller for scoped audits)
|
|
43
|
+
2. Category scores and concrete findings
|
|
44
|
+
3. Failed checks with exact file paths
|
|
45
|
+
4. Top 3 actions from the deterministic output (`top_actions`)
|
|
46
|
+
5. Suggested ECC skills to apply next
|
|
47
|
+
|
|
48
|
+
## Checklist
|
|
49
|
+
|
|
50
|
+
- Use script output directly; do not rescore manually.
|
|
51
|
+
- If `--format json` is requested, return the script JSON unchanged.
|
|
52
|
+
- If text is requested, summarize failing checks and top actions.
|
|
53
|
+
- Include exact file paths from `checks[]` and `top_actions[]`.
|
|
54
|
+
|
|
55
|
+
## Example Result
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
Harness Audit (repo): 66/70
|
|
59
|
+
- Tool Coverage: 10/10 (10/10 pts)
|
|
60
|
+
- Context Efficiency: 9/10 (9/10 pts)
|
|
61
|
+
- Quality Gates: 10/10 (10/10 pts)
|
|
62
|
+
|
|
63
|
+
Top 3 Actions:
|
|
64
|
+
1) [Security Guardrails] Add prompt/tool preflight security guards in hooks/hooks.json. (hooks/hooks.json)
|
|
65
|
+
2) [Tool Coverage] Sync commands/harness-audit.md and .opencode/commands/harness-audit.md. (.opencode/commands/harness-audit.md)
|
|
66
|
+
3) [Eval Coverage] Increase automated test coverage across scripts/hooks/lib. (tests/)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Arguments
|
|
70
|
+
|
|
71
|
+
$ARGUMENTS:
|
|
72
|
+
- `repo|hooks|skills|commands|agents` (optional scope)
|
|
73
|
+
- `--format text|json` (optional output format)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
프로젝트 스코프 instinct를 글로벌 스코프로 승격시킨다.
|
|
2
|
+
|
|
3
|
+
```bash
|
|
4
|
+
python3 .claude/skills/continuous-learning-v2/scripts/instinct-cli.py promote [id]
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
id 없이 실행하면 승격 후보(confidence ≥ 0.8, 2개+ 프로젝트에서 확인)를 목록 표시.
|
|
8
|
+
id를 지정하면 해당 instinct를 글로벌로 승격.
|
|
9
|
+
|
|
10
|
+
글로벌 instinct는 모든 프로젝트에서 활성화된다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Claude Code 설정(.claude/ 디렉토리)에 대한 AgentShield 보안 스캔을 실행한다.
|
|
2
|
+
|
|
3
|
+
`npx ecc-agentshield scan` 을 실행하여 CLAUDE.md, settings.json, MCP 서버, hooks, agent 정의에서 보안 취약점, 설정 오류, 인젝션 위험을 검사한다.
|
|
4
|
+
|
|
5
|
+
옵션:
|
|
6
|
+
- `--fix`: 자동 수정 가능한 항목 수정 (하드코딩 시크릿 → 환경변수 참조 등)
|
|
7
|
+
- `--min-severity medium`: 최소 심각도 필터
|
|
8
|
+
- `--format json|markdown|html`: 출력 형식
|
|
9
|
+
|
|
10
|
+
결과는 A-F 등급으로 표시. CRITICAL/HIGH 발견 시 즉시 조치 필요.
|
|
@@ -0,0 +1,190 @@
|
|
|
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회 반복 상한. 무한 루프 방지.
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
```
|