timsquad 2.1.0 → 3.4.0

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 (438) hide show
  1. package/README.ko.md +288 -0
  2. package/README.md +170 -763
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.d.ts.map +1 -0
  5. package/dist/commands/compile.js +170 -0
  6. package/dist/commands/compile.js.map +1 -0
  7. package/dist/commands/daemon.d.ts +7 -0
  8. package/dist/commands/daemon.d.ts.map +1 -0
  9. package/dist/commands/daemon.js +229 -0
  10. package/dist/commands/daemon.js.map +1 -0
  11. package/dist/commands/feedback.d.ts +9 -0
  12. package/dist/commands/feedback.d.ts.map +1 -1
  13. package/dist/commands/feedback.js +235 -14
  14. package/dist/commands/feedback.js.map +1 -1
  15. package/dist/commands/full.js +2 -2
  16. package/dist/commands/full.js.map +1 -1
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +118 -22
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/knowledge.d.ts +3 -0
  21. package/dist/commands/knowledge.d.ts.map +1 -0
  22. package/dist/commands/knowledge.js +316 -0
  23. package/dist/commands/knowledge.js.map +1 -0
  24. package/dist/commands/log.d.ts +27 -0
  25. package/dist/commands/log.d.ts.map +1 -1
  26. package/dist/commands/log.js +965 -0
  27. package/dist/commands/log.js.map +1 -1
  28. package/dist/commands/meta-index.d.ts +3 -0
  29. package/dist/commands/meta-index.d.ts.map +1 -0
  30. package/dist/commands/meta-index.js +401 -0
  31. package/dist/commands/meta-index.js.map +1 -0
  32. package/dist/commands/metrics.d.ts.map +1 -1
  33. package/dist/commands/metrics.js +239 -4
  34. package/dist/commands/metrics.js.map +1 -1
  35. package/dist/commands/retro.js +154 -6
  36. package/dist/commands/retro.js.map +1 -1
  37. package/dist/commands/skills.d.ts +12 -0
  38. package/dist/commands/skills.d.ts.map +1 -0
  39. package/dist/commands/skills.js +231 -0
  40. package/dist/commands/skills.js.map +1 -0
  41. package/dist/commands/upgrade.d.ts +8 -0
  42. package/dist/commands/upgrade.d.ts.map +1 -0
  43. package/dist/commands/upgrade.js +292 -0
  44. package/dist/commands/upgrade.js.map +1 -0
  45. package/dist/commands/workflow.d.ts +3 -0
  46. package/dist/commands/workflow.d.ts.map +1 -0
  47. package/dist/commands/workflow.js +607 -0
  48. package/dist/commands/workflow.js.map +1 -0
  49. package/dist/daemon/context-writer.d.ts +16 -0
  50. package/dist/daemon/context-writer.d.ts.map +1 -0
  51. package/dist/daemon/context-writer.js +35 -0
  52. package/dist/daemon/context-writer.js.map +1 -0
  53. package/dist/daemon/entry.d.ts +7 -0
  54. package/dist/daemon/entry.d.ts.map +1 -0
  55. package/dist/daemon/entry.js +17 -0
  56. package/dist/daemon/entry.js.map +1 -0
  57. package/dist/daemon/event-queue.d.ts +52 -0
  58. package/dist/daemon/event-queue.d.ts.map +1 -0
  59. package/dist/daemon/event-queue.js +255 -0
  60. package/dist/daemon/event-queue.js.map +1 -0
  61. package/dist/daemon/file-watcher.d.ts +19 -0
  62. package/dist/daemon/file-watcher.d.ts.map +1 -0
  63. package/dist/daemon/file-watcher.js +87 -0
  64. package/dist/daemon/file-watcher.js.map +1 -0
  65. package/dist/daemon/index.d.ts +29 -0
  66. package/dist/daemon/index.d.ts.map +1 -0
  67. package/dist/daemon/index.js +296 -0
  68. package/dist/daemon/index.js.map +1 -0
  69. package/dist/daemon/jsonl-watcher.d.ts +49 -0
  70. package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
  71. package/dist/daemon/jsonl-watcher.js +258 -0
  72. package/dist/daemon/jsonl-watcher.js.map +1 -0
  73. package/dist/daemon/meta-cache.d.ts +63 -0
  74. package/dist/daemon/meta-cache.d.ts.map +1 -0
  75. package/dist/daemon/meta-cache.js +249 -0
  76. package/dist/daemon/meta-cache.js.map +1 -0
  77. package/dist/daemon/session-state.d.ts +19 -0
  78. package/dist/daemon/session-state.d.ts.map +1 -0
  79. package/dist/daemon/session-state.js +132 -0
  80. package/dist/daemon/session-state.js.map +1 -0
  81. package/dist/daemon/shutdown.d.ts +21 -0
  82. package/dist/daemon/shutdown.d.ts.map +1 -0
  83. package/dist/daemon/shutdown.js +164 -0
  84. package/dist/daemon/shutdown.js.map +1 -0
  85. package/dist/index.js +24 -3
  86. package/dist/index.js.map +1 -1
  87. package/dist/lib/agent-composer.d.ts +38 -0
  88. package/dist/lib/agent-composer.d.ts.map +1 -0
  89. package/dist/lib/agent-composer.js +128 -0
  90. package/dist/lib/agent-composer.js.map +1 -0
  91. package/dist/lib/agent-generator.d.ts +22 -0
  92. package/dist/lib/agent-generator.d.ts.map +1 -0
  93. package/dist/lib/agent-generator.js +150 -0
  94. package/dist/lib/agent-generator.js.map +1 -0
  95. package/dist/lib/ast-parser.d.ts +11 -0
  96. package/dist/lib/ast-parser.d.ts.map +1 -0
  97. package/dist/lib/ast-parser.js +282 -0
  98. package/dist/lib/ast-parser.js.map +1 -0
  99. package/dist/lib/compile-rules.d.ts +66 -0
  100. package/dist/lib/compile-rules.d.ts.map +1 -0
  101. package/dist/lib/compile-rules.js +114 -0
  102. package/dist/lib/compile-rules.js.map +1 -0
  103. package/dist/lib/compiler.d.ts +105 -0
  104. package/dist/lib/compiler.d.ts.map +1 -0
  105. package/dist/lib/compiler.js +368 -0
  106. package/dist/lib/compiler.js.map +1 -0
  107. package/dist/lib/config.d.ts +7 -2
  108. package/dist/lib/config.d.ts.map +1 -1
  109. package/dist/lib/config.js +34 -3
  110. package/dist/lib/config.js.map +1 -1
  111. package/dist/lib/meta-index.d.ts +19 -0
  112. package/dist/lib/meta-index.d.ts.map +1 -0
  113. package/dist/lib/meta-index.js +573 -0
  114. package/dist/lib/meta-index.js.map +1 -0
  115. package/dist/lib/project.js +1 -1
  116. package/dist/lib/project.js.map +1 -1
  117. package/dist/lib/skill-generator.d.ts +32 -0
  118. package/dist/lib/skill-generator.d.ts.map +1 -0
  119. package/dist/lib/skill-generator.js +187 -0
  120. package/dist/lib/skill-generator.js.map +1 -0
  121. package/dist/lib/template.d.ts +16 -2
  122. package/dist/lib/template.d.ts.map +1 -1
  123. package/dist/lib/template.js +115 -20
  124. package/dist/lib/template.js.map +1 -1
  125. package/dist/lib/ui-index.d.ts +12 -0
  126. package/dist/lib/ui-index.d.ts.map +1 -0
  127. package/dist/lib/ui-index.js +239 -0
  128. package/dist/lib/ui-index.js.map +1 -0
  129. package/dist/lib/ui-parser.d.ts +12 -0
  130. package/dist/lib/ui-parser.d.ts.map +1 -0
  131. package/dist/lib/ui-parser.js +472 -0
  132. package/dist/lib/ui-parser.js.map +1 -0
  133. package/dist/lib/update-check.d.ts +6 -0
  134. package/dist/lib/update-check.d.ts.map +1 -0
  135. package/dist/lib/update-check.js +121 -0
  136. package/dist/lib/update-check.js.map +1 -0
  137. package/dist/lib/upgrade-backup.d.ts +33 -0
  138. package/dist/lib/upgrade-backup.d.ts.map +1 -0
  139. package/dist/lib/upgrade-backup.js +101 -0
  140. package/dist/lib/upgrade-backup.js.map +1 -0
  141. package/dist/lib/version.d.ts +19 -0
  142. package/dist/lib/version.d.ts.map +1 -0
  143. package/dist/lib/version.js +35 -0
  144. package/dist/lib/version.js.map +1 -0
  145. package/dist/lib/workflow-state.d.ts +48 -0
  146. package/dist/lib/workflow-state.d.ts.map +1 -0
  147. package/dist/lib/workflow-state.js +67 -0
  148. package/dist/lib/workflow-state.js.map +1 -0
  149. package/dist/types/config.d.ts +103 -2
  150. package/dist/types/config.d.ts.map +1 -1
  151. package/dist/types/config.js +184 -9
  152. package/dist/types/config.js.map +1 -1
  153. package/dist/types/feedback.d.ts +7 -0
  154. package/dist/types/feedback.d.ts.map +1 -1
  155. package/dist/types/feedback.js +1 -1
  156. package/dist/types/feedback.js.map +1 -1
  157. package/dist/types/index.d.ts +3 -0
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/types/index.js +3 -0
  160. package/dist/types/index.js.map +1 -1
  161. package/dist/types/meta-index.d.ts +146 -0
  162. package/dist/types/meta-index.d.ts.map +1 -0
  163. package/dist/types/meta-index.js +7 -0
  164. package/dist/types/meta-index.js.map +1 -0
  165. package/dist/types/project.d.ts +19 -3
  166. package/dist/types/project.d.ts.map +1 -1
  167. package/dist/types/project.js +23 -0
  168. package/dist/types/project.js.map +1 -1
  169. package/dist/types/task-log.d.ts +208 -0
  170. package/dist/types/task-log.d.ts.map +1 -0
  171. package/dist/types/task-log.js +6 -0
  172. package/dist/types/task-log.js.map +1 -0
  173. package/dist/types/ui-meta.d.ts +118 -0
  174. package/dist/types/ui-meta.d.ts.map +1 -0
  175. package/dist/types/ui-meta.js +7 -0
  176. package/dist/types/ui-meta.js.map +1 -0
  177. package/package.json +12 -4
  178. package/templates/base/agents/base/tsq-architect.md +68 -0
  179. package/templates/base/agents/base/tsq-dba.md +56 -0
  180. package/templates/base/agents/base/tsq-designer.md +72 -0
  181. package/templates/base/agents/base/tsq-developer.md +67 -0
  182. package/templates/base/agents/base/tsq-qa.md +55 -0
  183. package/templates/base/agents/base/tsq-security.md +65 -0
  184. package/templates/base/agents/overlays/domain/general-web/_common.md +11 -0
  185. package/templates/base/agents/overlays/domain/mobile/_common.md +13 -0
  186. package/templates/base/agents/overlays/platform/claude-code.md +12 -0
  187. package/templates/base/config.template.yaml +213 -0
  188. package/templates/base/knowledge/checklists/accessibility.md +37 -0
  189. package/templates/base/knowledge/checklists/architecture-review.md +28 -0
  190. package/templates/base/knowledge/checklists/database-standards.md +84 -0
  191. package/templates/base/knowledge/checklists/design-reference.md +97 -0
  192. package/templates/base/knowledge/checklists/security.md +50 -0
  193. package/templates/base/knowledge/checklists/ssot-validation.md +19 -0
  194. package/templates/base/knowledge/domains/_template.md +16 -0
  195. package/templates/base/knowledge/platforms/_template.md +16 -0
  196. package/templates/base/knowledge/templates/sequence-report.md +44 -0
  197. package/templates/base/knowledge/templates/task-result.md +105 -0
  198. package/templates/base/skills/_template/SKILL.md +59 -0
  199. package/templates/base/skills/_template/references/_template.md +35 -0
  200. package/templates/base/skills/_template/rules/_sections.md +34 -0
  201. package/templates/base/skills/_template/rules/_template.md +32 -0
  202. package/templates/base/skills/_template/scripts/_template.sh +31 -0
  203. package/templates/base/skills/architecture/SKILL.md +54 -0
  204. package/templates/base/skills/architecture/references/adr-template.md +50 -0
  205. package/templates/base/skills/architecture/references/api-design.md +64 -0
  206. package/templates/base/skills/backend/node/SKILL.md +81 -0
  207. package/templates/base/skills/backend/node/rules/async-patterns.md +81 -0
  208. package/templates/base/skills/backend/node/rules/deployment.md +33 -0
  209. package/templates/base/skills/backend/node/rules/env-config.md +41 -0
  210. package/templates/base/skills/backend/node/rules/error-handling.md +83 -0
  211. package/templates/base/skills/backend/node/rules/hono-app-setup.md +98 -0
  212. package/templates/base/skills/backend/node/rules/jwt-auth.md +76 -0
  213. package/templates/base/skills/backend/node/rules/middleware.md +56 -0
  214. package/templates/base/skills/backend/node/rules/testing.md +82 -0
  215. package/templates/base/skills/coding/SKILL.md +47 -0
  216. package/templates/base/skills/coding/rules/patterns.md +81 -0
  217. package/templates/base/skills/controller/SKILL.md +111 -0
  218. package/templates/base/skills/controller/references/README.md +35 -0
  219. package/templates/base/skills/controller/rules/README.md +18 -0
  220. package/templates/base/skills/database/SKILL.md +98 -0
  221. package/templates/base/skills/database/prisma/SKILL.md +57 -0
  222. package/templates/base/skills/database/prisma/rules/queries.md +133 -0
  223. package/templates/base/skills/database/prisma/rules/schema-design.md +80 -0
  224. package/templates/base/skills/frontend/nextjs/SKILL.md +59 -0
  225. package/templates/base/skills/frontend/nextjs/rules/app-router.md +138 -0
  226. package/templates/base/skills/frontend/react/SKILL.md +86 -0
  227. package/templates/base/skills/frontend/react/rules/_sections.md +88 -0
  228. package/templates/base/skills/frontend/react/rules/anti-patterns.md +67 -0
  229. package/templates/base/skills/frontend/react/rules/async-api-routes.md +38 -0
  230. package/templates/base/skills/frontend/react/rules/async-defer-await.md +80 -0
  231. package/templates/base/skills/frontend/react/rules/async-dependencies.md +36 -0
  232. package/templates/base/skills/frontend/react/rules/async-parallel.md +28 -0
  233. package/templates/base/skills/frontend/react/rules/async-suspense-boundaries.md +99 -0
  234. package/templates/base/skills/frontend/react/rules/bundle-barrel-imports.md +59 -0
  235. package/templates/base/skills/frontend/react/rules/bundle-defer-third-party.md +49 -0
  236. package/templates/base/skills/frontend/react/rules/bundle-dynamic-imports.md +35 -0
  237. package/templates/base/skills/frontend/react/rules/component-conventions.md +74 -0
  238. package/templates/base/skills/frontend/react/rules/js-combine-iterations.md +32 -0
  239. package/templates/base/skills/frontend/react/rules/js-early-exit.md +50 -0
  240. package/templates/base/skills/frontend/react/rules/js-index-maps.md +37 -0
  241. package/templates/base/skills/frontend/react/rules/js-set-map-lookups.md +24 -0
  242. package/templates/base/skills/frontend/react/rules/rendering-conditional-render.md +40 -0
  243. package/templates/base/skills/frontend/react/rules/rendering-content-visibility.md +38 -0
  244. package/templates/base/skills/frontend/react/rules/rendering-hoist-jsx.md +46 -0
  245. package/templates/base/skills/frontend/react/rules/rerender-defer-reads.md +39 -0
  246. package/templates/base/skills/frontend/react/rules/rerender-derived-state.md +29 -0
  247. package/templates/base/skills/frontend/react/rules/rerender-memo.md +44 -0
  248. package/templates/base/skills/frontend/react/rules/rerender-transitions.md +40 -0
  249. package/templates/base/skills/frontend/react/rules/server-after-nonblocking.md +73 -0
  250. package/templates/base/skills/frontend/react/rules/server-cache-react.md +26 -0
  251. package/templates/base/skills/frontend/react/rules/server-parallel-fetching.md +79 -0
  252. package/templates/base/skills/frontend/react/rules/state-location.md +55 -0
  253. package/templates/base/skills/methodology/bdd/SKILL.md +69 -0
  254. package/templates/base/skills/methodology/bdd/rules/gherkin-patterns.md +113 -0
  255. package/templates/base/skills/methodology/ddd/SKILL.md +74 -0
  256. package/templates/base/skills/methodology/ddd/rules/strategic-patterns.md +98 -0
  257. package/templates/base/skills/methodology/debugging/SKILL.md +60 -0
  258. package/templates/base/skills/methodology/debugging/references/root-cause-tracing.md +84 -0
  259. package/templates/base/skills/methodology/tdd/SKILL.md +66 -0
  260. package/templates/base/skills/methodology/tdd/rules/real-world-example.md +88 -0
  261. package/templates/base/skills/methodology/tdd/rules/techniques.md +185 -0
  262. package/templates/base/skills/mobile/dart/SKILL.md +69 -0
  263. package/templates/base/skills/mobile/dart/rules/async-patterns.md +112 -0
  264. package/templates/base/skills/mobile/dart/rules/code-style.md +96 -0
  265. package/templates/base/skills/mobile/dart/rules/null-safety.md +84 -0
  266. package/templates/base/skills/mobile/dart/rules/type-system.md +111 -0
  267. package/templates/base/skills/mobile/flutter/SKILL.md +89 -0
  268. package/templates/base/skills/mobile/flutter/ci-cd/SKILL.md +82 -0
  269. package/templates/base/skills/mobile/flutter/ci-cd/references/ci-cd-pipeline.md +314 -0
  270. package/templates/base/skills/mobile/flutter/ci-cd/rules/code-signing.md +106 -0
  271. package/templates/base/skills/mobile/flutter/ci-cd/rules/codemagic-setup.md +116 -0
  272. package/templates/base/skills/mobile/flutter/ci-cd/rules/fastlane-setup.md +105 -0
  273. package/templates/base/skills/mobile/flutter/ci-cd/rules/github-actions.md +112 -0
  274. package/templates/base/skills/mobile/flutter/ci-cd/rules/store-deployment.md +106 -0
  275. package/templates/base/skills/mobile/flutter/ci-cd/rules/versioning.md +107 -0
  276. package/templates/base/skills/mobile/flutter/i18n/SKILL.md +78 -0
  277. package/templates/base/skills/mobile/flutter/i18n/references/i18n-architecture.md +225 -0
  278. package/templates/base/skills/mobile/flutter/i18n/rules/arb-files.md +182 -0
  279. package/templates/base/skills/mobile/flutter/i18n/rules/locale-switching.md +226 -0
  280. package/templates/base/skills/mobile/flutter/i18n/rules/localization-setup.md +137 -0
  281. package/templates/base/skills/mobile/flutter/i18n/rules/plural-gender.md +159 -0
  282. package/templates/base/skills/mobile/flutter/i18n/rules/text-direction.md +199 -0
  283. package/templates/base/skills/mobile/flutter/monitoring/SKILL.md +81 -0
  284. package/templates/base/skills/mobile/flutter/monitoring/references/monitoring-architecture.md +269 -0
  285. package/templates/base/skills/mobile/flutter/monitoring/rules/analytics.md +227 -0
  286. package/templates/base/skills/mobile/flutter/monitoring/rules/crashlytics-setup.md +195 -0
  287. package/templates/base/skills/mobile/flutter/monitoring/rules/logging.md +258 -0
  288. package/templates/base/skills/mobile/flutter/monitoring/rules/performance-monitoring.md +248 -0
  289. package/templates/base/skills/mobile/flutter/monitoring/rules/sentry-integration.md +249 -0
  290. package/templates/base/skills/mobile/flutter/networking/SKILL.md +88 -0
  291. package/templates/base/skills/mobile/flutter/networking/references/api-client-architecture.md +305 -0
  292. package/templates/base/skills/mobile/flutter/networking/rules/caching.md +212 -0
  293. package/templates/base/skills/mobile/flutter/networking/rules/connectivity.md +213 -0
  294. package/templates/base/skills/mobile/flutter/networking/rules/dio-setup.md +159 -0
  295. package/templates/base/skills/mobile/flutter/networking/rules/error-handling.md +209 -0
  296. package/templates/base/skills/mobile/flutter/networking/rules/interceptors.md +205 -0
  297. package/templates/base/skills/mobile/flutter/networking/rules/retrofit-patterns.md +194 -0
  298. package/templates/base/skills/mobile/flutter/push-notifications/SKILL.md +87 -0
  299. package/templates/base/skills/mobile/flutter/push-notifications/references/notification-architecture.md +340 -0
  300. package/templates/base/skills/mobile/flutter/push-notifications/references/platform-setup.md +286 -0
  301. package/templates/base/skills/mobile/flutter/push-notifications/rules/background-processing.md +308 -0
  302. package/templates/base/skills/mobile/flutter/push-notifications/rules/deep-linking.md +217 -0
  303. package/templates/base/skills/mobile/flutter/push-notifications/rules/fcm-setup.md +164 -0
  304. package/templates/base/skills/mobile/flutter/push-notifications/rules/local-notifications.md +262 -0
  305. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-handling.md +210 -0
  306. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-permissions.md +246 -0
  307. package/templates/base/skills/mobile/flutter/push-notifications/rules/rich-notifications.md +320 -0
  308. package/templates/base/skills/mobile/flutter/references/freezed-patterns.md +162 -0
  309. package/templates/base/skills/mobile/flutter/references/project-structure.md +170 -0
  310. package/templates/base/skills/mobile/flutter/rules/animations.md +112 -0
  311. package/templates/base/skills/mobile/flutter/rules/architecture.md +121 -0
  312. package/templates/base/skills/mobile/flutter/rules/navigation-routing.md +117 -0
  313. package/templates/base/skills/mobile/flutter/rules/performance.md +112 -0
  314. package/templates/base/skills/mobile/flutter/rules/platform-adaptive.md +126 -0
  315. package/templates/base/skills/mobile/flutter/rules/state-management.md +110 -0
  316. package/templates/base/skills/mobile/flutter/rules/testing.md +131 -0
  317. package/templates/base/skills/mobile/flutter/rules/widget-conventions.md +122 -0
  318. package/templates/base/skills/mobile/flutter/security/SKILL.md +86 -0
  319. package/templates/base/skills/mobile/flutter/security/references/mobile-security-checklist.md +168 -0
  320. package/templates/base/skills/mobile/flutter/security/rules/api-key-protection.md +206 -0
  321. package/templates/base/skills/mobile/flutter/security/rules/authentication.md +248 -0
  322. package/templates/base/skills/mobile/flutter/security/rules/data-protection.md +271 -0
  323. package/templates/base/skills/mobile/flutter/security/rules/obfuscation.md +213 -0
  324. package/templates/base/skills/mobile/flutter/security/rules/secure-storage.md +171 -0
  325. package/templates/base/skills/mobile/flutter/security/rules/ssl-pinning.md +197 -0
  326. package/templates/base/skills/planning/SKILL.md +58 -0
  327. package/templates/base/skills/planning/references/prd-guide.md +47 -0
  328. package/templates/base/skills/planning/references/requirements-guide.md +46 -0
  329. package/templates/base/skills/prompt-engineering/SKILL.md +103 -0
  330. package/templates/base/skills/retrospective/SKILL.md +102 -0
  331. package/templates/base/skills/security/SKILL.md +55 -0
  332. package/templates/base/skills/security/rules/owasp-examples.md +119 -0
  333. package/templates/base/skills/security/scripts/check-secrets.sh +55 -0
  334. package/templates/base/skills/testing/SKILL.md +63 -0
  335. package/templates/base/skills/testing/references/testing-patterns.md +103 -0
  336. package/templates/base/skills/tsq-protocol/SKILL.md +51 -0
  337. package/templates/base/skills/typescript/SKILL.md +67 -0
  338. package/templates/base/skills/typescript/rules/type-patterns.md +135 -0
  339. package/templates/base/skills/typescript/rules/utility-types.md +76 -0
  340. package/templates/base/skills/ui-design/SKILL.md +70 -0
  341. package/templates/{common → base}/timsquad/feedback/routing-rules.yaml +1 -1
  342. package/templates/{common → base}/timsquad/retrospective/metrics/metrics-schema.json +46 -1
  343. package/templates/platforms/claude-code/CLAUDE.md.template +89 -0
  344. package/templates/platforms/claude-code/rules/adr-rules.md +32 -0
  345. package/templates/platforms/claude-code/rules/feedback-routing.md +18 -0
  346. package/templates/platforms/claude-code/rules/phase-management.md +23 -0
  347. package/templates/platforms/claude-code/rules/reporting-format.md +26 -0
  348. package/templates/platforms/claude-code/rules/sequence-management.md +72 -0
  349. package/templates/platforms/claude-code/rules/workspace-sync.md +33 -0
  350. package/templates/platforms/claude-code/scripts/completion-guard.sh +57 -0
  351. package/templates/platforms/claude-code/scripts/phase-guard.sh +79 -0
  352. package/templates/platforms/claude-code/settings.json +98 -0
  353. package/templates/project-types/api-backend/config.yaml +227 -0
  354. package/templates/project-types/api-backend/process/workflow.xml +214 -0
  355. package/templates/project-types/fintech/config.yaml +151 -0
  356. package/templates/project-types/fintech/process/workflow.xml +316 -0
  357. package/templates/project-types/infra/config.yaml +327 -0
  358. package/templates/project-types/infra/process/workflow.xml +296 -0
  359. package/templates/project-types/mobile-app/config.yaml +123 -0
  360. package/templates/project-types/mobile-app/process/workflow.xml +191 -0
  361. package/templates/project-types/platform/config.yaml +254 -0
  362. package/templates/project-types/platform/process/workflow.xml +254 -0
  363. package/templates/project-types/web-app/config.yaml +198 -0
  364. package/templates/project-types/web-app/process/workflow.xml +210 -0
  365. package/templates/project-types/web-service/config.yaml +136 -0
  366. package/templates/project-types/web-service/process/workflow.xml +184 -0
  367. package/templates/common/CLAUDE.md.template +0 -254
  368. package/templates/common/claude/agents/tsq-dba.md +0 -311
  369. package/templates/common/claude/agents/tsq-designer.md +0 -323
  370. package/templates/common/claude/agents/tsq-developer.md +0 -177
  371. package/templates/common/claude/agents/tsq-planner.md +0 -190
  372. package/templates/common/claude/agents/tsq-prompter.md +0 -356
  373. package/templates/common/claude/agents/tsq-qa.md +0 -168
  374. package/templates/common/claude/agents/tsq-retro.md +0 -193
  375. package/templates/common/claude/agents/tsq-security.md +0 -221
  376. package/templates/common/claude/hooks/auto-metrics.sh +0 -165
  377. package/templates/common/claude/hooks/auto-worklog.sh +0 -245
  378. package/templates/common/claude/hooks/event-logger.sh +0 -208
  379. package/templates/common/claude/settings.json +0 -86
  380. package/templates/common/claude/skills/architecture/SKILL.md +0 -123
  381. package/templates/common/claude/skills/backend/node/SKILL.md +0 -1015
  382. package/templates/common/claude/skills/coding/SKILL.md +0 -171
  383. package/templates/common/claude/skills/database/prisma/SKILL.md +0 -357
  384. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +0 -279
  385. package/templates/common/claude/skills/frontend/react/SKILL.md +0 -1729
  386. package/templates/common/claude/skills/methodology/bdd/SKILL.md +0 -234
  387. package/templates/common/claude/skills/methodology/ddd/SKILL.md +0 -311
  388. package/templates/common/claude/skills/methodology/tdd/SKILL.md +0 -512
  389. package/templates/common/claude/skills/planning/SKILL.md +0 -90
  390. package/templates/common/claude/skills/security/SKILL.md +0 -234
  391. package/templates/common/claude/skills/testing/SKILL.md +0 -146
  392. package/templates/common/claude/skills/typescript/SKILL.md +0 -435
  393. package/templates/common/config.template.yaml +0 -132
  394. /package/templates/{common → base}/timsquad/architectures/clean/ARCHITECTURE.md +0 -0
  395. /package/templates/{common → base}/timsquad/architectures/clean/backend.xml +0 -0
  396. /package/templates/{common → base}/timsquad/architectures/clean/frontend.xml +0 -0
  397. /package/templates/{common → base}/timsquad/architectures/fsd/ARCHITECTURE.md +0 -0
  398. /package/templates/{common → base}/timsquad/architectures/fsd/frontend.xml +0 -0
  399. /package/templates/{common → base}/timsquad/architectures/hexagonal/ARCHITECTURE.md +0 -0
  400. /package/templates/{common → base}/timsquad/architectures/hexagonal/backend.xml +0 -0
  401. /package/templates/{common → base}/timsquad/constraints/competency-framework.xml +0 -0
  402. /package/templates/{common → base}/timsquad/constraints/ssot-schema.xml +0 -0
  403. /package/templates/{common → base}/timsquad/feedback/feedback-router.sh +0 -0
  404. /package/templates/{common → base}/timsquad/generators/data-design.xml +0 -0
  405. /package/templates/{common → base}/timsquad/generators/prd.xml +0 -0
  406. /package/templates/{common → base}/timsquad/generators/requirements.xml +0 -0
  407. /package/templates/{common → base}/timsquad/generators/service-spec.xml +0 -0
  408. /package/templates/{common → base}/timsquad/logs/_example.md +0 -0
  409. /package/templates/{common → base}/timsquad/logs/_template.md +0 -0
  410. /package/templates/{common → base}/timsquad/patterns/cqrs.xml +0 -0
  411. /package/templates/{common → base}/timsquad/patterns/event-sourcing.xml +0 -0
  412. /package/templates/{common → base}/timsquad/patterns/repository.xml +0 -0
  413. /package/templates/{common → base}/timsquad/process/phase-checklist.yaml +0 -0
  414. /package/templates/{common → base}/timsquad/process/state-machine.xml +0 -0
  415. /package/templates/{common → base}/timsquad/process/validation-rules.xml +0 -0
  416. /package/templates/{common → base}/timsquad/process/workflow-base.xml +0 -0
  417. /package/templates/{common → base}/timsquad/retrospective/cycle-report.template.md +0 -0
  418. /package/templates/{common → base}/timsquad/retrospective/patterns/failure-patterns.md +0 -0
  419. /package/templates/{common → base}/timsquad/retrospective/patterns/success-patterns.md +0 -0
  420. /package/templates/{common → base}/timsquad/retrospective/retrospective-config.xml +0 -0
  421. /package/templates/{common → base}/timsquad/retrospective/retrospective-state.xml +0 -0
  422. /package/templates/{common → base}/timsquad/ssot/adr/ADR-000-template.md +0 -0
  423. /package/templates/{common → base}/timsquad/ssot/adr/ADR-001-example.md +0 -0
  424. /package/templates/{common → base}/timsquad/ssot/data-design.template.md +0 -0
  425. /package/templates/{common → base}/timsquad/ssot/deployment-spec.template.md +0 -0
  426. /package/templates/{common → base}/timsquad/ssot/env-config.template.md +0 -0
  427. /package/templates/{common → base}/timsquad/ssot/error-codes.template.md +0 -0
  428. /package/templates/{common → base}/timsquad/ssot/functional-spec.template.md +0 -0
  429. /package/templates/{common → base}/timsquad/ssot/glossary.template.md +0 -0
  430. /package/templates/{common → base}/timsquad/ssot/integration-spec.template.md +0 -0
  431. /package/templates/{common → base}/timsquad/ssot/planning.template.md +0 -0
  432. /package/templates/{common → base}/timsquad/ssot/prd.template.md +0 -0
  433. /package/templates/{common → base}/timsquad/ssot/requirements.template.md +0 -0
  434. /package/templates/{common → base}/timsquad/ssot/security-spec.template.md +0 -0
  435. /package/templates/{common → base}/timsquad/ssot/service-spec.template.md +0 -0
  436. /package/templates/{common → base}/timsquad/ssot/test-spec.template.md +0 -0
  437. /package/templates/{common → base}/timsquad/ssot/ui-ux-spec.template.md +0 -0
  438. /package/templates/{common → base}/timsquad/state/workspace.xml +0 -0
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: Controller References
3
+ category: reference
4
+ ---
5
+
6
+ # Controller References
7
+
8
+ 이 디렉토리에는 `tsq compile`로 생성된 에이전트용 spec 파일이 위치합니다.
9
+
10
+ ## 사용법
11
+
12
+ ```bash
13
+ tsq compile # SSOT → spec 컴파일
14
+ tsq compile status # stale 상태 확인
15
+ ```
16
+
17
+ ## 파일 구조
18
+
19
+ 컴파일 후 생성되는 파일 예시:
20
+
21
+ ```
22
+ references/
23
+ ├── 2-1-로그인.spec.md ← service-spec.md#2.1 로그인
24
+ ├── 2-2-토큰-갱신.spec.md ← service-spec.md#2.2 토큰 갱신
25
+ ├── error-codes.spec.md ← error-codes.md (전체)
26
+ └── users.spec.md ← data-design.md#Users
27
+ ```
28
+
29
+ 각 파일에는 source marker가 포함되어 원본 추적이 가능합니다:
30
+
31
+ ```html
32
+ <!-- source: ssot/service-spec.md#POST-auth-login -->
33
+ <!-- ssot-hash: a3f2b1c0 -->
34
+ <!-- compiled: 2026-02-18T10:30:00Z -->
35
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Controller Rules
3
+ category: guide
4
+ ---
5
+
6
+ # Controller Rules
7
+
8
+ 이 디렉토리에는 `tsq compile`로 생성된 제약 규칙 파일이 위치합니다.
9
+
10
+ ## 파일 구조
11
+
12
+ ```
13
+ rules/
14
+ ├── completion-criteria.md ← requirements.md에서 컴파일
15
+ └── security-constraints.md ← security-spec.md에서 컴파일 (Level 3)
16
+ ```
17
+
18
+ 이 파일들은 controller가 서브에이전트에게 "무엇을 지켜야 하는지" 주입할 때 사용됩니다.
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: database
3
+ description: |
4
+ 데이터베이스 설계 및 운영 방법론.
5
+ 정규화/비정규화 결정, 쿼리 최적화 프로세스, 마이그레이션 안전 규칙.
6
+ Use when: DB 설계, 스키마 변경, 쿼리 최적화, 마이그레이션
7
+ version: "1.0.0"
8
+ tags: [database, sql, migration]
9
+ user-invocable: false
10
+ ---
11
+
12
+ # Database Methodology
13
+
14
+ ## 정규화 기준
15
+
16
+ | 정규형 | 적용 기준 | 예외 허용 조건 |
17
+ |:-----:|---------|--------------|
18
+ | 1NF | 필수 | 없음 |
19
+ | 2NF | 필수 | 없음 |
20
+ | 3NF | 기본 적용 | 읽기 성능 요구 시 |
21
+ | BCNF | 권장 | 복잡도 증가 시 |
22
+
23
+ ## 비정규화 조건
24
+
25
+ 비정규화 결정 시 반드시 ADR 작성:
26
+
27
+ ```markdown
28
+ ## ADR-XXX: [테이블명] 비정규화 결정
29
+
30
+ ### Context
31
+ - 읽기 빈도: X회/초, 쓰기 빈도: Y회/초, 조인 비용: Z ms
32
+
33
+ ### Decision
34
+ [비정규화 결정 내용]
35
+
36
+ ### Consequences
37
+ - 장점: 읽기 성능 N% 향상
38
+ - 단점: 데이터 중복, 갱신 이상 위험
39
+ - 대응: [트리거/애플리케이션 로직]
40
+ ```
41
+
42
+ ## 쿼리 최적화 프로세스
43
+
44
+ ### 1. 분석
45
+
46
+ ```sql
47
+ EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
48
+ ```
49
+
50
+ ### 2. 체크리스트
51
+
52
+ | 항목 | 확인 내용 |
53
+ |-----|----------|
54
+ | Seq Scan | 대용량 테이블에 순차 스캔? |
55
+ | Index 사용 | 적절한 인덱스 사용 중? |
56
+ | Join 순서 | 작은 테이블 먼저 조인? |
57
+ | N+1 | 루프 내 쿼리 실행? |
58
+ | 불필요 컬럼 | SELECT * 사용? |
59
+
60
+ ### 3. 최적화 기법
61
+
62
+ | 문제 | 해결책 |
63
+ |-----|-------|
64
+ | 느린 조인 | 인덱스 추가, 조인 순서 변경 |
65
+ | N+1 | Eager Loading, JOIN |
66
+ | 대용량 스캔 | 파티셔닝, 커버링 인덱스 |
67
+ | 동시성 | 적절한 격리 수준 |
68
+
69
+ ## 마이그레이션 규칙
70
+
71
+ ### 파일 명명
72
+
73
+ ```
74
+ {timestamp}_{description}.sql
75
+ 예: 20260203100000_create_users_table.sql
76
+ ```
77
+
78
+ ### 안전한 마이그레이션
79
+
80
+ | 작업 | 안전 | 위험 | 대안 |
81
+ |-----|:----:|:----:|------|
82
+ | 컬럼 추가 (NULL) | O | | |
83
+ | 컬럼 추가 (NOT NULL) | | ! | DEFAULT 값 + NULL 허용 후 변경 |
84
+ | 컬럼 삭제 | | ! | 코드 먼저 수정 -> 삭제 |
85
+ | 컬럼명 변경 | | X | 새 컬럼 추가 -> 데이터 이동 -> 삭제 |
86
+ | 인덱스 추가 | O | | CONCURRENTLY 사용 |
87
+ | 테이블 삭제 | | X | 백업 확인 필수 |
88
+
89
+ ### 롤백 전략
90
+
91
+ 모든 마이그레이션에 롤백 스크립트 필수:
92
+
93
+ ```sql
94
+ -- Up
95
+ ALTER TABLE users ADD COLUMN phone VARCHAR(20);
96
+ -- Down
97
+ ALTER TABLE users DROP COLUMN phone;
98
+ ```
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: prisma
3
+ description: Prisma ORM 개발 가이드라인
4
+ version: "1.0.0"
5
+ tags: [prisma, orm, database]
6
+ user-invocable: false
7
+ ---
8
+
9
+ # Prisma ORM Guidelines
10
+
11
+ ## 철학
12
+ - Schema as SSOT — 스키마가 진실의 원천
13
+ - Type Safety — 자동 생성 타입 활용
14
+ - Migration First — 스키마 변경은 마이그레이션으로
15
+
16
+ ## 마이그레이션 워크플로우
17
+
18
+ | 명령어 | 용도 |
19
+ |--------|------|
20
+ | `npx prisma migrate dev --name {name}` | 개발 환경 마이그레이션 |
21
+ | `npx prisma migrate deploy` | 프로덕션 적용 |
22
+ | `npx prisma migrate reset` | DB 초기화 + 재적용 |
23
+ | `npx prisma db push` | 빠른 프로토타이핑 (마이그레이션 없이) |
24
+ | `npx prisma generate` | 클라이언트 재생성 |
25
+
26
+ **순서**: schema.prisma 수정 → migrate dev → SQL 검토 → 커밋
27
+
28
+ ## Rules
29
+
30
+ ### 스키마
31
+ - 모든 모델에 `id`, `createdAt`, `updatedAt`
32
+ - 명시적 인덱스 정의 (`@@index`)
33
+ - `@@map`으로 테이블명 명시
34
+ - 관계는 명확히 정의
35
+
36
+ ### 쿼리
37
+ - `select`로 필요한 필드만 조회 (성능)
38
+ - 페이지네이션 적용 (`take`, `skip`)
39
+ - 복잡한 작업은 트랜잭션 사용
40
+ - **금지**: N+1 쿼리, 무한 결과 조회
41
+
42
+ ### 마이그레이션
43
+ - `migrate dev`로 개발, `migrate deploy`로 배포
44
+ - 마이그레이션 파일 커밋 필수
45
+ - **금지**: 프로덕션에서 `db push`
46
+
47
+ ## Checklist
48
+ - [ ] 싱글톤 인스턴스 사용
49
+ - [ ] 마이그레이션으로 스키마 관리
50
+ - [ ] 트랜잭션으로 데이터 정합성
51
+ - [ ] select로 필요한 필드만 조회
52
+ - [ ] 인덱스 적절히 설정
53
+ - [ ] Repository 패턴 적용
54
+
55
+ ## 참조
56
+ - `rules/schema-design.md` — 모델 정의, 공통 필드, 소프트 삭제 패턴
57
+ - `rules/queries.md` — 싱글톤, CRUD, Relations, 트랜잭션, Repository 패턴
@@ -0,0 +1,133 @@
1
+ ---
2
+ title: Prisma Query Patterns
3
+ impact: HIGH
4
+ tags: prisma, database, queries
5
+ ---
6
+
7
+ # Prisma Query Patterns
8
+
9
+ ## 싱글톤 인스턴스
10
+
11
+ ```typescript
12
+ // lib/prisma.ts
13
+ import { PrismaClient } from '@prisma/client';
14
+
15
+ const globalForPrisma = globalThis as unknown as {
16
+ prisma: PrismaClient | undefined;
17
+ };
18
+
19
+ export const prisma = globalForPrisma.prisma ?? new PrismaClient({
20
+ log: process.env.NODE_ENV === 'development'
21
+ ? ['query', 'error', 'warn']
22
+ : ['error'],
23
+ });
24
+
25
+ if (process.env.NODE_ENV !== 'production') {
26
+ globalForPrisma.prisma = prisma;
27
+ }
28
+ ```
29
+
30
+ ## Extensions (소프트 삭제 자동 필터)
31
+
32
+ ```typescript
33
+ export const prisma = prismaBase.$extends({
34
+ query: {
35
+ $allModels: {
36
+ async findMany({ model, operation, args, query }) {
37
+ args.where = { ...args.where, deletedAt: null };
38
+ return query(args);
39
+ },
40
+ },
41
+ },
42
+ });
43
+ ```
44
+
45
+ ## 기본 CRUD
46
+
47
+ ```typescript
48
+ // Create
49
+ const user = await prisma.user.create({
50
+ data: { email: 'test@example.com', name: 'Test', password: hashedPassword },
51
+ });
52
+
53
+ // Read
54
+ const user = await prisma.user.findUnique({ where: { id: userId } });
55
+ const users = await prisma.user.findMany({
56
+ where: { role: 'USER' },
57
+ orderBy: { createdAt: 'desc' },
58
+ take: 10, skip: 0,
59
+ });
60
+
61
+ // Update
62
+ const updated = await prisma.user.update({
63
+ where: { id: userId },
64
+ data: { name: 'New Name' },
65
+ });
66
+
67
+ // Delete
68
+ await prisma.user.delete({ where: { id: userId } });
69
+
70
+ // Upsert
71
+ const user = await prisma.user.upsert({
72
+ where: { email: 'test@example.com' },
73
+ update: { name: 'Updated Name' },
74
+ create: { email: 'test@example.com', name: 'New User', password },
75
+ });
76
+ ```
77
+
78
+ ## Relations 로딩
79
+
80
+ ```typescript
81
+ // include: 관계 데이터 포함
82
+ const userWithPosts = await prisma.user.findUnique({
83
+ where: { id: userId },
84
+ include: { posts: true, profile: true },
85
+ });
86
+
87
+ // select: 특정 필드만 선택 (성능 최적화)
88
+ const userWithPosts = await prisma.user.findUnique({
89
+ where: { id: userId },
90
+ select: {
91
+ id: true, name: true,
92
+ posts: { select: { id: true, title: true }, where: { published: true }, take: 5 },
93
+ },
94
+ });
95
+ ```
96
+
97
+ ## 트랜잭션
98
+
99
+ ```typescript
100
+ const result = await prisma.$transaction(async (tx) => {
101
+ const user = await tx.user.create({ data: { email, name, password } });
102
+ await tx.profile.create({ data: { userId: user.id, bio: '' } });
103
+ await tx.notification.create({ data: { userId: user.id, message: 'Welcome!' } });
104
+ return user;
105
+ });
106
+ // 실패 시 모두 롤백
107
+ ```
108
+
109
+ ## Repository 패턴
110
+
111
+ ```typescript
112
+ export interface UserRepository {
113
+ findById(id: string): Promise<User | null>;
114
+ findByEmail(email: string): Promise<User | null>;
115
+ save(user: User): Promise<User>;
116
+ delete(id: string): Promise<void>;
117
+ }
118
+
119
+ export class PrismaUserRepository implements UserRepository {
120
+ async findById(id: string) {
121
+ return prisma.user.findUnique({ where: { id } });
122
+ }
123
+ async findByEmail(email: string) {
124
+ return prisma.user.findUnique({ where: { email } });
125
+ }
126
+ async save(data: Omit<User, 'id' | 'createdAt' | 'updatedAt'>) {
127
+ return prisma.user.create({ data });
128
+ }
129
+ async delete(id: string) {
130
+ await prisma.user.delete({ where: { id } });
131
+ }
132
+ }
133
+ ```
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: Prisma Schema Design Patterns
3
+ impact: HIGH
4
+ tags: prisma, database, schema
5
+ ---
6
+
7
+ # Prisma Schema Design Patterns
8
+
9
+ ## 기본 모델 정의
10
+
11
+ ```prisma
12
+ generator client {
13
+ provider = "prisma-client-js"
14
+ }
15
+
16
+ datasource db {
17
+ provider = "postgresql"
18
+ url = env("DATABASE_URL")
19
+ }
20
+
21
+ model User {
22
+ id String @id @default(cuid())
23
+ email String @unique
24
+ name String
25
+ password String
26
+ role Role @default(USER)
27
+
28
+ createdAt DateTime @default(now())
29
+ updatedAt DateTime @updatedAt
30
+
31
+ posts Post[]
32
+ profile Profile?
33
+
34
+ @@index([email])
35
+ @@map("users")
36
+ }
37
+
38
+ model Post {
39
+ id String @id @default(cuid())
40
+ title String
41
+ content String?
42
+ published Boolean @default(false)
43
+
44
+ createdAt DateTime @default(now())
45
+ updatedAt DateTime @updatedAt
46
+
47
+ author User @relation(fields: [authorId], references: [id])
48
+ authorId String
49
+
50
+ @@index([authorId])
51
+ @@map("posts")
52
+ }
53
+
54
+ enum Role {
55
+ USER
56
+ ADMIN
57
+ }
58
+ ```
59
+
60
+ ## 공통 필드 패턴
61
+ 모든 모델에 공통으로 들어가는 필드 (Prisma는 상속 미지원, 컨벤션으로 관리):
62
+ - `id String @id @default(cuid())`
63
+ - `createdAt DateTime @default(now())`
64
+ - `updatedAt DateTime @updatedAt`
65
+
66
+ ## 소프트 삭제
67
+
68
+ ```prisma
69
+ model User {
70
+ id String @id @default(cuid())
71
+ deletedAt DateTime? // null이면 활성, 값 있으면 삭제됨
72
+ @@index([deletedAt])
73
+ }
74
+ ```
75
+
76
+ ```typescript
77
+ const activeUsers = await prisma.user.findMany({
78
+ where: { deletedAt: null },
79
+ });
80
+ ```
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: nextjs
3
+ description: Next.js App Router 개발 가이드라인
4
+ version: "1.0.0"
5
+ tags: [nextjs, react, frontend]
6
+ user-invocable: false
7
+ ---
8
+
9
+ # Next.js 15+ App Router
10
+
11
+ ## 철학
12
+ - Server First — 기본은 서버 컴포넌트
13
+ - Progressive Enhancement — 필요할 때만 클라이언트
14
+ - Colocation — 관련 파일은 가까이
15
+
16
+ ## Server vs Client 판단
17
+
18
+ | 조건 | 컴포넌트 |
19
+ |------|---------|
20
+ | 데이터 페칭, DB 접근, 민감 정보 | Server (기본) |
21
+ | 인터랙션, 이벤트, useState/useEffect | Client (`'use client'`) |
22
+ | 브라우저 API 필요 | Client |
23
+ | 그 외 | Server |
24
+
25
+ ## Rules
26
+
27
+ ### 컴포넌트
28
+ - 기본은 Server Component
29
+ - 인터랙션 필요할 때만 `'use client'`
30
+ - Client Component는 작게 유지 (leaf에 배치)
31
+ - **금지**: Server Component에서 useState/useEffect, 불필요한 `'use client'`
32
+
33
+ ### 데이터
34
+ - Server Component에서 데이터 페칭
35
+ - mutation은 Server Actions 사용
36
+ - 적절한 캐싱 전략 설정
37
+ - **금지**: Client Component에서 직접 DB 접근
38
+
39
+ ### 라우팅
40
+ - 파일 기반 라우팅 규칙 준수
41
+ - Route Group으로 레이아웃 관리
42
+ - `loading.tsx`, `error.tsx` 제공
43
+
44
+ ## 성능 최적화
45
+ - `next/image`: sizes 속성
46
+ - `next/font`: 폰트 최적화
47
+ - `next/link`: 프리페칭
48
+ - 동적 import: 무거운 컴포넌트 지연 로딩
49
+
50
+ ## Checklist
51
+ - [ ] Server Component 기본 사용
52
+ - [ ] 'use client' 최소화
53
+ - [ ] Server Actions로 mutation
54
+ - [ ] 적절한 캐싱 전략
55
+ - [ ] loading.tsx, error.tsx 구현
56
+ - [ ] Metadata 설정
57
+
58
+ ## 참조
59
+ - `rules/app-router.md` — 디렉토리 구조, Server/Client 예시, Data Fetching, Metadata, Loading/Error 패턴
@@ -0,0 +1,138 @@
1
+ ---
2
+ title: Next.js App Router Patterns
3
+ impact: HIGH
4
+ tags: nextjs, frontend, app-router
5
+ ---
6
+
7
+ # Next.js App Router Patterns
8
+
9
+ ## 디렉토리 구조
10
+
11
+ ```
12
+ app/
13
+ ├── layout.tsx # 루트 레이아웃 (필수)
14
+ ├── page.tsx # 홈페이지 (/)
15
+ ├── loading.tsx # 로딩 UI
16
+ ├── error.tsx # 에러 UI
17
+ ├── not-found.tsx # 404 UI
18
+
19
+ ├── (auth)/ # Route Group (URL에 미포함)
20
+ │ ├── login/page.tsx # /login
21
+ │ └── register/page.tsx # /register
22
+
23
+ ├── dashboard/
24
+ │ ├── layout.tsx # 대시보드 레이아웃
25
+ │ ├── page.tsx # /dashboard
26
+ │ └── settings/page.tsx # /dashboard/settings
27
+
28
+ ├── users/
29
+ │ ├── page.tsx # /users (목록)
30
+ │ └── [id]/
31
+ │ ├── page.tsx # /users/:id
32
+ │ └── edit/page.tsx # /users/:id/edit
33
+
34
+ └── api/users/route.ts # /api/users
35
+ ```
36
+
37
+ ## Server vs Client Component
38
+
39
+ ### 판단 기준
40
+ ```
41
+ 데이터 페칭 필요? → Server Component
42
+ 인터랙션/이벤트 필요? → Client Component ('use client')
43
+ 브라우저 API 필요? → Client Component
44
+ 그 외 → Server Component (기본)
45
+ ```
46
+
47
+ ### Server Component (기본)
48
+ ```typescript
49
+ // app/users/page.tsx
50
+ import { db } from '@/lib/db';
51
+
52
+ export default async function UsersPage() {
53
+ const users = await db.user.findMany();
54
+ return (
55
+ <ul>
56
+ {users.map(user => <li key={user.id}>{user.name}</li>)}
57
+ </ul>
58
+ );
59
+ }
60
+ ```
61
+
62
+ ### Client Component
63
+ ```typescript
64
+ // components/counter.tsx
65
+ 'use client';
66
+ import { useState } from 'react';
67
+
68
+ export function Counter() {
69
+ const [count, setCount] = useState(0);
70
+ return <button onClick={() => setCount(c => c + 1)}>Count: {count}</button>;
71
+ }
72
+ ```
73
+
74
+ ## Data Fetching
75
+
76
+ ### Server Component에서 직접 fetch
77
+ ```typescript
78
+ async function getPosts() {
79
+ const res = await fetch('https://api.example.com/posts', {
80
+ next: { revalidate: 60 },
81
+ });
82
+ return res.json();
83
+ }
84
+ ```
85
+
86
+ ### Server Actions
87
+ ```typescript
88
+ // app/actions/user.ts
89
+ 'use server';
90
+ import { revalidatePath } from 'next/cache';
91
+
92
+ export async function createUser(formData: FormData) {
93
+ const name = formData.get('name') as string;
94
+ await db.user.create({ data: { name, email: formData.get('email') as string } });
95
+ revalidatePath('/users');
96
+ }
97
+ ```
98
+
99
+ ### 캐싱 전략
100
+ | 옵션 | 설명 |
101
+ |------|------|
102
+ | `force-cache` | 기본값, 캐시 사용 |
103
+ | `no-store` | 캐시 안 함, 항상 새로 요청 |
104
+ | `revalidate: N` | N초마다 재검증 |
105
+ | `revalidatePath()` | 특정 경로 재검증 |
106
+ | `revalidateTag()` | 태그로 재검증 |
107
+
108
+ ## Metadata
109
+
110
+ ```typescript
111
+ // 정적
112
+ export const metadata: Metadata = { title: 'About Us' };
113
+
114
+ // 동적
115
+ export async function generateMetadata({ params }: Props): Promise<Metadata> {
116
+ const { id } = await params;
117
+ const user = await getUser(id);
118
+ return { title: user.name };
119
+ }
120
+ ```
121
+
122
+ ## Loading & Error
123
+
124
+ ```typescript
125
+ // loading.tsx
126
+ export default function Loading() { return <DashboardSkeleton />; }
127
+
128
+ // error.tsx
129
+ 'use client';
130
+ export default function Error({ error, reset }: { error: Error; reset: () => void }) {
131
+ return (
132
+ <div>
133
+ <h2>Something went wrong!</h2>
134
+ <button onClick={reset}>Try again</button>
135
+ </div>
136
+ );
137
+ }
138
+ ```
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: react
3
+ description: React 컴포넌트 개발 가이드라인. 단일 책임, UI/로직 분리, 명시적 데이터 흐름, 서버/클라이언트 상태 분리.
4
+ version: "1.0.0"
5
+ tags: [react, components, frontend]
6
+ user-invocable: false
7
+ ---
8
+
9
+ # React Development Guidelines
10
+
11
+ 프로젝트 전체에서 일관된 React 컴포넌트 개발을 위한 컨벤션.
12
+
13
+ ## Philosophy
14
+
15
+ - 컴포넌트는 단일 책임
16
+ - UI와 로직 분리 (커스텀 훅)
17
+ - Props로 명시적 데이터 흐름
18
+ - 서버 상태와 클라이언트 상태 분리
19
+
20
+ ## Resources
21
+
22
+ 25개 규칙 (TimSquad 3 + Vercel 22). 카테고리 인덱스: [_sections.md](rules/_sections.md)
23
+
24
+ | Priority | Type | Resource | Description |
25
+ |----------|------|----------|-------------|
26
+ | CRITICAL | rule | [async-parallel](rules/async-parallel.md) | Promise.all 병렬 실행 (2-10x) |
27
+ | CRITICAL | rule | [bundle-barrel-imports](rules/bundle-barrel-imports.md) | barrel import 피하기 |
28
+ | HIGH | rule | [component-conventions](rules/component-conventions.md) | 컴포넌트 구조, export, 크기 제한 |
29
+ | HIGH | rule | [state-location](rules/state-location.md) | 상태 관리 선택 기준 |
30
+ | HIGH | rule | [server-parallel-fetching](rules/server-parallel-fetching.md) | 서버 병렬 fetch |
31
+ | HIGH | rule | [rerender-memo](rules/rerender-memo.md) | React.memo 최적화 |
32
+ | MEDIUM | rule | [anti-patterns](rules/anti-patterns.md) | Props Drilling, useEffect 남용 |
33
+
34
+ ## Quick Rules
35
+
36
+ ### 컴포넌트
37
+ - 함수형 컴포넌트 + Props interface
38
+ - named export (`export function`, default export 금지)
39
+ - 200줄 이하
40
+ - forwardRef로 ref 전달 지원
41
+
42
+ ### 훅
43
+ - 커스텀 훅으로 로직 분리 (`use` 접두사)
44
+ - 의존성 배열 정확히 관리
45
+ - 함수형 setState로 stale closure 방지
46
+ - 조건문/반복문 안에서 훅 호출 금지
47
+ - useEffect 남용 금지 (파생 상태는 useMemo)
48
+
49
+ ### 상태 관리
50
+ - 서버 상태: React Query (TanStack Query)
51
+ - 전역 UI 상태: Zustand
52
+ - 로컬 상태: useState
53
+ - 복잡한 로직: useReducer
54
+ - 비싼 초기값: lazy init (`useState(() => ...)`)
55
+ - Props drilling 3단계 이상 → Context 또는 Zustand
56
+
57
+ ### 성능 (vercel-react-best-practices 참조)
58
+ - 리스트에 고유 key (index 금지)
59
+ - Promise.all로 병렬 fetch
60
+ - barrel import 피하기 (직접 import)
61
+ - dynamic import로 무거운 컴포넌트 분리
62
+ - content-visibility로 대량 리스트 최적화
63
+ - toSorted()로 배열 불변성
64
+
65
+ ### 폼
66
+ - React Hook Form + Zod (zodResolver)
67
+ - onBlur 유효성 검사, submit 시 첫 에러 필드 포커스
68
+
69
+ ## Checklist
70
+
71
+ | Priority | Item |
72
+ |----------|------|
73
+ | CRITICAL | 함수형 컴포넌트 + Props 타입 정의 |
74
+ | CRITICAL | 커스텀 훅으로 로직 분리 |
75
+ | CRITICAL | 서버 상태는 React Query |
76
+ | CRITICAL | Error Boundary로 에러 격리 |
77
+ | CRITICAL | Waterfall 제거 (Promise.all) |
78
+ | CRITICAL | Barrel import 피하기 |
79
+ | HIGH | 의존성 배열 정확히 관리 |
80
+ | HIGH | 리스트에 고유 key (index 금지) |
81
+ | HIGH | 폼은 React Hook Form + Zod |
82
+ | HIGH | 함수형 setState 사용 |
83
+ | HIGH | Dynamic import 분리 |
84
+ | MEDIUM | 대량 리스트 가상화 / content-visibility |
85
+ | MEDIUM | 불필요한 useEffect 제거 |
86
+ | MEDIUM | RSC 경계에서 필요한 데이터만 전달 |