timsquad 3.6.0 → 3.7.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 (431) hide show
  1. package/README.ko.md +103 -111
  2. package/README.md +100 -108
  3. package/dist/commands/init.js +4 -8
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/{upgrade.d.ts → update.d.ts} +3 -3
  6. package/dist/commands/update.d.ts.map +1 -0
  7. package/dist/commands/{upgrade.js → update.js} +12 -17
  8. package/dist/commands/update.js.map +1 -0
  9. package/dist/daemon/event-queue.d.ts +3 -11
  10. package/dist/daemon/event-queue.d.ts.map +1 -1
  11. package/dist/daemon/event-queue.js +62 -203
  12. package/dist/daemon/event-queue.js.map +1 -1
  13. package/dist/daemon/index.d.ts +1 -1
  14. package/dist/daemon/index.d.ts.map +1 -1
  15. package/dist/daemon/index.js +15 -14
  16. package/dist/daemon/index.js.map +1 -1
  17. package/dist/index.js +3 -43
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/agent-generator.d.ts.map +1 -1
  20. package/dist/lib/agent-generator.js +10 -10
  21. package/dist/lib/agent-generator.js.map +1 -1
  22. package/dist/lib/compile-rules.d.ts.map +1 -1
  23. package/dist/lib/compile-rules.js +37 -4
  24. package/dist/lib/compile-rules.js.map +1 -1
  25. package/dist/lib/compiler.d.ts +1 -0
  26. package/dist/lib/compiler.d.ts.map +1 -1
  27. package/dist/lib/compiler.js +67 -11
  28. package/dist/lib/compiler.js.map +1 -1
  29. package/dist/{commands/log.d.ts → lib/log-utils.d.ts} +7 -15
  30. package/dist/lib/log-utils.d.ts.map +1 -0
  31. package/dist/lib/log-utils.js +347 -0
  32. package/dist/lib/log-utils.js.map +1 -0
  33. package/dist/lib/skill-generator.d.ts.map +1 -1
  34. package/dist/lib/skill-generator.js +4 -44
  35. package/dist/lib/skill-generator.js.map +1 -1
  36. package/dist/lib/ssot-map.d.ts.map +1 -1
  37. package/dist/lib/ssot-map.js +3 -0
  38. package/dist/lib/ssot-map.js.map +1 -1
  39. package/dist/lib/template.d.ts +10 -3
  40. package/dist/lib/template.d.ts.map +1 -1
  41. package/dist/lib/template.js +136 -22
  42. package/dist/lib/template.js.map +1 -1
  43. package/dist/lib/upgrade-backup.js +1 -1
  44. package/dist/lib/upgrade-backup.js.map +1 -1
  45. package/dist/types/config.d.ts.map +1 -1
  46. package/dist/types/config.js +34 -34
  47. package/dist/types/config.js.map +1 -1
  48. package/dist/types/feedback.d.ts +1 -54
  49. package/dist/types/feedback.d.ts.map +1 -1
  50. package/dist/types/feedback.js +1 -22
  51. package/dist/types/feedback.js.map +1 -1
  52. package/dist/types/project.d.ts +5 -0
  53. package/dist/types/project.d.ts.map +1 -1
  54. package/dist/types/project.js +15 -0
  55. package/dist/types/project.js.map +1 -1
  56. package/dist/types/ssot-map.d.ts +2 -0
  57. package/dist/types/ssot-map.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/templates/base/agents/base/tsq-architect.md +1 -1
  60. package/templates/base/agents/base/tsq-dba.md +3 -1
  61. package/templates/base/agents/base/tsq-designer.md +3 -1
  62. package/templates/base/agents/base/tsq-developer.md +3 -1
  63. package/templates/base/agents/base/tsq-librarian.md +1 -1
  64. package/templates/base/agents/base/tsq-qa.md +3 -1
  65. package/templates/base/agents/base/tsq-security.md +3 -1
  66. package/templates/base/agents/overlays/platform/claude-code.md +2 -2
  67. package/templates/base/config.template.yaml +17 -28
  68. package/templates/base/knowledge/templates/task-result.md +5 -10
  69. package/templates/base/skills/_template/SKILL.md +1 -3
  70. package/templates/base/skills/{architecture → tsq-architecture}/SKILL.md +2 -2
  71. package/templates/base/skills/tsq-audit/SKILL.md +74 -0
  72. package/templates/base/skills/{methodology/bdd → tsq-bdd}/SKILL.md +14 -9
  73. package/templates/base/skills/{coding → tsq-coding}/SKILL.md +2 -4
  74. package/templates/base/skills/tsq-controller/SKILL.md +81 -0
  75. package/templates/base/skills/{mobile/dart → tsq-dart}/SKILL.md +5 -3
  76. package/templates/base/skills/{database → tsq-database}/SKILL.md +5 -2
  77. package/templates/base/skills/{methodology/ddd → tsq-ddd}/SKILL.md +15 -10
  78. package/templates/base/skills/{methodology/debugging → tsq-debugging}/SKILL.md +2 -2
  79. package/templates/base/skills/tsq-decompose/SKILL.md +117 -0
  80. package/templates/base/skills/tsq-delete/SKILL.md +72 -0
  81. package/templates/base/skills/{mobile/flutter → tsq-flutter}/SKILL.md +6 -3
  82. package/templates/base/skills/tsq-grill/SKILL.md +86 -0
  83. package/templates/base/skills/{backend/node → tsq-hono}/SKILL.md +6 -4
  84. package/templates/base/skills/tsq-librarian/SKILL.md +78 -0
  85. package/templates/base/skills/tsq-log/SKILL.md +30 -0
  86. package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/SKILL.md +14 -9
  87. package/templates/base/skills/{planning → tsq-planning}/SKILL.md +2 -2
  88. package/templates/base/skills/{database/prisma → tsq-prisma}/SKILL.md +15 -9
  89. package/templates/base/skills/{product-audit → tsq-product-audit}/SKILL.md +2 -4
  90. package/templates/base/skills/{prompt-engineering → tsq-prompt}/SKILL.md +6 -4
  91. package/templates/base/skills/tsq-protocol/SKILL.md +85 -33
  92. package/templates/base/skills/{frontend/react → tsq-react}/SKILL.md +6 -3
  93. package/templates/base/skills/tsq-retro/SKILL.md +86 -0
  94. package/templates/base/skills/tsq-retro/references/feedback-guide.md +58 -0
  95. package/templates/base/skills/tsq-retro/references/improve-protocol.md +87 -0
  96. package/templates/base/skills/{security → tsq-security}/SKILL.md +2 -4
  97. package/templates/base/skills/{spec → tsq-spec}/SKILL.md +4 -6
  98. package/templates/base/skills/{stability-verification → tsq-stability}/SKILL.md +3 -3
  99. package/templates/base/skills/tsq-start/SKILL.md +90 -0
  100. package/templates/base/skills/tsq-start/references/onboarding-questions.md +177 -0
  101. package/templates/base/skills/tsq-status/SKILL.md +32 -0
  102. package/templates/base/skills/{methodology/tdd → tsq-tdd}/SKILL.md +6 -3
  103. package/templates/base/skills/{testing → tsq-testing}/SKILL.md +5 -7
  104. package/templates/base/skills/{typescript → tsq-typescript}/SKILL.md +2 -2
  105. package/templates/base/skills/{ui-design → tsq-ui}/SKILL.md +2 -2
  106. package/templates/base/skills/tsq-update/SKILL.md +48 -0
  107. package/templates/base/timsquad/constraints/competency-framework.xml +2 -2
  108. package/templates/base/timsquad/constraints/ssot-schema.xml +2 -2
  109. package/templates/base/timsquad/process/phase-checklist.yaml +1 -1
  110. package/templates/base/timsquad/process/state-machine.xml +2 -2
  111. package/templates/base/timsquad/process/validation-rules.xml +8 -8
  112. package/templates/base/timsquad/process/workflow-base.xml +8 -8
  113. package/templates/base/timsquad/retrospective/cycle-report.template.md +2 -2
  114. package/templates/base/timsquad/retrospective/patterns/failure-patterns.md +1 -1
  115. package/templates/base/timsquad/retrospective/patterns/success-patterns.md +2 -2
  116. package/templates/base/timsquad/retrospective/retrospective-state.xml +2 -2
  117. package/templates/base/timsquad/ssot/audit-trail-spec.template.md +155 -0
  118. package/templates/base/timsquad/ssot/compliance-matrix.template.md +105 -0
  119. package/templates/base/timsquad/ssot/component-map.template.md +181 -0
  120. package/templates/base/timsquad/ssot/data-design.template.md +4 -4
  121. package/templates/base/timsquad/ssot/deployment-spec.template.md +29 -22
  122. package/templates/base/timsquad/ssot/env-config.template.md +4 -2
  123. package/templates/base/timsquad/ssot/error-codes.template.md +3 -3
  124. package/templates/base/timsquad/ssot/functional-spec.template.md +40 -3
  125. package/templates/base/timsquad/ssot/glossary.template.md +2 -2
  126. package/templates/base/timsquad/ssot/infra-topology.template.md +191 -0
  127. package/templates/base/timsquad/ssot/integration-spec.template.md +2 -2
  128. package/templates/base/timsquad/ssot/monitoring-spec.template.md +185 -0
  129. package/templates/base/timsquad/ssot/navigation-map.template.md +154 -0
  130. package/templates/base/timsquad/ssot/performance-budget.template.md +132 -0
  131. package/templates/base/timsquad/ssot/planning.template.md +3 -3
  132. package/templates/base/timsquad/ssot/prd/_template.md +73 -0
  133. package/templates/base/timsquad/ssot/prd.template.md +10 -21
  134. package/templates/base/timsquad/ssot/requirements.template.md +3 -3
  135. package/templates/base/timsquad/ssot/sdk-spec.template.md +223 -0
  136. package/templates/base/timsquad/ssot/service-spec.template.md +3 -3
  137. package/templates/base/timsquad/ssot/state-machine.template.md +127 -0
  138. package/templates/base/timsquad/ssot/ui-ux-spec.template.md +43 -3
  139. package/templates/base/timsquad/ssot-map.template.yaml +28 -0
  140. package/templates/base/timsquad/state/workspace.xml +11 -11
  141. package/templates/platforms/claude-code/rules/adr-rules.md +1 -1
  142. package/templates/platforms/claude-code/rules/build-gate.md +1 -1
  143. package/templates/platforms/claude-code/rules/completion-verification.md +0 -2
  144. package/templates/platforms/claude-code/rules/context-monitor.md +1 -1
  145. package/templates/platforms/claude-code/rules/feedback-routing.md +2 -2
  146. package/templates/platforms/claude-code/rules/phase-management.md +2 -2
  147. package/templates/platforms/claude-code/rules/plan-review.md +2 -2
  148. package/templates/platforms/claude-code/rules/quality-guards.md +0 -2
  149. package/templates/platforms/claude-code/rules/sequence-management.md +15 -15
  150. package/templates/platforms/claude-code/rules/session-notes.md +1 -1
  151. package/templates/platforms/claude-code/rules/workspace-sync.md +1 -1
  152. package/templates/platforms/claude-code/scripts/build-gate.sh +6 -1
  153. package/templates/platforms/claude-code/scripts/change-scope-guard.sh +1 -4
  154. package/templates/platforms/claude-code/scripts/check-capability.sh +68 -0
  155. package/templates/platforms/claude-code/scripts/completion-guard.sh +62 -4
  156. package/templates/platforms/claude-code/scripts/context-restore.sh +33 -6
  157. package/templates/platforms/claude-code/scripts/phase-guard.sh +2 -5
  158. package/templates/platforms/claude-code/scripts/pre-compact.sh +3 -3
  159. package/templates/platforms/claude-code/scripts/safe-guard.sh +2 -5
  160. package/templates/platforms/claude-code/scripts/subagent-start.sh +11 -0
  161. package/templates/platforms/claude-code/scripts/subagent-stop.sh +11 -0
  162. package/templates/platforms/claude-code/settings.json +20 -74
  163. package/templates/project-types/api-backend/config.yaml +9 -5
  164. package/templates/project-types/api-backend/process/workflow.xml +2 -2
  165. package/templates/project-types/fintech/config.yaml +13 -19
  166. package/templates/project-types/fintech/ssot/audit-trail-spec.template.md +207 -0
  167. package/templates/project-types/fintech/ssot/compliance-matrix.template.md +187 -0
  168. package/templates/project-types/infra/config.yaml +7 -4
  169. package/templates/project-types/infra/process/workflow.xml +3 -3
  170. package/templates/project-types/mobile-app/config.yaml +8 -14
  171. package/templates/project-types/mobile-app/process/workflow.xml +4 -4
  172. package/templates/project-types/platform/config.yaml +8 -5
  173. package/templates/project-types/platform/process/workflow.xml +3 -3
  174. package/templates/project-types/web-app/config.yaml +9 -15
  175. package/templates/project-types/web-app/process/workflow.xml +6 -6
  176. package/templates/project-types/web-service/config.yaml +10 -19
  177. package/templates/project-types/web-service/process/workflow.xml +6 -6
  178. package/dist/commands/audit.d.ts +0 -22
  179. package/dist/commands/audit.d.ts.map +0 -1
  180. package/dist/commands/audit.js +0 -233
  181. package/dist/commands/audit.js.map +0 -1
  182. package/dist/commands/compile.d.ts +0 -3
  183. package/dist/commands/compile.d.ts.map +0 -1
  184. package/dist/commands/compile.js +0 -251
  185. package/dist/commands/compile.js.map +0 -1
  186. package/dist/commands/feedback.d.ts +0 -12
  187. package/dist/commands/feedback.d.ts.map +0 -1
  188. package/dist/commands/feedback.js +0 -382
  189. package/dist/commands/feedback.js.map +0 -1
  190. package/dist/commands/full.d.ts +0 -3
  191. package/dist/commands/full.d.ts.map +0 -1
  192. package/dist/commands/full.js +0 -88
  193. package/dist/commands/full.js.map +0 -1
  194. package/dist/commands/git/commit.d.ts +0 -3
  195. package/dist/commands/git/commit.d.ts.map +0 -1
  196. package/dist/commands/git/commit.js +0 -85
  197. package/dist/commands/git/commit.js.map +0 -1
  198. package/dist/commands/git/index.d.ts +0 -5
  199. package/dist/commands/git/index.d.ts.map +0 -1
  200. package/dist/commands/git/index.js +0 -5
  201. package/dist/commands/git/index.js.map +0 -1
  202. package/dist/commands/git/pr.d.ts +0 -3
  203. package/dist/commands/git/pr.d.ts.map +0 -1
  204. package/dist/commands/git/pr.js +0 -139
  205. package/dist/commands/git/pr.js.map +0 -1
  206. package/dist/commands/git/release.d.ts +0 -3
  207. package/dist/commands/git/release.d.ts.map +0 -1
  208. package/dist/commands/git/release.js +0 -153
  209. package/dist/commands/git/release.js.map +0 -1
  210. package/dist/commands/git/sync.d.ts +0 -3
  211. package/dist/commands/git/sync.d.ts.map +0 -1
  212. package/dist/commands/git/sync.js +0 -132
  213. package/dist/commands/git/sync.js.map +0 -1
  214. package/dist/commands/improve.d.ts +0 -3
  215. package/dist/commands/improve.d.ts.map +0 -1
  216. package/dist/commands/improve.js +0 -286
  217. package/dist/commands/improve.js.map +0 -1
  218. package/dist/commands/knowledge.d.ts +0 -3
  219. package/dist/commands/knowledge.d.ts.map +0 -1
  220. package/dist/commands/knowledge.js +0 -316
  221. package/dist/commands/knowledge.js.map +0 -1
  222. package/dist/commands/log.d.ts.map +0 -1
  223. package/dist/commands/log.js +0 -1468
  224. package/dist/commands/log.js.map +0 -1
  225. package/dist/commands/meta-index.d.ts +0 -3
  226. package/dist/commands/meta-index.d.ts.map +0 -1
  227. package/dist/commands/meta-index.js +0 -431
  228. package/dist/commands/meta-index.js.map +0 -1
  229. package/dist/commands/metrics.d.ts +0 -3
  230. package/dist/commands/metrics.d.ts.map +0 -1
  231. package/dist/commands/metrics.js +0 -843
  232. package/dist/commands/metrics.js.map +0 -1
  233. package/dist/commands/quick.d.ts +0 -3
  234. package/dist/commands/quick.d.ts.map +0 -1
  235. package/dist/commands/quick.js +0 -136
  236. package/dist/commands/quick.js.map +0 -1
  237. package/dist/commands/retro.d.ts +0 -3
  238. package/dist/commands/retro.d.ts.map +0 -1
  239. package/dist/commands/retro.js +0 -885
  240. package/dist/commands/retro.js.map +0 -1
  241. package/dist/commands/session.d.ts +0 -3
  242. package/dist/commands/session.d.ts.map +0 -1
  243. package/dist/commands/session.js +0 -346
  244. package/dist/commands/session.js.map +0 -1
  245. package/dist/commands/skills.d.ts +0 -12
  246. package/dist/commands/skills.d.ts.map +0 -1
  247. package/dist/commands/skills.js +0 -228
  248. package/dist/commands/skills.js.map +0 -1
  249. package/dist/commands/status.d.ts +0 -3
  250. package/dist/commands/status.d.ts.map +0 -1
  251. package/dist/commands/status.js +0 -127
  252. package/dist/commands/status.js.map +0 -1
  253. package/dist/commands/upgrade.d.ts.map +0 -1
  254. package/dist/commands/upgrade.js.map +0 -1
  255. package/dist/commands/watch.d.ts +0 -3
  256. package/dist/commands/watch.d.ts.map +0 -1
  257. package/dist/commands/watch.js +0 -213
  258. package/dist/commands/watch.js.map +0 -1
  259. package/dist/commands/workflow.d.ts +0 -5
  260. package/dist/commands/workflow.d.ts.map +0 -1
  261. package/dist/commands/workflow.js +0 -781
  262. package/dist/commands/workflow.js.map +0 -1
  263. package/templates/base/skills/audit/SKILL.md +0 -66
  264. package/templates/base/skills/controller/SKILL.md +0 -77
  265. package/templates/base/skills/controller/delegation/developer.md +0 -25
  266. package/templates/base/skills/controller/delegation/librarian.md +0 -33
  267. package/templates/base/skills/controller/delegation/reviewer.md +0 -19
  268. package/templates/base/skills/controller/triggers/phase-complete.md +0 -25
  269. package/templates/base/skills/controller/triggers/sequence-complete.md +0 -15
  270. package/templates/base/skills/controller/triggers/ssot-changed.md +0 -14
  271. package/templates/base/skills/controller/triggers/task-complete.md +0 -14
  272. package/templates/base/skills/librarian/SKILL.md +0 -53
  273. package/templates/base/skills/main-session-constraints/SKILL.md +0 -62
  274. package/templates/base/skills/retrospective/SKILL.md +0 -77
  275. package/templates/base/skills/review/SKILL.md +0 -72
  276. package/templates/base/skills/tsq-cli/SKILL.md +0 -73
  277. package/templates/base/skills/tsq-cli/references/cli-reference.md +0 -92
  278. package/templates/base/timsquad/feedback/feedback-router.sh +0 -341
  279. package/templates/base/timsquad/feedback/routing-rules.yaml +0 -352
  280. package/templates/platforms/claude-code/CLAUDE.md.template +0 -89
  281. package/templates/platforms/claude-code/rules/skill-suggest.md +0 -27
  282. package/templates/platforms/claude-code/scripts/skill-inject.sh +0 -216
  283. package/templates/platforms/claude-code/scripts/skill-rules.json +0 -95
  284. package/templates/platforms/claude-code/scripts/skill-suggest.sh +0 -105
  285. package/templates/platforms/claude-code/scripts/subagent-inject.sh +0 -53
  286. /package/templates/base/skills/{architecture → tsq-architecture}/references/adr-template.md +0 -0
  287. /package/templates/base/skills/{architecture → tsq-architecture}/references/api-design.md +0 -0
  288. /package/templates/base/skills/{methodology/bdd → tsq-bdd}/rules/gherkin-patterns.md +0 -0
  289. /package/templates/base/skills/{coding → tsq-coding}/rules/async-patterns.md +0 -0
  290. /package/templates/base/skills/{coding → tsq-coding}/rules/code-organization.md +0 -0
  291. /package/templates/base/skills/{coding → tsq-coding}/rules/error-handling.md +0 -0
  292. /package/templates/base/skills/{coding → tsq-coding}/rules/patterns.md +0 -0
  293. /package/templates/base/skills/{coding → tsq-coding}/rules/type-safety.md +0 -0
  294. /package/templates/base/skills/{controller → tsq-controller}/memory/.gitkeep +0 -0
  295. /package/templates/base/skills/{controller → tsq-controller}/references/README.md +0 -0
  296. /package/templates/base/skills/{controller → tsq-controller}/rules/README.md +0 -0
  297. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/async-patterns.md +0 -0
  298. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/code-style.md +0 -0
  299. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/null-safety.md +0 -0
  300. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/type-system.md +0 -0
  301. /package/templates/base/skills/{database → tsq-database}/rules/query-optimization.md +0 -0
  302. /package/templates/base/skills/{database → tsq-database}/rules/supabase-patterns.md +0 -0
  303. /package/templates/base/skills/{methodology/ddd → tsq-ddd}/rules/strategic-patterns.md +0 -0
  304. /package/templates/base/skills/{methodology/debugging → tsq-debugging}/references/root-cause-tracing.md +0 -0
  305. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/SKILL.md +0 -0
  306. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/references/ci-cd-pipeline.md +0 -0
  307. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/code-signing.md +0 -0
  308. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/codemagic-setup.md +0 -0
  309. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/fastlane-setup.md +0 -0
  310. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/github-actions.md +0 -0
  311. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/store-deployment.md +0 -0
  312. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/versioning.md +0 -0
  313. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/SKILL.md +0 -0
  314. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/references/i18n-architecture.md +0 -0
  315. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/arb-files.md +0 -0
  316. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/locale-switching.md +0 -0
  317. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/localization-setup.md +0 -0
  318. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/plural-gender.md +0 -0
  319. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/text-direction.md +0 -0
  320. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/SKILL.md +0 -0
  321. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/references/monitoring-architecture.md +0 -0
  322. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/analytics.md +0 -0
  323. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/crashlytics-setup.md +0 -0
  324. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/logging.md +0 -0
  325. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/performance-monitoring.md +0 -0
  326. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/sentry-integration.md +0 -0
  327. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/SKILL.md +0 -0
  328. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/references/api-client-architecture.md +0 -0
  329. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/caching.md +0 -0
  330. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/connectivity.md +0 -0
  331. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/dio-setup.md +0 -0
  332. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/error-handling.md +0 -0
  333. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/interceptors.md +0 -0
  334. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/retrofit-patterns.md +0 -0
  335. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/SKILL.md +0 -0
  336. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/notification-architecture.md +0 -0
  337. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/platform-setup.md +0 -0
  338. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/background-processing.md +0 -0
  339. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/deep-linking.md +0 -0
  340. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/fcm-setup.md +0 -0
  341. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/local-notifications.md +0 -0
  342. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-handling.md +0 -0
  343. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-permissions.md +0 -0
  344. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/rich-notifications.md +0 -0
  345. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/freezed-patterns.md +0 -0
  346. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/project-structure.md +0 -0
  347. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/animations.md +0 -0
  348. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/architecture.md +0 -0
  349. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/navigation-routing.md +0 -0
  350. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/performance.md +0 -0
  351. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/platform-adaptive.md +0 -0
  352. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/state-management.md +0 -0
  353. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/testing.md +0 -0
  354. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/widget-conventions.md +0 -0
  355. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/SKILL.md +0 -0
  356. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/references/mobile-security-checklist.md +0 -0
  357. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/api-key-protection.md +0 -0
  358. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/authentication.md +0 -0
  359. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/data-protection.md +0 -0
  360. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/obfuscation.md +0 -0
  361. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/secure-storage.md +0 -0
  362. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/ssl-pinning.md +0 -0
  363. /package/templates/base/skills/{backend/node → tsq-hono}/rules/async-patterns.md +0 -0
  364. /package/templates/base/skills/{backend/node → tsq-hono}/rules/deployment.md +0 -0
  365. /package/templates/base/skills/{backend/node → tsq-hono}/rules/env-config.md +0 -0
  366. /package/templates/base/skills/{backend/node → tsq-hono}/rules/error-handling.md +0 -0
  367. /package/templates/base/skills/{backend/node → tsq-hono}/rules/hono-app-setup.md +0 -0
  368. /package/templates/base/skills/{backend/node → tsq-hono}/rules/jwt-auth.md +0 -0
  369. /package/templates/base/skills/{backend/node → tsq-hono}/rules/middleware.md +0 -0
  370. /package/templates/base/skills/{backend/node → tsq-hono}/rules/testing.md +0 -0
  371. /package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/rules/app-router.md +0 -0
  372. /package/templates/base/skills/{planning → tsq-planning}/references/prd-guide.md +0 -0
  373. /package/templates/base/skills/{planning → tsq-planning}/references/requirements-guide.md +0 -0
  374. /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/queries.md +0 -0
  375. /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/schema-design.md +0 -0
  376. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/01-security.md +0 -0
  377. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/02-performance.md +0 -0
  378. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/03-seo.md +0 -0
  379. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/04-accessibility.md +0 -0
  380. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/05-ui-ux.md +0 -0
  381. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/06-architecture.md +0 -0
  382. /package/templates/base/skills/{product-audit → tsq-product-audit}/checklists/07-functional-requirements.md +0 -0
  383. /package/templates/base/skills/{product-audit → tsq-product-audit}/rules/audit-protocol.md +0 -0
  384. /package/templates/base/skills/{product-audit → tsq-product-audit}/rules/false-positive-guard.md +0 -0
  385. /package/templates/base/skills/{product-audit → tsq-product-audit}/rules/scoring-criteria.md +0 -0
  386. /package/templates/base/skills/{product-audit → tsq-product-audit}/templates/improvement-plan-template.md +0 -0
  387. /package/templates/base/skills/{product-audit → tsq-product-audit}/templates/report-template.md +0 -0
  388. /package/templates/base/skills/{frontend/react → tsq-react}/rules/_sections.md +0 -0
  389. /package/templates/base/skills/{frontend/react → tsq-react}/rules/anti-patterns.md +0 -0
  390. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-api-routes.md +0 -0
  391. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-defer-await.md +0 -0
  392. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-dependencies.md +0 -0
  393. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-parallel.md +0 -0
  394. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-suspense-boundaries.md +0 -0
  395. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-barrel-imports.md +0 -0
  396. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-defer-third-party.md +0 -0
  397. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-dynamic-imports.md +0 -0
  398. /package/templates/base/skills/{frontend/react → tsq-react}/rules/component-conventions.md +0 -0
  399. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-combine-iterations.md +0 -0
  400. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-early-exit.md +0 -0
  401. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-index-maps.md +0 -0
  402. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-set-map-lookups.md +0 -0
  403. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-conditional-render.md +0 -0
  404. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-content-visibility.md +0 -0
  405. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-hoist-jsx.md +0 -0
  406. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-defer-reads.md +0 -0
  407. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-derived-state.md +0 -0
  408. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-memo.md +0 -0
  409. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-transitions.md +0 -0
  410. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-after-nonblocking.md +0 -0
  411. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-cache-react.md +0 -0
  412. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-parallel-fetching.md +0 -0
  413. /package/templates/base/skills/{frontend/react → tsq-react}/rules/state-location.md +0 -0
  414. /package/templates/base/skills/{retrospective → tsq-retro}/references/improvement-template.md +0 -0
  415. /package/templates/base/skills/{security → tsq-security}/rules/auth-patterns.md +0 -0
  416. /package/templates/base/skills/{security → tsq-security}/rules/dependency-security.md +0 -0
  417. /package/templates/base/skills/{security → tsq-security}/rules/input-validation.md +0 -0
  418. /package/templates/base/skills/{security → tsq-security}/rules/owasp-examples.md +0 -0
  419. /package/templates/base/skills/{security → tsq-security}/rules/secrets-management.md +0 -0
  420. /package/templates/base/skills/{security → tsq-security}/scripts/check-secrets.sh +0 -0
  421. /package/templates/base/skills/{stability-verification → tsq-stability}/references/release-checklist.md +0 -0
  422. /package/templates/base/skills/{stability-verification → tsq-stability}/references/security-fix-patterns.md +0 -0
  423. /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-layers.md +0 -0
  424. /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-workflow.md +0 -0
  425. /package/templates/base/skills/{stability-verification → tsq-stability}/scripts/verify.sh +0 -0
  426. /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/real-world-example.md +0 -0
  427. /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/techniques.md +0 -0
  428. /package/templates/base/skills/{testing → tsq-testing}/references/e2e-stability.md +0 -0
  429. /package/templates/base/skills/{testing → tsq-testing}/references/testing-patterns.md +0 -0
  430. /package/templates/base/skills/{typescript → tsq-typescript}/rules/type-patterns.md +0 -0
  431. /package/templates/base/skills/{typescript → tsq-typescript}/rules/utility-types.md +0 -0
