solmate-skills 2.0.11 → 2.0.13

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 (36) hide show
  1. package/AGENTS.md +11 -0
  2. package/CLAUDE.md +13 -3
  3. package/README.md +135 -286
  4. package/USAGE.md +893 -0
  5. package/bin/cli.js +198 -3
  6. package/bin/harness-artifact.js +621 -0
  7. package/bin/harness-artifact.test.js +520 -0
  8. package/bin/harness-check.js +373 -0
  9. package/bin/harness-check.test.js +159 -0
  10. package/bin/test.js +2 -0
  11. package/docs/01_Concept_Design/01_AGENT_HARNESS_REQUIREMENTS_ANALYSIS.md +162 -0
  12. package/docs/03_Technical_Specs/01_AGENT_HARNESS_ARCHITECTURE.md +376 -0
  13. package/docs/03_Technical_Specs/assets/01_agent_harness_data_flow.svg +94 -0
  14. package/docs/04_Logic_Progress/00_BACKLOG.md +339 -0
  15. package/docs/04_Logic_Progress/01_EXECUTION_PLAN.md +160 -0
  16. package/docs/04_Logic_Progress/03_DECISION_LOG.md +98 -0
  17. package/docs/05_QA_Validation/01_TEST_SCENARIOS.md +313 -0
  18. package/docs/05_QA_Validation/02_AGENT_HARNESS_DESIGN_REVIEW.md +100 -0
  19. package/docs/05_QA_Validation/03_AGENT_HARNESS_CONTRACT_QA.md +96 -0
  20. package/manage-collaboration/SKILL.md +2 -0
  21. package/package.json +6 -4
  22. package/rules-docs/SKILL.md +15 -1
  23. package/rules-product/SKILL.md +37 -6
  24. package/rules-product/agents/openai.yaml +2 -2
  25. package/rules-workflow/SKILL.md +38 -6
  26. package/rules-workflow/adapters/claude/solmate-context-reader.md +17 -0
  27. package/rules-workflow/adapters/claude/solmate-implementer.md +20 -0
  28. package/rules-workflow/adapters/claude/solmate-verifier.md +21 -0
  29. package/rules-workflow/agents/openai.yaml +2 -2
  30. package/rules-workflow/resources/agent-harness-contract.md +187 -0
  31. package/rules-workflow/resources/agent-harness-v1.schema.json +432 -0
  32. package/verify-docs/SKILL.md +33 -6
  33. package/verify-docs/agents/openai.yaml +2 -2
  34. package/verify-implementation/SKILL.md +21 -2
  35. package/verify-implementation/agents/openai.yaml +2 -2
  36. package/verify-skills/SKILL.md +34 -1
