sinapse-ai 10.0.0-rc.9 → 10.0.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 (406) hide show
  1. package/.claude/hooks/enforce-architecture-first.py +197 -197
  2. package/.claude/hooks/mind-clone-governance.py +212 -193
  3. package/.claude/hooks/read-protection.py +152 -152
  4. package/.claude/hooks/sql-governance.py +183 -183
  5. package/.claude/hooks/write-path-validation.py +195 -195
  6. package/.claude/rules/mcp-usage.md +11 -5
  7. package/.codex/agents/squad-creator.md +1 -1
  8. package/.sinapse-ai/constitution.md +10 -3
  9. package/.sinapse-ai/core/doctor/checks/ide-sync.js +63 -33
  10. package/.sinapse-ai/core/doctor/checks/index.js +2 -0
  11. package/.sinapse-ai/core/doctor/checks/manifest-version-parity.js +101 -0
  12. package/.sinapse-ai/core/doctor/checks/npm-packages.js +52 -28
  13. package/.sinapse-ai/core/grounding/README.md +23 -0
  14. package/.sinapse-ai/core/grounding/brand.cjs +29 -0
  15. package/.sinapse-ai/core/grounding/config-loader.cjs +52 -0
  16. package/.sinapse-ai/core/grounding/design-system.cjs +29 -0
  17. package/.sinapse-ai/core/grounding/vault.cjs +36 -0
  18. package/.sinapse-ai/core/registry/service-registry.json +11851 -0
  19. package/.sinapse-ai/data/entity-registry.yaml +806 -765
  20. package/.sinapse-ai/data/registry-update-log.jsonl +1368 -0
  21. package/.sinapse-ai/development/agents/squad-creator.md +1 -1
  22. package/.sinapse-ai/development/scripts/squad/migrate-workflows-to-wrapper.js +190 -0
  23. package/.sinapse-ai/development/scripts/squad/squad-downloader.js +2 -2
  24. package/.sinapse-ai/development/scripts/squad/squad-publisher.js +2 -2
  25. package/.sinapse-ai/development/tasks/pr-automation.md +2 -2
  26. package/.sinapse-ai/development/tasks/squad-creator-download.md +1 -1
  27. package/.sinapse-ai/development/tasks/squad-creator-publish.md +4 -4
  28. package/.sinapse-ai/development/tasks/update-sinapse.md +1 -1
  29. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  30. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  31. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  32. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  33. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  34. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  35. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  36. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  37. package/.sinapse-ai/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +8 -8
  38. package/.sinapse-ai/docs/standards/SINAPSE-LIVRO-DE-OURO-V2.1-COMPLETE.md +9 -9
  39. package/.sinapse-ai/docs/standards/SINAPSE-LIVRO-DE-OURO-V2.2-SUMMARY.md +1 -1
  40. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
  41. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
  42. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
  43. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  44. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -16
  45. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -59
  46. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -12
  47. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  48. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  49. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  50. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  51. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  52. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  53. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  54. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  55. package/.sinapse-ai/install-manifest.yaml +109 -77
  56. package/.sinapse-ai/internal/aiox-feature-map.md +270 -0
  57. package/.sinapse-ai/local-config.yaml.template +65 -65
  58. package/.sinapse-ai/manifests/agents.csv +29 -0
  59. package/.sinapse-ai/manifests/tasks.csv +204 -0
  60. package/.sinapse-ai/manifests/workers.csv +196 -0
  61. package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
  62. package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
  63. package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
  64. package/.sinapse-ai/monitor/hooks/notification.py +30 -30
  65. package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
  66. package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
  67. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
  68. package/.sinapse-ai/monitor/hooks/stop.py +30 -30
  69. package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
  70. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
  71. package/.sinapse-ai/package.json +3 -3
  72. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  73. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  74. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  75. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  76. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  77. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  78. package/.sinapse-ai/product/templates/story.hbs +264 -264
  79. package/.sinapse-ai/product/templates/task.hbs +171 -171
  80. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  81. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  82. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  83. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  84. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  85. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  86. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  87. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  88. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  89. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  90. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  91. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  92. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  93. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  94. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  95. package/.sinapse-ai/schemas/squad-schema.json +5 -5
  96. package/.sinapse-ai/scripts/diagnostics/diagnose-installation.js +1 -1
  97. package/.sinapse-ai/user-guide.md +3 -3
  98. package/LICENSE +63 -34
  99. package/README.md +27 -9
  100. package/bin/cli.js +245 -27
  101. package/bin/sinapse.js +1 -1
  102. package/docs/TELEMETRY.md +1 -1
  103. package/docs/community/README-community-snippet-core.md +13 -13
  104. package/docs/community/README-community-snippet-mcp.md +9 -9
  105. package/docs/community/README-community-snippet-squads.md +9 -9
  106. package/docs/framework/README.md +4 -4
  107. package/docs/framework/coding-standards.md +2 -2
  108. package/docs/framework/roadmap.md +5 -5
  109. package/docs/framework/source-tree.md +6 -6
  110. package/docs/framework/tech-stack.md +2 -2
  111. package/docs/guides/agent-reference.md +44 -125
  112. package/docs/guides/agents/SQUAD-CREATOR-SYSTEM.md +2 -2
  113. package/docs/guides/agents/traces/squad-creation-execution-trace.md +2 -2
  114. package/docs/guides/codex-config.md +140 -0
  115. package/docs/guides/contributing-squads.md +4 -4
  116. package/docs/guides/development-setup.md +7 -7
  117. package/docs/guides/getting-started.md +8 -8
  118. package/docs/guides/git-workflow-guide.md +1 -1
  119. package/docs/guides/grounding-setup.md +115 -0
  120. package/docs/guides/installation-troubleshooting.md +5 -5
  121. package/docs/guides/llm-routing.md +1 -1
  122. package/docs/guides/pro/install-gate-setup.md +3 -3
  123. package/docs/guides/security-hardening.md +4 -4
  124. package/docs/guides/squads-guide.md +6 -6
  125. package/docs/guides/squads-overview.md +3 -3
  126. package/docs/guides/user-guide.md +2 -2
  127. package/docs/guides/workflows/pro-developer-workflow.md +5 -5
  128. package/docs/installation/README.md +2 -2
  129. package/docs/installation/faq.md +3 -3
  130. package/docs/installation/linux.md +4 -4
  131. package/docs/installation/macos.md +2 -2
  132. package/docs/installation/troubleshooting.md +2 -2
  133. package/docs/installation/uninstallation.md +2 -2
  134. package/docs/installation/v4-quick-start.md +4 -4
  135. package/docs/installation/windows.md +3 -3
  136. package/docs/legal/license-clarification.md +1 -1
  137. package/docs/legal/privacy.md +1 -1
  138. package/docs/legal/terms.md +1 -1
  139. package/docs/pt/CHANGELOG.md +2 -2
  140. package/docs/pt/architecture/ARCHITECTURE-INDEX.md +1 -1
  141. package/docs/pt/architecture/adr/ADR-COLLAB-1-current-state-audit.md +4 -4
  142. package/docs/pt/architecture/adr/ADR-COLLAB-2-proposed-configuration.md +29 -29
  143. package/docs/pt/architecture/coding-standards.md +2 -2
  144. package/docs/pt/architecture/contribution-workflow-research.md +7 -7
  145. package/docs/pt/architecture/high-level-architecture.md +3 -3
  146. package/docs/pt/architecture/multi-repo-strategy.md +7 -7
  147. package/docs/pt/architecture/source-tree.md +6 -6
  148. package/docs/pt/architecture/tech-stack.md +2 -2
  149. package/docs/pt/community/README-community-snippet-core.md +13 -13
  150. package/docs/pt/community/README-community-snippet-mcp.md +9 -9
  151. package/docs/pt/community/README-community-snippet-squads.md +9 -9
  152. package/docs/pt/community.md +18 -18
  153. package/docs/pt/contributing.md +4 -4
  154. package/docs/pt/framework/README.md +4 -4
  155. package/docs/pt/framework/coding-standards.md +2 -2
  156. package/docs/pt/framework/source-tree.md +6 -6
  157. package/docs/pt/framework/tech-stack.md +2 -2
  158. package/docs/pt/git-workflow-guide.md +1 -1
  159. package/docs/pt/guides/contributing-squads.md +4 -4
  160. package/docs/pt/guides/development-setup.md +7 -7
  161. package/docs/pt/guides/installation-troubleshooting.md +5 -5
  162. package/docs/pt/guides/llm-routing.md +1 -1
  163. package/docs/pt/guides/security-hardening.md +4 -4
  164. package/docs/pt/guides/squads-guide.md +6 -6
  165. package/docs/pt/guides/squads-overview.md +3 -3
  166. package/docs/pt/guides/user-guide.md +2 -2
  167. package/docs/pt/installation/README.md +2 -2
  168. package/docs/pt/installation/faq.md +3 -3
  169. package/docs/pt/installation/linux.md +3 -3
  170. package/docs/pt/installation/macos.md +2 -2
  171. package/docs/pt/installation/troubleshooting.md +2 -2
  172. package/docs/pt/installation/v4-quick-start.md +4 -4
  173. package/docs/pt/installation/windows.md +3 -3
  174. package/docs/pt/migration-guide.md +1 -1
  175. package/docs/pt/roadmap.md +5 -5
  176. package/docs/pt/security-best-practices.md +1 -1
  177. package/docs/pt/uninstallation.md +2 -2
  178. package/docs/security/security-best-practices.md +1 -1
  179. package/docs/sinapse-agent-flows/squad-creator-system.md +2 -2
  180. package/package.json +9 -4
  181. package/packages/installer/src/wizard/grounding-config.js +131 -0
  182. package/packages/installer/src/wizard/i18n.js +2 -2
  183. package/packages/installer/src/wizard/pro-setup.js +2 -2
  184. package/packages/installer/src/wizard/questions.js +52 -0
  185. package/packages/installer/src/wizard/validation/report-generator.js +1 -1
  186. package/packages/installer/src/wizard/validation/troubleshooting-system.js +3 -3
  187. package/packages/installer/templates/README.md +16 -0
  188. package/packages/installer/templates/brand-routing.example.json +12 -0
  189. package/packages/installer/templates/ds-routing.example.json +12 -0
  190. package/packages/installer/templates/vault-routing.example.json +12 -0
  191. package/packages/installer/tests/unit/doctor/doctor-checks.test.js +7 -4
  192. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -2
  193. package/packages/sinapse-install/README.md +2 -2
  194. package/packages/sinapse-install/bin/edmcp.js +0 -0
  195. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  196. package/packages/sinapse-install/package.json +3 -3
  197. package/packages/sinapse-install/tests/unit/chrome-brain.smoke.test.js +66 -0
  198. package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
  199. package/packages/sinapse-pro-cli/package.json +1 -1
  200. package/packages/sinapse-pro-cli/tests/sinapse-pro-bin.smoke.test.js +70 -0
  201. package/scripts/apply-persona-disclaimer.js +123 -0
  202. package/scripts/check-markdown-links.py +353 -353
  203. package/scripts/reconcile-squad-manifests.js +218 -0
  204. package/scripts/sync-counts.js +159 -0
  205. package/squads/squad-animations/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/3d-scene-creation-cycle.yaml +55 -0
  206. package/squads/squad-animations/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/animation-quality-review-cycle.yaml +45 -0
  207. package/squads/squad-animations/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/generative-art-creation-cycle.yaml +47 -0
  208. package/squads/squad-animations/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/prompt-to-animation-cycle.yaml +86 -0
  209. package/squads/squad-animations/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/scroll-experience-creation-cycle.yaml +55 -0
  210. package/squads/squad-animations/squad.yaml +8 -0
  211. package/squads/squad-animations/workflows/3d-scene-creation-cycle.yaml +88 -48
  212. package/squads/squad-animations/workflows/animation-quality-review-cycle.yaml +72 -40
  213. package/squads/squad-animations/workflows/generative-art-creation-cycle.yaml +72 -40
  214. package/squads/squad-animations/workflows/prompt-to-animation-cycle.yaml +142 -75
  215. package/squads/squad-animations/workflows/scroll-experience-creation-cycle.yaml +88 -48
  216. package/squads/squad-artdir/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/conversion-audit-cycle.yaml +78 -0
  217. package/squads/squad-artdir/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-art-direction-cycle.yaml +98 -0
  218. package/squads/squad-artdir/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/saas-platform-art-direction-cycle.yaml +174 -0
  219. package/squads/squad-artdir/squad.yaml +8 -0
  220. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +137 -73
  221. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +174 -93
  222. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +329 -165
  223. package/squads/squad-brand/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/brand-application-cycle.yaml +107 -0
  224. package/squads/squad-brand/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/brand-diagnosis-cycle.yaml +161 -0
  225. package/squads/squad-brand/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/client-idv-delivery-cycle.yaml +196 -0
  226. package/squads/squad-brand/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/zero-to-brand-system-cycle.yaml +252 -0
  227. package/squads/squad-brand/squad.yaml +9 -2
  228. package/squads/squad-brand/workflows/brand-application-cycle.yaml +195 -106
  229. package/squads/squad-brand/workflows/brand-diagnosis-cycle.yaml +283 -159
  230. package/squads/squad-brand/workflows/client-idv-delivery-cycle.yaml +353 -188
  231. package/squads/squad-brand/workflows/zero-to-brand-system-cycle.yaml +471 -243
  232. package/squads/squad-claude/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/optimization-cycle.yaml +98 -0
  233. package/squads/squad-claude/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/project-setup-cycle.yaml +87 -0
  234. package/squads/squad-claude/squad.yaml +8 -0
  235. package/squads/squad-claude/workflows/optimization-cycle.yaml +173 -95
  236. package/squads/squad-claude/workflows/project-setup-cycle.yaml +151 -84
  237. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-clone-pipeline.yaml +124 -0
  238. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/quality-validation-cycle.yaml +56 -0
  239. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/source-discovery-cycle.yaml +64 -0
  240. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/tier1-kb-only.yaml +71 -0
  241. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/tier2-consultant.yaml +95 -0
  242. package/squads/squad-cloning/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/tier3-full-clone.yaml +55 -0
  243. package/squads/squad-cloning/squad.yaml +8 -1
  244. package/squads/squad-cloning/workflows/full-clone-pipeline.yaml +222 -114
  245. package/squads/squad-cloning/workflows/quality-validation-cycle.yaml +77 -47
  246. package/squads/squad-cloning/workflows/source-discovery-cycle.yaml +112 -60
  247. package/squads/squad-cloning/workflows/tier1-kb-only.yaml +118 -63
  248. package/squads/squad-cloning/workflows/tier2-consultant.yaml +164 -86
  249. package/squads/squad-cloning/workflows/tier3-full-clone.yaml +68 -41
  250. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/churn-prevention-protocol.yaml +160 -0
  251. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/client-onboarding-activation.yaml +117 -0
  252. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/expansion-revenue-cycle.yaml +128 -0
  253. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/new-offer-launch.yaml +150 -0
  254. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/quarterly-commercial-review.yaml +165 -0
  255. package/squads/squad-commercial/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/revenue-forecasting-cycle.yaml +107 -0
  256. package/squads/squad-commercial/squad.yaml +8 -0
  257. package/squads/squad-commercial/workflows/churn-prevention-protocol.yaml +237 -127
  258. package/squads/squad-commercial/workflows/client-onboarding-activation.yaml +177 -95
  259. package/squads/squad-commercial/workflows/expansion-revenue-cycle.yaml +197 -107
  260. package/squads/squad-commercial/workflows/new-offer-launch.yaml +239 -126
  261. package/squads/squad-commercial/workflows/quarterly-commercial-review.yaml +237 -121
  262. package/squads/squad-commercial/workflows/revenue-forecasting-cycle.yaml +169 -90
  263. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/content-audit-cycle.yaml +93 -0
  264. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/content-creation-cycle.yaml +101 -0
  265. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/editorial-planning-cycle.yaml +94 -0
  266. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/onboarding-content-cycle.yaml +136 -0
  267. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/performance-feedback-loop.yaml +100 -0
  268. package/squads/squad-content/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/signal-to-content-cycle.yaml +127 -0
  269. package/squads/squad-content/squad.yaml +8 -1
  270. package/squads/squad-content/workflows/content-audit-cycle.yaml +132 -90
  271. package/squads/squad-content/workflows/content-creation-cycle.yaml +142 -95
  272. package/squads/squad-content/workflows/editorial-planning-cycle.yaml +134 -86
  273. package/squads/squad-content/workflows/onboarding-content-cycle.yaml +199 -132
  274. package/squads/squad-content/workflows/performance-feedback-loop.yaml +134 -96
  275. package/squads/squad-content/workflows/signal-to-content-cycle.yaml +197 -124
  276. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/brand-voice-development.yaml +97 -0
  277. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/campaign-copy-cycle.yaml +88 -0
  278. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/content-copy-cycle.yaml +79 -0
  279. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/conversion-copy-sprint.yaml +118 -0
  280. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-copy-cycle.yaml +111 -0
  281. package/squads/squad-copy/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/sales-copy-pipeline.yaml +118 -0
  282. package/squads/squad-copy/squad.yaml +3 -3
  283. package/squads/squad-copy/workflows/brand-voice-development.yaml +149 -89
  284. package/squads/squad-copy/workflows/campaign-copy-cycle.yaml +136 -81
  285. package/squads/squad-copy/workflows/content-copy-cycle.yaml +117 -72
  286. package/squads/squad-copy/workflows/conversion-copy-sprint.yaml +188 -111
  287. package/squads/squad-copy/workflows/full-copy-cycle.yaml +162 -100
  288. package/squads/squad-copy/workflows/sales-copy-pipeline.yaml +189 -110
  289. package/squads/squad-council/agents/brene-brown.md +10 -0
  290. package/squads/squad-council/agents/charlie-munger.md +10 -0
  291. package/squads/squad-council/agents/derek-sivers.md +10 -0
  292. package/squads/squad-council/agents/naval-ravikant.md +10 -0
  293. package/squads/squad-council/agents/patrick-lencioni.md +10 -0
  294. package/squads/squad-council/agents/peter-thiel.md +10 -0
  295. package/squads/squad-council/agents/ray-dalio.md +10 -0
  296. package/squads/squad-council/agents/reid-hoffman.md +10 -0
  297. package/squads/squad-council/agents/simon-sinek.md +10 -0
  298. package/squads/squad-council/agents/yvon-chouinard.md +10 -0
  299. package/squads/squad-council/squad.yaml +8 -0
  300. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/course-launch-cycle.yaml +164 -0
  301. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/course-quality-review.yaml +150 -0
  302. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-course-creation.yaml +167 -0
  303. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/presentation-creation.yaml +129 -0
  304. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/video-course-production.yaml +169 -0
  305. package/squads/squad-courses/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/written-course-creation.yaml +145 -0
  306. package/squads/squad-courses/squad.yaml +8 -1
  307. package/squads/squad-courses/workflows/course-launch-cycle.yaml +291 -156
  308. package/squads/squad-courses/workflows/course-quality-review.yaml +268 -145
  309. package/squads/squad-courses/workflows/full-course-creation.yaml +296 -163
  310. package/squads/squad-courses/workflows/presentation-creation.yaml +229 -124
  311. package/squads/squad-courses/workflows/video-course-production.yaml +305 -164
  312. package/squads/squad-courses/workflows/written-course-creation.yaml +259 -140
  313. package/squads/squad-cybersecurity/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/incident-response-cycle.yaml +133 -0
  314. package/squads/squad-cybersecurity/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/security-audit-workflow.yaml +140 -0
  315. package/squads/squad-cybersecurity/squad.yaml +8 -0
  316. package/squads/squad-cybersecurity/workflows/incident-response-cycle.yaml +226 -126
  317. package/squads/squad-cybersecurity/workflows/security-audit-workflow.yaml +241 -136
  318. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/a11y-compliance-cycle.yaml +105 -0
  319. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/design-system-build-cycle.yaml +151 -0
  320. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/landing-page-sprint.yaml +102 -0
  321. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/performance-remediation-cycle.yaml +108 -0
  322. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/ux-research-sprint.yaml +100 -0
  323. package/squads/squad-design/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/zero-to-digital-product-cycle.yaml +178 -0
  324. package/squads/squad-design/agents/brad-frost.md +10 -0
  325. package/squads/squad-design/agents/dan-mall.md +10 -0
  326. package/squads/squad-design/agents/dave-malouf.md +10 -0
  327. package/squads/squad-design/squad.yaml +3 -3
  328. package/squads/squad-design/workflows/a11y-compliance-cycle.yaml +190 -97
  329. package/squads/squad-design/workflows/design-system-build-cycle.yaml +289 -142
  330. package/squads/squad-design/workflows/landing-page-sprint.yaml +183 -93
  331. package/squads/squad-design/workflows/performance-remediation-cycle.yaml +193 -96
  332. package/squads/squad-design/workflows/ux-research-sprint.yaml +174 -90
  333. package/squads/squad-design/workflows/zero-to-digital-product-cycle.yaml +338 -165
  334. package/squads/squad-finance/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/client-profitability-audit.yaml +85 -0
  335. package/squads/squad-finance/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/monthly-financial-cycle.yaml +96 -0
  336. package/squads/squad-finance/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/pricing-design-cycle.yaml +76 -0
  337. package/squads/squad-finance/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/quarterly-financial-review.yaml +113 -0
  338. package/squads/squad-finance/squad.yaml +8 -0
  339. package/squads/squad-finance/workflows/client-profitability-audit.yaml +150 -79
  340. package/squads/squad-finance/workflows/monthly-financial-cycle.yaml +170 -88
  341. package/squads/squad-finance/workflows/pricing-design-cycle.yaml +132 -70
  342. package/squads/squad-finance/workflows/quarterly-financial-review.yaml +204 -105
  343. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/analytics-instrumentation-pipeline.yaml +90 -0
  344. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/campaign-performance-review.yaml +73 -0
  345. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/cro-experimentation-sprint.yaml +91 -0
  346. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-growth-analytics-cycle.yaml +162 -0
  347. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/growth-experiment-loop.yaml +104 -0
  348. package/squads/squad-growth/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/seo-audit-optimization-cycle.yaml +86 -0
  349. package/squads/squad-growth/squad.yaml +8 -0
  350. package/squads/squad-growth/tasks/calculate-sample-size.md +121 -0
  351. package/squads/squad-growth/workflows/analytics-instrumentation-pipeline.yaml +169 -85
  352. package/squads/squad-growth/workflows/campaign-performance-review.yaml +136 -69
  353. package/squads/squad-growth/workflows/cro-experimentation-sprint.yaml +182 -87
  354. package/squads/squad-growth/workflows/full-growth-analytics-cycle.yaml +332 -157
  355. package/squads/squad-growth/workflows/growth-experiment-loop.yaml +204 -100
  356. package/squads/squad-growth/workflows/seo-audit-optimization-cycle.yaml +160 -82
  357. package/squads/squad-paidmedia/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/account-audit-cycle.yaml +86 -0
  358. package/squads/squad-paidmedia/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/campaign-launch-cycle.yaml +111 -0
  359. package/squads/squad-paidmedia/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/creative-testing-cycle.yaml +78 -0
  360. package/squads/squad-paidmedia/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/cro-optimization-cycle.yaml +89 -0
  361. package/squads/squad-paidmedia/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/scaling-sprint.yaml +76 -0
  362. package/squads/squad-paidmedia/squad.yaml +8 -0
  363. package/squads/squad-paidmedia/tasks/calculate-sample-size.md +57 -0
  364. package/squads/squad-paidmedia/workflows/account-audit-cycle.yaml +154 -78
  365. package/squads/squad-paidmedia/workflows/campaign-launch-cycle.yaml +200 -102
  366. package/squads/squad-paidmedia/workflows/creative-testing-cycle.yaml +134 -71
  367. package/squads/squad-paidmedia/workflows/cro-optimization-cycle.yaml +160 -84
  368. package/squads/squad-paidmedia/workflows/scaling-sprint.yaml +132 -69
  369. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/client-roadmap-alignment-cycle.yaml +89 -0
  370. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/product-discovery-cycle.yaml +94 -0
  371. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/product-handoff-cycle.yaml +88 -0
  372. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/product-launch-cycle.yaml +90 -0
  373. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/product-strategy-definition-cycle.yaml +94 -0
  374. package/squads/squad-product/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/story-development-delivery-cycle.yaml +93 -0
  375. package/squads/squad-product/squad.yaml +8 -0
  376. package/squads/squad-product/workflows/client-roadmap-alignment-cycle.yaml +152 -87
  377. package/squads/squad-product/workflows/product-discovery-cycle.yaml +161 -92
  378. package/squads/squad-product/workflows/product-handoff-cycle.yaml +150 -86
  379. package/squads/squad-product/workflows/product-launch-cycle.yaml +149 -87
  380. package/squads/squad-product/workflows/product-strategy-definition-cycle.yaml +161 -92
  381. package/squads/squad-product/workflows/story-development-delivery-cycle.yaml +158 -91
  382. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/audience-intelligence-cycle.yaml +141 -0
  383. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/competitive-intelligence-cycle.yaml +135 -0
  384. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/deep-research-cycle.yaml +120 -0
  385. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/full-research-sprint.yaml +197 -0
  386. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/market-analysis-cycle.yaml +136 -0
  387. package/squads/squad-research/.backup/pre-workflow-wrap-2026-04-19T22-46-56-863Z/workflows/trend-forecasting-cycle.yaml +134 -0
  388. package/squads/squad-research/squad.yaml +8 -1
  389. package/squads/squad-research/workflows/audience-intelligence-cycle.yaml +210 -121
  390. package/squads/squad-research/workflows/competitive-intelligence-cycle.yaml +204 -118
  391. package/squads/squad-research/workflows/deep-research-cycle.yaml +179 -104
  392. package/squads/squad-research/workflows/full-research-sprint.yaml +293 -167
  393. package/squads/squad-research/workflows/market-analysis-cycle.yaml +206 -119
  394. package/squads/squad-research/workflows/trend-forecasting-cycle.yaml +202 -117
  395. package/squads/squad-storytelling/agents/blake-snyder.md +10 -0
  396. package/squads/squad-storytelling/agents/dan-harmon.md +10 -0
  397. package/squads/squad-storytelling/agents/joseph-campbell.md +10 -0
  398. package/squads/squad-storytelling/agents/keith-johnstone.md +10 -0
  399. package/squads/squad-storytelling/agents/kindra-hall.md +10 -0
  400. package/squads/squad-storytelling/agents/marshall-ganz.md +10 -0
  401. package/squads/squad-storytelling/agents/nancy-duarte.md +10 -0
  402. package/squads/squad-storytelling/agents/oren-klaff.md +10 -0
  403. package/squads/squad-storytelling/agents/park-howell.md +10 -0
  404. package/squads/squad-storytelling/squad.yaml +8 -0
  405. package/.sinapse-ai/lib/build.json +0 -1
  406. package/bin/sinapse-cli +0 -283