@@ -9,7 +9,7 @@
9
9
 
10
10
  <!-- 현재 활성 에이전트 -->
11
11
  <active-session>
12
- <agent>tsq-planner</agent>
12
+ <agent>tsq-architect</agent>
13
13
  <started-at>{{TIMESTAMP}}</started-at>
14
14
  <mode>planning</mode>
15
15
  </active-session>
@@ -21,7 +21,7 @@
21
21
  <id>TASK-001</id>
22
22
  <title>PRD 작성</title>
23
23
  <description>제품 요구사항 정의서 초안 작성</description>
24
- <agent>tsq-planner</agent>
24
+ <agent>tsq-architect</agent>
25
25
  <phase>planning</phase>
26
26
  <started-at>{{TIMESTAMP}}</started-at>
27
27
  <status>in_progress</status>
@@ -44,7 +44,7 @@
44
44
  <task id="TASK-002" priority="1">
45
45
  <title>요구사항 정의</title>
46
46
  <description>기능/비기능 요건 작성</description>
47
- <assigned-to>tsq-planner</assigned-to>
47
+ <assigned-to>tsq-architect</assigned-to>
48
48
  <phase>planning</phase>
49
49
  <depends-on>TASK-001</depends-on>
50
50
  <estimated-effort>medium</estimated-effort>