@@ -0,0 +1,432 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/solmate30/solmate-skills/agent-harness-v1.schema.json",
4
+ "title": "Solmate Agent Harness Contract v1",
5
+ "schema_version": 1,
6
+ "x-core-roles": [
7
+ "coordinator",
8
+ "context-reader",
9
+ "implementer",
10
+ "qa-inspector"
11
+ ],
12
+ "x-read-only-roles": [
13
+ "context-reader",
14
+ "qa-inspector"
15
+ ],
16
+ "x-state-transitions": {
17
+ "INTAKE": ["REQUIREMENTS_READY", "BLOCKED_DECISION", "CANCELLED"],
18
+ "REQUIREMENTS_READY": ["CONTEXT_LOCKED", "BLOCKED_CONTEXT", "BLOCKED_DECISION", "CANCELLED"],
19
+ "CONTEXT_LOCKED": ["DESIGN_READY", "BLOCKED_CONTEXT", "BLOCKED_DECISION", "CANCELLED"],
20
+ "DESIGN_READY": ["IMPLEMENTING", "BLOCKED_DECISION", "BLOCKED_DEPENDENCY", "DEGRADED", "CANCELLED"],
21
+ "IMPLEMENTING": ["CHANGE_READY", "REWORK", "BLOCKED_DECISION", "BLOCKED_DEPENDENCY", "DEGRADED", "CANCELLED"],
22
+ "CHANGE_READY": ["VERIFYING", "REWORK", "BLOCKED_DECISION", "BLOCKED_DEPENDENCY", "DEGRADED", "CANCELLED"],
23
+ "VERIFYING": ["COMPLETE", "REWORK", "BLOCKED_DECISION", "BLOCKED_DEPENDENCY", "DEGRADED", "CANCELLED"],
24
+ "BLOCKED_CONTEXT": ["CONTEXT_LOCKED", "CANCELLED"],
25
+ "BLOCKED_DECISION": ["INTAKE", "REQUIREMENTS_READY", "CONTEXT_LOCKED", "DESIGN_READY", "IMPLEMENTING", "CHANGE_READY", "VERIFYING", "CANCELLED"],
26
+ "BLOCKED_DEPENDENCY": ["DESIGN_READY", "IMPLEMENTING", "CHANGE_READY", "VERIFYING", "CANCELLED"],
27
+ "REWORK": ["IMPLEMENTING", "CANCELLED"],
28
+ "DEGRADED": ["DESIGN_READY", "IMPLEMENTING", "CHANGE_READY", "VERIFYING", "CANCELLED"],
29
+ "COMPLETE": [],
30
+ "CANCELLED": []
31
+ },
32
+ "x-event-evidence": {
33
+ "REQUIREMENTS_READY": ["artifact_refs"],
34
+ "CONTEXT_LOCKED": ["evidence_refs"],
35
+ "DESIGN_READY": ["artifact_refs"],
36
+ "IMPLEMENTING": ["evidence_refs"],
37
+ "CHANGE_READY": ["artifact_refs", "evidence_refs"],
38
+ "VERIFYING": ["evidence_refs"],
39
+ "COMPLETE": ["evidence_refs"]
40
+ },
41
+ "x-manifest-receipts": {
42
+ "REQUIREMENTS_READY": ["REQUIREMENTS"],
43
+ "CONTEXT_LOCKED": ["REQUIREMENTS", "CONTEXT"],
44
+ "DESIGN_READY": ["REQUIREMENTS", "CONTEXT", "DESIGN"],
45
+ "IMPLEMENTING": ["REQUIREMENTS", "CONTEXT", "DESIGN"],
46
+ "CHANGE_READY": ["REQUIREMENTS", "CONTEXT", "DESIGN", "CHANGE"],
47
+ "VERIFYING": ["REQUIREMENTS", "CONTEXT", "DESIGN", "CHANGE"],
48
+ "COMPLETE": ["REQUIREMENTS", "CONTEXT", "DESIGN", "CHANGE", "VERIFICATION"]
49
+ },
50
+ "oneOf": [
51
+ { "$ref": "#/$defs/manifest" },
52
+ { "$ref": "#/$defs/message" },
53
+ { "$ref": "#/$defs/event" }
54
+ ],
55
+ "$defs": {
56
+ "state": {
57
+ "type": "string",
58
+ "enum": [
59
+ "INTAKE",
60
+ "REQUIREMENTS_READY",
61
+ "CONTEXT_LOCKED",
62
+ "DESIGN_READY",
63
+ "IMPLEMENTING",
64
+ "CHANGE_READY",
65
+ "VERIFYING",
66
+ "COMPLETE",
67
+ "BLOCKED_CONTEXT",
68
+ "BLOCKED_DECISION",
69
+ "BLOCKED_DEPENDENCY",
70
+ "REWORK",
71
+ "DEGRADED",
72
+ "CANCELLED"
73
+ ]
74
+ },
75
+ "role_id": {
76
+ "type": "string",
77
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
78
+ },
79
+ "project_path": {
80
+ "type": "string",
81
+ "minLength": 1,
82
+ "pattern": "^(?!/)(?![A-Za-z][A-Za-z0-9+.-]*:).+"
83
+ },
84
+ "project_refs": {
85
+ "type": "array",
86
+ "items": {
87
+ "$ref": "#/$defs/project_path"
88
+ },
89
+ "uniqueItems": true
90
+ },
91
+ "timestamp": {
92
+ "type": "string",
93
+ "format": "date-time",
94
+ "pattern": "^(?!0000)[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])$"
95
+ },
96
+ "manifest": {
97
+ "type": "object",
98
+ "required": [
99
+ "schema_version",
100
+ "artifact_type",
101
+ "task_id",
102
+ "work_type",
103
+ "current_state",
104
+ "active_attempt",
105
+ "topology",
106
+ "roles",
107
+ "write_ownership",
108
+ "canonical_documents",
109
+ "receipts"
110
+ ],
111
+ "properties": {
112
+ "schema_version": {
113
+ "type": "integer",
114
+ "const": 1
115
+ },
116
+ "artifact_type": {
117
+ "type": "string",
118
+ "const": "task_manifest"
119
+ },
120
+ "task_id": {
121
+ "type": "string",
122
+ "pattern": "^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$"
123
+ },
124
+ "work_type": {
125
+ "type": "string",
126
+ "enum": ["code", "deploy", "docs", "prototype"]
127
+ },
128
+ "current_state": {
129
+ "$ref": "#/$defs/state"
130
+ },
131
+ "active_attempt": {
132
+ "type": "integer",
133
+ "minimum": 1
134
+ },
135
+ "topology": {
136
+ "type": "object",
137
+ "required": ["pattern", "reason", "agent_count", "fallback"],
138
+ "properties": {
139
+ "pattern": {
140
+ "type": "string",
141
+ "enum": ["LINEAR", "EXPERT_POOL", "FAN_OUT_FAN_IN", "PRODUCER_REVIEWER", "SUPERVISOR"]
142
+ },
143
+ "reason": {
144
+ "type": "string",
145
+ "minLength": 3
146
+ },
147
+ "agent_count": {
148
+ "type": "integer",
149
+ "minimum": 1
150
+ },
151
+ "fallback": {
152
+ "type": "string",
153
+ "minLength": 3
154
+ }
155
+ },
156
+ "additionalProperties": false
157
+ },
158
+ "roles": {
159
+ "type": "array",
160
+ "minItems": 1,
161
+ "items": {
162
+ "type": "object",
163
+ "required": ["role_id", "activation", "reason"],
164
+ "properties": {
165
+ "role_id": {
166
+ "$ref": "#/$defs/role_id"
167
+ },
168
+ "activation": {
169
+ "type": "string",
170
+ "enum": ["ACTIVE", "SKIPPED"]
171
+ },
172
+ "reason": {
173
+ "type": "string",
174
+ "minLength": 3
175
+ }
176
+ },
177
+ "additionalProperties": false
178
+ }
179
+ },
180
+ "write_ownership": {
181
+ "type": "array",
182
+ "items": {
183
+ "type": "object",
184
+ "required": ["role_id", "paths", "mode"],
185
+ "properties": {
186
+ "role_id": {
187
+ "$ref": "#/$defs/role_id"
188
+ },
189
+ "paths": {
190
+ "type": "array",
191
+ "minItems": 1,
192
+ "items": {
193
+ "$ref": "#/$defs/project_path"
194
+ },
195
+ "uniqueItems": true
196
+ },
197
+ "mode": {
198
+ "type": "string",
199
+ "const": "EXCLUSIVE"
200
+ }
201
+ },
202
+ "additionalProperties": false
203
+ }
204
+ },
205
+ "canonical_documents": {
206
+ "type": "array",
207
+ "minItems": 1,
208
+ "items": {
209
+ "type": "object",
210
+ "required": ["kind", "path"],
211
+ "properties": {
212
+ "kind": {
213
+ "type": "string",
214
+ "enum": ["REQUIREMENTS", "UI", "ARCHITECTURE", "LOGIC", "BACKLOG", "QA", "DECISION", "OTHER"]
215
+ },
216
+ "path": {
217
+ "$ref": "#/$defs/project_path"
218
+ }
219
+ },
220
+ "additionalProperties": false
221
+ }
222
+ },
223
+ "receipts": {
224
+ "type": "array",
225
+ "items": {
226
+ "type": "object",
227
+ "required": ["type", "status", "artifact_ref"],
228
+ "properties": {
229
+ "type": {
230
+ "type": "string",
231
+ "enum": ["REQUIREMENTS", "CONTEXT", "DESIGN", "CHANGE", "VERIFICATION", "ERROR", "RELEASE_READINESS"]
232
+ },
233
+ "status": {
234
+ "type": "string",
235
+ "enum": ["PASS", "FAIL", "PENDING", "SKIPPED"]
236
+ },
237
+ "artifact_ref": {
238
+ "$ref": "#/$defs/project_path"
239
+ },
240
+ "reason": {
241
+ "type": "string",
242
+ "minLength": 3
243
+ }
244
+ },
245
+ "additionalProperties": false
246
+ }
247
+ }
248
+ },
249
+ "additionalProperties": false
250
+ },
251
+ "message": {
252
+ "type": "object",
253
+ "required": [
254
+ "schema_version",
255
+ "artifact_type",
256
+ "message_id",
257
+ "task_id",
258
+ "attempt",
259
+ "timestamp",
260
+ "from",
261
+ "to",
262
+ "type",
263
+ "status",
264
+ "summary",
265
+ "requirement_refs",
266
+ "artifact_refs",
267
+ "decision_refs",
268
+ "evidence_refs",
269
+ "blockers",
270
+ "next_action",
271
+ "retry_count"
272
+ ],
273
+ "properties": {
274
+ "schema_version": {
275
+ "type": "integer",
276
+ "const": 1
277
+ },
278
+ "artifact_type": {
279
+ "type": "string",
280
+ "const": "agent_message"
281
+ },
282
+ "message_id": {
283
+ "type": "string",
284
+ "pattern": "^msg-[A-Za-z0-9_-]+$"
285
+ },
286
+ "task_id": {
287
+ "type": "string",
288
+ "pattern": "^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$"
289
+ },
290
+ "attempt": {
291
+ "type": "integer",
292
+ "minimum": 1
293
+ },
294
+ "timestamp": {
295
+ "$ref": "#/$defs/timestamp"
296
+ },
297
+ "from": {
298
+ "$ref": "#/$defs/role_id"
299
+ },
300
+ "to": {
301
+ "type": "array",
302
+ "minItems": 1,
303
+ "items": {
304
+ "$ref": "#/$defs/role_id"
305
+ },
306
+ "uniqueItems": true
307
+ },
308
+ "type": {
309
+ "type": "string",
310
+ "enum": ["REQUEST", "STATUS", "QUESTION", "DECISION_REQUIRED", "HANDOFF", "FINDING", "REWORK_REQUEST", "RESULT"]
311
+ },
312
+ "status": {
313
+ "type": "string",
314
+ "enum": ["INFO", "PENDING", "PASS", "FAIL", "BLOCKED"]
315
+ },
316
+ "summary": {
317
+ "type": "string",
318
+ "minLength": 1
319
+ },
320
+ "requirement_refs": {
321
+ "type": "array",
322
+ "items": {
323
+ "type": "string",
324
+ "pattern": "^(?:FR|NFR)-[0-9]{3}$"
325
+ },
326
+ "uniqueItems": true
327
+ },
328
+ "artifact_refs": {
329
+ "$ref": "#/$defs/project_refs"
330
+ },
331
+ "decision_refs": {
332
+ "type": "array",
333
+ "items": {
334
+ "type": "string",
335
+ "pattern": "^DEC-[0-9]{3}$"
336
+ },
337
+ "uniqueItems": true
338
+ },
339
+ "evidence_refs": {
340
+ "$ref": "#/$defs/project_refs"
341
+ },
342
+ "blockers": {
343
+ "type": "array",
344
+ "items": {
345
+ "type": "string",
346
+ "minLength": 1
347
+ },
348
+ "uniqueItems": true
349
+ },
350
+ "next_action": {
351
+ "type": "string",
352
+ "minLength": 3
353
+ },
354
+ "retry_count": {
355
+ "type": "integer",
356
+ "minimum": 0
357
+ }
358
+ },
359
+ "additionalProperties": false
360
+ },
361
+ "event": {
362
+ "type": "object",
363
+ "required": [
364
+ "schema_version",
365
+ "artifact_type",
366
+ "event_id",
367
+ "task_id",
368
+ "attempt",
369
+ "sequence",
370
+ "timestamp",
371
+ "actor",
372
+ "from",
373
+ "to",
374
+ "reason",
375
+ "artifact_refs",
376
+ "evidence_refs"
377
+ ],
378
+ "properties": {
379
+ "schema_version": {
380
+ "type": "integer",
381
+ "const": 1
382
+ },
383
+ "artifact_type": {
384
+ "type": "string",
385
+ "const": "state_event"
386
+ },
387
+ "event_id": {
388
+ "type": "string",
389
+ "pattern": "^evt-[A-Za-z0-9_-]+$"
390
+ },
391
+ "task_id": {
392
+ "type": "string",
393
+ "pattern": "^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$"
394
+ },
395
+ "attempt": {
396
+ "type": "integer",
397
+ "minimum": 1
398
+ },
399
+ "sequence": {
400
+ "type": "integer",
401
+ "minimum": 1
402
+ },
403
+ "timestamp": {
404
+ "$ref": "#/$defs/timestamp"
405
+ },
406
+ "actor": {
407
+ "$ref": "#/$defs/role_id"
408
+ },
409
+ "from": {
410
+ "$ref": "#/$defs/state"
411
+ },
412
+ "to": {
413
+ "$ref": "#/$defs/state"
414
+ },
415
+ "reason": {
416
+ "type": "string",
417
+ "minLength": 3
418
+ },
419
+ "artifact_refs": {
420
+ "$ref": "#/$defs/project_refs"
421
+ },
422
+ "evidence_refs": {
423
+ "$ref": "#/$defs/project_refs"
424
+ },
425
+ "resume_state": {
426
+ "$ref": "#/$defs/state"
427
+ }
428
+ },
429
+ "additionalProperties": false
430
+ }
431
+ }
432
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: verify-docs
3
- description: 프로젝트 문서가 5단계 구조(01~05), 메타데이터, Related Documents, Backlog Context Lock, HTML UI Preview Gate, UI-First Gate, Component & Library Planning Gate를 준수하는지 검증합니다. 문서 생성/수정 후, PR 사용.
3
+ description: 프로젝트 문서가 5단계 구조, 메타데이터, Related Documents, Backlog Context Lock, UI/Component Gate, Agent Harness Receipt를 준수하는지 검증합니다. 문서 생성·수정 또는 PR 전에 사용합니다.
4
4
  ---
