Files
hanarang-rails/.claude/rules/stack.md
이랑이 bac114d469 docs(plans): Sprint 000 — 전체 플랜 문서 세트 작성
- CLAUDE.md 를 .claude/rules/ 4파일로 분할 (project/stack/principles/workflow)
- Plans.md 루트 인덱스 (스프린트 목차 + 참조만)
- hooks/ pre/post-tool.sh 스켈레톤 (no-op, Sprint 002에서 구현)
- .plans/OVERVIEW.md — 목표/범위/성공기준 8개
- .plans/failure-audit.md — F1~F6 실패 감사 (증거 기반)
- .plans/design/ 6개 문서:
  * state-machine.md (XState v5 FSM 설계)
  * sprint-contract.md (Zod schema + validator)
  * skill-enforcement.md (4계층 방어)
  * handoff.md (상태 전이 기반 자매 통신)
  * retry-policy.md (backoff + escalation)
  * qa-template.md (체크리스트 runtime)
- .plans/sprints/ 8개 스프린트 명세 (SPRINT-000~007)
- .plans/migration/from-hanarang-harness.md (자산 매트릭스 + 단계별 가이드)

총 17개 문서, 약 2146 lines.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 12:36:49 +09:00

1.0 KiB

기술 스택

레이어 선택
런타임 Node 22 + TypeScript (strict)
패키지 pnpm (npm/yarn 금지)
상태 머신 XState v5
스키마 Zod
영속화 SQLite (better-sqlite3) 단일 파일
프로세스 execa + AbortController
CLI citty
로그 pino (구조화 JSON)
디스코드 discord.js v14
테스트 Vitest

코딩 룰

  • TypeScript strict 모드 고정 (strict: true + noUncheckedIndexedAccess: true)
  • Zod 검증 경계 — 모든 외부 입력(파일, 네트워크, subprocess stdout)은 Zod 로 파싱 후 사용
  • async/await 만 사용.then() 체이닝 금지
  • Result<T, E> 패턴 — throw 대신 neverthrow 또는 자체 Result 로 에러 표면화
  • 로그는 pinoconsole.* 금지
  • 파일 경로는 node:path + import.meta.url__dirname 금지
  • 환경변수는 Zod schema 로 검증된 env 객체 통해서만process.env.X 직접 참조 금지