@@ -73,7 +73,7 @@
73
73
  <!--
74
74
  현재 에이전트가 다음 에이전트에게 전달할 내용
75
75
 
76
- <from>tsq-planner</from>
76
+ <from>tsq-architect</from>
77
77
  <to>tsq-developer</to>
78
78
  <timestamp>{{TIMESTAMP}}</timestamp>
79
79
  <message>
@@ -124,7 +124,7 @@
124
124
  <approval id="APV-001" type="phase-transition">
125
125
  <from-phase>planning</from-phase>
126
126
  <to-phase>implementation</to-phase>
127
- <requested-by>tsq-planner</requested-by>
127
+ <requested-by>tsq-architect</requested-by>
128
128
  <requested-at>{{TIMESTAMP}}</requested-at>
129
129
  <reason>SSOT 문서 작성 완료, 구현 단계 진입 요청</reason>
130
130
  <checklist>
@@ -174,27 +174,27 @@
174
174
  <next-steps>
175
175
  <step order="1">
176
176
  <action>PRD 작성 완료</action>
177
- <agent>tsq-planner</agent>
177
+ <agent>tsq-architect</agent>
178
178
  <output>ssot/prd.md</output>
179
179
  </step>
180
180
  <step order="2">
181
181
  <action>요구사항 정의</action>