5
5
 
6
6
  # 문서 구조 검증
@@ -16,8 +16,9 @@ description: 프로젝트 문서가 5단계 구조(01~05), 메타데이터, Rela
16
16
  6. UI-First Gate
17
17
  7. Pre-Code Technical Brief
18
18
  8. Component & Library Planning Gate
19
- 9. Rubric-First Writing
20
- 10. rules-product Gate Out 조건
19
+ 9. Agent Harness Receipts
20
+ 10. Rubric-First Writing
21
+ 11. rules-product Gate Out 조건
21
22
 
22
23
  ## 실행 시점
23
24
 
@@ -69,6 +70,7 @@ AGENTS.md 또는 `docs/01_Concept_Design/00_COLLABORATION_GUIDE.md`를 읽어
69
70
  - [ ] 각 작업 항목에 `Related HTML Preview`가 있는가?
70
71
  - [ ] 각 작업 항목에 `Related Technical Docs`가 있는가?
71
72
  - [ ] 각 작업 항목에 `Related QA Docs`가 있는가?
73
+ - [ ] 각 작업 항목에 `Work Type`이 `code`, `deploy`, `docs`, `prototype` 중 하나로 기록되어 있는가?
72
74
  - [ ] 각 작업 항목에 `Implementation Preconditions`가 있는가?
