sinapse-ai 1.8.0 → 1.9.1

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 (361) hide show
  1. package/.claude/hooks/mind-clone-governance.py +212 -212
  2. package/.claude/hooks/read-protection.py +152 -152
  3. package/.claude/hooks/slug-validation.py +175 -175
  4. package/.claude/hooks/sql-governance.py +183 -183
  5. package/.claude/rules/documentation-first.md +1 -1
  6. package/.claude/rules/hook-governance.md +1 -1
  7. package/.claude/rules/mandatory-delegation.md +1 -1
  8. package/.claude/rules/project-intelligence.md +1 -1
  9. package/.codex/agents/analyst.md +4 -371
  10. package/.codex/agents/animations-orqx.md +4 -57
  11. package/.codex/agents/architect.md +4 -560
  12. package/.codex/agents/brand-orqx.md +4 -95
  13. package/.codex/agents/claude-mastery-chief.md +4 -0
  14. package/.codex/agents/cloning-orqx.md +4 -70
  15. package/.codex/agents/commercial-orqx.md +4 -67
  16. package/.codex/agents/config-engineer.md +2 -2
  17. package/.codex/agents/content-orqx.md +4 -77
  18. package/.codex/agents/copy-orqx.md +4 -65
  19. package/.codex/agents/cost-optimizer.md +4 -0
  20. package/.codex/agents/council-orqx.md +4 -68
  21. package/.codex/agents/courses-orqx.md +4 -64
  22. package/.codex/agents/cro-persuasion.md +4 -0
  23. package/.codex/agents/cyber-orqx.md +4 -67
  24. package/.codex/agents/data-engineer.md +4 -542
  25. package/.codex/agents/design-orqx.md +4 -65
  26. package/.codex/agents/design-system.md +4 -210
  27. package/.codex/agents/developer.md +4 -666
  28. package/.codex/agents/devops.md +4 -668
  29. package/.codex/agents/finance-orqx.md +4 -57
  30. package/.codex/agents/fiscal-compliance-br.md +4 -0
  31. package/.codex/agents/forecast-strategist.md +4 -0
  32. package/.codex/agents/growth-orqx.md +4 -75
  33. package/.codex/agents/hooks-architect.md +2 -2
  34. package/.codex/agents/mcp-integrator.md +2 -2
  35. package/.codex/agents/paidmedia-orqx.md +4 -67
  36. package/.codex/agents/platform-aesthetic-director.md +4 -0
  37. package/.codex/agents/premium-packaging-strategist.md +4 -0
  38. package/.codex/agents/product-lead.md +4 -371
  39. package/.codex/agents/product-orqx.md +4 -57
  40. package/.codex/agents/product-surface-director.md +4 -0
  41. package/.codex/agents/project-integrator.md +2 -2
  42. package/.codex/agents/project-lead.md +4 -414
  43. package/.codex/agents/quality-gate.md +4 -547
  44. package/.codex/agents/research-orqx.md +4 -67
  45. package/.codex/agents/roadmap-sentinel.md +2 -2
  46. package/.codex/agents/skill-craftsman.md +2 -2
  47. package/.codex/agents/snps-orqx.md +4 -684
  48. package/.codex/agents/sop-extractor.md +4 -61
  49. package/.codex/agents/sprint-lead.md +4 -324
  50. package/.codex/agents/squad-creator.md +4 -402
  51. package/.codex/agents/storytelling-orqx.md +4 -65
  52. package/.codex/agents/swarm-orqx.md +4 -64
  53. package/.codex/agents/ux-design-expert.md +4 -532
  54. package/.codex/agents/ux-designer.md +4 -124
  55. package/.codex/command-registry.json +9 -9
  56. package/.codex/delegation-matrix.json +375 -839
  57. package/.codex/delegation-parity.json +658 -0
  58. package/.codex/handoff-packet.parity.schema.json +148 -0
  59. package/.codex/handoff-packet.template.json +26 -0
  60. package/.codex/instructions.md +8 -8
  61. package/.codex/scripts/resolve-codex-agent.js +482 -0
  62. package/.codex/scripts/resolve-codex-command.js +75 -12
  63. package/.codex/scripts/resolve-codex-delegation.js +131 -92
  64. package/.codex/skills/sinapse-claude/SKILL.md +3 -3
  65. package/.codex/skills/sinapse-po/SKILL.md +1 -1
  66. package/.codex/tasks/resolve-sinapse-conflict.md +1 -1
  67. package/.sinapse-ai/constitution.md +5 -5
  68. package/.sinapse-ai/core/doctor/checks/git-hooks.js +163 -19
  69. package/.sinapse-ai/core/events/dashboard-emitter.js +30 -9
  70. package/.sinapse-ai/core/execution/subagent-dispatcher.js +1 -1
  71. package/.sinapse-ai/core/synapse/engine.js +15 -0
  72. package/.sinapse-ai/core/ui/observability-panel.js +240 -0
  73. package/.sinapse-ai/core-config.yaml +0 -20
  74. package/.sinapse-ai/data/entity-registry.yaml +185 -236
  75. package/.sinapse-ai/development/agents/snps-orqx.md +16 -26
  76. package/.sinapse-ai/development/tasks/build-autonomous.md +11 -1
  77. package/.sinapse-ai/development/tasks/build-resume.md +8 -0
  78. package/.sinapse-ai/development/tasks/build-status.md +8 -0
  79. package/.sinapse-ai/development/tasks/build.md +8 -0
  80. package/.sinapse-ai/development/tasks/cleanup-worktrees.md +8 -1
  81. package/.sinapse-ai/development/tasks/gotcha.md +8 -0
  82. package/.sinapse-ai/development/tasks/gotchas.md +8 -0
  83. package/.sinapse-ai/development/tasks/ids-health.md +14 -6
  84. package/.sinapse-ai/development/tasks/list-mcps.md +15 -0
  85. package/.sinapse-ai/development/tasks/merge-worktree.md +8 -1
  86. package/.sinapse-ai/development/tasks/qa-review-build.md +18 -0
  87. package/.sinapse-ai/development/tasks/remove-mcp.md +8 -1
  88. package/.sinapse-ai/development/tasks/validate-agents.md +26 -14
  89. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  90. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  91. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  92. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  93. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  94. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  95. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  96. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  97. package/.sinapse-ai/git-hooks/lib/framework-guard.js +258 -0
  98. package/.sinapse-ai/git-hooks/lib/secret-scanner-core.js +355 -0
  99. package/.sinapse-ai/git-hooks/lib/staged-secret-scan.js +179 -0
  100. package/.sinapse-ai/git-hooks/lib/staged-sql-guard.js +204 -0
  101. package/.sinapse-ai/git-hooks/post-commit +28 -0
  102. package/.sinapse-ai/git-hooks/pre-commit +81 -0
  103. package/.sinapse-ai/git-hooks/pre-push +83 -0
  104. package/.sinapse-ai/hooks/ids-post-commit.js +13 -11
  105. package/.sinapse-ai/hooks/ids-pre-push.js +9 -7
  106. package/.sinapse-ai/infrastructure/scripts/codex-parity/resolve.js +161 -0
  107. package/.sinapse-ai/infrastructure/scripts/dashboard-status-writer.js +6 -2
  108. package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +65 -68
  109. package/.sinapse-ai/infrastructure/scripts/sync-codex-local-first.js +156 -1
  110. package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +1 -4
  111. package/.sinapse-ai/infrastructure/scripts/validate-codex-integration.js +41 -5
  112. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  113. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -16
  114. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -59
  115. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -12
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  117. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  118. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  121. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  122. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  123. package/.sinapse-ai/infrastructure/templates/safe-collab/CODEOWNERS.template +16 -16
  124. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  125. package/.sinapse-ai/install-manifest.yaml +112 -164
  126. package/.sinapse-ai/local-config.yaml.template +65 -65
  127. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  128. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  129. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  130. package/.sinapse-ai/product/templates/ide-rules/codex-rules.md +30 -0
  131. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  132. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  133. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  134. package/.sinapse-ai/product/templates/statusline/statusline-script.js +31 -8
  135. package/.sinapse-ai/product/templates/statusline/track-agent-clear.cjs +79 -0
  136. package/.sinapse-ai/product/templates/statusline/track-agent.cjs +218 -0
  137. package/.sinapse-ai/product/templates/story.hbs +264 -264
  138. package/.sinapse-ai/product/templates/task.hbs +171 -171
  139. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  140. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  141. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  142. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  143. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  144. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  145. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  146. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  147. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  148. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  149. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  150. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  151. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  152. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  153. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  154. package/AGENTS.md +193 -0
  155. package/CHANGELOG.md +1247 -0
  156. package/LICENSE +63 -63
  157. package/README.en.md +17 -18
  158. package/README.md +18 -19
  159. package/bin/cli.js +1 -1
  160. package/bin/commands/install.js +194 -22
  161. package/bin/commands/status.js +14 -1
  162. package/bin/commands/uninstall.js +2 -2
  163. package/bin/commands/update.js +52 -0
  164. package/bin/lib/setup-statusline.js +191 -0
  165. package/bin/sinapse-init.js +11 -83
  166. package/bin/utils/framework-guard.js +17 -4
  167. package/bin/utils/secret-scanner-core.js +109 -7
  168. package/bin/utils/staged-sql-guard.js +204 -0
  169. package/bin/utils/validate-publish.js +63 -0
  170. package/docs/agent-reference-guide.md +5 -7
  171. package/docs/framework/agent-prefix-convention.md +58 -0
  172. package/docs/framework/architecture-overview.md +4 -4
  173. package/docs/framework/collaboration-activation.md +45 -0
  174. package/docs/framework/guiding-principles.md +9 -9
  175. package/docs/getting-started.md +1 -1
  176. package/docs/guides/agent-reference.md +1 -1
  177. package/docs/guides/codex-config.md +4 -5
  178. package/docs/pt/architecture/sub-orqx-pattern.md +20 -18
  179. package/docs/security/overview.md +1 -1
  180. package/package.json +16 -12
  181. package/packages/installer/src/index.js +26 -0
  182. package/packages/installer/src/installer/git-hooks-installer.js +211 -47
  183. package/packages/installer/src/installer/sinapse-ai-installer.js +71 -0
  184. package/packages/installer/src/wizard/feedback.js +1 -1
  185. package/packages/installer/src/wizard/ide-config-generator.js +26 -26
  186. package/packages/installer/src/wizard/index.js +53 -4
  187. package/packages/sinapse-install/bin/edmcp.js +0 -0
  188. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  189. package/scripts/audit-tasks.cjs +112 -91
  190. package/scripts/check-markdown-links.py +352 -352
  191. package/scripts/prepare-hooks.js +58 -0
  192. package/scripts/regenerate-orqx-stubs.ps1 +2 -3
  193. package/scripts/sync-counts.js +10 -2
  194. package/scripts/sync-squad-yaml-components.js +108 -6
  195. package/scripts/validate-agents-md.js +128 -0
  196. package/scripts/validate-all.js +1 -0
  197. package/scripts/validate-squad-orqx.js +19 -9
  198. package/sinapse/agents/sinapse-orqx.md +16 -26
  199. package/sinapse/agents/snps-orqx.md +15 -25
  200. package/sinapse/knowledge-base/routing-catalog.md +1 -1
  201. package/sinapse/tasks/diagnose-and-route.md +1 -1
  202. package/sinapse/tasks/squad-status-report.md +1 -1
  203. package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
  204. package/squads/claude-code-mastery/agents/hooks-architect.md +60 -68
  205. package/squads/claude-code-mastery/knowledge-base/swarm-orchestration-patterns.md +1 -1
  206. package/squads/claude-code-mastery/squad.yaml +8 -0
  207. package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
  208. package/squads/claude-code-mastery/workflows/optimization-cycle.yaml +4 -4
  209. package/squads/claude-code-mastery/workflows/project-setup-cycle.yaml +4 -4
  210. package/squads/squad-animations/README.md +1 -1
  211. package/squads/squad-animations/squad.yaml +1 -1
  212. package/squads/squad-brand/squad.yaml +1 -1
  213. package/squads/squad-cloning/README.md +1 -1
  214. package/squads/squad-cloning/squad.yaml +1 -1
  215. package/squads/squad-commercial/README.md +1 -1
  216. package/squads/squad-commercial/squad.yaml +2 -3
  217. package/squads/squad-content/README.md +1 -1
  218. package/squads/squad-content/squad.yaml +1 -1
  219. package/squads/squad-copy/README.md +1 -1
  220. package/squads/squad-copy/squad.yaml +2 -3
  221. package/squads/squad-council/README.md +1 -1
  222. package/squads/squad-courses/README.md +1 -1
  223. package/squads/squad-courses/squad.yaml +1 -1
  224. package/squads/squad-cybersecurity/README.md +1 -1
  225. package/squads/squad-cybersecurity/squad.yaml +2 -3
  226. package/squads/squad-design/README.md +1 -1
  227. package/squads/{squad-artdir → squad-design}/agents/cro-persuasion.md +1 -1
  228. package/squads/{squad-artdir → squad-design}/agents/platform-aesthetic-director.md +2 -2
  229. package/squads/{squad-artdir → squad-design}/agents/premium-packaging-strategist.md +2 -2
  230. package/squads/{squad-artdir → squad-design}/agents/product-surface-director.md +3 -3
  231. package/squads/squad-design/squad.yaml +6 -3
  232. package/squads/squad-finance/README.md +1 -1
  233. package/squads/squad-finance/squad.yaml +7 -1
  234. package/squads/squad-growth/README.md +1 -1
  235. package/squads/squad-growth/squad.yaml +1 -1
  236. package/squads/squad-paidmedia/README.md +1 -1
  237. package/squads/squad-paidmedia/squad.yaml +2 -3
  238. package/squads/squad-product/README.md +1 -1
  239. package/squads/squad-product/squad.yaml +1 -1
  240. package/squads/squad-research/README.md +1 -1
  241. package/squads/squad-research/squad.yaml +2 -3
  242. package/squads/squad-storytelling/README.md +1 -1
  243. package/squads/squad-storytelling/squad.yaml +2 -3
  244. package/.codex/agents/brad-frost.md +0 -46
  245. package/.codex/agents/claude-orqx.md +0 -72
  246. package/.codex/agents/copy-chief.md +0 -162
  247. package/.codex/agents/cyber-chief.md +0 -169
  248. package/.codex/agents/dan-mall.md +0 -43
  249. package/.codex/agents/data-chief.md +0 -198
  250. package/.codex/agents/dave-malouf.md +0 -43
  251. package/.codex/agents/db-sage.md +0 -152
  252. package/.codex/agents/design-chief.md +0 -226
  253. package/.codex/agents/dev.md +0 -102
  254. package/.codex/agents/legal-chief.md +0 -199
  255. package/.codex/agents/nano-banana-generator.md +0 -42
  256. package/.codex/agents/pm.md +0 -81
  257. package/.codex/agents/po.md +0 -85
  258. package/.codex/agents/qa.md +0 -98
  259. package/.codex/agents/sm.md +0 -77
  260. package/.codex/agents/squad-chief.md +0 -1553
  261. package/.codex/agents/squad.md +0 -66
  262. package/.codex/agents/story-chief.md +0 -180
  263. package/.codex/agents/tools-orqx.md +0 -219
  264. package/.codex/agents/traffic-masters-chief.md +0 -211
  265. package/.sinapse-ai/core/memory/__tests__/active-modules.verify.js +0 -265
  266. package/.sinapse-ai/core/permissions/__tests__/permission-mode.test.js +0 -293
  267. package/.sinapse-ai/data/registry-update-log.jsonl +0 -158
  268. package/.sinapse-ai/infrastructure/scripts/ide-sync/gemini-commands.js +0 -298
  269. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/antigravity.js +0 -121
  270. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/cursor.js +0 -119
  271. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot.js +0 -191
  272. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/kimi.js +0 -448
  273. package/.sinapse-ai/infrastructure/tests/project-status-loader.test.js +0 -569
  274. package/.sinapse-ai/infrastructure/tests/regression-suite-v2.md +0 -622
  275. package/.sinapse-ai/infrastructure/tests/validate-module.js +0 -98
  276. package/.sinapse-ai/infrastructure/tests/worktree-manager.test.js +0 -620
  277. package/.sinapse-ai/monitor/hooks/lib/__init__.py +0 -2
  278. package/.sinapse-ai/monitor/hooks/lib/enrich.py +0 -59
  279. package/.sinapse-ai/monitor/hooks/lib/send_event.py +0 -48
  280. package/.sinapse-ai/monitor/hooks/notification.py +0 -30
  281. package/.sinapse-ai/monitor/hooks/post_tool_use.py +0 -46
  282. package/.sinapse-ai/monitor/hooks/pre_compact.py +0 -30
  283. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +0 -41
  284. package/.sinapse-ai/monitor/hooks/stop.py +0 -30
  285. package/.sinapse-ai/monitor/hooks/subagent_stop.py +0 -30
  286. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +0 -39
  287. package/.sinapse-ai/product/templates/statusline/track-agent.sh +0 -69
  288. package/.sinapse-ai/workflow-intelligence/__tests__/confidence-scorer.test.js +0 -335
  289. package/.sinapse-ai/workflow-intelligence/__tests__/integration.test.js +0 -340
  290. package/.sinapse-ai/workflow-intelligence/__tests__/suggestion-engine.test.js +0 -438
  291. package/.sinapse-ai/workflow-intelligence/__tests__/wave-analyzer.test.js +0 -448
  292. package/.sinapse-ai/workflow-intelligence/__tests__/workflow-registry.test.js +0 -303
  293. package/bin/sinapse-graph.js +0 -19
  294. package/docs/codex-integration-process.md +0 -22
  295. package/docs/codex-parity-program.md +0 -27
  296. package/packages/installer/src/__tests__/performance-benchmark.js +0 -383
  297. package/packages/installer/tests/integration/environment-configuration.test.js +0 -332
  298. package/packages/installer/tests/integration/wizard-detection.test.js +0 -352
  299. package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +0 -383
  300. package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +0 -193
  301. package/packages/installer/tests/unit/config-validator.test.js +0 -315
  302. package/packages/installer/tests/unit/detection/detect-project-type.test.js +0 -539
  303. package/packages/installer/tests/unit/doctor/doctor-checks.test.js +0 -636
  304. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +0 -192
  305. package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +0 -186
  306. package/packages/installer/tests/unit/env-template.test.js +0 -187
  307. package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +0 -310
  308. package/packages/installer/tests/unit/git-hooks-installer.test.js +0 -262
  309. package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +0 -231
  310. package/packages/installer/tests/unit/merger/env-merger.test.js +0 -191
  311. package/packages/installer/tests/unit/merger/markdown-merger.test.js +0 -262
  312. package/packages/installer/tests/unit/merger/strategies.test.js +0 -154
  313. package/packages/installer/tests/unit/merger/yaml-merger.test.js +0 -328
  314. package/packages/sinapse-install/tests/unit/chrome-brain.smoke.test.js +0 -66
  315. package/scripts/install-monitor-hooks.sh +0 -82
  316. package/squads/squad-artdir/README.md +0 -90
  317. package/squads/squad-artdir/agents/accessibility-guardian.md +0 -184
  318. package/squads/squad-artdir/agents/artdir-orqx.md +0 -222
  319. package/squads/squad-artdir/agents/color-psychologist.md +0 -166
  320. package/squads/squad-artdir/agents/design-system-architect.md +0 -100
  321. package/squads/squad-artdir/agents/ia-architect.md +0 -169
  322. package/squads/squad-artdir/agents/interaction-designer.md +0 -162
  323. package/squads/squad-artdir/agents/layout-engineer.md +0 -163
  324. package/squads/squad-artdir/agents/motion-architect.md +0 -185
  325. package/squads/squad-artdir/agents/type-systemist.md +0 -138
  326. package/squads/squad-artdir/agents/visual-strategist.md +0 -127
  327. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +0 -172
  328. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +0 -289
  329. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +0 -457
  330. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +0 -247
  331. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +0 -133
  332. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +0 -229
  333. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +0 -242
  334. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +0 -289
  335. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +0 -221
  336. package/squads/squad-artdir/package.json +0 -20
  337. package/squads/squad-artdir/squad.yaml +0 -299
  338. package/squads/squad-artdir/tasks/audit-conversion.md +0 -97
  339. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +0 -55
  340. package/squads/squad-artdir/tasks/consult-saas-canon.md +0 -54
  341. package/squads/squad-artdir/tasks/create-art-direction-brief.md +0 -110
  342. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +0 -61
  343. package/squads/squad-artdir/tasks/create-wireflow.md +0 -84
  344. package/squads/squad-artdir/tasks/design-color-system.md +0 -81
  345. package/squads/squad-artdir/tasks/design-product-surface.md +0 -60
  346. package/squads/squad-artdir/tasks/design-token-system.md +0 -58
  347. package/squads/squad-artdir/tasks/diagnose-visual-language.md +0 -92
  348. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +0 -65
  349. package/squads/squad-artdir/tasks/specify-motion-system.md +0 -84
  350. package/squads/squad-artdir/tasks/validate-against-pillars.md +0 -143
  351. package/squads/squad-artdir/templates/art-direction-brief-template.md +0 -215
  352. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +0 -142
  353. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +0 -179
  354. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +0 -338
  355. package/squads/squad-commercial/agents/legal-chief.md +0 -199
  356. package/squads/squad-copy/agents/copy-chief.md +0 -162
  357. package/squads/squad-cybersecurity/agents/cyber-chief.md +0 -169
  358. package/squads/squad-design/agents/design-chief.md +0 -226
  359. package/squads/squad-paidmedia/agents/traffic-masters-chief.md +0 -211
  360. package/squads/squad-research/agents/data-chief.md +0 -198
  361. package/squads/squad-storytelling/agents/story-chief.md +0 -180
