Sprint 006 전체 구현 — F3/F2 의 QA 측면 완성:
Schema:
- src/qa/schema.ts — QaTemplate, QaChecklistResult, QaArtifact Zod 스키마
- Zod + DodCheck 재사용
Templates (6종 YAML):
- qa-templates/scaffold-v1.yaml — README/LICENSE/gitignore/lockfile/strict
- qa-templates/feature-v1.yaml — tests/typecheck/no-console/no-any/tests-added
- qa-templates/bugfix-v1.yaml — regression-test/root-cause/no-scope-creep
- qa-templates/refactor-v1.yaml — tests/typecheck/no-behavior-change
- qa-templates/migration-v1.yaml — rollback/dry-run/data-loss/backup (critical)
- qa-templates/infra-v1.yaml — config-validated/secrets/rollback
Core:
- src/qa/template.ts — YAML loader, extends 체인 resolution, 프로젝트별 extras
- src/qa/verdict.ts — verdict 규칙 (critical/major → REQUEST_CHANGES,
minor/recommendation 만 → APPROVE_WITH_NITS, 절대 REQUEST_CHANGES 안 됨)
- src/qa/runtime.ts — runQaTemplate: Contract check handlers 재사용
manual 체크는 resolver 주입 가능 (없으면 SKIP 기본값)
CLI:
- rails qa run <type> [-s sprint-id] [-w workdir]
- rails qa show <artifact-id>
- rails qa templates (목록)
Tests (19 신규, 101 total pass):
- computeVerdict 7가지 시나리오 (APPROVE / APPROVE_WITH_NITS / REQUEST_CHANGES / ABORT)
- minor-only 는 절대 REQUEST_CHANGES 안 된다는 rule 명시 테스트
- Template loader + listTemplates + extends merge
- runtime: file_exists pass/fail + manual resolver 주입 + artifact 저장
- scaffold-v1 실파일 로드 확인
검증: tsc --noEmit ✓ | vitest 101/101 ✓ | build ✓
rails qa templates → 6개 전부 출력 ✓
사용자 메모리 feedback_qa_thorough.md 준수:
- 체크 항목 수 제한 없음
- 각 템플릿이 타입별로 세분화됨
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
67 lines
1.9 KiB
YAML
67 lines
1.9 KiB
YAML
template: feature-v1
|
|
version: v1
|
|
appliesTo: [feature]
|
|
|
|
requiredChecks:
|
|
- id: tests-pass
|
|
description: 전체 테스트 통과
|
|
kind: command_success
|
|
spec:
|
|
command: pnpm test
|
|
timeoutMs: 120000
|
|
expectExitCode: 0
|
|
blocking: true
|
|
severity: major
|
|
|
|
- id: typecheck
|
|
description: TypeScript 타입 체크 통과
|
|
kind: command_success
|
|
spec:
|
|
command: pnpm tsc --noEmit
|
|
timeoutMs: 60000
|
|
expectExitCode: 0
|
|
blocking: true
|
|
severity: major
|
|
|
|
- id: no-console-log
|
|
description: console.* 호출 없음 (pino 사용)
|
|
kind: manual
|
|
spec:
|
|
question: 모든 새 코드가 pino logger 를 사용하고 console.* 직접 호출이 없는가?
|
|
guidance: grep -rn 'console\.' src/ 로 확인. 테스트 코드는 예외.
|
|
blocking: true
|
|
severity: major
|
|
|
|
- id: no-any-type
|
|
description: any 타입 신규 도입 없음
|
|
kind: manual
|
|
spec:
|
|
question: Zod 경계 밖에서 any 타입이 도입되지 않았는가?
|
|
guidance: 외부 입력은 Zod 검증 후 타입이 확정됨. any 는 절대 금지.
|
|
blocking: true
|
|
severity: major
|
|
|
|
- id: tests-added
|
|
description: 새 기능에 대한 테스트가 추가됨
|
|
kind: manual
|
|
spec:
|
|
question: 이번 변경 사항에 대한 단위/통합 테스트가 최소 1개 추가되었는가?
|
|
blocking: true
|
|
severity: major
|
|
|
|
- id: error-handling
|
|
description: 주요 에러 경로에 Result / try-catch 적용
|
|
kind: manual
|
|
spec:
|
|
question: 외부 시스템 호출 (네트워크, DB, subprocess) 에러가 적절히 처리되는가?
|
|
blocking: false
|
|
severity: minor
|
|
|
|
- id: docs-updated
|
|
description: README / .plans 에 변경 반영
|
|
kind: manual
|
|
spec:
|
|
question: 사용자 관찰 가능한 변경 사항이 README 또는 .plans 에 반영되었는가?
|
|
blocking: false
|
|
severity: minor
|