73
75
  - [ ] 각 작업 항목에 `Component & Library Plan`이 있는가?
74
76
  - [ ] 각 작업 항목에 `Acceptance Criteria`가 있는가?
@@ -83,6 +85,19 @@ AGENTS.md 또는 `docs/01_Concept_Design/00_COLLABORATION_GUIDE.md`를 읽어
83
85
 
84
86
  위 항목 중 하나라도 누락되면 Backlog Context Lock은 Fail로 처리한다.
85
87
 
88
+ `code`와 `deploy` 작업은 추가로 확인한다.
89
+
90
+ - [ ] Context Receipt의 상태가 PASS인가?
91
+ - [ ] `Required References Read`가 Related 필드의 모든 실제 링크를 포함하는가?
92
+ - [ ] Context Receipt에 Constraints와 Conflicts가 있는가?
93
+ - [ ] Change Receipt가 구현 범위와 기본 검사를 요약하는가?
94
+ - [ ] Done 또는 PR 준비 작업에 Verification Receipt가 있는가?
95
+ - [ ] Verification Receipt의 상태가 PASS이고 FAIL 결과가 없는가?
96
+ - [ ] 실행 명령, 결과, 미실행 검사 사유가 있는가?
97
+ - [ ] Detailed Evidence가 QA 문서 또는 PR을 링크하는가?
98
+
99
+ 처음 5개 실제 작업의 `warning` 기간에는 Receipt 누락을 경고로 기록한다. `blocking` 전환 후에는 Context Receipt 누락이 구현을, Verification Receipt 누락이 Done·PR·배포를 차단한다.
100
+
86
101
  ### Step 5: HTML UI Preview Gate 검사