182
- <agent>tsq-planner</agent>
182
+ <agent>tsq-architect</agent>
183
183
  <output>ssot/requirements.md</output>
184
184
  </step>
185
185
  <step order="3">
186
186
  <action>API 명세 작성</action>
187
- <agent>tsq-planner</agent>
187
+ <agent>tsq-architect</agent>
188
188
  <output>ssot/service-spec.md</output>
189
189
  </step>
190
190
  <step order="4">
191
191
  <action>데이터 설계</action>
192
- <agent>tsq-planner</agent>
192
+ <agent>tsq-architect</agent>
193
193
  <output>ssot/data-design.md</output>
194
194
  </step>
195
195
  <step order="5">
196
196
  <action>User 승인 요청</action>
197
- <agent>tsq-planner</agent>
197
+ <agent>tsq-architect</agent>
198
198
  <requires-approval>true</requires-approval>
199
199
  </step>
200
200
  <step order="6">
@@ -209,7 +209,7 @@
209
209
  ============================================================ -->
210
210
  <session-notes>
211
211
  <!--
212
- <note timestamp="{{TIMESTAMP}}" agent="tsq-planner">
212
+ <note timestamp="{{TIMESTAMP}}" agent="tsq-architect">
213
213
  사용자가 MVP 우선 요청. 소셜 로그인은 v2로 미룸.
