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,89 @@
1
+ ---
2
+ name: flutter
3
+ description: Flutter 개발 가이드라인. Feature-first 아키텍처, Riverpod 상태관리, 위젯 합성, 성능 최적화, 크로스플랫폼 적응형 UI.
4
+ version: "1.0.0"
5
+ tags: [flutter, mobile, cross-platform, riverpod]
6
+ user-invocable: false
7
+ ---
8
+
9
+ # Flutter Development Guidelines
10
+
11
+ Flutter 3.x 기반 크로스플랫폼 앱 개발 가이드라인.
12
+ Flutter 공식 아키텍처 가이드 + VGV + Riverpod 커뮤니티 베스트 프랙티스 종합.
13
+
14
+ ## Philosophy
15
+
16
+ - 위젯은 합성 — 상속보다 조합, 작게 분리
17
+ - 상태는 구조화 — Riverpod로 선언적 의존성
18
+ - Feature-first — 기능 단위로 코드 구성
19
+ - const 는 습관 — 불필요한 리빌드 원천 차단
20
+
21
+ ## Resources
22
+
23
+ 8개 규칙 + 2개 참조. 카테고리별 배치.
24
+
25
+ | Priority | Type | Resource | Description |
26
+ |----------|------|----------|-------------|
27
+ | CRITICAL | rule | [widget-conventions](rules/widget-conventions.md) | 위젯 합성, const, Key 사용, 크기 제한 |
28
+ | CRITICAL | rule | [state-management](rules/state-management.md) | Riverpod Provider/Notifier 패턴 |
29
+ | CRITICAL | rule | [architecture](rules/architecture.md) | Feature-first + MVVM + Data/Domain/UI 레이어 |
30
+ | HIGH | rule | [navigation-routing](rules/navigation-routing.md) | go_router 선언적 라우팅, 딥링크 |
31
+ | HIGH | rule | [performance](rules/performance.md) | 리빌드 최적화, ListView.builder, Impeller |
32
+ | HIGH | rule | [testing](rules/testing.md) | Widget/Golden/Integration 테스트, mocktail |
33
+ | MEDIUM | rule | [platform-adaptive](rules/platform-adaptive.md) | 적응형 UI, 반응형 레이아웃, 플랫폼 분기 |
34
+ | MEDIUM | rule | [animations](rules/animations.md) | 암시적/명시적 애니메이션, Hero, 모션 가이드라인 |
35
+ | — | ref | [project-structure](references/project-structure.md) | Feature-first + melos 모노레포 구조 |
36
+ | — | ref | [freezed-patterns](references/freezed-patterns.md) | freezed + json_serializable 불변 모델 |
37
+
38
+ ## Quick Rules
39
+
40
+ ### 위젯
41
+ - `const` 생성자 적극 사용 (리빌드 스킵)
42
+ - 위젯 200줄 이하 — 초과 시 추출
43
+ - build() 안에서 로직 금지 — ViewModel/Notifier로 분리
44
+ - `GlobalKey` 남용 금지 — `ValueKey`/`ObjectKey` 사용
45
+
46
+ ### 상태 관리 (Riverpod)
47
+ - UI 상태: `NotifierProvider` + `Notifier`
48
+ - 서버 데이터: `FutureProvider` / `StreamProvider`
49
+ - 파생 상태: `Provider` (computed)
50
+ - `ref.watch` (build), `ref.listen` (side effect), `ref.read` (이벤트 핸들러)
51
+
52
+ ### 아키텍처
53
+ - Feature-first 구조 (`lib/features/{name}/`)
54
+ - 각 feature: `data/` + `domain/` + `presentation/`
55
+ - Repository 패턴으로 데이터 소스 추상화
56
+ - DTO ↔ Domain Model 변환 레이어
57
+
58
+ ### 네비게이션
59
+ - go_router 선언적 라우팅
60
+ - 딥링크/유니버설 링크 지원
61
+ - 중첩 네비게이션 (ShellRoute)
62
+
63
+ ### 성능
64
+ - `const` 위젯 우선
65
+ - 리스트는 `ListView.builder` (lazy)
66
+ - `RepaintBoundary`로 리빌드 범위 격리
67
+ - 이미지: `cached_network_image` + 적절한 크기
68
+
69
+ ### 테스트
70
+ - Widget test: `testWidgets` + `pumpWidget`
71
+ - Unit test: Notifier/Repository 독립 테스트
72
+ - Integration test: `patrol` (네이티브 상호작용)
73
+ - Mock: `mocktail` (코드 생성 불필요)
74
+
75
+ ## Checklist
76
+
77
+ | Priority | Item |
78
+ |----------|------|
79
+ | CRITICAL | const 생성자 사용 (lint: prefer_const_constructors) |
80
+ | CRITICAL | Riverpod Provider 타입 올바르게 선택 |
81
+ | CRITICAL | Feature-first 디렉토리 구조 |
82
+ | CRITICAL | build() 안에 비즈니스 로직 없음 |
83
+ | HIGH | ListView.builder 사용 (10+ 아이템) |
84
+ | HIGH | Repository 패턴 (데이터 소스 추상화) |
85
+ | HIGH | go_router 선언적 라우팅 |
86
+ | HIGH | Widget test 작성 |
87
+ | MEDIUM | RepaintBoundary 적용 (복잡한 서브트리) |
88
+ | MEDIUM | 적응형 UI (Material + Cupertino) |
89
+ | MEDIUM | 이미지 캐싱 + 적절한 리사이징 |
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: ci-cd
3
+ description: |
4
+ Flutter CI/CD 파이프라인 가이드라인.
5
+ 코드 서명, Fastlane, Codemagic, GitHub Actions,
6
+ 스토어 배포, 버전 관리 자동화.
7
+ version: "1.0.0"
8
+ tags: [flutter, ci-cd, fastlane, codemagic, github-actions, code-signing, deployment]
9
+ user-invocable: false
10
+ ---
11
+
12
+ # CI/CD Pipeline
13
+
14
+ Flutter 앱의 빌드, 테스트, 서명, 배포 자동화 가이드.
15
+ iOS/Android 코드 서명, Fastlane/Codemagic/GitHub Actions 파이프라인, 스토어 배포, 버전 관리.
16
+
17
+ ## Philosophy
18
+
19
+ - 배포는 자동 — 수동 빌드/업로드 금지, CI가 전부 처리
20
+ - 서명은 분리 — 코드 서명 키를 CI 환경에 안전하게 주입, 레포에 절대 포함 금지
21
+ - 버전은 규칙 — 시맨틱 버저닝 + 빌드 넘버 자동 증가
22
+ - 환경은 격리 — dev/staging/prod 설정 분리, 환경별 독립 파이프라인
23
+
24
+ ## Resources
25
+
26
+ 6개 규칙 + 1개 참조. CI/CD 파이프라인 전체를 커버.
27
+
28
+ | Priority | Type | Resource | Description |
29
+ |----------|------|----------|-------------|
30
+ | CRITICAL | rule | [code-signing](rules/code-signing.md) | iOS provisioning profile, Android keystore, 인증서 관리 |
31
+ | HIGH | rule | [fastlane-setup](rules/fastlane-setup.md) | Fastfile 구성, match, supply, deliver, .env 관리 |
32
+ | HIGH | rule | [codemagic-setup](rules/codemagic-setup.md) | codemagic.yaml 워크플로우, 환경변수, 빌드 트리거 |
33
+ | HIGH | rule | [github-actions](rules/github-actions.md) | Flutter 빌드 워크플로우, 테스트-빌드-업로드 파이프라인 |
34
+ | HIGH | rule | [store-deployment](rules/store-deployment.md) | TestFlight, Play Store tracks, 메타데이터, 단계적 출시 |
35
+ | MEDIUM | rule | [versioning](rules/versioning.md) | 시맨틱 버저닝, 빌드 넘버 자동 증가, CHANGELOG, git 태그 |
36
+ | — | ref | [ci-cd-pipeline](references/ci-cd-pipeline.md) | 파이프라인 아키텍처, 환경 설정, 시크릿 관리, 롤백 |
37
+
38
+ ## Quick Rules
39
+
40
+ ### 코드 서명
41
+ - iOS: `match` 로 인증서/프로필 Git 저장소 관리 (팀 공유)
42
+ - Android: keystore 파일을 CI 환경변수로 base64 주입
43
+ - 개발용/배포용 인증서 분리 — 동일 인증서 사용 금지
44
+ - 서명 키를 레포에 커밋 금지 — `.gitignore` 에 `*.keystore`, `*.jks`, `*.p12` 추가
45
+
46
+ ### Fastlane
47
+ - `Fastfile` 에 `ios`/`android` 레인 분리
48
+ - `match` → iOS 인증서 자동 관리 (Git 저장소 or Google Cloud Storage)
49
+ - `supply` → Google Play 업로드, `deliver` → App Store 업로드
50
+ - `.env` 로 환경별 설정 분리 (`.env.production`, `.env.staging`)
51
+
52
+ ### CI/CD 플랫폼
53
+ - Codemagic: Flutter 네이티브 지원, `codemagic.yaml` 로 워크플로우 정의
54
+ - GitHub Actions: `subosito/flutter-action` 으로 Flutter 설치, pub cache 캐시 필수
55
+ - 빌드 트리거: 태그 푸시 (`v*`) → 릴리스, PR → 테스트만
56
+
57
+ ### 스토어 배포
58
+ - TestFlight: `deliver` 또는 `app-store-connect` API로 업로드
59
+ - Play Store: internal → closed → open → production 트랙 순서
60
+ - 단계적 출시 (staged rollout): 1% → 5% → 20% → 50% → 100%
61
+ - 메타데이터 (스크린샷, 설명) 코드로 관리 (`fastlane/metadata/`)
62
+
63
+ ### 버전 관리
64
+ - `pubspec.yaml`: `version: major.minor.patch+buildNumber`
65
+ - 빌드 넘버: CI에서 자동 증가 (`--build-number=$CI_BUILD_NUMBER`)
66
+ - git 태그: `v1.2.3` 형식, 릴리스 빌드와 1:1 매핑
67
+
68
+ ## Checklist
69
+
70
+ | Priority | Item |
71
+ |----------|------|
72
+ | CRITICAL | iOS 코드 서명 (provisioning profile + 인증서) CI에 구성 |
73
+ | CRITICAL | Android keystore CI 환경변수로 안전하게 주입 |
74
+ | CRITICAL | 서명 키/인증서 `.gitignore` 에 추가 확인 |
75
+ | CRITICAL | CI 파이프라인: test → build → deploy 순서 보장 |
76
+ | HIGH | Fastlane match 설정 (iOS 인증서 팀 공유) |
77
+ | HIGH | 환경별 (dev/staging/prod) 빌드 설정 분리 |
78
+ | HIGH | 스토어 업로드 자동화 (TestFlight + Play Store) |
79
+ | HIGH | 빌드 넘버 자동 증가 전략 구현 |
80
+ | MEDIUM | CHANGELOG 자동 생성 (conventional commits 기반) |
81
+ | MEDIUM | 슬랙/디스코드 배포 알림 설정 |
82
+ | MEDIUM | 롤백 절차 문서화 및 테스트 |
@@ -0,0 +1,314 @@
1
+ ---
2
+ title: CI/CD Pipeline Architecture
3
+ category: reference
4
+ source: internal
5
+ tags: pipeline, architecture, environment, secrets, rollback, diagram
6
+ ---
7
+
8
+ # CI/CD Pipeline Architecture
9
+
10
+ 파이프라인 아키텍처 다이어그램, 환경별 설정, 시크릿 관리 전략, 롤백 절차.
11
+
12
+ ## Key Concepts
13
+
14
+ - **파이프라인**: 코드 변경 → 테스트 → 빌드 → 배포 자동화 흐름
15
+ - **환경 분리**: dev/staging/prod 각각 독립 설정, 시크릿, 배포 대상
16
+ - **시크릿 관리**: 서명 키, API 키, 서비스 계정을 안전하게 저장/주입
17
+ - **롤백**: 문제 발생 시 이전 버전으로 빠르게 복원
18
+
19
+ ## Pipeline Architecture
20
+
21
+ ```
22
+ 코드 변경 흐름:
23
+
24
+ Feature Branch PR (→ main) Tag (v*) Store
25
+ │ │ │ │
26
+ ▼ ▼ ▼ ▼
27
+ [Lint] [Test] [Build] [Deploy]
28
+ 분석 + 단위 테스트 iOS IPA TestFlight
29
+ 포맷 검사 통합 테스트 Android AAB Play Store
30
+ 커버리지 단계적 출시
31
+ │ │ │ │
32
+ ▼ ▼ ▼ ▼
33
+ 피드백 PR 체크 Artifact Notify
34
+ 즉시 알림 통과/실패 저장 Slack/Email
35
+ ```
36
+
37
+ ### 상세 파이프라인
38
+
39
+ ```
40
+ PR 생성/업데이트:
41
+ ├─ 1. Checkout
42
+ ├─ 2. flutter pub get (캐시)
43
+ ├─ 3. flutter analyze
44
+ ├─ 4. flutter test --coverage
45
+ ├─ 5. 커버리지 리포트 업로드
46
+ └─ 6. PR 상태 업데이트 (pass/fail)
47
+
48
+ 태그 푸시 (v1.2.3):
49
+ ├─ 1. Checkout + 태그에서 버전 추출
50
+ ├─ 2. flutter pub get
51
+ ├─ 3. flutter test (릴리스 전 최종 검증)
52
+ ├─ 4. 코드 서명 설정
53
+ │ ├─ iOS: match (provisioning + 인증서)
54
+ │ └─ Android: keystore 복원
55
+ ├─ 5. 빌드
56
+ │ ├─ iOS: flutter build ipa --release
57
+ │ └─ Android: flutter build appbundle --release
58
+ ├─ 6. 스토어 업로드
59
+ │ ├─ iOS: upload_to_testflight
60
+ │ └─ Android: supply (internal track)
61
+ ├─ 7. Artifact 저장 (30일)
62
+ ├─ 8. GitHub Release 생성 + CHANGELOG
63
+ └─ 9. Slack 알림 (#deployments)
64
+ ```
65
+
66
+ ## Environment Configuration
67
+
68
+ ### Flavor/Scheme 기반 환경 분리
69
+
70
+ ```dart
71
+ // lib/config/environment.dart
72
+ enum Environment { dev, staging, prod }
73
+
74
+ class EnvConfig {
75
+ final Environment env;
76
+ final String apiBaseUrl;
77
+ final String sentryDsn;
78
+ final bool enableAnalytics;
79
+
80
+ const EnvConfig({
81
+ required this.env,
82
+ required this.apiBaseUrl,
83
+ required this.sentryDsn,
84
+ required this.enableAnalytics,
85
+ });
86
+
87
+ static const dev = EnvConfig(
88
+ env: Environment.dev,
89
+ apiBaseUrl: 'https://api-dev.yourapp.com',
90
+ sentryDsn: '',
91
+ enableAnalytics: false,
92
+ );
93
+
94
+ static const staging = EnvConfig(
95
+ env: Environment.staging,
96
+ apiBaseUrl: 'https://api-staging.yourapp.com',
97
+ sentryDsn: 'https://xxx@sentry.io/staging',
98
+ enableAnalytics: false,
99
+ );
100
+
101
+ static const prod = EnvConfig(
102
+ env: Environment.prod,
103
+ apiBaseUrl: 'https://api.yourapp.com',
104
+ sentryDsn: 'https://xxx@sentry.io/prod',
105
+ enableAnalytics: true,
106
+ );
107
+ }
108
+ ```
109
+
110
+ ### --dart-define 으로 빌드 시 주입
111
+
112
+ ```bash
113
+ # Dev
114
+ flutter run \
115
+ --dart-define=ENV=dev \
116
+ --dart-define=API_URL=https://api-dev.yourapp.com
117
+
118
+ # Staging
119
+ flutter build apk \
120
+ --dart-define=ENV=staging \
121
+ --dart-define=API_URL=https://api-staging.yourapp.com
122
+
123
+ # Production
124
+ flutter build appbundle \
125
+ --release \
126
+ --dart-define=ENV=prod \
127
+ --dart-define=API_URL=https://api.yourapp.com
128
+ ```
129
+
130
+ ```dart
131
+ // 빌드 시 주입된 값 읽기
132
+ class BuildConfig {
133
+ static const env = String.fromEnvironment('ENV', defaultValue: 'dev');
134
+ static const apiUrl = String.fromEnvironment('API_URL');
135
+
136
+ static bool get isProduction => env == 'prod';
137
+ static bool get isDev => env == 'dev';
138
+ }
139
+ ```
140
+
141
+ ### CI 환경별 워크플로우
142
+
143
+ ```yaml
144
+ # Codemagic: 환경별 워크플로우
145
+ workflows:
146
+ dev-build:
147
+ triggering:
148
+ events: [push]
149
+ branch_patterns:
150
+ - pattern: "develop"
151
+ scripts:
152
+ - name: Build dev
153
+ script: |
154
+ flutter build apk --dart-define=ENV=dev
155
+
156
+ staging-build:
157
+ triggering:
158
+ events: [push]
159
+ branch_patterns:
160
+ - pattern: "release/*"
161
+ scripts:
162
+ - name: Build staging
163
+ script: |
164
+ flutter build appbundle --dart-define=ENV=staging
165
+
166
+ prod-build:
167
+ triggering:
168
+ events: [tag]
169
+ tag_patterns:
170
+ - pattern: "v*"
171
+ scripts:
172
+ - name: Build production
173
+ script: |
174
+ flutter build appbundle --release --dart-define=ENV=prod
175
+ ```
176
+
177
+ ## Secrets Management
178
+
179
+ ### 시크릿 분류
180
+
181
+ ```
182
+ Level 1 — 최고 기밀 (유출 시 앱 탈취):
183
+ ├── Android keystore + 비밀번호
184
+ ├── iOS Distribution 인증서 + 개인키
185
+ └── App Store Connect API Key (.p8)
186
+
187
+ Level 2 — 기밀 (유출 시 서비스 악용):
188
+ ├── Google Play 서비스 계정 키
189
+ ├── Firebase 서비스 계정
190
+ ├── Sentry DSN (prod)
191
+ └── match 암호화 비밀번호
192
+
193
+ Level 3 — 일반 (유출 시 정보 노출):
194
+ ├── Slack Webhook URL
195
+ ├── Codecov Token
196
+ └── Firebase App ID
197
+ ```
198
+
199
+ ### 시크릿 저장 위치
200
+
201
+ ```
202
+ GitHub Actions:
203
+ Repository > Settings > Secrets and variables > Actions
204
+ ├── Repository secrets (레포 전체)
205
+ └── Environment secrets (환경별 분리)
206
+ ├── production (승인 필요 설정 가능)
207
+ └── staging
208
+
209
+ Codemagic:
210
+ App Settings > Environment variables
211
+ ├── Variable groups (그룹별 관리)
212
+ └── Secure 체크 → 로그에 마스킹
213
+
214
+ Fastlane:
215
+ .env 파일 (로컬) + CI 환경변수 (CI)
216
+ ├── .env.default (공통, .gitignore)
217
+ └── .env.production (.gitignore)
218
+ ```
219
+
220
+ ### 시크릿 접근 제한
221
+
222
+ ```yaml
223
+ # GitHub Actions: 환경별 보호 규칙
224
+ # Repository > Settings > Environments > production
225
+ # ├── Required reviewers: 2명
226
+ # ├── Wait timer: 5분
227
+ # └── Deployment branches: main only
228
+
229
+ jobs:
230
+ deploy-production:
231
+ runs-on: ubuntu-latest
232
+ environment: production # 승인 필요
233
+ steps:
234
+ - name: Deploy
235
+ env:
236
+ # production 환경의 시크릿만 접근 가능
237
+ KEYSTORE: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
238
+ run: ...
239
+ ```
240
+
241
+ ## Rollback Procedures
242
+
243
+ ### iOS 롤백
244
+
245
+ ```
246
+ App Store:
247
+ 1. 이전 버전으로 롤백 불가 (Apple 정책)
248
+ 2. 대안: 핫픽스 빌드를 새 버전으로 긴급 제출
249
+ - Expedited Review 요청 (App Store Connect)
250
+ - 심사 시간: 보통 24시간 → 긴급 시 수시간
251
+ 3. TestFlight: 이전 빌드 재활성화 가능
252
+
253
+ 긴급 핫픽스 절차:
254
+ git checkout -b hotfix/v1.2.4 v1.2.3
255
+ # 수정 적용
256
+ git tag v1.2.4
257
+ git push origin v1.2.4
258
+ # → CI 자동 빌드 → TestFlight 업로드 → 긴급 심사 요청
259
+ ```
260
+
261
+ ### Android 롤백
262
+
263
+ ```
264
+ Play Store:
265
+ 1. Console > Release > Production > Release history
266
+ 2. 이전 릴리스의 "..." > "Release to Production"
267
+ (이전 버전을 새 릴리스로 재배포)
268
+ 3. 또는 단계적 출시 중이라면 "Halt rollout"
269
+
270
+ 자동 롤백 (Fastlane):
271
+ lane :rollback do |options|
272
+ version_code = options[:version_code]
273
+ # Play Store에서 이전 AAB 다운로드 후 재배포
274
+ # 또는 CI artifact에서 이전 빌드 가져와 재업로드
275
+ supply(
276
+ track: "production",
277
+ rollout: "1.0",
278
+ version_code: version_code,
279
+ json_key: ENV["GOOGLE_PLAY_JSON_KEY_PATH"],
280
+ )
281
+ end
282
+ ```
283
+
284
+ ### 롤백 판단 기준
285
+
286
+ ```
287
+ 즉시 롤백 (< 1시간 이내 판단):
288
+ ├── 크래시율 > 2% (이전 버전 대비 3배 이상 증가)
289
+ ├── ANR 비율 > 1%
290
+ ├── 결제/인증 등 핵심 기능 장애
291
+ └── 데이터 손실 발생
292
+
293
+ 모니터링 후 판단 (24시간):
294
+ ├── 크래시율 1-2%
295
+ ├── 특정 기기/OS 버전에서만 발생
296
+ ├── 사용자 리뷰 평점 급락
297
+ └── 비핵심 기능 장애
298
+
299
+ 유지 + 핫픽스:
300
+ ├── 크래시율 < 1% (경미)
301
+ ├── UI 버그 (기능 작동)
302
+ └── 성능 저하 (크래시 아님)
303
+ ```
304
+
305
+ ## Common Pitfalls
306
+
307
+ 1. **빌드 넘버 충돌**: iOS/Android 빌드 넘버를 별도 관리 → 동일 CI 변수 사용 권장
308
+ 2. **캐시 오염**: Flutter/Gradle/CocoaPods 캐시가 오래되면 빌드 실패 → 주기적 캐시 무효화
309
+ 3. **시크릿 로그 노출**: `echo $SECRET` → CI 로그에 노출 → 항상 마스킹 확인
310
+ 4. **인증서 만료**: match 인증서 1년 만료 → 알림 설정 필수
311
+ 5. **Xcode 버전 차이**: CI와 로컬 Xcode 버전 불일치 → `xcode: 16.2` 고정
312
+ 6. **Gradle 메모리**: Android 빌드 OOM → `org.gradle.jvmargs=-Xmx4g` 설정
313
+ 7. **동시 빌드**: 같은 브랜치 여러 빌드 → `cancel_previous_builds` 설정
314
+ 8. **태그 실수**: 잘못된 태그 푸시 → production 빌드 트리거 → 태그 보호 규칙 설정
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Code Signing
3
+ impact: CRITICAL
4
+ impactDescription: "서명 누락 → 스토어 업로드 불가, 키 유출 → 앱 탈취 위험"
5
+ tags: code-signing, ios, android, provisioning, keystore, match
6
+ ---
7
+
8
+ ## Code Signing
9
+
10
+ **Impact: CRITICAL (서명 누락 → 스토어 업로드 불가, 키 유출 → 앱 탈취 위험)**
11
+
12
+ iOS provisioning profile, Android keystore 관리. CI 환경에서 안전한 서명 키 주입.
13
+
14
+ ### iOS 코드 서명 (match)
15
+
16
+ **Incorrect (수동 관리):**
17
+ ```
18
+ Xcode > Automatically manage signing 체크
19
+ → 개발자마다 다른 profile, CI 빌드 실패, 인증서 충돌
20
+ ```
21
+
22
+ **Correct (match로 중앙 관리):**
23
+ ```ruby
24
+ # fastlane/Matchfile
25
+ git_url(ENV["MATCH_GIT_URL"])
26
+ storage_mode("git")
27
+ type("appstore")
28
+ app_identifier("com.yourapp.id")
29
+
30
+ # CI에서 실행
31
+ create_keychain(
32
+ name: "ci_keychain",
33
+ password: ENV["KEYCHAIN_PASSWORD"],
34
+ default_keychain: true, unlock: true, timeout: 3600,
35
+ )
36
+ match(
37
+ type: "appstore",
38
+ keychain_name: "ci_keychain",
39
+ keychain_password: ENV["KEYCHAIN_PASSWORD"],
40
+ readonly: true, # CI에서는 readonly — 인증서 생성 금지
41
+ )
42
+ ```
43
+
44
+ ### Android 코드 서명
45
+
46
+ **Incorrect (keystore를 레포에 포함):**
47
+ ```
48
+ android/app/release.keystore # 절대 금지!
49
+ android/key.properties # 비밀번호 하드코딩
50
+ ```
51
+
52
+ **Correct (CI 환경변수로 주입):**
53
+ ```groovy
54
+ // android/app/build.gradle
55
+ android {
56
+ signingConfigs {
57
+ release {
58
+ if (System.getenv("ANDROID_KEYSTORE_BASE64")) {
59
+ storeFile file("../release.keystore")
60
+ storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
61
+ keyAlias System.getenv("ANDROID_KEY_ALIAS")
62
+ keyPassword System.getenv("ANDROID_KEY_PASSWORD")
63
+ }
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ```bash
70
+ # CI에서 keystore 복원
71
+ echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > android/release.keystore
72
+ ```
73
+
74
+ ### 개발/배포 인증서 분리
75
+
76
+ ```
77
+ ├── Development — 디버그/테스트 (iOS provisioning, Android debug.keystore)
78
+ ├── Ad Hoc — 내부 테스트 배포 (iOS only)
79
+ └── Distribution — 스토어 제출 (iOS App Store, Android release.keystore)
80
+ ```
81
+
82
+ ### 키 로테이션
83
+
84
+ - iOS: Apple 인증서 1년 만료 → `match nuke distribution` → `match appstore`
85
+ - Android: Play App Signing 활성화 → Google이 앱 서명 키 관리, upload key만 팀 관리
86
+ - Upload Key 분실 시 → Google Play Console에서 리셋 요청
87
+
88
+ ### .gitignore 필수 항목
89
+
90
+ ```gitignore
91
+ *.mobileprovision
92
+ *.p12
93
+ *.cer
94
+ *.keystore
95
+ *.jks
96
+ key.properties
97
+ ```
98
+
99
+ ### 규칙
100
+
101
+ - `match` 로 iOS 인증서 관리 — 수동 Xcode 서명 관리 금지
102
+ - CI에서 `match(readonly: true)` — 인증서 신규 생성 방지
103
+ - Android keystore → base64 → CI 환경변수 주입
104
+ - `key.properties` `.gitignore` 추가 — 레포 커밋 금지
105
+ - Play App Signing 활성화 — upload key만 팀 관리
106
+ - 개발/배포 인증서 분리 — 동일 인증서 혼용 금지
@@ -0,0 +1,116 @@
1
+ ---
2
+ title: Codemagic Setup
3
+ impact: HIGH
4
+ impactDescription: "CI 미구성 → 수동 빌드, Codemagic 자동화 → Flutter 네이티브 지원"
5
+ tags: codemagic, ci, yaml, workflow, artifact, trigger
6
+ ---
7
+
8
+ ## Codemagic Setup
9
+
10
+ **Impact: HIGH (CI 미구성 → 수동 빌드, Codemagic 자동화 → Flutter 네이티브 지원)**
11
+
12
+ codemagic.yaml 워크플로우 구성, 환경변수/시크릿, 빌드 트리거, artifact 배포.
13
+
14
+ ### codemagic.yaml
15
+
16
+ **Incorrect (GUI만 사용):**
17
+ ```
18
+ Codemagic 웹 UI에서 빌드 설정 → 코드 관리 불가, 롤백 불가, 팀 차이 발생
19
+ ```
20
+
21
+ **Correct (yaml 코드 관리):**
22
+ ```yaml
23
+ workflows:
24
+ ios-release:
25
+ name: iOS Release
26
+ max_build_duration: 30
27
+ instance_type: mac_mini_m2
28
+ environment:
29
+ groups: [ios_credentials, app_store_connect]
30
+ flutter: "3.27.0"
31
+ xcode: latest
32
+ cocoapods: default
33
+ triggering:
34
+ events: [tag]
35
+ tag_patterns:
36
+ - pattern: "v*"
37
+ include: true
38
+ cancel_previous_builds: true
39
+ scripts:
40
+ - name: Set up code signing
41
+ script: |
42
+ keychain initialize
43
+ app-store-connect fetch-signing-files $(BUNDLE_ID) --type IOS_APP_STORE --create
44
+ keychain add-certificates
45
+ - name: Build
46
+ script: |
47
+ xcode-project use-profiles
48
+ flutter packages pub get
49
+ flutter build ipa --release --build-number=$PROJECT_BUILD_NUMBER \
50
+ --export-options-plist=/Users/builder/export_options.plist
51
+ artifacts:
52
+ - build/ios/ipa/*.ipa
53
+ publishing:
54
+ app_store_connect:
55
+ auth: integration
56
+ submit_to_testflight: true
57
+ slack:
58
+ channel: "#deployments"
59
+ notify:
60
+ success: true
61
+ failure: true
62
+
63
+ android-release:
64
+ name: Android Release
65
+ instance_type: linux_x2
66
+ environment:
67
+ groups: [android_credentials, google_play]
68
+ flutter: "3.27.0"
69
+ triggering:
70
+ events: [tag]
71
+ tag_patterns:
72
+ - pattern: "v*"
73
+ scripts:
74
+ - name: Set up signing + Build
75
+ script: |
76
+ echo $ANDROID_KEYSTORE_BASE64 | base64 --decode > android/release.keystore
77
+ flutter packages pub get
78
+ flutter build appbundle --release --build-number=$PROJECT_BUILD_NUMBER
79
+ artifacts:
80
+ - build/app/outputs/bundle/release/*.aab
81
+ publishing:
82
+ google_play:
83
+ credentials: $GCLOUD_SERVICE_ACCOUNT_CREDENTIALS
84
+ track: internal
85
+
86
+ test:
87
+ name: Test & Analyze
88
+ instance_type: linux_x2
89
+ environment:
90
+ flutter: "3.27.0"
91
+ triggering:
92
+ events: [pull_request]
93
+ scripts:
94
+ - name: Test
95
+ script: |
96
+ flutter packages pub get && flutter analyze && flutter test --coverage
97
+ ```
98
+
99
+ ### 환경변수/시크릿
100
+
101
+ ```
102
+ Codemagic UI > Environment variables:
103
+ ├── ios_credentials: CERTIFICATE_PRIVATE_KEY, BUNDLE_ID, PROVISIONING_PROFILE
104
+ ├── app_store_connect: ASC_KEY_ID, ASC_ISSUER_ID, ASC_API_KEY (.p8)
105
+ ├── android_credentials: ANDROID_KEYSTORE_BASE64, PASSWORD, ALIAS, KEY_PASSWORD
106
+ └── google_play: GCLOUD_SERVICE_ACCOUNT_CREDENTIALS (JSON)
107
+ ```
108
+
109
+ ### 규칙
110
+
111
+ - `codemagic.yaml` 로 워크플로우 정의 — GUI 설정 대신 코드 관리
112
+ - 시크릿은 Codemagic UI에서만 설정 — yaml에 비밀값 금지
113
+ - `instance_type: mac_mini_m2` — iOS 빌드는 macOS 필수
114
+ - `cancel_previous_builds: true` — 동일 브랜치 중복 빌드 방지
115
+ - PR → test, 태그 → release 워크플로우 분리
116
+ - `PROJECT_BUILD_NUMBER` 활용 — 자동 증가 빌드 넘버