87
102
 
88
103
  `docs/02_UI_Screens/`와 `docs/02_UI_Screens/previews/`를 함께 확인한다.
@@ -135,7 +150,18 @@ HTML Preview가 없거나 링크·사용자 확인 기록이 누락되면 HTML U
135
150
 
136
151
  컴포넌트·라이브러리 계획이 없어 구현자가 임의 패키지 설치나 중복 컴포넌트 생성을 할 수밖에 없으면 Component & Library Planning Gate는 Fail로 처리한다.
137
152
 
138
- ### Step 9: Rubric-First Writing 검사
153
+ ### Step 9: Agent Harness Receipt 검사
154
+
155
+ 대상 `code` 또는 `deploy` 작업에 대해 warning 기간에는 `--strict` 없이 실행해 발견 사항과 사용자 확인을 기록한다. blocking 전환 후에는 다음 명령을 실행한다.
156
+
157
+ ```bash
158
+ npx solmate-skills preflight TASK-ID --strict
159
+ npx solmate-skills verify TASK-ID --strict
160
+ ```
161
+
162
+ blocking 모드에서 두 명령 중 하나라도 non-zero이면 Agent Harness Gate는 Fail이다. warning 모드의 WARN을 PASS로 기록하면 안 된다. `docs`와 `prototype`은 `N/A - advisory work type`으로 기록한다.
163
+
164
+ ### Step 10: Rubric-First Writing 검사
139
165
 
