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,137 @@
1
+ ---
2
+ title: Localization Setup (flutter_localizations + intl)
3
+ impact: CRITICAL
4
+ impactDescription: "설정 누락 → 번역 미적용, 런타임 에러, 날짜/숫자 포맷 불일치"
5
+ tags: flutter-localizations, intl, l10n-yaml, pubspec, setup
6
+ ---
7
+
8
+ ## Localization Setup (flutter_localizations + intl)
9
+
10
+ **Impact: CRITICAL (설정 누락 → 번역 미적용, 런타임 에러, 날짜/숫자 포맷 불일치)**
11
+
12
+ flutter_localizations + intl 패키지 설정, pubspec.yaml generate 플래그, l10n.yaml 구성,
13
+ MaterialApp delegate 등록. 프로젝트 초기에 반드시 완료해야 하는 i18n 인프라.
14
+
15
+ ### 의존성
16
+
17
+ ```yaml
18
+ # pubspec.yaml
19
+ dependencies:
20
+ flutter:
21
+ sdk: flutter
22
+ flutter_localizations:
23
+ sdk: flutter
24
+ intl: any # flutter_localizations가 버전 관리
25
+
26
+ # 코드 생성 활성화 (필수!)
27
+ flutter:
28
+ generate: true
29
+ ```
30
+
31
+ ### l10n.yaml 설정
32
+
33
+ **Incorrect (l10n.yaml 없이 수동 관리):**
34
+ ```dart
35
+ // ARB 파일을 직접 파싱하거나 하드코딩된 Map 사용
36
+ // → 타입 안전성 없음, 키 오타 런타임까지 발견 불가
37
+ final Map<String, String> translations = {
38
+ 'hello': 'Hello',
39
+ 'welcome': 'Welcome, $name',
40
+ };
41
+ ```
42
+
43
+ **Correct (l10n.yaml로 자동 코드 생성):**
44
+ ```yaml
45
+ # l10n.yaml (프로젝트 루트)
46
+ arb-dir: lib/l10n
47
+ template-arb-file: app_en.arb
48
+ output-localization-file: app_localizations.dart
49
+ output-class: AppLocalizations
50
+ # nullable-getter: false # null 안전 접근 (선택, 기본 true)
51
+ # synthetic-package: true # .dart_tool/에 생성 (기본 true)
52
+ ```
53
+
54
+ ### MaterialApp 설정
55
+
56
+ **Incorrect (delegate 누락):**
57
+ ```dart
58
+ MaterialApp(
59
+ // localizationsDelegates 없음 → AppLocalizations.of(context) 실패
60
+ // supportedLocales 없음 → 시스템 로캘 무시
61
+ home: const HomeScreen(),
62
+ );
63
+ ```
64
+
65
+ **Correct (완전한 delegate 등록):**
66
+ ```dart
67
+ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
68
+
69
+ class MyApp extends ConsumerWidget {
70
+ const MyApp({super.key});
71
+
72
+ @override
73
+ Widget build(BuildContext context, WidgetRef ref) {
74
+ final locale = ref.watch(localeProvider);
75
+
76
+ return MaterialApp.router(
77
+ // 1. Localization Delegates (3종 필수)
78
+ localizationsDelegates: const [
79
+ AppLocalizations.delegate, // 앱 번역
80
+ GlobalMaterialLocalizations.delegate, // Material 위젯 번역
81
+ GlobalWidgetsLocalizations.delegate, // 기본 위젯 방향성
82
+ GlobalCupertinoLocalizations.delegate, // Cupertino 위젯 번역
83
+ ],
84
+ // 2. 지원 로캘 목록
85
+ supportedLocales: AppLocalizations.supportedLocales,
86
+ // 3. 현재 로캘 (null → 시스템 로캘 사용)
87
+ locale: locale,
88
+ routerConfig: ref.watch(routerProvider),
89
+ );
90
+ }
91
+ }
92
+ ```
93
+
94
+ ### 번역 사용
95
+
96
+ ```dart
97
+ // 위젯에서 번역 접근
98
+ class WelcomeScreen extends StatelessWidget {
99
+ const WelcomeScreen({super.key});
100
+
101
+ @override
102
+ Widget build(BuildContext context) {
103
+ // AppLocalizations.of(context) → nullable (로캘 미지원 시 null)
104
+ final l10n = AppLocalizations.of(context)!;
105
+ // 또는 extension 사용:
106
+ // final l10n = context.l10n;
107
+
108
+ return Text(l10n.welcomeMessage('Tim'));
109
+ }
110
+ }
111
+
112
+ // 편의 Extension (선택)
113
+ extension BuildContextL10n on BuildContext {
114
+ AppLocalizations get l10n => AppLocalizations.of(this)!;
115
+ }
116
+ ```
117
+
118
+ ### 코드 생성 실행
119
+
120
+ ```bash
121
+ # ARB 파일 추가/수정 후 코드 생성
122
+ flutter gen-l10n
123
+
124
+ # 또는 빌드 시 자동 생성 (generate: true 설정 시)
125
+ flutter run # 자동으로 gen-l10n 실행
126
+ flutter build # 마찬가지
127
+ ```
128
+
129
+ ### 규칙
130
+
131
+ - `pubspec.yaml` → `flutter: generate: true` 필수 (자동 코드 생성 활성화)
132
+ - `l10n.yaml` → 프로젝트 루트에 반드시 생성, `arb-dir` + `template-arb-file` 지정
133
+ - `localizationsDelegates` → 4개 등록 (App + Material + Widgets + Cupertino)
134
+ - `supportedLocales` → `AppLocalizations.supportedLocales` 사용 (ARB 파일에서 자동 유도)
135
+ - 하드코딩된 문자열 Map 사용 금지 → ARB + 코드 생성으로 타입 안전 접근
136
+ - `context.l10n` Extension → 반복적인 `AppLocalizations.of(context)!` 줄이기
137
+ - `flutter gen-l10n` → ARB 파일 변경 후 반드시 실행 (빌드 시 자동이지만 IDE 지원용)
@@ -0,0 +1,159 @@
1
+ ---
2
+ title: Plural & Gender (ICU MessageFormat)
3
+ impact: HIGH
4
+ impactDescription: "복수형 미처리 → '1 items' 문법 오류, 성별 미처리 → 포용성 저하"
5
+ tags: icu, plural, gender, select, ordinal, message-format
6
+ ---
7
+
8
+ ## Plural & Gender (ICU MessageFormat)
9
+
10
+ **Impact: HIGH (복수형 미처리 → '1 items' 문법 오류, 성별 미처리 → 포용성 저하)**
11
+
12
+ ICU MessageFormat 기반 복수형, 성별, 서수 처리. ARB 파일에 직접 ICU 구문 작성,
13
+ intl 패키지가 자동 파싱. 언어별 복수형 규칙 차이를 올바르게 처리.
14
+
15
+ ### 복수형 (Plural)
16
+
17
+ **Incorrect (조건문으로 복수형 처리):**
18
+ ```dart
19
+ // 코드에서 직접 분기 → 번역 불가, 언어별 규칙 대응 불가
20
+ String getItemText(int count) {
21
+ if (count == 0) return 'No items';
22
+ if (count == 1) return '1 item';
23
+ return '$count items';
24
+ }
25
+ // → 러시아어는 1, 2-4, 5-20, 21 등 복수형 규칙이 다름
26
+ // → 아랍어는 6가지 복수형 (zero, one, two, few, many, other)
27
+ ```
28
+
29
+ **Correct (ARB 파일에 ICU plural 구문):**
30
+ ```json
31
+ {
32
+ "matchCount": "{count, plural, =0{No matches} =1{1 match} other{{count} matches}}",
33
+ "@matchCount": {
34
+ "description": "Number of available matches on the board",
35
+ "placeholders": {
36
+ "count": {
37
+ "type": "int",
38
+ "example": "5"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ ### 복수형 카테고리
46
+
47
+ ```
48
+ ICU 복수형 카테고리 (언어별로 사용하는 카테고리가 다름):
49
+
50
+ =0 → 정확히 0 (선택, 없으면 other 사용)
51
+ =1 → 정확히 1 (선택, 없으면 one 사용)
52
+ =2 → 정확히 2 (선택)
53
+ zero → 0 범주 (아랍어 등)
54
+ one → 1 범주 (대부분 언어의 단수)
55
+ two → 2 범주 (아랍어, 웨일스어)
56
+ few → 소수 범주 (슬라브어: 2-4, 아랍어: 3-10)
57
+ many → 다수 범주 (슬라브어: 5+, 아랍어: 11-99)
58
+ other → 기본 (필수! 모든 언어에서 폴백)
59
+ ```
60
+
61
+ ### 언어별 복수형 예시
62
+
63
+ ```json
64
+ // English (en) — one, other
65
+ {
66
+ "messageCount": "{count, plural, =0{No messages} one{1 message} other{{count} messages}}"
67
+ }
68
+
69
+ // Korean (ko) — other만 사용 (복수형 구분 없음)
70
+ {
71
+ "messageCount": "{count, plural, =0{메시지 없음} other{메시지 {count}개}}"
72
+ }
73
+
74
+ // Russian (ru) — one, few, many, other
75
+ {
76
+ "messageCount": "{count, plural, =0{Нет сообщений} one{{count} сообщение} few{{count} сообщения} many{{count} сообщений} other{{count} сообщений}}"
77
+ }
78
+
79
+ // Arabic (ar) — zero, one, two, few, many, other
80
+ {
81
+ "messageCount": "{count, plural, zero{لا رسائل} one{رسالة واحدة} two{رسالتان} few{{count} رسائل} many{{count} رسالة} other{{count} رسالة}}"
82
+ }
83
+ ```
84
+
85
+ ### 성별 (Select)
86
+
87
+ ```json
88
+ {
89
+ "profileGreeting": "{gender, select, male{He joined} female{She joined} other{They joined}} the match",
90
+ "@profileGreeting": {
91
+ "description": "Greeting text when a player joins a match",
92
+ "placeholders": {
93
+ "gender": {
94
+ "type": "String",
95
+ "example": "male"
96
+ }
97
+ }
98
+ }
99
+ }
100
+
101
+ // Korean (성별 구분 불필요한 언어)
102
+ {
103
+ "profileGreeting": "{gender, select, male{매치에 참가했습니다} female{매치에 참가했습니다} other{매치에 참가했습니다}}"
104
+ }
105
+ ```
106
+
107
+ ### 복합 (Plural + 다른 변수)
108
+
109
+ ```json
110
+ {
111
+ "matchInvite": "{userName} invited you to {count, plural, =1{a match} other{{count} matches}}",
112
+ "@matchInvite": {
113
+ "description": "Match invitation notification text",
114
+ "placeholders": {
115
+ "userName": { "type": "String", "example": "Tim" },
116
+ "count": { "type": "int", "example": "2" }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### 서수 (Ordinal — 선택)
123
+
124
+ ```json
125
+ {
126
+ "rankPosition": "You are {position, select, 1{1st} 2{2nd} 3{3rd} other{{position}th}} place",
127
+ "@rankPosition": {
128
+ "description": "User ranking position in leaderboard",
129
+ "placeholders": {
130
+ "position": { "type": "int", "example": "3" }
131
+ }
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### Dart 코드에서 사용
137
+
138
+ ```dart
139
+ // 자동 생성된 AppLocalizations 메서드 사용
140
+ Text(context.l10n.matchCount(0)); // "No matches"
141
+ Text(context.l10n.matchCount(1)); // "1 match"
142
+ Text(context.l10n.matchCount(42)); // "42 matches"
143
+
144
+ Text(context.l10n.profileGreeting('female')); // "She joined the match"
145
+ Text(context.l10n.profileGreeting('other')); // "They joined the match"
146
+
147
+ Text(context.l10n.matchInvite('Tim', 3)); // "Tim invited you to 3 matches"
148
+ ```
149
+
150
+ ### 규칙
151
+
152
+ - 복수형 → ARB 파일에 ICU `{count, plural, ...}` 구문 사용, 코드 분기 금지
153
+ - `other` 카테고리 → 필수 (모든 복수형/select에서 폴백)
154
+ - 언어별 복수형 규칙 → 번역가에게 언어 규칙 안내 (CLDR 참조)
155
+ - 성별 → `{gender, select, male{...} female{...} other{...}}` 사용
156
+ - `other` in select → 성 중립 표현 (포용성)
157
+ - 복합 구문 → plural + 변수 결합 가능, 중첩은 가독성 위해 최소화
158
+ - placeholder type → `int` (plural), `String` (select) 정확히 지정
159
+ - 한국어/일본어 등 → 복수형 구분 불필요해도 `other` 필수 (ICU 규격)
@@ -0,0 +1,199 @@
1
+ ---
2
+ title: Text Direction & RTL Layout Support
3
+ impact: HIGH
4
+ impactDescription: "RTL 미대응 → 아랍어/히브리어 사용자 UX 파괴, 레이아웃 반전 오류"
5
+ tags: rtl, ltr, directionality, edge-insets-directional, alignment-directional
6
+ ---
7
+
8
+ ## Text Direction & RTL Layout Support
9
+
10
+ **Impact: HIGH (RTL 미대응 → 아랍어/히브리어 사용자 UX 파괴, 레이아웃 반전 오류)**
11
+
12
+ RTL (Right-to-Left) 레이아웃 지원. Directionality 위젯, EdgeInsetsDirectional,
13
+ AlignmentDirectional, 아이콘 미러링. RTL 로캘 지원 시 필수.
14
+
15
+ ### Directional 위젯 사용
16
+
17
+ **Incorrect (하드코딩된 left/right):**
18
+ ```dart
19
+ Container(
20
+ padding: const EdgeInsets.only(left: 16, right: 8),
21
+ alignment: Alignment.centerLeft,
22
+ child: Row(
23
+ children: [
24
+ const Icon(Icons.arrow_back), // RTL에서도 왼쪽 화살표
25
+ const SizedBox(width: 8),
26
+ Text(title),
27
+ ],
28
+ ),
29
+ );
30
+ ```
31
+
32
+ **Correct (Directional 위젯으로 RTL 자동 대응):**
33
+ ```dart
34
+ Container(
35
+ padding: const EdgeInsetsDirectional.only(start: 16, end: 8),
36
+ alignment: AlignmentDirectional.centerStart,
37
+ child: Row(
38
+ children: [
39
+ Icon(
40
+ // RTL에서는 자동으로 arrow_forward (오른쪽→왼쪽 방향)
41
+ Directionality.of(context) == TextDirection.rtl
42
+ ? Icons.arrow_forward
43
+ : Icons.arrow_back,
44
+ ),
45
+ const SizedBox(width: 8),
46
+ Text(title),
47
+ ],
48
+ ),
49
+ );
50
+ ```
51
+
52
+ ### EdgeInsets → EdgeInsetsDirectional 변환
53
+
54
+ ```dart
55
+ // ❌ 물리적 방향 (RTL에서 반전 안 됨)
56
+ EdgeInsets.only(left: 16)
57
+ EdgeInsets.fromLTRB(16, 8, 0, 8)
58
+ EdgeInsets.symmetric(horizontal: 16) // ✅ 대칭은 OK
59
+
60
+ // ✅ 논리적 방향 (RTL에서 자동 반전)
61
+ EdgeInsetsDirectional.only(start: 16)
62
+ EdgeInsetsDirectional.fromSTEB(16, 8, 0, 8) // Start, Top, End, Bottom
63
+ EdgeInsetsDirectional.only(start: 16, end: 8)
64
+
65
+ // Padding 위젯도 동일
66
+ Padding(
67
+ padding: const EdgeInsetsDirectional.only(start: 16),
68
+ child: child,
69
+ );
70
+ ```
71
+
72
+ ### Alignment → AlignmentDirectional 변환
73
+
74
+ ```dart
75
+ // ❌ 물리적 정렬
76
+ Alignment.centerLeft
77
+ Alignment.topRight
78
+
79
+ // ✅ 논리적 정렬
80
+ AlignmentDirectional.centerStart // LTR: left, RTL: right
81
+ AlignmentDirectional.topEnd // LTR: right, RTL: left
82
+
83
+ // Container, Align, Positioned 등에 적용
84
+ Container(
85
+ alignment: AlignmentDirectional.centerStart,
86
+ child: child,
87
+ );
88
+
89
+ Align(
90
+ alignment: AlignmentDirectional.topEnd,
91
+ child: badge,
92
+ );
93
+ ```
94
+
95
+ ### Positioned → PositionedDirectional
96
+
97
+ ```dart
98
+ // ❌ 물리적 위치 (RTL 미대응)
99
+ Positioned(
100
+ left: 16,
101
+ top: 8,
102
+ child: badge,
103
+ );
104
+
105
+ // ✅ 논리적 위치 (RTL 자동 반전)
106
+ PositionedDirectional(
107
+ start: 16,
108
+ top: 8,
109
+ child: badge,
110
+ );
111
+ ```
112
+
113
+ ### 아이콘 미러링
114
+
115
+ ```dart
116
+ /// 방향성을 가진 아이콘 (화살표, 체브론 등)은 RTL에서 미러링
117
+ class DirectionalIcon extends StatelessWidget {
118
+ final IconData icon;
119
+ final double? size;
120
+ final Color? color;
121
+
122
+ const DirectionalIcon(this.icon, {super.key, this.size, this.color});
123
+
124
+ @override
125
+ Widget build(BuildContext context) {
126
+ final isRtl = Directionality.of(context) == TextDirection.rtl;
127
+
128
+ // 방향성 아이콘만 미러링 (체크마크, 플러스 등은 미러링 X)
129
+ if (isRtl) {
130
+ return Transform.flip(
131
+ flipX: true,
132
+ child: Icon(icon, size: size, color: color),
133
+ );
134
+ }
135
+
136
+ return Icon(icon, size: size, color: color);
137
+ }
138
+ }
139
+
140
+ // 사용 예
141
+ DirectionalIcon(Icons.arrow_forward_ios, size: 16), // RTL에서 자동 반전
142
+ Icon(Icons.check, size: 16), // 방향 무관 → 미러링 불필요
143
+ ```
144
+
145
+ ### RTL 테스트
146
+
147
+ ```dart
148
+ // 테스트에서 RTL 환경 시뮬레이션
149
+ testWidgets('renders correctly in RTL', (tester) async {
150
+ await tester.pumpWidget(
151
+ Directionality(
152
+ textDirection: TextDirection.rtl,
153
+ child: MediaQuery(
154
+ data: const MediaQueryData(),
155
+ child: Material(
156
+ child: MyWidget(),
157
+ ),
158
+ ),
159
+ ),
160
+ );
161
+
162
+ // start padding이 RTL에서 오른쪽에 적용되는지 확인
163
+ final container = tester.widget<Container>(find.byType(Container));
164
+ // ...assertions
165
+ });
166
+
167
+ // 전체 앱을 RTL로 실행 (디버그 확인용)
168
+ MaterialApp(
169
+ locale: const Locale('ar'), // 아랍어 → RTL 자동 적용
170
+ // ...
171
+ );
172
+ ```
173
+
174
+ ### Row/Column 방향
175
+
176
+ ```dart
177
+ // Row는 TextDirection을 자동 반영
178
+ // LTR: [icon] [text] [chevron →]
179
+ // RTL: [← chevron] [text] [icon]
180
+ Row(
181
+ children: [
182
+ const Icon(Icons.person),
183
+ Expanded(child: Text(context.l10n.profileLabel)),
184
+ const DirectionalIcon(Icons.chevron_right),
185
+ ],
186
+ );
187
+ // → Row 내부 순서 변경 불필요, Flutter가 자동 반전
188
+ ```
189
+
190
+ ### 규칙
191
+
192
+ - `EdgeInsets` → `EdgeInsetsDirectional` 로 교체 (left/right → start/end)
193
+ - `Alignment` → `AlignmentDirectional` 로 교체 (centerLeft → centerStart)
194
+ - `Positioned` → `PositionedDirectional` 로 교체 (left → start)
195
+ - 대칭 padding/margin (`symmetric`) → 그대로 사용 가능 (반전 불필요)
196
+ - 방향성 아이콘 (화살표, 체브론) → RTL에서 `Transform.flip` 미러링
197
+ - 방향 무관 아이콘 (체크, 플러스, 검색) → 미러링 금지
198
+ - RTL 테스트 → `Directionality(textDirection: TextDirection.rtl)` 로 래핑
199
+ - `Row`/`ListView` → TextDirection 자동 반영, 순서 변경 불필요
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: monitoring
3
+ description: |
4
+ Flutter 모니터링 & 분석 가이드라인.
5
+ Firebase Crashlytics, Analytics, Performance Monitoring,
6
+ Sentry 통합, 구조화된 로깅.
7
+ version: "1.0.0"
8
+ tags: [flutter, crashlytics, analytics, performance, sentry, monitoring, logging]
9
+ user-invocable: false
10
+ ---
11
+
12
+ # Monitoring & Analytics
13
+
14
+ Flutter 앱 모니터링 통합 가이드.
15
+ Firebase Crashlytics + Analytics + Performance, Sentry, 구조화된 로깅으로
16
+ 프로덕션 품질을 수치로 관리.
17
+
18
+ ## Philosophy
19
+
20
+ - 크래시는 0순위 — Crashlytics 비활성화 금지, 모든 비치명 에러도 기록
21
+ - 이벤트는 설계 — 무분별한 로깅 금지, 이벤트 택소노미 먼저 정의
22
+ - 성능은 측정 — 체감이 아닌 custom trace와 HTTP metric으로 수치화
23
+
24
+ ## Resources
25
+
26
+ 5개 규칙 + 1개 참조. 크래시부터 로깅까지 모니터링 파이프라인 전체를 커버.
27
+
28
+ | Priority | Type | Resource | Description |
29
+ |----------|------|----------|-------------|
30
+ | CRITICAL | rule | [crashlytics-setup](rules/crashlytics-setup.md) | Crashlytics 초기화, 에러 캡처, 사용자 식별 |
31
+ | HIGH | rule | [analytics](rules/analytics.md) | Analytics 이벤트 택소노미, 사용자 속성, 화면 추적 |
32
+ | HIGH | rule | [performance-monitoring](rules/performance-monitoring.md) | Performance custom trace, HTTP metric, 프레임 모니터링 |
33
+ | MEDIUM | rule | [sentry-integration](rules/sentry-integration.md) | Sentry 초기화, breadcrumbs, scope, Crashlytics 공존 |
34
+ | MEDIUM | rule | [logging](rules/logging.md) | 구조화된 로깅, 레벨 관리, 민감 데이터 마스킹 |
35
+ | — | ref | [monitoring-architecture](references/monitoring-architecture.md) | 모니터링 레이어, 대시보드, 알림, 데이터 보존 |
36
+
37
+ ## Quick Rules
38
+
39
+ ### Crashlytics
40
+ - `FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError`
41
+ - `PlatformDispatcher.instance.onError` → 비동기 에러 캡처
42
+ - 비치명 에러 → `recordError(error, stack, fatal: false)`
43
+ - `setUserIdentifier` → 크래시와 사용자 매핑
44
+ - `setCustomKey` → 디바이스 상태, 기능 플래그 등 컨텍스트
45
+
46
+ ### Analytics
47
+ - 이벤트 택소노미 먼저 정의 (screen_view, button_click, feature_use)
48
+ - `setUserProperty` → user_type, subscription_tier 등 세그먼트 기준
49
+ - `AnalyticsObserver` → go_router 화면 전환 자동 추적
50
+ - 디버그 → `adb shell setprop debug.firebase.analytics.app <package>`
51
+
52
+ ### Performance
53
+ - `FirebasePerformance.instance.newTrace('name')` → custom trace
54
+ - HTTP metric → 자동 수집 (dio interceptor 또는 http_client)
55
+ - 느린 프레임 임계값 16ms (60fps), 8ms (120fps)
56
+
57
+ ### Sentry
58
+ - `SentryFlutter.init` → DSN 환경별 분리 (dev/staging/prod)
59
+ - `Sentry.addBreadcrumb` → 네비게이션, HTTP, 사용자 액션 추적
60
+ - Crashlytics + Sentry 공존 → 각자 역할 분리 (crash vs context)
61
+
62
+ ### Logging
63
+ - `logger` 패키지 → 레벨별 색상 출력 (개발), JSON 구조화 (프로덕션)
64
+ - 릴리스 빌드 → verbose/debug 레벨 비활성화
65
+ - 민감 데이터 (토큰, PII) → 마스킹 필수
66
+
67
+ ## Checklist
68
+
69
+ | Priority | Item |
70
+ |----------|------|
71
+ | CRITICAL | `FlutterError.onError` + `PlatformDispatcher.onError` 연동 |
72
+ | CRITICAL | Crashlytics 디버그 모드 비활성화 (`setCrashlyticsCollectionEnabled`) |
73
+ | CRITICAL | 릴리스 빌드에서 dSYM / ProGuard mapping 업로드 설정 |
74
+ | HIGH | Analytics 이벤트 택소노미 문서화 후 구현 |
75
+ | HIGH | `AnalyticsObserver` go_router 연동 |
76
+ | HIGH | Performance custom trace 핵심 플로우에 적용 |
77
+ | HIGH | HTTP metric 수집 (dio interceptor) |
78
+ | MEDIUM | Sentry DSN 환경별 분리 |
79
+ | MEDIUM | Sentry breadcrumb 네비게이션/HTTP 자동 기록 |
80
+ | MEDIUM | 구조화된 로깅 + 릴리스 레벨 필터 |
81
+ | MEDIUM | 민감 데이터 마스킹 검증 |