214
214
  </note>
215
215
  -->
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: ADR (Architecture Decision Record) 작성 규칙.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/ssot/ADR-*"
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 빌드 게이트. 변경 파일의 TypeScript 에러를 자동 감지하여 완료 차단.
3
- globs:
3
+ paths:
4
4
  - "src/**/*.ts"
5
5
  - "src/**/*.tsx"
6
6
  ---
@@ -1,7 +1,5 @@
1
1
  ---
2
2
  description: 완료 검증 루프. 자기 보고 금지, exit code로 완료 판정.
3
- globs:
4
- - "**/*"
5
3
  ---
6
4
 
7
5
  # 완료 검증 루프 (Completion Verification)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 컨텍스트 윈도우 모니터. 85% 임계값 도달 시 사전 대응.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/.daemon/**"
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 피드백 라우팅 규칙. Level 1/2/3 분류 기준과 라우팅.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/feedback/**"
5
5
  ---
6
6
 
@@ -15,4 +15,4 @@ globs:
15
15
  ## 규칙
16
16
  - User 승인 없이 Level 3 변경 금지
17
17
  - 모든 피드백에 Level 분류 필수
18
- - `tsq feedback "{설명}"` 으로 기록 (직접 파일 생성 금지)
18
+ - 피드백은 `.timsquad/state/decisions.jsonl`에 기록
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Phase 관리 규칙. Phase 전환, 허용/금지 작업, 종료 조건.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/state/**"
5
5
  - ".timsquad/ssot/**"
6
6
  ---
@@ -19,5 +19,5 @@ globs:
19
19
  | deployment | 배포 | - | 배포 완료 |
20
20
 
21
21
  ## Phase 종료 시
22
- - `skills/retrospective/SKILL.md`를 활용하여 회고 실행
22
+ - `/retro` (tsq-retro 스킬)를 활용하여 회고 실행
23
23
  - Phase 전환 조건 미충족 시 다음 Phase 진행 금지
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 계획 품질 검증 루프. Full Mode에서 구현 전 필수 수행.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/ssot/**"
5
5
  - ".timsquad/state/**"
6
6
  ---
@@ -8,7 +8,7 @@ globs:
8
8
  # 계획 품질 검증 (Plan Review Protocol)
9
9
 
10
10
  ## 언제 수행하나
11
- `tsq f`로 Full Mode 진입 시, SSOT 체크 후 / 에이전트 위임 전.
11
+ Controller를 통한 위임 시, SSOT 체크 후 / 에이전트 위임 전.
12
12
 
13
13
  ## 검증 축 (3-Axis Plan Review)
14
14
 
@@ -1,7 +1,5 @@
1
1
  ---
2
2
  description: 품질 가드 시스템. 파괴적 명령 차단, 페이즈 제한, 완료 검증.
3
- globs:
4
- - "**/*"
5
3
  ---
6
4
 
7
5
  # 품질 가드 시스템 (Quality Guards)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 시퀀스 관리 규칙. 네이밍, 자동화 파이프라인, 수동 모드.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/logs/**"
5
5
  - ".timsquad/state/workspace.xml"
6
6
  ---
@@ -18,16 +18,16 @@ Phase/Sequence/Task ID를 **자동 생성**하여 등록하세요. 사용자에
18
18
  - Phase ID: `P{N}` — planning=P1, design=P2, implementation=P3, review=P4, security=P5, deployment=P6
19
19
  - Sequence ID: `P{N}-S{NNN}` — 페이즈 내 시퀀스 번호 (zero-padded)
20
20
  - Task ID: `P{N}-S{NNN}-T{NNN}` — 시퀀스 내 태스크 번호 (zero-padded)