140
166
  | 레이어 | 기준 |
141
167
  |:---|:---|
@@ -145,7 +171,7 @@ HTML Preview가 없거나 링크·사용자 확인 기록이 누락되면 HTML U
145
171
  | Technical_Specs (Layer 3) | Functionality, UX (latency), Open-source 언급 (권장) |
146
172
  | Logic_Progress (Layer 4) | Functionality, UX 언급 (권장) |
147
173
 
148
- ### Step 10: Gate Out 조건 검사
174
+ ### Step 11: Gate Out 조건 검사
149
175
 
150
176
  rules-product 기준으로 각 Phase의 필수 문서 존재 여부를 확인한다.
151
177
 
@@ -168,7 +194,7 @@ rules-product 기준으로 각 Phase의 필수 문서 존재 여부를 확인한
168
194
  - [ ] `docs/04_Logic_Progress/00_ROADMAP.md`
169
195
  - [ ] `docs/05_QA_Validation/02_QA_CHECKLIST.md`
170
196
 
171
- ### Step 11: 검증 보고서 출력
197
+ ### Step 12: 검증 보고서 출력
172
198
 
173
199
  검사 완료 후 아래 형식으로 결과를 출력한다:
174
200
 
@@ -186,6 +212,7 @@ rules-product 기준으로 각 Phase의 필수 문서 존재 여부를 확인한
186
212
  | UI-First Gate | Pass / Fail | 화면·동선·데이터 흐름 누락 목록 |
187
213
  | Pre-Code Technical Brief | Pass / Fail | 데이터·API·상태 계약 누락 목록 |
188
214
  | Component & Library Planning Gate | Pass / Fail | 컴포넌트·라이브러리 계획 누락 목록 |
215
+ | Agent Harness Receipts | Pass / Fail / N/A | Context·Verification Receipt 및 상세 근거 |
189
216
  | Rubric-First | Pass / Fail | |
190
217
  | Gate Out 조건 | Pass / Fail | 미충족 파일 목록 |
191
218
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Docs Verification"
3
- short_description: "Audit docs, metadata, and HTML previews"
4
- default_prompt: "Use $verify-docs to audit five-layer docs, metadata, links, and HTML UI previews."
3
+ short_description: "Audit docs, links, previews, and receipts"
4
+ default_prompt: "Use $verify-docs to audit five-layer docs, metadata, links, HTML UI previews, and Agent Harness Context and Verification Receipts."
@@ -1,15 +1,22 @@
1
1
  ---
2
2
  name: verify-implementation
3
- description: 프로젝트의 모든 verify 스킬을 동적으로 탐색하여 순차 실행하고, YAGNI/KISS/DRY Gate를 포함한 통합 검증 보고서를 생성합니다.
3
+ description: 프로젝트의 모든 verify 스킬을 동적으로 탐색해 순차 실행하고, YAGNI/KISS/DRY 독립 Agent Harness Receipt를 포함한 통합 검증 보고서를 생성합니다.
4
4
  disable-model-invocation: true
5
5
  argument-hint: "[선택사항: 특정 verify 스킬 이름]"
6
6
  ---
7
7
 
8
8
  # 구현 검증 (Master)
9
9
 
10
+ > **Human Quick Reference**
11
+ > - **When**: Pre-PR or pre-release full check (default verify entry point)
12
+ > - **Invoke**: `/verify-implementation`
13
+ > - **Prerequisites**: Changes to verify; runs verify-* skills based on `git diff`
14
+ > - **Next**: Fix failures, then re-run; use individual verify-* skills for scoped checks
15
+ > - **Guide**: project root `USAGE.md` (English default, Korean below; copied on install)
16
+
10
17
  ## 목적
11
18
 
12
- 프로젝트에 존재하는 모든 `verify-*` 스킬을 동적으로 탐색하여 순차적으로 실행하고 통합 검증을 수행합니다. 기본 순서를 따르되, 변경 파일과 프로젝트 특성에 따라 해당 없는 스킬은 `N/A - 사유`로 기록합니다. 코드 변경이 있으면 YAGNI/KISS/DRY Gate 통과 여부를 통합 보고서에 반드시 포함합니다.
19
+ 프로젝트에 존재하는 모든 `verify-*` 스킬을 동적으로 탐색하여 순차적으로 실행하고 통합 검증을 수행합니다. 기본 순서를 따르되, 변경 파일과 프로젝트 특성에 따라 해당 없는 스킬은 `N/A - 사유`로 기록합니다. 코드 변경이 있으면 YAGNI/KISS/DRY Gate Agent Harness Verification Receipt 통과 여부를 통합 보고서에 반드시 포함합니다.
13
20
 