@@ -1,383 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
- const os = require('os');
6
-
7
- const {
8
- copySkillFiles,
9
- copyExtraCommandFiles,
10
- createClaudeSettingsLocal,
11
- HOOK_EVENT_MAP,
12
- DEFAULT_HOOK_CONFIG,
13
- } = require('../../../../../packages/installer/src/wizard/ide-config-generator');
14
-
15
- function createTempDir() {
16
- return fs.mkdtempSync(path.join(os.tmpdir(), 'artifact-copy-'));
17
- }
18
-
19
- function cleanup(dir) {
20
- fs.rmSync(dir, { recursive: true, force: true });
21
- }
22
-
23
- describe('artifact-copy-pipeline (Story INS-4.3)', () => {
24
- describe('copySkillFiles', () => {
25
- test('copies skill directories from source to target via real function', async () => {
26
- const sourceRoot = createTempDir();
27
- const targetRoot = createTempDir();
28
-
29
- try {
30
- // Create source skills
31
- const skillsDir = path.join(sourceRoot, '.claude', 'skills');
32
- for (const skill of ['skill-a', 'skill-b', 'skill-c']) {
33
- const dir = path.join(skillsDir, skill);
34
- fs.mkdirSync(dir, { recursive: true });
35
- fs.writeFileSync(path.join(dir, 'SKILL.md'), `# ${skill}`, 'utf8');
36
- }
37
-
38
- // Call the REAL exported function with _sourceRoot override
39
- const result = await copySkillFiles(targetRoot, sourceRoot);
40
-
41
- expect(result.count).toBe(3);
42
- expect(result.skipped).toBe(false);
43
-
44
- // Verify files actually copied to target
45
- const targetSkills = path.join(targetRoot, '.claude', 'skills');
46
- const copied = fs.readdirSync(targetSkills);
47
- expect(copied).toContain('skill-a');
48
- expect(copied).toContain('skill-b');
49
- expect(copied).toContain('skill-c');
50
- expect(copied.length).toBe(3);
51
-
52
- // Verify SKILL.md content preserved
53
- const skillMd = fs.readFileSync(path.join(targetSkills, 'skill-a', 'SKILL.md'), 'utf8');
54
- expect(skillMd).toBe('# skill-a');
55
- } finally {
56
- cleanup(sourceRoot);
57
- cleanup(targetRoot);
58
- }
59
- });
60
-
61
- test('returns skipped when source does not exist', async () => {
62
- const targetRoot = createTempDir();
63
- const fakeSourceRoot = path.join(os.tmpdir(), 'nonexistent-source-' + Date.now());
64
-
65
- try {
66
- // Call the REAL function with a non-existent source
67
- const result = await copySkillFiles(targetRoot, fakeSourceRoot);
68
-
69
- expect(result.skipped).toBe(true);
70
- expect(result.count).toBe(0);
71
- } finally {
72
- cleanup(targetRoot);
73
- }
74
- });
75
-
76
- test('copy is idempotent — re-copy overwrites without corruption', async () => {
77
- const sourceRoot = createTempDir();
78
- const targetRoot = createTempDir();
79
-
80
- try {
81
- const skillsDir = path.join(sourceRoot, '.claude', 'skills', 'test-skill');
82
- fs.mkdirSync(skillsDir, { recursive: true });
83
- fs.writeFileSync(path.join(skillsDir, 'SKILL.md'), '# v1', 'utf8');
84
-
85
- // First copy
86
- await copySkillFiles(targetRoot, sourceRoot);
87
-
88
- // Update source to v2
89
- fs.writeFileSync(path.join(skillsDir, 'SKILL.md'), '# v2', 'utf8');
90
-
91
- // Second copy (idempotent overwrite)
92
- const result = await copySkillFiles(targetRoot, sourceRoot);
93
-
94
- expect(result.count).toBe(1);
95
- const content = fs.readFileSync(
96
- path.join(targetRoot, '.claude', 'skills', 'test-skill', 'SKILL.md'),
97
- 'utf8'
98
- );
99
- expect(content).toBe('# v2');
100
- } finally {
101
- cleanup(sourceRoot);
102
- cleanup(targetRoot);
103
- }
104
- });
105
- });
106
-
107
- describe('copyExtraCommandFiles', () => {
108
- test('copies .md files recursively excluding SINAPSE/agents/ via real function', async () => {
109
- const sourceRoot = createTempDir();
110
- const targetRoot = createTempDir();
111
-
112
- try {
113
- const cmdDir = path.join(sourceRoot, '.claude', 'commands');
114
-
115
- // Create greet.md (root level)
116
- fs.mkdirSync(cmdDir, { recursive: true });
117
- fs.writeFileSync(path.join(cmdDir, 'greet.md'), '# Greet', 'utf8');
118
-
119
- // Create synapse/manager.md
120
- const synapseDir = path.join(cmdDir, 'synapse');
121
- fs.mkdirSync(synapseDir, { recursive: true });
122
- fs.writeFileSync(path.join(synapseDir, 'manager.md'), '# Manager', 'utf8');
123
-
124
- // Create synapse/tasks/add-rule.md
125
- const tasksDir = path.join(synapseDir, 'tasks');
126
- fs.mkdirSync(tasksDir, { recursive: true });
127
- fs.writeFileSync(path.join(tasksDir, 'add-rule.md'), '# Add Rule', 'utf8');
128
-
129
- // Create SINAPSE/agents/developer.md (should be EXCLUDED)
130
- const agentsDir = path.join(cmdDir, 'SINAPSE', 'agents');
131
- fs.mkdirSync(agentsDir, { recursive: true });
132
- fs.writeFileSync(path.join(agentsDir, 'dev.md'), '# Dev Agent', 'utf8');
133
-
134
- // Create SINAPSE/stories/story.md (should be EXCLUDED — project-specific)
135
- const storiesDir = path.join(cmdDir, 'SINAPSE', 'stories');
136
- fs.mkdirSync(storiesDir, { recursive: true });
137
- fs.writeFileSync(path.join(storiesDir, 'story.md'), '# Story', 'utf8');
138
-
139
- // Create squad directory (should be EXCLUDED — private)
140
- const squadDir = path.join(cmdDir, 'cohort-squad');
141
- fs.mkdirSync(squadDir, { recursive: true });
142
- fs.writeFileSync(path.join(squadDir, 'manager.md'), '# Squad', 'utf8');
143
-
144
- // Call the REAL exported function with _sourceRoot override
145
- const result = await copyExtraCommandFiles(targetRoot, sourceRoot);
146
-
147
- expect(result.count).toBe(3); // greet.md, manager.md, add-rule.md
148
- expect(result.skipped).toBe(false);
149
-
150
- // Verify distributable entries copied
151
- const targetCmd = path.join(targetRoot, '.claude', 'commands');
152
- expect(fs.existsSync(path.join(targetCmd, 'greet.md'))).toBe(true);
153
- expect(fs.existsSync(path.join(targetCmd, 'synapse', 'manager.md'))).toBe(true);
154
- expect(fs.existsSync(path.join(targetCmd, 'synapse', 'tasks', 'add-rule.md'))).toBe(true);
155
-
156
- // Verify SINAPSE/agents/ was excluded (handled by copyAgentFiles)
157
- expect(fs.existsSync(path.join(targetCmd, 'SINAPSE', 'agents', 'dev.md'))).toBe(false);
158
-
159
- // Verify SINAPSE/stories/ was excluded (project-specific)
160
- expect(fs.existsSync(path.join(targetCmd, 'SINAPSE', 'stories', 'story.md'))).toBe(false);
161
-
162
- // Verify squad directories not copied (private)
163
- expect(fs.existsSync(path.join(targetCmd, 'cohort-squad'))).toBe(false);
164
- } finally {
165
- cleanup(sourceRoot);
166
- cleanup(targetRoot);
167
- }
168
- });
169
- });
170
-
171
- describe('HOOK_EVENT_MAP (Story MIS-3.1)', () => {
172
- test('maps synapse-engine.cjs to UserPromptSubmit', () => {
173
- const config = HOOK_EVENT_MAP['synapse-engine.cjs'];
174
- expect(config).toBeDefined();
175
- expect(config.event).toBe('UserPromptSubmit');
176
- expect(config.matcher).toBeNull();
177
- expect(config.timeout).toBe(10);
178
- });
179
-
180
- test('maps code-intel-pretool.cjs to PreToolUse with Write|Edit matcher', () => {
181
- const config = HOOK_EVENT_MAP['code-intel-pretool.cjs'];
182
- expect(config).toBeDefined();
183
- expect(config.event).toBe('PreToolUse');
184
- expect(config.matcher).toBe('Write|Edit');
185
- expect(config.timeout).toBe(10);
186
- });
187
-
188
- test('maps precompact-session-digest.cjs to PreCompact', () => {
189
- const config = HOOK_EVENT_MAP['precompact-session-digest.cjs'];
190
- expect(config).toBeDefined();
191
- expect(config.event).toBe('PreCompact');
192
- expect(config.matcher).toBeNull();
193
- expect(config.timeout).toBe(10);
194
- });
195
-
196
- test('covers all known hooks', () => {
197
- const keys = Object.keys(HOOK_EVENT_MAP);
198
- expect(keys).toHaveLength(11);
199
- expect(keys).toContain('synapse-engine.cjs');
200
- expect(keys).toContain('code-intel-pretool.cjs');
201
- expect(keys).toContain('precompact-session-digest.cjs');
202
- expect(keys).toContain('enforce-architecture-first.cjs');
203
- expect(keys).toContain('enforce-story-gate.cjs');
204
- expect(keys).toContain('enforce-framework-boundary.cjs');
205
- expect(keys).toContain('write-path-validation.cjs');
206
- expect(keys).toContain('enforce-delegation.cjs');
207
- expect(keys).toContain('secret-scanning.cjs');
208
- // Telemetry observers added in Onda 4.3 (PostToolUse + Stop, fail-open)
209
- expect(keys).toContain('telemetry-post-tool.cjs');
210
- expect(keys).toContain('telemetry-stop.cjs');
211
- });
212
-
213
- test('DEFAULT_HOOK_CONFIG falls back to UserPromptSubmit', () => {
214
- expect(DEFAULT_HOOK_CONFIG.event).toBe('UserPromptSubmit');
215
- expect(DEFAULT_HOOK_CONFIG.matcher).toBeNull();
216
- expect(DEFAULT_HOOK_CONFIG.timeout).toBe(10);
217
- });
218
- });
219
-
220
- describe('createClaudeSettingsLocal — hook event routing (Story MIS-3.1)', () => {
221
- test('registers hooks under correct events using HOOK_EVENT_MAP', async () => {
222
- const tmpDir = createTempDir();
223
-
224
- try {
225
- const hooksDir = path.join(tmpDir, '.claude', 'hooks');
226
- fs.mkdirSync(hooksDir, { recursive: true });
227
- fs.writeFileSync(path.join(hooksDir, 'synapse-engine.cjs'), '// hook 1', 'utf8');
228
- fs.writeFileSync(path.join(hooksDir, 'code-intel-pretool.cjs'), '// hook 2', 'utf8');
229
- fs.writeFileSync(path.join(hooksDir, 'precompact-session-digest.cjs'), '// hook 3', 'utf8');
230
- fs.writeFileSync(path.join(hooksDir, 'README.md'), '# Hooks', 'utf8');
231
-
232
- const result = await createClaudeSettingsLocal(tmpDir);
233
- expect(result).not.toBeNull();
234
-
235
- const settingsContent = fs.readFileSync(path.join(tmpDir, '.claude', 'settings.local.json'), 'utf8');
236
- const settings = JSON.parse(settingsContent);
237
-
238
- // synapse-engine → UserPromptSubmit
239
- expect(settings.hooks.UserPromptSubmit).toBeDefined();
240
- expect(settings.hooks.UserPromptSubmit.length).toBe(1);
241
- const upsCommands = settings.hooks.UserPromptSubmit.flatMap(e => e.hooks.map(h => h.command));
242
- expect(upsCommands.some(c => c.includes('synapse-engine'))).toBe(true);
243
-
244
- // code-intel-pretool → PreToolUse with matcher
245
- expect(settings.hooks.PreToolUse).toBeDefined();
246
- expect(settings.hooks.PreToolUse.length).toBe(1);
247
- expect(settings.hooks.PreToolUse[0].matcher).toBe('Write|Edit');
248
- const ptuCommands = settings.hooks.PreToolUse.flatMap(e => e.hooks.map(h => h.command));
249
- expect(ptuCommands.some(c => c.includes('code-intel-pretool'))).toBe(true);
250
-
251
- // precompact-session-digest → PreCompact
252
- expect(settings.hooks.PreCompact).toBeDefined();
253
- expect(settings.hooks.PreCompact.length).toBe(1);
254
- const pcCommands = settings.hooks.PreCompact.flatMap(e => e.hooks.map(h => h.command));
255
- expect(pcCommands.some(c => c.includes('precompact-session-digest'))).toBe(true);
256
-
257
- // PreCompact should NOT have a matcher
258
- expect(settings.hooks.PreCompact[0].matcher).toBeUndefined();
259
- } finally {
260
- cleanup(tmpDir);
261
- }
262
- });
263
-
264
- test('unknown hooks fall back to UserPromptSubmit (backwards compatible)', async () => {
265
- const tmpDir = createTempDir();
266
-
267
- try {
268
- const hooksDir = path.join(tmpDir, '.claude', 'hooks');
269
- fs.mkdirSync(hooksDir, { recursive: true });
270
- fs.writeFileSync(path.join(hooksDir, 'custom-future-hook.cjs'), '// future hook', 'utf8');
271
-
272
- await createClaudeSettingsLocal(tmpDir);
273
-
274
- const settingsContent = fs.readFileSync(path.join(tmpDir, '.claude', 'settings.local.json'), 'utf8');
275
- const settings = JSON.parse(settingsContent);
276
-
277
- // Unknown hook should fall back to UserPromptSubmit
278
- expect(settings.hooks.UserPromptSubmit).toBeDefined();
279
- expect(settings.hooks.UserPromptSubmit.length).toBe(1);
280
- const commands = settings.hooks.UserPromptSubmit.flatMap(e => e.hooks.map(h => h.command));
281
- expect(commands.some(c => c.includes('custom-future-hook'))).toBe(true);
282
- } finally {
283
- cleanup(tmpDir);
284
- }
285
- });
286
-
287
- test('returns null when no hooks directory exists', async () => {
288
- const tmpDir = createTempDir();
289
-
290
- try {
291
- fs.mkdirSync(path.join(tmpDir, '.claude'), { recursive: true });
292
- const result = await createClaudeSettingsLocal(tmpDir);
293
- expect(result).toBeNull();
294
- } finally {
295
- cleanup(tmpDir);
296
- }
297
- });
298
-
299
- test('does not duplicate hooks on re-run (idempotent)', async () => {
300
- const tmpDir = createTempDir();
301
-
302
- try {
303
- const hooksDir = path.join(tmpDir, '.claude', 'hooks');
304
- fs.mkdirSync(hooksDir, { recursive: true });
305
- fs.writeFileSync(path.join(hooksDir, 'synapse-engine.cjs'), '// hook', 'utf8');
306
- fs.writeFileSync(path.join(hooksDir, 'precompact-session-digest.cjs'), '// hook', 'utf8');
307
-
308
- // Run twice
309
- await createClaudeSettingsLocal(tmpDir);
310
- await createClaudeSettingsLocal(tmpDir);
311
-
312
- const settingsContent = fs.readFileSync(path.join(tmpDir, '.claude', 'settings.local.json'), 'utf8');
313
- const settings = JSON.parse(settingsContent);
314
-
315
- // Should still have only 1 entry per event
316
- expect(settings.hooks.UserPromptSubmit.length).toBe(1);
317
- expect(settings.hooks.PreCompact.length).toBe(1);
318
- } finally {
319
- cleanup(tmpDir);
320
- }
321
- });
322
-
323
- test('preserves existing settings when merging hooks', async () => {
324
- const tmpDir = createTempDir();
325
-
326
- try {
327
- const hooksDir = path.join(tmpDir, '.claude', 'hooks');
328
- fs.mkdirSync(hooksDir, { recursive: true });
329
- fs.writeFileSync(path.join(hooksDir, 'synapse-engine.cjs'), '// hook', 'utf8');
330
-
331
- // Create existing settings
332
- const settingsPath = path.join(tmpDir, '.claude', 'settings.local.json');
333
- fs.writeFileSync(settingsPath, JSON.stringify({ customKey: 'preserved' }, null, 2), 'utf8');
334
-
335
- await createClaudeSettingsLocal(tmpDir);
336
-
337
- const settingsContent = fs.readFileSync(settingsPath, 'utf8');
338
- const settings = JSON.parse(settingsContent);
339
-
340
- expect(settings.customKey).toBe('preserved');
341
- expect(settings.hooks.UserPromptSubmit.length).toBe(1);
342
- } finally {
343
- cleanup(tmpDir);
344
- }
345
- });
346
-
347
- test('synapse-engine regression: still registered as UserPromptSubmit after refactor', async () => {
348
- const tmpDir = createTempDir();
349
-
350
- try {
351
- const hooksDir = path.join(tmpDir, '.claude', 'hooks');
352
- fs.mkdirSync(hooksDir, { recursive: true });
353
- fs.writeFileSync(path.join(hooksDir, 'synapse-engine.cjs'), '// hook', 'utf8');
354
-
355
- await createClaudeSettingsLocal(tmpDir);
356
-
357
- const settingsContent = fs.readFileSync(path.join(tmpDir, '.claude', 'settings.local.json'), 'utf8');
358
- const settings = JSON.parse(settingsContent);
359
-
360
- expect(settings.hooks.UserPromptSubmit).toBeDefined();
361
- expect(settings.hooks.UserPromptSubmit.length).toBe(1);
362
-
363
- const commands = settings.hooks.UserPromptSubmit.flatMap(e => e.hooks.map(h => h.command));
364
- expect(commands.some(c => c.includes('synapse-engine'))).toBe(true);
365
-
366
- // No PreCompact or PreToolUse should exist for synapse
367
- expect(settings.hooks.PreCompact).toBeUndefined();
368
- expect(settings.hooks.PreToolUse).toBeUndefined();
369
- } finally {
370
- cleanup(tmpDir);
371
- }
372
- });
373
- });
374
-
375
- describe('generator failure graceful degradation', () => {
376
- test('generate-settings-json throws on missing config — install should catch', () => {
377
- const { generate } = require('../../../../../.sinapse-ai/infrastructure/scripts/generate-settings-json');
378
-
379
- // Calling generate on a non-existent path should throw
380
- expect(() => generate('/nonexistent/path')).toThrow();
381
- });
382
- });
383
- });
@@ -1,193 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
- const { MarkdownMerger } = require('../../../src/merger/strategies/markdown-merger.js');
6
- const {
7
- parseMarkdownSections,
8
- hasSinapseMarkers,
9
- } = require('../../../src/merger/parsers/markdown-section-parser.js');
10
-
11
- const TEMPLATE_PATH = path.join(
12
- __dirname, '..', '..', '..', '..', '..', '.sinapse-ai',
13
- 'product', 'templates', 'ide-rules', 'claude-rules.md'
14
- );
15
-
16
- describe('CLAUDE.md Template v5 (Story INS-4.4)', () => {
17
- let templateContent;
18
-
19
- beforeAll(() => {
20
- templateContent = fs.readFileSync(TEMPLATE_PATH, 'utf8');
21
- });
22
-
23
- describe('template has 4 new sections with SINAPSE-MANAGED markers', () => {
24
- test('template file exists and has SINAPSE markers', () => {
25
- expect(templateContent).toBeTruthy();
26
- expect(hasSinapseMarkers(templateContent)).toBe(true);
27
- });
28
-
29
- test('contains framework-boundary section', () => {
30
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: framework-boundary -->');
31
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-END: framework-boundary -->');
32
- expect(templateContent).toContain('## Framework vs Project Boundary');
33
- });
34
-
35
- test('contains rules-system section', () => {
36
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: rules-system -->');
37
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-END: rules-system -->');
38
- expect(templateContent).toContain('## Rules System');
39
- });
40
-
41
- test('contains code-intelligence section', () => {
42
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: code-intelligence -->');
43
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-END: code-intelligence -->');
44
- expect(templateContent).toContain('## Code Intelligence');
45
- });
46
-
47
- test('contains graph-dashboard section', () => {
48
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: graph-dashboard -->');
49
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-END: graph-dashboard -->');
50
- expect(templateContent).toContain('## Graph Dashboard');
51
- });
52
-
53
- test('template has exactly 11 SINAPSE-MANAGED sections total', () => {
54
- const startMatches = templateContent.match(/<!-- SINAPSE-MANAGED-START:/g);
55
- const endMatches = templateContent.match(/<!-- SINAPSE-MANAGED-END:/g);
56
- expect(startMatches.length).toBe(11);
57
- expect(endMatches.length).toBe(11);
58
- });
59
- });
60
-
61
- describe('section content quality', () => {
62
- test('framework-boundary has L1-L4 table', () => {
63
- expect(templateContent).toContain('**L1** Framework Core');
64
- expect(templateContent).toContain('**L2** Framework Templates');
65
- expect(templateContent).toContain('**L3** Project Config');
66
- expect(templateContent).toContain('**L4** Project Runtime');
67
- expect(templateContent).toContain('frameworkProtection');
68
- });
69
-
70
- test('rules-system lists all 8 rule files', () => {
71
- const ruleFiles = [
72
- 'agent-authority.md',
73
- 'agent-handoff.md',
74
- 'agent-memory-imports.md',
75
- 'coderabbit-integration.md',
76
- 'ids-principles.md',
77
- 'mcp-usage.md',
78
- 'story-lifecycle.md',
79
- 'workflow-execution.md',
80
- ];
81
- for (const file of ruleFiles) {
82
- expect(templateContent).toContain(file);
83
- }
84
- });
85
-
86
- test('code-intelligence has provider status table', () => {
87
- expect(templateContent).toContain('**Configured**');
88
- expect(templateContent).toContain('**Fallback**');
89
- expect(templateContent).toContain('**Disabled**');
90
- expect(templateContent).toContain('isCodeIntelAvailable()');
91
- });
92
-
93
- test('graph-dashboard has CLI commands', () => {
94
- expect(templateContent).toContain('sinapse graph --deps');
95
- expect(templateContent).toContain('--format=json');
96
- expect(templateContent).toContain('--format=html');
97
- expect(templateContent).toContain('--watch');
98
- expect(templateContent).toContain('sinapse graph --stats');
99
- });
100
- });
101
-
102
- describe('existing sections preserved', () => {
103
- test('original 5 SINAPSE-MANAGED sections still present', () => {
104
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: core-framework -->');
105
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: agent-system -->');
106
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: framework-structure -->');
107
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: sinapse-patterns -->');
108
- expect(templateContent).toContain('<!-- SINAPSE-MANAGED-START: common-commands -->');
109
- });
110
-
111
- test('non-managed sections still present', () => {
112
- expect(templateContent).toContain('## Development Methodology');
113
- expect(templateContent).toContain('## Workflow Execution');
114
- expect(templateContent).toContain('## Best Practices');
115
- expect(templateContent).toContain('## Debugging');
116
- });
117
- });
118
-
119
- describe('upgrade: new sections added to existing CLAUDE.md', () => {
120
- let merger;
121
-
122
- beforeEach(() => {
123
- merger = new MarkdownMerger();
124
- });
125
-
126
- test('upgrade adds 4 new sections to CLAUDE.md without them', async () => {
127
- const existingClaudeMd = `# SINAPSE
128
-
129
- <!-- SINAPSE-MANAGED-START: core-framework -->
130
- ## Core Framework Understanding
131
- Old core content
132
- <!-- SINAPSE-MANAGED-END: core-framework -->
133
-
134
- ## My Custom Section
135
- User content that must be preserved`;
136
-
137
- const result = await merger.merge(existingClaudeMd, templateContent);
138
-
139
- // New sections added
140
- expect(result.content).toContain('## Framework vs Project Boundary');
141
- expect(result.content).toContain('## Rules System');
142
- expect(result.content).toContain('## Code Intelligence');
143
- expect(result.content).toContain('## Graph Dashboard');
144
-
145
- // User content preserved
146
- expect(result.content).toContain('## My Custom Section');
147
- expect(result.content).toContain('User content that must be preserved');
148
-
149
- // Stats reflect additions
150
- expect(result.stats.added).toBeGreaterThanOrEqual(4);
151
- });
152
-
153
- test('upgrade preserves custom PROJECT-CUSTOMIZED content', async () => {
154
- const existingClaudeMd = `# My Project Rules
155
-
156
- <!-- SINAPSE-MANAGED-START: core-framework -->
157
- ## Core Framework Understanding
158
- Core content
159
- <!-- SINAPSE-MANAGED-END: core-framework -->
160
-
161
- ## Padroes de Codigo
162
- My custom coding standards here
163
-
164
- ## Testes & Quality Gates
165
- My custom testing rules`;
166
-
167
- const result = await merger.merge(existingClaudeMd, templateContent);
168
-
169
- // Custom sections preserved
170
- expect(result.content).toContain('## Padroes de Codigo');
171
- expect(result.content).toContain('My custom coding standards here');
172
- expect(result.content).toContain('## Testes & Quality Gates');
173
- expect(result.content).toContain('My custom testing rules');
174
-
175
- // Managed sections updated
176
- expect(result.content).toContain('<!-- SINAPSE-MANAGED-START: framework-boundary -->');
177
- });
178
- });
179
-
180
- describe('section order in template', () => {
181
- test('4 new sections come after framework-structure and before workflow-execution', () => {
182
- const frameworkStructureEnd = templateContent.indexOf('<!-- SINAPSE-MANAGED-END: framework-structure -->');
183
- const frameworkBoundaryStart = templateContent.indexOf('<!-- SINAPSE-MANAGED-START: framework-boundary -->');
184
- const graphDashboardEnd = templateContent.indexOf('<!-- SINAPSE-MANAGED-END: graph-dashboard -->');
185
- const workflowExecution = templateContent.indexOf('## Workflow Execution');
186
-
187
- expect(frameworkStructureEnd).toBeLessThan(frameworkBoundaryStart);
188
- expect(frameworkBoundaryStart).toBeLessThan(graphDashboardEnd);
189
- expect(graphDashboardEnd).toBeLessThan(workflowExecution);
190
- });
191
- });
192
- });
193
-