21
- - 번호는 `tsq wf status`로 기존 시퀀스를 확인한 후 이어서 부여
21
+ - 번호는 `.timsquad/state/workflow.json`에서 기존 시퀀스를 확인한 후 이어서 부여
22
22
 
23
23
  **흐름 예시**:
24
24
  ```
25
25
  사용자: "인증 기능이랑 결제 API 구현해줘"
26
26
  PM 내부 처리:
27
27
  1. config.yaml → naming.phase.order → implementation = P3
28
- 2. tsq wf set-phase P3
29
- 3. tsq wf add-sequence P3-S001 --agents developer,dba
30
- 4. tsq wf add-sequence P3-S002 --agents developer,security
28
+ 2. workflow.json current_phase = P3 설정
29
+ 3. P3-S001 시퀀스 등록 (agents: developer, dba)
30
+ 4. P3-S002 시퀀스 등록 (agents: developer, security)
31
31
  5. @tsq-developer "P3-S001: 인증 구현"
32
32
  ```
33
33
 
@@ -51,11 +51,11 @@ SessionEnd → tsq daemon stop
51
51
  ```
52
52
 
53
53
  ## 자동화 토글
54
- ```bash
55
- tsq wf config sequence_log off # L2 자동 생성 끄기
56
- tsq wf config retro off # 자동 회고 끄기
57
- tsq wf status # 현재 상태 확인
58
- ```
54
+
55
+ `.timsquad/state/workflow.json` `automation` 섹션에서 직접 toggle:
56
+ - `sequence_log: false` L2 자동 생성 끄기
57
+ - `retro: false` 자동 회고 끄기
58
+ - `/status`로 현재 상태 확인
59
59
 
60
60
  ## 수동 모드 (자동화 꺼진 경우)
61
61
 
@@ -65,8 +65,8 @@ tsq wf status # 현재 상태 확인
65
65
  - 보고서 저장: `.timsquad/reports/{SEQ-ID}-report.md`
66
66
 
67
67
  ### 수동 L2/L3 생성
68
- ```bash
69
- tsq log sequence create {SEQ-ID} --phase {phase} --report {path} --verdict proceed
70
- tsq log phase create {phase-id} --sequences "SEQ-01,SEQ-02"
71
- tsq log phase gate {phase-id}
72
- ```
68
+
69
+ `/log` 스킬을 사용하여 수동 로그 생성:
70
+ - 시퀀스 로그: `.timsquad/logs/sequences/{SEQ-ID}.md`
71
+ - 페이즈 로그: `.timsquad/logs/phases/{phase-id}.md`
72
+ - 페이즈 게이트: workflow.json → completed_phases 업데이트
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 컨텍스트 생존 메모. 세션 압축 후 작업 연속성 유지.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/.daemon/**"
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: workspace.xml 실시간 상태 관리 규칙.
3
- globs:
3
+ paths:
4
4
  - ".timsquad/state/workspace.xml"
5
5
  ---
6
6
 
@@ -30,7 +30,12 @@ fi
30
30
 
31
31
  # ── 1. Get changed TypeScript files ──
32
32
  cd "$PROJECT_ROOT"
33
- CHANGED_TS=$(git diff --name-only --diff-filter=ACMR HEAD -- '*.ts' '*.tsx' 2>/dev/null || echo "")
33
+ CHANGED_TS=$(git diff --cached --name-only --diff-filter=ACMR -- '*.ts' '*.tsx' 2>/dev/null || echo "")
34
+ # Include unstaged changes too
35
+ CHANGED_TS_UNSTAGED=$(git diff --name-only --diff-filter=ACMR -- '*.ts' '*.tsx' 2>/dev/null || echo "")
36
+ if [ -n "$CHANGED_TS_UNSTAGED" ]; then
37
+ CHANGED_TS=$(printf '%s\n%s' "$CHANGED_TS" "$CHANGED_TS_UNSTAGED" | sort -u)
38
+ fi
34
39
 
35
40
  # No TypeScript files changed → pass
36
41
  if [ -z "$CHANGED_TS" ]; then
@@ -19,10 +19,7 @@ SESSION_ID="${CLAUDE_SESSION_ID:-default}"
19
19
  STATE_FILE="/tmp/tsq-scope-guard-${SESSION_ID}.json"
20
20
 
21
21
  # Read hook input from stdin
22
- INPUT=""
23
- if read -t 1 -r line; then
24
- INPUT="$line"
25
- fi
22
+ INPUT=$(cat 2>/dev/null || echo "")
26
23
 
27
24
  # Fail-open: no input → allow
28
25
  if [ -z "$INPUT" ]; then
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+ # Hook Gate: controller capability token 검증
3
+ # PreToolUse (Write|Edit) — controller 미경유 시 차단
4
+ #
5
+ # 동작:
6
+ # 1. controller-active 파일 없으면 → deny
7
+ # 2. allowed-paths.txt에 없는 파일이면 → deny
8
+ # 3. .timsquad/ 내부 파일은 항상 허용
9
+
10
+ set -euo pipefail
11
+
12
+ STATE_DIR=".timsquad/state"
13
+ ACTIVE_FILE="$STATE_DIR/controller-active"
14
+ ALLOWED_FILE="$STATE_DIR/allowed-paths.txt"
15
+
16
+ # Read tool input from stdin
17
+ INPUT=$(cat 2>/dev/null || echo "")
18
+ FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"//' | sed 's/"$//')
19
+
20
+ # No file path → allow (not a file operation)
21
+ if [ -z "$FILE_PATH" ]; then
22
+ exit 0
23
+ fi
24
+
25
+ # .timsquad/ internal files → always allow
26
+ if [[ "$FILE_PATH" == *".timsquad/"* ]]; then
27
+ exit 0
28
+ fi
29
+
30
+ # .claude/ internal files → always allow
31
+ if [[ "$FILE_PATH" == *".claude/"* ]]; then
32
+ exit 0
33
+ fi
34
+
35
+ # No state directory → pipeline not active, allow (no enforcement)
36
+ if [ ! -d "$STATE_DIR" ]; then
37
+ exit 0
38
+ fi
39
+
40
+ # Controller active check
41
+ if [ ! -f "$ACTIVE_FILE" ]; then
42
+ # Controller not active → allow without enforcement
43
+ # (enforcement only when pipeline is explicitly started)
44
+ exit 0
45
+ fi
46
+
47
+ # Allowed paths check
48
+ if [ -f "$ALLOWED_FILE" ]; then
49
+ MATCH=0
50
+ while IFS= read -r pattern; do
51
+ [ -z "$pattern" ] && continue
52
+ # shellcheck disable=SC2254
53
+ case "$FILE_PATH" in
54
+ $pattern) MATCH=1; break ;;
55
+ esac
56
+ done < "$ALLOWED_FILE"
57
+
58
+ if [ "$MATCH" -eq 0 ]; then
59
+ # File not in allowed paths → deny
60
+ PATTERNS=$(tr '\n' ', ' < "$ALLOWED_FILE")
61
+ jq -n --arg msg "작업 범위 밖 파일입니다. controller가 허용한 파일만 수정할 수 있습니다. 허용 패턴: $PATTERNS" \
62
+ '{"hookSpecificOutput":{"permissionDecision":"deny"},"systemMessage":$msg}'
63
+ exit 0
64
+ fi
65
+ fi
66
+
67
+ # All checks passed
68
+ exit 0
@@ -77,6 +77,27 @@ if [ -f "$SESSION_STATE" ]; then
77
77
  fi
78
78
  fi
79
79
 
80
+ # ── 1b. TDD gate: 소스 변경 시 테스트 파일도 변경되었는지 확인 ──
81
+ if [ "$PHASE" = "implementation" ] && [ -z "$BLOCK_REASON" ]; then
82
+ ALL_CHANGED=$(cd "$PROJECT_ROOT" && {
83
+ git diff --cached --name-only --diff-filter=ACMR 2>/dev/null
84
+ git diff --name-only --diff-filter=ACMR 2>/dev/null
85
+ git ls-files --others --exclude-standard 2>/dev/null
86
+ } | sort -u | grep -E '\.(ts|tsx|js|jsx)$')
87
+
88
+ if [ -n "$ALL_CHANGED" ]; then
89
+ SRC_CHANGED=$(echo "$ALL_CHANGED" | grep -vE '\.(test|spec)\.' | grep -v '__tests__/' | head -5)
90
+ TEST_CHANGED=$(echo "$ALL_CHANGED" | grep -E '\.(test|spec)\.' | head -1)
91
+
92
+ if [ -n "$SRC_CHANGED" ] && [ -z "$TEST_CHANGED" ]; then
93
+ REFACTOR_ONLY=$(echo "$INPUT" | jq -r '.transcript // ""' 2>/dev/null | grep -ci 'refactor-only' || echo "0")
94
+ if [ "$REFACTOR_ONLY" -eq 0 ] 2>/dev/null; then
95
+ BLOCK_REASON="[TDD Gate] 소스 파일이 변경되었으나 테스트 파일(.test./.spec.)이 없습니다. 테스트를 먼저 작성하세요. (리팩토링만 한 경우 Notes에 'refactor-only' 명시)"
96
+ fi
97
+ fi
98
+ fi
99
+ fi
100
+
80
101
  # ── 2. Session notes context injection ──
81
102
  SESSION_CTX=""
82
103
  NOTES_FILE="$PROJECT_ROOT/.timsquad/.daemon/session-notes.jsonl"
@@ -98,14 +119,45 @@ if [ -f "$NOTES_FILE" ]; then
98
119
 
99
120
  # ── 3. Context window monitor (85% threshold) ──
100
121
  if [ "$CTX_PCT" -ge 85 ] 2>/dev/null; then
101
- SESSION_CTX="$SESSION_CTX\\n⚠ [Context ${CTX_PCT}%] 컨텍스트 윈도우 85% 이상 사용. 중요 정보를 session-notes에 기록하고, 현재 태스크를 정리한 완료하세요."
122
+ SESSION_CTX="$SESSION_CTX\\n⚠ [Context ${CTX_PCT}%] 컨텍스트 윈도우 85% 이상. 현재 작업을 마무리하고, Phase Memory(.timsquad/state/phase-memory.md)를 갱신한 /clear로 컨텍스트를 초기화하세요. /clear 후에도 phase-memory가 자동 주입됩니다."
102
123
  elif [ "$CTX_PCT" -ge 70 ] 2>/dev/null; then
103
124
  SESSION_CTX="$SESSION_CTX | Ctx: ${CTX_PCT}%"
104
125
  fi
105
126
  fi
106
127
  fi
107
128
 
108
- # ── 4. Skill Verification reminder (max 3 skills) ──
129
+ # ── 4. SSOT readiness check ──
130
+ SSOT_WARNING=""
131
+ PRD_FILE="$PROJECT_ROOT/.timsquad/ssot/prd.md"
132
+ if [ -f "$PRD_FILE" ]; then
133
+ # Check if PRD is mostly placeholder (TBD, [Resource Name], example.com)
134
+ TOTAL_LINES=$(wc -l < "$PRD_FILE" 2>/dev/null || echo "0")
135
+ PLACEHOLDER_LINES=$(grep -ciE 'TBD|\[Resource Name\]|\[프로젝트|example\.com|placeholder' "$PRD_FILE" 2>/dev/null || echo "0")
136
+ if [ "$TOTAL_LINES" -gt 0 ] 2>/dev/null; then
137
+ PCT=$((PLACEHOLDER_LINES * 100 / TOTAL_LINES))
138
+ if [ "$PCT" -ge 50 ] 2>/dev/null; then
139
+ SSOT_WARNING="[SSOT] PRD가 아직 작성되지 않았습니다. /tsq-start로 온보딩을 진행하세요 (PRD 작성 + 기능별 /grill 인터뷰)."
140
+ fi
141
+ fi
142
+ elif [ -d "$PROJECT_ROOT/.timsquad/ssot" ]; then
143
+ SSOT_WARNING="[SSOT] PRD가 존재하지 않습니다. /tsq-start로 온보딩을 시작하세요."
144
+ fi
145
+
146
+ # Check Sub-PRD coverage (grill completeness)
147
+ if [ -z "$SSOT_WARNING" ] && [ -f "$PRD_FILE" ]; then
148
+ # Count features in PRD index that have no Sub-PRD link
149
+ FEATURE_COUNT=$(grep -cE '^\|.*\|.*\|' "$PRD_FILE" 2>/dev/null || echo "0")
150
+ SUBPRD_DIR="$PROJECT_ROOT/.timsquad/ssot/prd"
151
+ SUBPRD_COUNT=0
152
+ if [ -d "$SUBPRD_DIR" ]; then
153
+ SUBPRD_COUNT=$(find "$SUBPRD_DIR" -name "*.md" -not -name "_template.md" 2>/dev/null | wc -l | tr -d ' ')
154
+ fi
155
+ if [ "$FEATURE_COUNT" -gt 2 ] && [ "$SUBPRD_COUNT" -eq 0 ] 2>/dev/null; then
156
+ SSOT_WARNING="[SSOT] PRD에 기능이 정의되었으나 Sub-PRD가 없습니다. /tsq-grill로 각 기능을 상세화하세요."
157
+ fi
158
+ fi
159
+
160
+ # ── 5. Skill Verification reminder (max 3 skills) ──
109
161
  VERIFICATION=""
110
162
  SKILLS_DIR="$PROJECT_ROOT/.claude/skills"
111
163
  if [ -d "$SKILLS_DIR" ]; then
@@ -129,18 +181,24 @@ if [ -d "$SKILLS_DIR" ]; then
129
181
  done
130
182
  fi
131
183
 
132
- # ── 5. Combine and output ──
184
+ # ── 6. Combine and output ──
133
185
  # BLOCK_REASON이 있으면 decision:block으로 강제 속행 (세션 컨텍스트 포함)
134
186
  if [ -n "$BLOCK_REASON" ]; then
135
187
  FULL_REASON="$BLOCK_REASON"
136
188
  [ -n "$SESSION_CTX" ] && FULL_REASON="$FULL_REASON
137
189
  $SESSION_CTX"
190
+ [ -n "$SSOT_WARNING" ] && FULL_REASON="$FULL_REASON
191
+ $SSOT_WARNING"
138
192
  [ -n "$VERIFICATION" ] && FULL_REASON="$FULL_REASON
139
193
  $VERIFICATION"
140
194
  jq -n --arg reason "$FULL_REASON" '{"decision": "block", "reason": $reason}'
141
- elif [ -n "$SESSION_CTX" ] || [ -n "$VERIFICATION" ] || [ -n "$TEST_WARNING" ]; then
195
+ elif [ -n "$SESSION_CTX" ] || [ -n "$VERIFICATION" ] || [ -n "$TEST_WARNING" ] || [ -n "$SSOT_WARNING" ]; then
142
196
  FULL_MSG=""
143
197
  [ -n "$SESSION_CTX" ] && FULL_MSG="$SESSION_CTX"
198
+ if [ -n "$SSOT_WARNING" ]; then
199
+ [ -n "$FULL_MSG" ] && FULL_MSG="$FULL_MSG
200
+ $SSOT_WARNING" || FULL_MSG="$SSOT_WARNING"
201
+ fi
144
202
  if [ -n "$TEST_WARNING" ]; then
145
203
  [ -n "$FULL_MSG" ] && FULL_MSG="$FULL_MSG
146
204
  $TEST_WARNING" || FULL_MSG="$TEST_WARNING"
@@ -36,10 +36,10 @@ else
36
36
  CONTEXT="[Context Restore] TimSquad project"
37
37
  fi
38
38
 
39
- # 2. Current phase from workflow
40
- WORKFLOW_FILE="$PROJECT_ROOT/.timsquad/workflow.json"
41
- if [ -f "$WORKFLOW_FILE" ]; then
42
- CURRENT_PHASE=$(jq -r '.currentPhase // "unknown"' "$WORKFLOW_FILE" 2>/dev/null || echo "unknown")
39
+ # 2. Current phase
40
+ PHASE_FILE="$PROJECT_ROOT/.timsquad/state/current-phase.json"
41
+ if [ -f "$PHASE_FILE" ]; then
42
+ CURRENT_PHASE=$(jq -r '.current // .current_phase // .phase // "unknown"' "$PHASE_FILE" 2>/dev/null || echo "unknown")
43
43
  CONTEXT="$CONTEXT | Phase: $CURRENT_PHASE"
44
44
  fi
45
45
 
@@ -53,9 +53,36 @@ $SUMMARY_CONTENT"
53
53
  fi
54
54
  fi
55
55
 
56
- # 4. Key constraints (3 lines max)
56
+ # 4. Phase Memory (이전 Phase 요약)
57
+ PHASE_MEMORY="$PROJECT_ROOT/.timsquad/state/phase-memory.md"
58
+ if [ -f "$PHASE_MEMORY" ]; then
59
+ MEMORY_CONTENT=$(head -50 "$PHASE_MEMORY" 2>/dev/null || echo "")
60
+ if [ -n "$MEMORY_CONTENT" ]; then
61
+ CONTEXT="$CONTEXT
62
+ [Phase Memory]
63
+ $MEMORY_CONTENT"
64
+ fi
65
+ fi
66
+
67
+ # 5. SSOT readiness check
68
+ PRD_FILE="$PROJECT_ROOT/.timsquad/ssot/prd.md"
69
+ if [ -f "$PRD_FILE" ]; then
70
+ TOTAL_LINES=$(wc -l < "$PRD_FILE" 2>/dev/null || echo "0")
71
+ PLACEHOLDER_LINES=$(grep -ciE 'TBD|\[Resource Name\]|\[프로젝트|example\.com|placeholder' "$PRD_FILE" 2>/dev/null || echo "0")
72
+ TOTAL_LINES=${TOTAL_LINES:-0}
73
+ PLACEHOLDER_LINES=${PLACEHOLDER_LINES:-0}
74
+ if [ "$TOTAL_LINES" -gt 0 ] && [ "$((PLACEHOLDER_LINES * 100 / TOTAL_LINES))" -ge 50 ] 2>/dev/null; then
75
+ CONTEXT="$CONTEXT
76
+ [SSOT] PRD 미작성. /tsq-start로 온보딩을 진행하세요 (PRD + /tsq-grill 인터뷰)."
77
+ fi
78
+ elif [ -d "$PROJECT_ROOT/.timsquad/ssot" ]; then
79
+ CONTEXT="$CONTEXT
80
+ [SSOT] PRD 없음. /tsq-start로 온보딩을 시작하세요."
81
+ fi
82
+
83
+ # 6. Key constraints (3 lines max)
57
84
  CONTEXT="$CONTEXT
58
- [Key Constraints] TSQ CLI 사용 필수 (tsq log/feedback/commit). 직접 파일 조작 금지. 구현 검증 기준 명시."
85
+ [Key Constraints] 구현 검증 기준 명시. 작업 지시 SSOT + 데몬 사전조건 확인."
59
86
 
60
87
  # Output as systemMessage
61
88
  jq -n --arg msg "$CONTEXT" '{
@@ -9,11 +9,8 @@
9
9
 
10
10
  set -e
11
11
 
12
- # Read hook input from stdin (non-blocking)
13
- INPUT=""
14
- if read -t 1 -r line; then
15
- INPUT="$line"
16
- fi
12
+ # Read hook input from stdin
13
+ INPUT=$(cat 2>/dev/null || echo "")
17
14
 
18
15
  # If no input, allow (fail-open for safety)
19
16
  if [ -z "$INPUT" ]; then
@@ -32,9 +32,9 @@ SUMMARY="$SUMMARY
32
32
  Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
33
33
 
34
34
  # Current phase
35
- WORKFLOW_FILE="$PROJECT_ROOT/.timsquad/workflow.json"
36
- if [ -f "$WORKFLOW_FILE" ]; then
37
- PHASE=$(jq -r '.currentPhase // "unknown"' "$WORKFLOW_FILE" 2>/dev/null || echo "unknown")
35
+ PHASE_FILE="$PROJECT_ROOT/.timsquad/state/current-phase.json"
36
+ if [ -f "$PHASE_FILE" ]; then
37
+ PHASE=$(jq -r '.current // .current_phase // .phase // "unknown"' "$PHASE_FILE" 2>/dev/null || echo "unknown")
38
38
  SUMMARY="$SUMMARY
39
39
  Phase: $PHASE"
40
40
  fi
@@ -7,11 +7,8 @@
7
7
 
8
8
  set -e
9
9
 
10
- # Read hook input from stdin (non-blocking)
11
- INPUT=""
12
- if read -t 1 -r line; then
13
- INPUT="$line"
14
- fi
10
+ # Read hook input from stdin
11
+ INPUT=$(cat 2>/dev/null || echo "")
15
12
 
16
13
  # Fail-open: no input → allow
17
14
  if [ -z "$INPUT" ]; then
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ # SubagentStart Hook — Daemon에 baseline 저장 요청 (fail-open)
3
+ set -e
4
+
5
+ INPUT=$(cat 2>/dev/null || echo "{}")
6
+ AGENT=$(echo "$INPUT" | jq -r '.agent // "unknown"' 2>/dev/null || echo "unknown")
7
+
8
+ # Daemon에 통지 (실패해도 서브에이전트 실행은 차단하지 않음)
9
+ echo "$INPUT" | tsq daemon notify subagent-start --agent "$AGENT" 2>/dev/null || true
10
+
11
+ exit 0
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ # SubagentStop Hook — Daemon에 task-complete 이벤트 전달 (fail-open)
3
+ set -e
4
+
5
+ INPUT=$(cat 2>/dev/null || echo "{}")
6
+ AGENT=$(echo "$INPUT" | jq -r '.agent // "unknown"' 2>/dev/null || echo "unknown")
7
+
8
+ # Daemon에 통지 → L1 태스크 로그 자동 생성
9
+ echo "$INPUT" | tsq daemon notify subagent-stop --agent "$AGENT" 2>/dev/null || true
10
+
11
+ exit 0