14
21
  ## 기본 실행 순서
15
22
 
@@ -55,6 +62,8 @@ Gate: Quality Gate + YAGNI/KISS/DRY Gate 진행 중
55
62
  ### Step 3: 순차 실행
56
63
  기본 실행 순서대로 각 스킬의 `Workflow`, `Exceptions`, `Related Files`를 파싱하여 개별 검사를 수행합니다. 앞 단계가 Fail이면 뒤 단계는 실행하되, 해당 Fail이 뒤 단계 판단을 왜곡하는 경우 `Blocked - 사유`로 표시합니다.
57
64
 
65
+ `code`와 `deploy` 백로그 작업은 `rules-workflow/resources/agent-harness-contract.md`에 따라 Implementation Agent와 분리된 읽기 전용 Verification Agent가 검증한다. 검증자는 발견 사항을 수정하지 않으며, 수정 후에는 새 Verification Agent 실행으로 다시 확인한다.
66
+
58
67
  ### Step 4: 통합 보고서 생성
59
68
  PASS/FAIL 통계와 발견된 이슈 목록을 생성합니다.
60
69
  보고서 상단에는 `Flow Status Block`을 다시 포함하고, Gate 상태를 `통과`, `미통과`, `Blocked`, `N/A` 중 하나로 표시합니다.
@@ -64,6 +73,10 @@ PASS/FAIL 통계와 발견된 이슈 목록을 생성합니다.
64
73
  - verify-code Area 3 결과: `delete`, `stdlib`, `native`, `yagni`, `shrink` 태그 발생 여부
65
74
  - Prototype/Spike Exception: 정보성 체크로 처리했는지 여부
66
75
  - Safety Exception: 단순화 명목으로 검증·보안·에러 처리·접근성·데이터 보존을 제거하지 않았는지 여부
76
+ - Context Receipt: 관련 문서 전체 확인 및 PASS 여부
77
+ - Verification Receipt: 독립 검증 상태, 명령 결과, 미실행 사유, QA 문서 또는 PR 상세 근거
78
+
79
+ warning 기간에는 Verification Receipt 발견 사항과 사용자 진행 승인을 보고합니다. blocking 전환 후 PASS Verification Receipt가 없거나 `npx solmate-skills verify TASK-ID --strict`가 실패하면 PR·merge·publish·deploy 차단 항목으로 보고합니다.
67
80
 
68
81
  ### Step 5: 수정 옵션 제공
69
82
  자동 수정 또는 개별 수정을 사용자에게 제안합니다.
@@ -95,6 +108,12 @@ PASS/FAIL 통계와 발견된 이슈 목록을 생성합니다.
95
108
  - Prototype/Spike Exception: Applied / Not Applied / N/A
96
109
  - Safety Exception: Pass / Fail / N/A
97
110
 
111
+ ### Agent Harness Gate
112
+ - Context Receipt: Pass / Fail / N/A
113
+ - Independent Verification Agent: Pass / Fail / Degraded / N/A
114
+ - Verification Receipt: Pass / Fail / N/A
115
+ - Detailed Evidence: QA document / PR / Missing
116
+
98
117
  ### 재검증 필요 항목
99
118
  - ...
100
119
  ```
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Implementation Verification"
3
- short_description: "Run all verification skills and gates"
4
- default_prompt: "Use $verify-implementation to discover and run the relevant verify skills, including YAGNI/KISS/DRY gates, before PR."
3
+ short_description: "Run independent verification skills and gates"
4
+ default_prompt: "Use $verify-implementation to run relevant verify skills, confirm minimal implementation, and require independent Verification Receipt evidence before PR."
@@ -14,6 +14,7 @@ argument-hint: "[선택사항: 특정 스킬 이름 또는 점검 영역]"
14
14
 
15
15
  - 새 스킬 추가 또는 기존 스킬 수정 후
16
16
  - `bin/cli.js`, `README.md`, `AGENTS.md`, `package.json` 수정 후
17
+ - `rules-workflow/resources/`, `rules-workflow/adapters/claude/`, `bin/harness-check.js` 수정 후
17
18
  - npm 배포 또는 태그 생성 전
18
19
  - `rules-workflow` Step 17 또는 `verify-implementation` 실행 시
19
20
 
@@ -109,20 +110,26 @@ print("metadata ok" if not bad else "\n".join(bad))'
109
110
 
110
111
  ---
111
112
 
112
- ## Check 4: README, AGENTS, package 버전 동기화
113
+ ## Check 4: README, AGENTS, USAGE, package 버전 동기화
113
114
 
114
115
  - `package.json` 버전과 README의 최신 버전 문구가 일치하는지 확인한다.
116
+ - README가 `USAGE.md`를 링크하는지 확인한다.
117
+ - `bin/cli.js`가 `USAGE.md`를 프로젝트 루트로 복사하는지 확인한다.
115
118
  - README와 AGENTS의 verify 목록이 실제 `verify-*` 디렉터리와 맞는지 확인한다.
116
119
 
117
120
  ```bash
