commitgate 0.9.5 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.en.md +6 -0
- package/README.md +6 -0
- package/bin/init.ts +2 -1
- package/package.json +76 -76
- package/skills/ATTRIBUTION.md +3 -1
- package/skills/commitgate-quality/SKILL.md +126 -0
- package/templates/CLAUDE.template.md +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
이 프로젝트는 [Semantic Versioning](https://semver.org/lang/ko/)을 따릅니다.
|
|
4
4
|
|
|
5
|
+
## 0.9.6
|
|
6
|
+
|
|
7
|
+
**Claude Code용 품질 오버레이 companion skill `commitgate-quality` 추가** (REQ-2026-044). 기존 4종에 이어 5번째 companion skill을 같은 안전한 설치 경로(seed-once·`--force` 미덮음·confinement·`--no-agent-entrypoints` opt-out·uninstall)로 번들·설치합니다. 이 스킬은 Superpowers 방법론의 장점(요구 정제·설계/계획 품질·Test-First·증거 기반 검증)만 **협조적 지침**으로 흡수하며, Superpowers 플러그인·런타임은 설치·실행·의존하지 않습니다. 정본(SSOT) 비복제·설계 품질·계획 품질은 자체 소유하고, Test-First·버그 진단·요구 정제는 형제 스킬(`commitgate-tdd`·`commitgate-diagnosing-bugs`·`commitgate-discovery`)을 가리켜 내부 중복을 피합니다. 새 설치의 `CLAUDE.md`에 발견 포인터 1줄을 추가하되 계약 정본(`AGENTS.md`)은 불변입니다. **강제는 CommitGate 실행 게이트가 담당하며 이 스킬은 방법일 뿐**입니다 — `req:next`의 행동 계산, 리뷰·승인 판정, `state.json`/`responses/`, 커밋 권한을 침범하지 않습니다.
|
|
8
|
+
|
|
5
9
|
## 0.9.5
|
|
6
10
|
|
|
7
11
|
**리뷰 게이트 모델·reasoning effort를 review-call 로그에 기록** (REQ-2026-043). `req:review-codex`가 남기는 측정 로그(`workflow/.review-calls.jsonl`)의 각 행에 `review_model`·`review_reasoning_effort` 두 필드를 추가합니다. 값은 commitgate가 그 리뷰에 해소·전달한 값(`req.config.json`의 `reviewModel`/`reviewReasoningEffort`, 미지정 시 코어 기본 `gpt-5.6-terra`/`high`)이며, 두 값을 `null`로 두어 codex 전역 설정을 상속하는 경우 `null`로 기록해 **미핀 상태를 드러냅니다**. 이로써 "어떤 모델이 각 리뷰를 통과시켰는가"를 로그에서 감사·재현할 수 있습니다. 로그는 `.gitignore` 대상 측정 전용이라 커밋 산출물·승인 원장(`approvals.jsonl`)·게이트 판정에 영향이 없는 **순수 additive**이며, 기존 사용자는 무회귀입니다.
|
package/README.en.md
CHANGED
|
@@ -84,6 +84,12 @@ control point: before req:commit --run / [B1] before a main direct push (or [I1]
|
|
|
84
84
|
|
|
85
85
|
The agent then follows whatever `req:next` says — **design → Codex review → implement → re-review → commit**. You only step in at a control point (`AWAIT_HUMAN`) to give an approval sentence. (Outside Claude Code, a plain requirement works without `/req` — `AGENTS.md` and `.cursor/rules` load the rules.)
|
|
86
86
|
|
|
87
|
+
### Helps AI work more carefully
|
|
88
|
+
|
|
89
|
+
Beyond enforcing quality through gates (review, approval, commit), CommitGate also installs a companion skill (`commitgate-quality`) that **guides** the AI to understand the request and avoid mistakes.
|
|
90
|
+
|
|
91
|
+
For example, it guides the AI to check existing code and docs first, break large work into smaller steps, and run the needed checks after a change — cooperative guidance that won't always fire; the gates are what actually enforce. ([more](https://github.com/sol5288/commitgate/blob/main/docs/agent-prompt.en.md))
|
|
92
|
+
|
|
87
93
|
## How it works
|
|
88
94
|
|
|
89
95
|
`req:new` creates the ticket, branch, and design docs, and the next action at every step is always **computed** by `req:next` from `state.json` and git state (read-only — the agent does not guess).
|
package/README.md
CHANGED
|
@@ -84,6 +84,12 @@ phase:
|
|
|
84
84
|
|
|
85
85
|
에이전트는 `req:next`가 시키는 대로 **설계 → Codex 리뷰 → 구현 → 재리뷰 → 커밋**을 진행합니다. 사용자는 통제점(`AWAIT_HUMAN`)에서 승인 문장을 줄 때만 개입하면 됩니다. (Claude Code가 아니면 `/req` 없이 요구사항만 줘도 `AGENTS.md`·`.cursor/rules`가 규칙을 로드합니다.)
|
|
86
86
|
|
|
87
|
+
### AI가 더 꼼꼼하게 일하도록 돕습니다
|
|
88
|
+
|
|
89
|
+
CommitGate는 게이트(리뷰·승인·커밋)로 품질을 **강제**하는 것에 더해, AI가 요구를 제대로 이해하고 실수를 줄이도록 **방법을 안내하는** companion skill(`commitgate-quality`)도 함께 설치합니다.
|
|
90
|
+
|
|
91
|
+
예를 들어 AI가 작업 전에 기존 코드·문서를 먼저 확인하고, 큰 작업을 작은 단계로 나누고, 바꾼 뒤 필요한 검사를 하도록 **안내**합니다 — 협조적 지침이라 항상 발동하지는 않으며, 실제로 커밋을 막는 것은 게이트입니다. ([자세히](https://github.com/sol5288/commitgate/blob/main/docs/agent-prompt.md))
|
|
92
|
+
|
|
87
93
|
## 작동 방식
|
|
88
94
|
|
|
89
95
|
`req:new`가 티켓·브랜치·설계문서를 만들고, 매 단계의 다음 행동은 항상 `req:next`가 `state.json`과 git 상태에서 **계산**합니다(읽기 전용 — 에이전트가 추측하지 않습니다).
|
package/bin/init.ts
CHANGED
|
@@ -110,6 +110,7 @@ export const KIT_COMPANION_SKILLS = [
|
|
|
110
110
|
{ src: 'skills/commitgate-tdd/SKILL.md', dest: '.claude/skills/commitgate-tdd/SKILL.md' },
|
|
111
111
|
{ src: 'skills/commitgate-diagnosing-bugs/SKILL.md', dest: '.claude/skills/commitgate-diagnosing-bugs/SKILL.md' },
|
|
112
112
|
{ src: 'skills/commitgate-research/SKILL.md', dest: '.claude/skills/commitgate-research/SKILL.md' },
|
|
113
|
+
{ src: 'skills/commitgate-quality/SKILL.md', dest: '.claude/skills/commitgate-quality/SKILL.md' },
|
|
113
114
|
] as const
|
|
114
115
|
|
|
115
116
|
/** `AGENTS.md`가 CommitGate 계약인지 판별하는 마커. 진입점 포인터들이 이 마커로 SSOT를 확인한다. */
|
|
@@ -470,7 +471,7 @@ export interface CompanionSkillsPlan {
|
|
|
470
471
|
* companion skills seed-once 판정 + confinement preflight (설계 D3·D4).
|
|
471
472
|
* **순수 판정이라 아무것도 쓰지 않는다** — `--dry-run`도 이 검사를 그대로 받는다(쓰기 0건, 그러나 symlink면 실패).
|
|
472
473
|
*
|
|
473
|
-
* `workflow/.gitignore`(D12)와 같은 축이고, 다른 점은 **dest가
|
|
474
|
+
* `workflow/.gitignore`(D12)와 같은 축이고, 다른 점은 **dest가 5개**라는 것뿐이다:
|
|
474
475
|
*
|
|
475
476
|
* 🔴 **각 최종 `SKILL.md` dest를 개별로 넘긴다.** skills 루트(`.claude/skills`)만 넘기면
|
|
476
477
|
* `assertConfinedDest`의 `i < segs.length - 1` 루프가 **마지막 컴포넌트를 검사하지 않아**
|
package/package.json
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "commitgate",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "CommitGate — Builder↔Reviewer(Claude↔Codex) fail-closed 커밋 게이트: 리뷰·승인·증거 없인 커밋을 통과시키지 않는 AI REQ 워크플로 kit (req:new/next/review-codex/doctor/commit)",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"author": "sol5288",
|
|
8
|
-
"repository": {
|
|
9
|
-
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/sol5288/commitgate.git"
|
|
11
|
-
},
|
|
12
|
-
"homepage": "https://github.com/sol5288/commitgate#readme",
|
|
13
|
-
"bugs": {
|
|
14
|
-
"url": "https://github.com/sol5288/commitgate/issues"
|
|
15
|
-
},
|
|
16
|
-
"keywords": [
|
|
17
|
-
"ai",
|
|
18
|
-
"code-review",
|
|
19
|
-
"workflow",
|
|
20
|
-
"codex",
|
|
21
|
-
"claude",
|
|
22
|
-
"git",
|
|
23
|
-
"commit-gate",
|
|
24
|
-
"fail-closed",
|
|
25
|
-
"review-gate",
|
|
26
|
-
"cli"
|
|
27
|
-
],
|
|
28
|
-
"bin": {
|
|
29
|
-
"commitgate": "bin/commitgate.mjs"
|
|
30
|
-
},
|
|
31
|
-
"scripts": {
|
|
32
|
-
"req:new": "tsx scripts/req/req-new.ts",
|
|
33
|
-
"req:review-codex": "tsx scripts/req/review-codex.ts",
|
|
34
|
-
"req:doctor": "tsx scripts/req/req-doctor.ts",
|
|
35
|
-
"req:next": "tsx scripts/req/req-next.ts",
|
|
36
|
-
"req:commit": "tsx scripts/req/req-commit.ts",
|
|
37
|
-
"test": "vitest run",
|
|
38
|
-
"typecheck": "tsc --noEmit",
|
|
39
|
-
"smoke": "node scripts/smoke.mjs",
|
|
40
|
-
"verify:overrides": "node scripts/verify-review-overrides.mjs",
|
|
41
|
-
"docs:lint": "remark docs README.md README.en.md --quiet --frail"
|
|
42
|
-
},
|
|
43
|
-
"files": [
|
|
44
|
-
"scripts/req",
|
|
45
|
-
"scripts/verify-review-overrides.mjs",
|
|
46
|
-
"workflow/machine.schema.json",
|
|
47
|
-
"workflow/req.config.schema.json",
|
|
48
|
-
"workflow/review-persona.md",
|
|
49
|
-
"bin",
|
|
50
|
-
"templates",
|
|
51
|
-
"skills",
|
|
52
|
-
"AGENTS.template.md",
|
|
53
|
-
"req.config.json.sample",
|
|
54
|
-
"README.md",
|
|
55
|
-
"README.en.md",
|
|
56
|
-
"CHANGELOG.md"
|
|
57
|
-
],
|
|
58
|
-
"engines": {
|
|
59
|
-
"node": ">=18.17"
|
|
60
|
-
},
|
|
61
|
-
"dependencies": {
|
|
62
|
-
"ajv": "^8.20.0",
|
|
63
|
-
"cross-spawn": "^7.0.6",
|
|
64
|
-
"semver": "^7.6.3",
|
|
65
|
-
"tsx": "^4.19.1"
|
|
66
|
-
},
|
|
67
|
-
"devDependencies": {
|
|
68
|
-
"@types/cross-spawn": "^6.0.6",
|
|
69
|
-
"@types/node": "^22.7.4",
|
|
70
|
-
"@types/semver": "^7.5.8",
|
|
71
|
-
"remark-cli": "^12.0.1",
|
|
72
|
-
"remark-validate-links": "^13.1.0",
|
|
73
|
-
"typescript": "^5.6.2",
|
|
74
|
-
"vitest": "^2.1.2"
|
|
75
|
-
}
|
|
76
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "commitgate",
|
|
3
|
+
"version": "0.9.6",
|
|
4
|
+
"description": "CommitGate — Builder↔Reviewer(Claude↔Codex) fail-closed 커밋 게이트: 리뷰·승인·증거 없인 커밋을 통과시키지 않는 AI REQ 워크플로 kit (req:new/next/review-codex/doctor/commit)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "sol5288",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/sol5288/commitgate.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/sol5288/commitgate#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/sol5288/commitgate/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"ai",
|
|
18
|
+
"code-review",
|
|
19
|
+
"workflow",
|
|
20
|
+
"codex",
|
|
21
|
+
"claude",
|
|
22
|
+
"git",
|
|
23
|
+
"commit-gate",
|
|
24
|
+
"fail-closed",
|
|
25
|
+
"review-gate",
|
|
26
|
+
"cli"
|
|
27
|
+
],
|
|
28
|
+
"bin": {
|
|
29
|
+
"commitgate": "bin/commitgate.mjs"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"req:new": "tsx scripts/req/req-new.ts",
|
|
33
|
+
"req:review-codex": "tsx scripts/req/review-codex.ts",
|
|
34
|
+
"req:doctor": "tsx scripts/req/req-doctor.ts",
|
|
35
|
+
"req:next": "tsx scripts/req/req-next.ts",
|
|
36
|
+
"req:commit": "tsx scripts/req/req-commit.ts",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"typecheck": "tsc --noEmit",
|
|
39
|
+
"smoke": "node scripts/smoke.mjs",
|
|
40
|
+
"verify:overrides": "node scripts/verify-review-overrides.mjs",
|
|
41
|
+
"docs:lint": "remark docs README.md README.en.md --quiet --frail"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"scripts/req",
|
|
45
|
+
"scripts/verify-review-overrides.mjs",
|
|
46
|
+
"workflow/machine.schema.json",
|
|
47
|
+
"workflow/req.config.schema.json",
|
|
48
|
+
"workflow/review-persona.md",
|
|
49
|
+
"bin",
|
|
50
|
+
"templates",
|
|
51
|
+
"skills",
|
|
52
|
+
"AGENTS.template.md",
|
|
53
|
+
"req.config.json.sample",
|
|
54
|
+
"README.md",
|
|
55
|
+
"README.en.md",
|
|
56
|
+
"CHANGELOG.md"
|
|
57
|
+
],
|
|
58
|
+
"engines": {
|
|
59
|
+
"node": ">=18.17"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"ajv": "^8.20.0",
|
|
63
|
+
"cross-spawn": "^7.0.6",
|
|
64
|
+
"semver": "^7.6.3",
|
|
65
|
+
"tsx": "^4.19.1"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/cross-spawn": "^6.0.6",
|
|
69
|
+
"@types/node": "^22.7.4",
|
|
70
|
+
"@types/semver": "^7.5.8",
|
|
71
|
+
"remark-cli": "^12.0.1",
|
|
72
|
+
"remark-validate-links": "^13.1.0",
|
|
73
|
+
"typescript": "^5.6.2",
|
|
74
|
+
"vitest": "^2.1.2"
|
|
75
|
+
}
|
|
76
|
+
}
|
package/skills/ATTRIBUTION.md
CHANGED
|
@@ -28,8 +28,10 @@ CommitGate가 번들하는 companion skills(`skills/commitgate-*/SKILL.md`)는 M
|
|
|
28
28
|
| `commitgate-tdd` | `skills/engineering/tdd/SKILL.md` |
|
|
29
29
|
| `commitgate-diagnosing-bugs` | `skills/engineering/diagnosing-bugs/SKILL.md` |
|
|
30
30
|
| `commitgate-research` | `skills/engineering/research/SKILL.md` |
|
|
31
|
+
| `commitgate-quality` | **부분 파생** — Test-First·버그 진단·요구 정제의 방법론 표현은 `tdd`+`diagnosing-bugs`+`grilling`/`domain-modeling` 계열을 재사용·참조. **정본(SSOT) 경계·설계/계획 품질·자가점검은 CommitGate(sol5288) 원저작**(Pocock 아님) |
|
|
31
32
|
|
|
32
33
|
각 SKILL.md 하단의 `## 출처·라이선스` 절에 개별 적응 내용이 기록되어 있다.
|
|
34
|
+
⚠️ `commitgate-quality`는 방법론 표현만 파생이고 상당 부분이 CommitGate 원저작이다 — 그 SKILL.md의 `## 출처·라이선스`가 적응 범위(§4·§5·요구 정제)와 원저작(§1·§2·§3)을 구분한다. 보수적으로 MIT 고지를 동행한다(과소 귀속 회피).
|
|
33
35
|
|
|
34
36
|
## 무엇이 누구의 것인가
|
|
35
37
|
|
|
@@ -81,5 +83,5 @@ SOFTWARE.
|
|
|
81
83
|
|
|
82
84
|
## 갱신
|
|
83
85
|
|
|
84
|
-
기준 upstream을 올리려면 새 SHA를 골라
|
|
86
|
+
기준 upstream을 올리려면 새 SHA를 골라 5종 SKILL.md(`commitgate-quality` 포함 — 방법론 표현을 재사용하므로 SHA를 동행)의 `## 출처·라이선스`와 이 문서를 함께 갱신하고,
|
|
85
87
|
`tests/unit/package-payload.test.ts`의 `UPSTREAM_SHA`를 바꾼다. **자동 동기화는 없다**(의도된 경계 — REQ-2026-019 §4).
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commitgate-quality
|
|
3
|
+
description: CommitGate REQ의 품질 방법 — 정본(SSOT) 경계·설계/계획 품질·Test-First·증거 기반 검증. 세 상황에서만 읽어 적용한다 — (a) 00/01/02 설계·계획을 새로 쓰거나 고칠 때, (b) req:next가 AGENT를 반환한 구현 phase, (c) 버그·회귀·성능 진단(AGENT). 다음 행동은 req:next의 kind가 정한다 — RUN=출력 명령 실행 후 재조회, AGENT=작업 수행·git add 후 재조회, AWAIT_HUMAN=정지, DONE=완료 보고, BLOCKED=보고. 이 스킬은 방법만 제공하고 다음 행동·승인·커밋 권한은 req:next와 AGENTS.md에 있다. 강제가 아니라 방법이며, 실제 강제는 CommitGate 게이트다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CommitGate — 품질 오버레이 (설계·계획·구현 품질)
|
|
7
|
+
|
|
8
|
+
CommitGate의 권한·리뷰·승인·커밋 게이트를 **바꾸지 않고**, 설계·계획·구현의 품질을 높이는 **방법**이다.
|
|
9
|
+
게이트 권한은 CommitGate가, 품질 방법은 이 스킬이 담당한다 — **"방법은 여기, 강제는 게이트."**
|
|
10
|
+
이 스킬은 강제가 아니라 **협조적 지침**이다. 커밋을 막는 것은 이 텍스트가 아니라 CommitGate의 실행 게이트다.
|
|
11
|
+
|
|
12
|
+
## 전제
|
|
13
|
+
|
|
14
|
+
다음 세 상황에서만 이 방법을 적용한다.
|
|
15
|
+
|
|
16
|
+
- **(a)** REQ의 `00/01/02` 설계·계획을 새로 쓰거나 고칠 때
|
|
17
|
+
- **(b)** `req:next`가 `AGENT`를 반환한 구현 phase
|
|
18
|
+
- **(c)** 버그·회귀·성능 문제를 진단하는 `AGENT` 작업
|
|
19
|
+
|
|
20
|
+
**다음 행동은 이 스킬이 아니라 `req:next`의 kind가 정한다** — kind마다 계약이 다르므로 뭉뚱그리지 않는다:
|
|
21
|
+
|
|
22
|
+
- `RUN`이면 출력된 명령을 그대로 실행한 뒤 다시 `req:next`.
|
|
23
|
+
- `AGENT`이면 그 phase의 작업을 구현·검증하고 명시적으로 `git add` 한 뒤 다시 `req:next` — 필요한 작업을 건너뛰지 않는다(이 스킬의 방법이 적용되는 지점이다).
|
|
24
|
+
- `AWAIT_HUMAN`이면 멈추고 출력된 승인 문장을 그대로 받는다.
|
|
25
|
+
- `DONE`이면 완료를 보고하고 통합·릴리즈를 추정하지 않는다.
|
|
26
|
+
- `BLOCKED`이면 재시도하지 말고 사람에게 차단 사유를 보고한다.
|
|
27
|
+
|
|
28
|
+
## 방법
|
|
29
|
+
|
|
30
|
+
### 1. 정본(SSOT) 경계 — 복제하지 말고 참조하라
|
|
31
|
+
|
|
32
|
+
도메인·아키텍처·API·보안·상세 test oracle의 정본은 **승인된 설계가 참조하는 정본 문서**(예: `docs/설계`·`docs/개발`·테스트케이스 추적표 등)다.
|
|
33
|
+
|
|
34
|
+
- `00/01/02`는 알고리즘·상수·API 계약·상세 test oracle을 **복제하지 않는다.** 정본 경로·절·TC-ID로 **참조**한다.
|
|
35
|
+
- 이미 정본에 있는 내용을 REQ 문서에 다시 쓰지 않는다 — 복제하면 drift 부채가 된다.
|
|
36
|
+
- 정본에 필요한 계약·oracle이 없으면 REQ 문서에 임시 복제하지 말고, **정본을 먼저 보완한 뒤 설계 재리뷰**를 받는다.
|
|
37
|
+
|
|
38
|
+
### 2. 설계 품질 — 가정한 것을 실증하라
|
|
39
|
+
|
|
40
|
+
- 새로 가정한 API·라우트·함수·환경변수·데이터 모델·기존 동작을 **실제 코드와 정본에서 먼저 확인**한다. 존재하지 않는 API를 기존 기능처럼 가정하지 않는다.
|
|
41
|
+
- 새로 만들어야 하면 요구 범위·변경 파일에 명시하고, 범위 밖이면 기존 계약을 쓰거나 사람에게 보고한다.
|
|
42
|
+
- 완료 기준마다 **정본 참조 · TC-ID · 공개 seam(사용자 관찰 가능 결과) · 검증 명령 · 실패 시 기대**를 추적 가능하게 한다.
|
|
43
|
+
- 역할·권한·상태·페이지·입력의 **조합**이 요구되면 일부 예시가 아니라 **요구된 조합 전체**를 검증 범위로 설계한다.
|
|
44
|
+
- 대안은 실제로 존재하고 품질·보안·성능·호환성에 영향을 줄 때만 비교한다. 형식적 나열은 하지 않는다.
|
|
45
|
+
|
|
46
|
+
### 3. 계획 품질 — 작은 수직 슬라이스
|
|
47
|
+
|
|
48
|
+
- phase는 리뷰 가능한 **작은 수직 슬라이스**로 나눈다.
|
|
49
|
+
- 각 phase는 목표·완료 조건 · 정본 참조·TC-ID · 수정 파일 범위 · 공개 seam과 실패해야 할 동작 · 검증 명령 · stage 범위 · 비목표를 갖는다.
|
|
50
|
+
- 검증 명령은 **추측하지 않는다.** `02-plan`·테스트 추적표·`package.json`(과 감지된 packageManager)이 정한 명령만 쓴다. 계획한 검증이 완료 조건을 증명하지 못하면 구현으로 덮지 말고 계획을 고쳐 **재리뷰**한다.
|
|
51
|
+
- 계획의 상세화가 **정본 복제로 변질되지 않게** 한다(§1).
|
|
52
|
+
|
|
53
|
+
### 4. Test-First 구현 — `commitgate-tdd`를 따른다
|
|
54
|
+
|
|
55
|
+
`AGENT` phase에서는 실패하는 테스트를 먼저(Red) → 최소 구현(Green) → 동작을 바꾸지 않는 리팩터 → 계획된 검증 → 명시적 stage → `req:next`.
|
|
56
|
+
단계별 루프의 정본은 형제 스킬 **`commitgate-tdd`**다 — 그것을 읽고 따른다.
|
|
57
|
+
|
|
58
|
+
- 좋은 테스트는 공개 인터페이스로 **동작**을 검증한다. 구현이 바뀌어도 테스트는 안 바뀌어야 한다.
|
|
59
|
+
- **동어반복**을 피한다 — 단언이 기대값을 코드와 **같은 방식으로** 다시 계산하면 통과가 구조적으로 보장되어 회귀를 못 잡는다. 기대값은 독립적 근거(알려진 리터럴·손계산·명세)에서 온다.
|
|
60
|
+
- 테스트를 통과시키는 **최소만** 쓴다. 승인된 범위 밖 기능·리팩터를 "개선"으로 끼워 넣지 않는다.
|
|
61
|
+
|
|
62
|
+
### 5. 버그·회귀·성능 진단 — `commitgate-diagnosing-bugs`를 따른다
|
|
63
|
+
|
|
64
|
+
원인 추측보다 **재현 가능한 피드백 루프**를 먼저 만든다: 재현 → 최소화 → 반증 가능한 가설 → 최소 계측 → 원인 확인 → 수정 → 회귀 테스트 → 임시 계측 제거 → 재검증.
|
|
65
|
+
단계별 루프의 정본은 형제 스킬 **`commitgate-diagnosing-bugs`**다.
|
|
66
|
+
|
|
67
|
+
### 요구 정제
|
|
68
|
+
|
|
69
|
+
요청에 무엇·왜·제약·완료 기준이 부족할 때만 정제한다. 확인 가능한 사실은 코드·문서에서 직접 확인하고, 사용자만 결정할 수 있는 것만 한 번에 하나씩 묻는다. 상세 방법의 정본은 형제 스킬 **`commitgate-discovery`**다(사용자 호출형).
|
|
70
|
+
|
|
71
|
+
## 리뷰 전 자가점검
|
|
72
|
+
|
|
73
|
+
CommitGate 리뷰를 요청하기 전에 확인한다.
|
|
74
|
+
|
|
75
|
+
- 변경이 승인된 phase와 비목표를 지키는가?
|
|
76
|
+
- 새 동작마다 실제 실패를 잡는 TC-ID와 공개 seam이 있는가? 동어반복이 아닌가?
|
|
77
|
+
- 새로 가정한 기존 API·계약을 실제로 확인했는가?
|
|
78
|
+
- 요구된 역할·권한·상태 조합이 빠지지 않았는가?
|
|
79
|
+
- 검증 명령을 **실제로 실행**했는가? 실행하지 않은 검증을 완료로 보고하지 않는다.
|
|
80
|
+
- 정본을 REQ 문서에 복제하지 않았는가? 설계 변경이 필요한 신호를 숨기지 않았는가?
|
|
81
|
+
|
|
82
|
+
자가점검은 **CommitGate 리뷰를 대체하지 않는다.** 스킬 산출물·자가점검은 승인 근거가 **아니다.**
|
|
83
|
+
|
|
84
|
+
## 경계
|
|
85
|
+
|
|
86
|
+
- **`git commit`·`git push`·`req:commit` 직접 호출 금지.** 커밋은 CommitGate의 통제점이다 — 리뷰 승인 후 `req:next`가 지시하고 사용자가 승인한다.
|
|
87
|
+
- **`state.json`·`responses/`를 직접 수정하거나 스테이징하지 않는다.** 스크래치로 남겨야 게이트(D10)가 통과한다.
|
|
88
|
+
- 리뷰 실행·승인 판정·상태 전이·커밋은 **CommitGate만** 한다. 이 스킬은 승인 근거가 **아니다.**
|
|
89
|
+
- 테스트를 건너뛰거나 비활성화해 게이트를 통과시키지 않는다. 실패하면 원인을 고친다.
|
|
90
|
+
- **다음 행동은 `req:next`가 정본이다.** 계약 정본은 저장소 루트 `AGENTS.md`다.
|
|
91
|
+
- 이 경계는 **협조적 텍스트**이며 강제가 아니다 — 실제 강제는 CommitGate 실행 게이트(이 스킬이 건드릴 수 없다)다.
|
|
92
|
+
|
|
93
|
+
## 출처·라이선스
|
|
94
|
+
|
|
95
|
+
이 스킬의 **원저작 합성**(정본 경계 §1·설계 품질 §2·계획 품질 §3·자가점검)은 CommitGate(sol5288)의 것이다.
|
|
96
|
+
Test-First(§4)·버그 진단(§5)·요구 정제의 **방법론 표현**은 Matt Pocock의 공개 skills(MIT)를 적응한 형제 스킬
|
|
97
|
+
(`commitgate-tdd`·`commitgate-diagnosing-bugs`·`commitgate-discovery`)이 정본이며, 이 스킬은 그 계열의 표현
|
|
98
|
+
(seam·red/green·동어반복·델타 디버깅·수직 슬라이스)을 재사용하고 그 스킬들을 가리킨다. 따라서 파생물로 취급해 아래 MIT 고지를 동행한다.
|
|
99
|
+
|
|
100
|
+
Adapted from https://github.com/mattpocock/skills @ `d574778f94cf620fcc8ce741584093bc650a61d3` (v1.1.0).
|
|
101
|
+
적응 범위: 방법론 표현(§4·§5·요구 정제)에 한한다. 원저작 합성(§1·§2·§3·자가점검)은 CommitGate의 것이며 Pocock의 것이 아니다 — 출처를 혼동하지 말 것.
|
|
102
|
+
자세한 출처·대응 관계는 패키지의 `skills/ATTRIBUTION.md`.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
MIT License
|
|
106
|
+
|
|
107
|
+
Copyright (c) 2026 Matt Pocock
|
|
108
|
+
|
|
109
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
110
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
111
|
+
in the Software without restriction, including without limitation the rights
|
|
112
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
113
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
114
|
+
furnished to do so, subject to the following conditions:
|
|
115
|
+
|
|
116
|
+
The above copyright notice and this permission notice shall be included in all
|
|
117
|
+
copies or substantial portions of the Software.
|
|
118
|
+
|
|
119
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
120
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
121
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
122
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
123
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
124
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
125
|
+
SOFTWARE.
|
|
126
|
+
```
|
|
@@ -25,3 +25,4 @@
|
|
|
25
25
|
- 세부 규칙·통제점·승인 문장의 **정본**은 루트 [`AGENTS.md`](./AGENTS.md)이다.
|
|
26
26
|
(`<!-- commitgate:contract -->` 마커가 없으면 CommitGate 계약이 아니다 — init이 함께 설치한 루트의 `AGENTS.commitgate.md`를 계약으로 읽고, 사용자에게 `AGENTS.md`로의 병합을 요청하라.)
|
|
27
27
|
- Claude Code에서는 `/req` 슬래시 커맨드로 시작할 수도 있다. 진입 절차 상세는 `.claude/skills/commitgate/SKILL.md`.
|
|
28
|
+
- 설계·계획(`00/01/02`) 작성·수정 또는 `AGENT` 구현·버그 진단 시 `.claude/skills/commitgate-quality/SKILL.md`를 읽어 방법(정본 참조·조합 검증·Test-First·증거 기반 검증)을 적용한다. 단 **다음 행동·승인·커밋은 `req:next`와 `AGENTS.md`만** 따른다 — 스킬은 방법이지 강제가 아니다.
|