@@ -1,197 +1,197 @@
1
- #!/usr/bin/env python3
2
- """
3
- Hook: Enforce Architecture-First Development
4
-
5
- REGRA: Código só pode ser criado/editado se existir documentação prévia.
6
-
7
- Este hook intercepta Write/Edit em paths de código e verifica se existe
8
- documentação aprovada antes de permitir a operação.
9
-
10
- Exit Codes:
11
- - 0: Permitido (doc existe ou path não requer doc)
12
- - 2: Bloqueado (doc não existe para path protegido)
13
- """
14
-
15
- import json
16
- import sys
17
- import os
18
- from pathlib import Path
19
-
20
- # =============================================================================
21
- # CONFIGURAÇÃO: Paths que EXIGEM documentação prévia
22
- # =============================================================================
23
-
24
- PROTECTED_PATHS = [
25
- # Edge Functions - exigem docs/architecture/{function-name}.md
26
- {
27
- "pattern": "supabase/functions/",
28
- "doc_patterns": [
29
- "docs/architecture/{name}.md",
30
- "docs/architecture/{name}-architecture.md",
31
- "docs/approved-plans/{name}.md",
32
- ],
33
- "extract_name": lambda p: p.split("supabase/functions/")[1].split("/")[0] if "supabase/functions/" in p else None,
34
- },
35
- # Migrations - exigem documentação de schema changes
36
- {
37
- "pattern": "supabase/migrations/",
38
- "doc_patterns": [
39
- "docs/approved-plans/migration-{name}.md",
40
- "docs/architecture/database-changes.md",
41
- ],
42
- "extract_name": lambda p: Path(p).stem if "supabase/migrations/" in p else None,
43
- "allow_if_exists": True, # Permite editar migrations existentes
44
- },
45
- ]
46
-
47
- # Paths que são SEMPRE permitidos (não exigem doc)
48
- ALWAYS_ALLOWED = [
49
- ".claude/",
50
- "docs/",
51
- "outputs/",
52
- "squads/",
53
- ".sinapse-ai/",
54
- ".sinapse-custom/",
55
- "node_modules/",
56
- ".git/",
57
- "package.json",
58
- "package-lock.json",
59
- "tsconfig.json",
60
- ".env",
61
- "README.md",
62
- ]
63
-
64
- # =============================================================================
65
- # LÓGICA DO HOOK
66
- # =============================================================================
67
-
68
- def get_project_root():
69
- """Obtém o root do projeto via variável de ambiente ou cwd."""
70
- return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
71
-
72
- def is_always_allowed(file_path: str) -> bool:
73
- """Verifica se o path está na lista de sempre permitidos."""
74
- for allowed in ALWAYS_ALLOWED:
75
- if allowed in file_path:
76
- return True
77
- return False
78
-
79
- def find_matching_protection(file_path: str) -> dict | None:
80
- """Encontra a regra de proteção que corresponde ao path."""
81
- for protection in PROTECTED_PATHS:
82
- if protection["pattern"] in file_path:
83
- return protection
84
- return None
85
-
86
- def check_documentation_exists(file_path: str, protection: dict, project_root: str) -> tuple[bool, str]:
87
- """
88
- Verifica se existe documentação para o path protegido.
89
-
90
- Returns:
91
- (exists: bool, doc_path: str | None)
92
- """
93
- extract_fn = protection.get("extract_name")
94
- if not extract_fn:
95
- return True, None
96
-
97
- name = extract_fn(file_path)
98
- if not name:
99
- return True, None
100
-
101
- # Verificar cada padrão de documentação
102
- for doc_pattern in protection["doc_patterns"]:
103
- doc_path = doc_pattern.format(name=name)
104
- full_doc_path = os.path.join(project_root, doc_path)
105
-
106
- if os.path.exists(full_doc_path):
107
- return True, doc_path
108
-
109
- # Se allow_if_exists e o arquivo já existe, permitir edição
110
- if protection.get("allow_if_exists"):
111
- full_file_path = os.path.join(project_root, file_path) if not file_path.startswith("/") else file_path
112
- if os.path.exists(full_file_path):
113
- return True, "(arquivo existente)"
114
-
115
- return False, None
116
-
117
- def format_required_docs(protection: dict, name: str) -> str:
118
- """Formata a lista de documentos aceitos."""
119
- docs = []
120
- for pattern in protection["doc_patterns"]:
121
- docs.append(f" - {pattern.format(name=name)}")
122
- return "\n".join(docs)
123
-
124
- def main():
125
- # Ler input do stdin
126
- try:
127
- input_data = json.load(sys.stdin)
128
- except json.JSONDecodeError:
129
- # Se não conseguir parsear, permitir (fail-open)
130
- sys.exit(0)
131
-
132
- tool_name = input_data.get("tool_name", "")
133
- tool_input = input_data.get("tool_input", {})
134
- file_path = tool_input.get("file_path", "")
135
-
136
- # Só processar Write e Edit
137
- if tool_name not in ["Write", "Edit"]:
138
- sys.exit(0)
139
-
140
- # Normalizar path (remover prefixo absoluto se presente)
141
- project_root = get_project_root()
142
- relative_path = file_path
143
- if file_path.startswith(project_root):
144
- relative_path = file_path[len(project_root):].lstrip("/")
145
-
146
- # Verificar se é sempre permitido
147
- if is_always_allowed(relative_path):
148
- sys.exit(0)
149
-
150
- # Verificar se path está protegido
151
- protection = find_matching_protection(relative_path)
152
- if not protection:
153
- # Path não protegido, permitir
154
- sys.exit(0)
155
-
156
- # Verificar se documentação existe
157
- doc_exists, doc_path = check_documentation_exists(relative_path, protection, project_root)
158
-
159
- if doc_exists:
160
- # Documentação existe, permitir
161
- sys.exit(0)
162
-
163
- # BLOQUEAR: Documentação não existe
164
- name = protection["extract_name"](relative_path) or "unknown"
165
- required_docs = format_required_docs(protection, name)
166
-
167
- error_message = f"""
168
- ╔══════════════════════════════════════════════════════════════════════════════╗
169
- ║ 🛑 ARCHITECTURE-FIRST: Documentação obrigatória antes de código ║
170
- ╠══════════════════════════════════════════════════════════════════════════════╣
171
- ║ ║
172
- ║ Arquivo bloqueado: {relative_path[:50]:<50} ║
173
- ║ ║
174
- ║ REGRA: Antes de criar/editar código em paths protegidos, você DEVE: ║
175
- ║ ║
176
- ║ 1. Documentar o plano de arquitetura ║
177
- ║ 2. Obter aprovação do usuário ║
178
- ║ 3. Criar o arquivo de documentação ║
179
- ║ ║
180
- ║ Documentos aceitos para '{name}': ║
181
- {required_docs}
182
- ║ ║
183
- ║ AÇÃO: Crie um dos documentos acima com o plano aprovado, depois tente ║
184
- ║ novamente a operação de código. ║
185
- ║ ║
186
- ║ DICA: Use `*create-doc architecture` para criar doc de arquitetura ║
187
- ║ Ou crie docs/approved-plans/{name}.md com o plano resumido ║
188
- ║ ║
189
- ╚══════════════════════════════════════════════════════════════════════════════╝
190
- """
191
-
192
- print(error_message, file=sys.stderr)
193
- sys.exit(2) # Exit code 2 = bloqueia o tool
194
-
195
- if __name__ == "__main__":
196
- main()
197
-
1
+ #!/usr/bin/env python3
2
+ """
3
+ Hook: Enforce Architecture-First Development
4
+
5
+ REGRA: Código só pode ser criado/editado se existir documentação prévia.
6
+
7
+ Este hook intercepta Write/Edit em paths de código e verifica se existe
8
+ documentação aprovada antes de permitir a operação.
9
+
10
+ Exit Codes:
11
+ - 0: Permitido (doc existe ou path não requer doc)
12
+ - 2: Bloqueado (doc não existe para path protegido)
13
+ """
14
+
15
+ import json
16
+ import sys
17
+ import os
18
+ from pathlib import Path
19
+
20
+ # =============================================================================
21
+ # CONFIGURAÇÃO: Paths que EXIGEM documentação prévia
22
+ # =============================================================================
23
+
24
+ PROTECTED_PATHS = [
25
+ # Edge Functions - exigem docs/architecture/{function-name}.md
26
+ {
27
+ "pattern": "supabase/functions/",
28
+ "doc_patterns": [
29
+ "docs/architecture/{name}.md",
30
+ "docs/architecture/{name}-architecture.md",
31
+ "docs/approved-plans/{name}.md",
32
+ ],
33
+ "extract_name": lambda p: p.split("supabase/functions/")[1].split("/")[0] if "supabase/functions/" in p else None,
34
+ },
35
+ # Migrations - exigem documentação de schema changes
36
+ {
37
+ "pattern": "supabase/migrations/",
38
+ "doc_patterns": [
39
+ "docs/approved-plans/migration-{name}.md",
40
+ "docs/architecture/database-changes.md",
41
+ ],
42
+ "extract_name": lambda p: Path(p).stem if "supabase/migrations/" in p else None,
43
+ "allow_if_exists": True, # Permite editar migrations existentes
44
+ },
45
+ ]
46
+
47
+ # Paths que são SEMPRE permitidos (não exigem doc)
48
+ ALWAYS_ALLOWED = [
49
+ ".claude/",
50
+ "docs/",
51
+ "outputs/",
52
+ "squads/",
53
+ ".sinapse-ai/",
54
+ ".sinapse-custom/",
55
+ "node_modules/",
56
+ ".git/",
57
+ "package.json",
58
+ "package-lock.json",
59
+ "tsconfig.json",
60
+ ".env",
61
+ "README.md",
62
+ ]
63
+
64
+ # =============================================================================
65
+ # LÓGICA DO HOOK
66
+ # =============================================================================
67
+
68
+ def get_project_root():
69
+ """Obtém o root do projeto via variável de ambiente ou cwd."""
70
+ return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
71
+
72
+ def is_always_allowed(file_path: str) -> bool:
73
+ """Verifica se o path está na lista de sempre permitidos."""
74
+ for allowed in ALWAYS_ALLOWED:
75
+ if allowed in file_path:
76
+ return True
77
+ return False
78
+
79
+ def find_matching_protection(file_path: str) -> dict | None:
80
+ """Encontra a regra de proteção que corresponde ao path."""
81
+ for protection in PROTECTED_PATHS:
82
+ if protection["pattern"] in file_path:
83
+ return protection
84
+ return None
85
+
86
+ def check_documentation_exists(file_path: str, protection: dict, project_root: str) -> tuple[bool, str]:
87
+ """
88
+ Verifica se existe documentação para o path protegido.
89
+
90
+ Returns:
91
+ (exists: bool, doc_path: str | None)
92
+ """
93
+ extract_fn = protection.get("extract_name")
94
+ if not extract_fn:
95
+ return True, None
96
+
97
+ name = extract_fn(file_path)
98
+ if not name:
99
+ return True, None
100
+
101
+ # Verificar cada padrão de documentação
102
+ for doc_pattern in protection["doc_patterns"]:
103
+ doc_path = doc_pattern.format(name=name)
104
+ full_doc_path = os.path.join(project_root, doc_path)
105
+
106
+ if os.path.exists(full_doc_path):
107
+ return True, doc_path
108
+
109
+ # Se allow_if_exists e o arquivo já existe, permitir edição
110
+ if protection.get("allow_if_exists"):
111
+ full_file_path = os.path.join(project_root, file_path) if not file_path.startswith("/") else file_path
112
+ if os.path.exists(full_file_path):
113
+ return True, "(arquivo existente)"
114
+
115
+ return False, None
116
+
117
+ def format_required_docs(protection: dict, name: str) -> str:
118
+ """Formata a lista de documentos aceitos."""
119
+ docs = []
120
+ for pattern in protection["doc_patterns"]:
121
+ docs.append(f" - {pattern.format(name=name)}")
122
+ return "\n".join(docs)
123
+
124
+ def main():
125
+ # Ler input do stdin
126
+ try:
127
+ input_data = json.load(sys.stdin)
128
+ except json.JSONDecodeError:
129
+ # Se não conseguir parsear, permitir (fail-open)
130
+ sys.exit(0)
131
+
132
+ tool_name = input_data.get("tool_name", "")
133
+ tool_input = input_data.get("tool_input", {})
134
+ file_path = tool_input.get("file_path", "")
135
+
136
+ # Só processar Write e Edit
137
+ if tool_name not in ["Write", "Edit"]:
138
+ sys.exit(0)
139
+
140
+ # Normalizar path (remover prefixo absoluto se presente)
141
+ project_root = get_project_root()
142
+ relative_path = file_path
143
+ if file_path.startswith(project_root):
144
+ relative_path = file_path[len(project_root):].lstrip("/")
145
+
146
+ # Verificar se é sempre permitido
147
+ if is_always_allowed(relative_path):
148
+ sys.exit(0)
149
+
150
+ # Verificar se path está protegido
151
+ protection = find_matching_protection(relative_path)
152
+ if not protection:
153
+ # Path não protegido, permitir
154
+ sys.exit(0)
155
+
156
+ # Verificar se documentação existe
157
+ doc_exists, doc_path = check_documentation_exists(relative_path, protection, project_root)
158
+
159
+ if doc_exists:
160
+ # Documentação existe, permitir
161
+ sys.exit(0)
162
+
163
+ # BLOQUEAR: Documentação não existe
164
+ name = protection["extract_name"](relative_path) or "unknown"
165
+ required_docs = format_required_docs(protection, name)
166
+
167
+ error_message = f"""
168
+ ╔══════════════════════════════════════════════════════════════════════════════╗
169
+ ║ 🛑 ARCHITECTURE-FIRST: Documentação obrigatória antes de código ║
170
+ ╠══════════════════════════════════════════════════════════════════════════════╣
171
+ ║ ║
172
+ ║ Arquivo bloqueado: {relative_path[:50]:<50} ║
173
+ ║ ║
174
+ ║ REGRA: Antes de criar/editar código em paths protegidos, você DEVE: ║
175
+ ║ ║
176
+ ║ 1. Documentar o plano de arquitetura ║
177
+ ║ 2. Obter aprovação do usuário ║
178
+ ║ 3. Criar o arquivo de documentação ║
179
+ ║ ║
180
+ ║ Documentos aceitos para '{name}': ║
181
+ {required_docs}
182
+ ║ ║
183
+ ║ AÇÃO: Crie um dos documentos acima com o plano aprovado, depois tente ║
184
+ ║ novamente a operação de código. ║
185
+ ║ ║
186
+ ║ DICA: Use `*create-doc architecture` para criar doc de arquitetura ║
187
+ ║ Ou crie docs/approved-plans/{name}.md com o plano resumido ║
188
+ ║ ║
189
+ ╚══════════════════════════════════════════════════════════════════════════════╝
190
+ """
191
+
192
+ print(error_message, file=sys.stderr)
193
+ sys.exit(2) # Exit code 2 = bloqueia o tool
194
+
195
+ if __name__ == "__main__":
196
+ main()
197
+