118
121
  node -p "require('./package.json').version"
119
122
  grep -n "What's New in" README.md
123
+ grep -n "USAGE.md" README.md AGENTS.md
124
+ grep -n "PACKAGE_DOC_FILES\\|installPackageDocs" bin/cli.js
120
125
  find . -maxdepth 1 -type d -name 'verify-*' -exec basename {} \; | sort
121
126
  grep -n "verify-" README.md AGENTS.md
122
127
  ```
123
128
 
124
129
  - 체크:
125
130
  - [ ] README 최신 버전 문구가 `package.json`과 일치하는가?
131
+ - [ ] README·AGENTS가 `USAGE.md`를 참조하는가?
132
+ - [ ] CLI `install`이 `USAGE.md`를 프로젝트 루트로 복사하는가?
126
133
  - [ ] README Available Skills에 새 스킬이 반영되었는가?
127
134
  - [ ] AGENTS.md 품질 검증 목록에 새 verify 스킬이 반영되었는가?
128
135
 
@@ -144,6 +151,31 @@ npm_config_cache=/private/tmp/solmate-npm-cache npm pack --dry-run
144
151
 
145
152
  ---
146
153
 
154
+ ## Check 6: Agent Harness 검증
155
+
156
+ ```bash
157
+ npm test
158
+ node bin/cli.js list
159
+ node bin/cli.js preflight TASK-TEST --backlog /path/to/fixture.md --strict
160
+ node bin/cli.js validate-harness manifest /path/to/manifest.json --strict
161
+ node bin/cli.js validate-harness events /path/to/events.jsonl --manifest /path/to/manifest.json --strict
162
+ ```
163
+
164
+ - 체크:
165
+ - [ ] Context Receipt가 모든 Related 링크를 읽지 않으면 strict preflight가 차단되는가?
166
+ - [ ] Verification Receipt의 명령 결과 또는 QA/PR 근거가 없으면 strict verify가 차단되는가?
167
+ - [ ] warning 모드는 발견 사항을 출력하되 exit 0인가?
168
+ - [ ] docs/prototype 작업은 advisory인가?
169
+ - [ ] `install agents`가 `.claude/agents/solmate-*.md`만 추가하고 기존 에이전트를 보존하는가?
170
+ - [ ] `install rules-workflow`와 `install all`이 Claude 어댑터를 함께 설치하는가?
171
+ - [ ] Codex 지침이 지원되지 않는 `.codex/agents/` 형식을 가정하지 않고 공통 계약을 참조하는가?
172
+ - [ ] v1 manifest, message, events fixture가 구조화 검증을 통과하는가?
173
+ - [ ] 불법 상태 전환, 비-Coordinator 전환, 증거 누락, 겹치는 쓰기 소유권이 strict에서 exit 1로 차단되는가?
174
+ - [ ] message와 events 검사가 유효한 manifest 없이 PASS를 반환하지 않는가?
175
+ - [ ] 기존 Receipt fixture를 수정하지 않고 `preflight`와 `verify` 회귀 테스트가 통과하는가?
176
+
177
+ ---
178
+
147
179
  ## 보고 형식
148
180
 
149
181
  ```
@@ -156,6 +188,7 @@ npm_config_cache=/private/tmp/solmate-npm-cache npm pack --dry-run
156
188
  | agents/openai.yaml | Pass / Fail | |
157
189
  | README/AGENTS 동기화 | Pass / Fail | |
158
190
  | npm pack dry-run | Pass / Fail | |
191
+ | Agent Harness | Pass / Fail | Receipt CLI, Claude adapters, Codex contract |
159
192
 
160
193
  ### 수정 필요 항목
161
194
  - [높음] ...