# 기술 스택 | 레이어 | 선택 | |---|---| | 런타임 | **Node 22 + TypeScript (strict)** | | 패키지 | **pnpm** (npm/yarn 금지) | | 상태 머신 | **XState v5** | | 스키마 | **Zod** | | 영속화 | **MariaDB** (Prisma ORM) | | 프로세스 | **execa + AbortController** | | CLI | **citty** | | 로그 | **pino** (구조화 JSON) | | 디스코드 | **discord.js v14** | | 테스트 | **Vitest** | ## 코딩 룰 - **TypeScript strict 모드 고정** (`strict: true` + `noUncheckedIndexedAccess: true`) - **Zod 검증 경계** — 모든 외부 입력(파일, 네트워크, subprocess stdout)은 Zod 로 파싱 후 사용 - **async/await 만 사용** — `.then()` 체이닝 금지 - **Result 패턴** — throw 대신 `neverthrow` 또는 자체 Result 로 에러 표면화 - **로그는 pino** — `console.*` 금지 - **파일 경로는 `node:path` + `import.meta.url`** — `__dirname` 금지 - **환경변수는 Zod schema 로 검증된 env 객체 통해서만** — `process.env.X` 직접 참조 금지