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,448 +0,0 @@
1
- /**
2
- * @fileoverview Unit tests for WaveAnalyzer
3
- * @story WIS-4 - Wave Analysis Engine
4
- */
5
-
6
- 'use strict';
7
-
8
- const {
9
- WaveAnalyzer,
10
- CircularDependencyError,
11
- createWaveAnalyzer,
12
- analyzeWaves,
13
- DEFAULT_TASK_DURATIONS,
14
- } = require('../engine/wave-analyzer');
15
-
16
- describe('WaveAnalyzer', () => {
17
- let analyzer;
18
-
19
- beforeEach(() => {
20
- analyzer = new WaveAnalyzer();
21
- });
22
-
23
- describe('constructor', () => {
24
- it('should create instance with default options', () => {
25
- const instance = new WaveAnalyzer();
26
- expect(instance.taskDurations).toEqual(DEFAULT_TASK_DURATIONS);
27
- });
28
-
29
- it('should accept custom task durations', () => {
30
- const customDurations = { 'custom-task': 25 };
31
- const instance = new WaveAnalyzer({ taskDurations: customDurations });
32
- expect(instance.taskDurations['custom-task']).toBe(25);
33
- expect(instance.taskDurations['default']).toBe(DEFAULT_TASK_DURATIONS.default);
34
- });
35
-
36
- it('should accept custom registry', () => {
37
- const mockRegistry = { getWorkflow: jest.fn() };
38
- const instance = new WaveAnalyzer({ registry: mockRegistry });
39
- expect(instance.registry).toBe(mockRegistry);
40
- });
41
- });
42
-
43
- describe('buildDependencyGraph', () => {
44
- it('should build graph from tasks with dependencies', () => {
45
- const tasks = [
46
- { id: 'task-a', dependsOn: [] },
47
- { id: 'task-b', dependsOn: [] },
48
- { id: 'task-c', dependsOn: ['task-a', 'task-b'] },
49
- { id: 'task-d', dependsOn: ['task-c'] },
50
- ];
51
-
52
- const graph = analyzer.buildDependencyGraph(tasks);
53
-
54
- expect(graph.nodes.size).toBe(4);
55
- expect(graph.nodes.has('task-a')).toBe(true);
56
- expect(graph.nodes.has('task-b')).toBe(true);
57
- expect(graph.nodes.has('task-c')).toBe(true);
58
- expect(graph.nodes.has('task-d')).toBe(true);
59
-
60
- // Check edges (a -> c, b -> c, c -> d)
61
- expect(graph.edges.get('task-a').has('task-c')).toBe(true);
62
- expect(graph.edges.get('task-b').has('task-c')).toBe(true);
63
- expect(graph.edges.get('task-c').has('task-d')).toBe(true);
64
-
65
- // Check in-edges
66
- expect(graph.inEdges.get('task-a').size).toBe(0);
67
- expect(graph.inEdges.get('task-b').size).toBe(0);
68
- expect(graph.inEdges.get('task-c').size).toBe(2);
69
- expect(graph.inEdges.get('task-d').size).toBe(1);
70
- });
71
-
72
- it('should handle tasks without dependencies', () => {
73
- const tasks = [{ id: 'task-a' }, { id: 'task-b' }, { id: 'task-c' }];
74
-
75
- const graph = analyzer.buildDependencyGraph(tasks);
76
-
77
- expect(graph.nodes.size).toBe(3);
78
- expect(graph.edges.get('task-a').size).toBe(0);
79
- expect(graph.edges.get('task-b').size).toBe(0);
80
- expect(graph.edges.get('task-c').size).toBe(0);
81
- });
82
-
83
- it('should use task name if id is missing', () => {
84
- const tasks = [{ name: 'task-a' }, { name: 'task-b', dependsOn: ['task-a'] }];
85
-
86
- const graph = analyzer.buildDependencyGraph(tasks);
87
-
88
- expect(graph.nodes.has('task-a')).toBe(true);
89
- expect(graph.nodes.has('task-b')).toBe(true);
90
- expect(graph.edges.get('task-a').has('task-b')).toBe(true);
91
- });
92
-
93
- it('should ignore dependencies to non-existent nodes', () => {
94
- const tasks = [{ id: 'task-a', dependsOn: ['non-existent'] }];
95
-
96
- const graph = analyzer.buildDependencyGraph(tasks);
97
-
98
- expect(graph.nodes.size).toBe(1);
99
- expect(graph.inEdges.get('task-a').size).toBe(0);
100
- });
101
- });
102
-
103
- describe('findCycle', () => {
104
- it('should return null for acyclic graph', () => {
105
- const tasks = [
106
- { id: 'a', dependsOn: [] },
107
- { id: 'b', dependsOn: ['a'] },
108
- { id: 'c', dependsOn: ['b'] },
109
- ];
110
-
111
- const graph = analyzer.buildDependencyGraph(tasks);
112
- const cycle = analyzer.findCycle(graph);
113
-
114
- expect(cycle).toBeNull();
115
- });
116
-
117
- it('should detect simple cycle', () => {
118
- const tasks = [
119
- { id: 'a', dependsOn: ['c'] },
120
- { id: 'b', dependsOn: ['a'] },
121
- { id: 'c', dependsOn: ['b'] },
122
- ];
123
-
124
- const graph = analyzer.buildDependencyGraph(tasks);
125
- const cycle = analyzer.findCycle(graph);
126
-
127
- expect(cycle).not.toBeNull();
128
- expect(cycle.length).toBeGreaterThan(1);
129
- });
130
-
131
- it('should detect self-loop', () => {
132
- const tasks = [{ id: 'a', dependsOn: ['a'] }];
133
-
134
- const graph = analyzer.buildDependencyGraph(tasks);
135
- const cycle = analyzer.findCycle(graph);
136
-
137
- expect(cycle).not.toBeNull();
138
- expect(cycle).toContain('a');
139
- });
140
-
141
- it('should detect cycle in diamond pattern with back-edge', () => {
142
- const tasks = [
143
- { id: 'a', dependsOn: ['d'] }, // Creates cycle: a -> b -> d -> a
144
- { id: 'b', dependsOn: ['a'] },
145
- { id: 'c', dependsOn: ['a'] },
146
- { id: 'd', dependsOn: ['b', 'c'] },
147
- ];
148
-
149
- const graph = analyzer.buildDependencyGraph(tasks);
150
- const cycle = analyzer.findCycle(graph);
151
-
152
- expect(cycle).not.toBeNull();
153
- });
154
- });
155
-
156
- describe('analyzeWaves with customTasks', () => {
157
- it('should group independent tasks into same wave', () => {
158
- const tasks = [
159
- { id: 'a', dependsOn: [], duration: 5 },
160
- { id: 'b', dependsOn: [], duration: 3 },
161
- { id: 'c', dependsOn: [], duration: 4 },
162
- ];
163
-
164
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
165
-
166
- expect(result.waves.length).toBe(1);
167
- expect(result.waves[0].tasks).toEqual(expect.arrayContaining(['a', 'b', 'c']));
168
- expect(result.waves[0].parallel).toBe(true);
169
- });
170
-
171
- it('should create sequential waves for linear dependencies', () => {
172
- const tasks = [
173
- { id: 'a', dependsOn: [], duration: 5 },
174
- { id: 'b', dependsOn: ['a'], duration: 10 },
175
- { id: 'c', dependsOn: ['b'], duration: 3 },
176
- { id: 'd', dependsOn: ['c'], duration: 7 },
177
- ];
178
-
179
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
180
-
181
- expect(result.waves.length).toBe(4);
182
- expect(result.waves[0].tasks).toEqual(['a']);
183
- expect(result.waves[1].tasks).toEqual(['b']);
184
- expect(result.waves[2].tasks).toEqual(['c']);
185
- expect(result.waves[3].tasks).toEqual(['d']);
186
- });
187
-
188
- it('should handle diamond dependency pattern', () => {
189
- const tasks = [
190
- { id: 'a', dependsOn: [], duration: 5 },
191
- { id: 'b', dependsOn: ['a'], duration: 10 },
192
- { id: 'c', dependsOn: ['a'], duration: 8 },
193
- { id: 'd', dependsOn: ['b', 'c'], duration: 5 },
194
- ];
195
-
196
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
197
-
198
- expect(result.waves.length).toBe(3);
199
- expect(result.waves[0].tasks).toEqual(['a']);
200
- expect(result.waves[1].tasks).toEqual(expect.arrayContaining(['b', 'c']));
201
- expect(result.waves[1].parallel).toBe(true);
202
- expect(result.waves[2].tasks).toEqual(['d']);
203
- });
204
-
205
- it('should handle mixed parallel and sequential', () => {
206
- const tasks = [
207
- { id: 'a', dependsOn: [], duration: 5 },
208
- { id: 'b', dependsOn: [], duration: 3 },
209
- { id: 'c', dependsOn: ['a'], duration: 10 },
210
- { id: 'd', dependsOn: ['b'], duration: 8 },
211
- { id: 'e', dependsOn: ['c', 'd'], duration: 5 },
212
- ];
213
-
214
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
215
-
216
- expect(result.waves.length).toBe(3);
217
- expect(result.waves[0].tasks).toEqual(expect.arrayContaining(['a', 'b']));
218
- expect(result.waves[1].tasks).toEqual(expect.arrayContaining(['c', 'd']));
219
- expect(result.waves[2].tasks).toEqual(['e']);
220
- });
221
-
222
- it('should calculate optimization gain', () => {
223
- const tasks = [
224
- { id: 'a', dependsOn: [], duration: 10 },
225
- { id: 'b', dependsOn: [], duration: 10 },
226
- { id: 'c', dependsOn: ['a', 'b'], duration: 10 },
227
- ];
228
-
229
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
230
-
231
- // Sequential: 10 + 10 + 10 = 30min
232
- // Parallel: 10 (wave 1: a,b parallel) + 10 (wave 2: c) = 20min
233
- // Gain: (30 - 20) / 30 = 33%
234
- expect(result.optimizationGain).toBe('33%');
235
- });
236
-
237
- it('should return empty result for empty tasks', () => {
238
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: [] });
239
-
240
- expect(result.totalTasks).toBe(0);
241
- expect(result.waves).toEqual([]);
242
- expect(result.criticalPath).toEqual([]);
243
- });
244
-
245
- it('should handle single task workflow', () => {
246
- const tasks = [{ id: 'a', dependsOn: [], duration: 5 }];
247
-
248
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
249
-
250
- expect(result.totalTasks).toBe(1);
251
- expect(result.waves.length).toBe(1);
252
- expect(result.waves[0].parallel).toBe(false);
253
- });
254
-
255
- it('should throw CircularDependencyError for cycles', () => {
256
- const tasks = [
257
- { id: 'a', dependsOn: ['c'], duration: 5 },
258
- { id: 'b', dependsOn: ['a'], duration: 5 },
259
- { id: 'c', dependsOn: ['b'], duration: 5 },
260
- ];
261
-
262
- expect(() => {
263
- analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
264
- }).toThrow(CircularDependencyError);
265
- });
266
- });
267
-
268
- describe('CircularDependencyError', () => {
269
- it('should contain cycle information', () => {
270
- const cycle = ['a', 'b', 'c', 'a'];
271
- const error = new CircularDependencyError(cycle);
272
-
273
- expect(error.name).toBe('CircularDependencyError');
274
- expect(error.cycle).toEqual(cycle);
275
- expect(error.message).toContain('a → b → c → a');
276
- });
277
-
278
- it('should provide resolution suggestion', () => {
279
- const cycle = ['a', 'b', 'c', 'a'];
280
- const error = new CircularDependencyError(cycle);
281
-
282
- const suggestion = error.getSuggestion();
283
- expect(suggestion).toBeTruthy();
284
- expect(typeof suggestion).toBe('string');
285
- });
286
- });
287
-
288
- describe('critical path calculation', () => {
289
- it('should find longest path in graph', () => {
290
- const tasks = [
291
- { id: 'a', dependsOn: [], duration: 5 },
292
- { id: 'b', dependsOn: ['a'], duration: 20 },
293
- { id: 'c', dependsOn: ['a'], duration: 3 },
294
- { id: 'd', dependsOn: ['b', 'c'], duration: 5 },
295
- ];
296
-
297
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: tasks });
298
-
299
- // Critical path should be a -> b -> d (5 + 20 + 5 = 30)
300
- // Not a -> c -> d (5 + 3 + 5 = 13)
301
- expect(result.criticalPath).toEqual(expect.arrayContaining(['a', 'b', 'd']));
302
- });
303
-
304
- it('should return empty for empty workflow', () => {
305
- const result = analyzer.analyzeWaves('test-workflow', { customTasks: [] });
306
- expect(result.criticalPath).toEqual([]);
307
- });
308
- });
309
-
310
- describe('getCurrentWave', () => {
311
- it('should return current wave context for task', () => {
312
- // Mock the analyzeWaves to return predictable result
313
- const tasks = [
314
- { id: 'a', dependsOn: [], duration: 5 },
315
- { id: 'b', dependsOn: ['a'], duration: 10 },
316
- { id: 'c', dependsOn: ['b'], duration: 5 },
317
- ];
318
-
319
- const context = analyzer.getCurrentWave('test-workflow', 'b');
320
-
321
- // Since we can't easily mock, this tests the error handling path
322
- expect(context.workflowId).toBe('test-workflow');
323
- expect(context.currentTask).toBe('b');
324
- });
325
- });
326
-
327
- describe('formatOutput', () => {
328
- const mockAnalysis = {
329
- workflowId: 'test',
330
- totalTasks: 3,
331
- waves: [
332
- { waveNumber: 1, tasks: ['a', 'b'], parallel: true, estimatedDuration: '5min' },
333
- { waveNumber: 2, tasks: ['c'], parallel: false, estimatedDuration: '10min' },
334
- ],
335
- optimizationGain: '25%',
336
- criticalPath: ['a', 'c'],
337
- metrics: {
338
- sequentialTime: '20min',
339
- parallelTime: '15min',
340
- },
341
- };
342
-
343
- it('should format as JSON when json option is true', () => {
344
- const output = analyzer.formatOutput(mockAnalysis, { json: true });
345
-
346
- expect(() => JSON.parse(output)).not.toThrow();
347
- const parsed = JSON.parse(output);
348
- expect(parsed.workflowId).toBe('test');
349
- });
350
-
351
- it('should include visual representation when visual option is true', () => {
352
- const output = analyzer.formatOutput(mockAnalysis, { visual: true });
353
-
354
- expect(output).toContain('Wave 1');
355
- expect(output).toContain('──');
356
- });
357
-
358
- it('should include optimization metrics', () => {
359
- const output = analyzer.formatOutput(mockAnalysis);
360
-
361
- expect(output).toContain('25%');
362
- expect(output).toContain('Critical Path');
363
- });
364
- });
365
-
366
- describe('performance', () => {
367
- it('should analyze small workflow in <10ms', () => {
368
- const tasks = Array.from({ length: 5 }, (_, i) => ({
369
- id: `task-${i}`,
370
- dependsOn: i > 0 ? [`task-${i - 1}`] : [],
371
- duration: 5,
372
- }));
373
-
374
- const start = Date.now();
375
- const result = analyzer.analyzeWaves('perf-test', { customTasks: tasks });
376
- const elapsed = Date.now() - start;
377
-
378
- expect(elapsed).toBeLessThan(10);
379
- expect(result.metrics.analysisTime).toBeLessThan(10);
380
- });
381
-
382
- it('should analyze medium workflow in <30ms', () => {
383
- const tasks = Array.from({ length: 20 }, (_, i) => ({
384
- id: `task-${i}`,
385
- dependsOn: i > 0 ? [`task-${Math.floor(i / 2)}`] : [],
386
- duration: 5,
387
- }));
388
-
389
- const start = Date.now();
390
- const result = analyzer.analyzeWaves('perf-test', { customTasks: tasks });
391
- const elapsed = Date.now() - start;
392
-
393
- expect(elapsed).toBeLessThan(30);
394
- });
395
-
396
- it('should analyze large workflow in <50ms', () => {
397
- const tasks = Array.from({ length: 50 }, (_, i) => ({
398
- id: `task-${i}`,
399
- dependsOn: i > 0 ? [`task-${Math.max(0, i - 3)}`] : [],
400
- duration: 5,
401
- }));
402
-
403
- const start = Date.now();
404
- const result = analyzer.analyzeWaves('perf-test', { customTasks: tasks });
405
- const elapsed = Date.now() - start;
406
-
407
- expect(elapsed).toBeLessThan(50);
408
- });
409
- });
410
- });
411
-
412
- describe('Factory functions', () => {
413
- describe('createWaveAnalyzer', () => {
414
- it('should create WaveAnalyzer instance', () => {
415
- const instance = createWaveAnalyzer();
416
- expect(instance).toBeInstanceOf(WaveAnalyzer);
417
- });
418
-
419
- it('should pass options to constructor', () => {
420
- const customDurations = { custom: 15 };
421
- const instance = createWaveAnalyzer({ taskDurations: customDurations });
422
- expect(instance.taskDurations.custom).toBe(15);
423
- });
424
- });
425
-
426
- describe('analyzeWaves convenience function', () => {
427
- it('should analyze waves without creating instance manually', () => {
428
- const tasks = [
429
- { id: 'a', dependsOn: [], duration: 5 },
430
- { id: 'b', dependsOn: ['a'], duration: 10 },
431
- ];
432
-
433
- const result = analyzeWaves('test', { customTasks: tasks });
434
-
435
- expect(result.workflowId).toBe('test');
436
- expect(result.waves.length).toBe(2);
437
- });
438
- });
439
- });
440
-
441
- describe('DEFAULT_TASK_DURATIONS', () => {
442
- it('should have expected default durations', () => {
443
- expect(DEFAULT_TASK_DURATIONS.implement).toBe(30);
444
- expect(DEFAULT_TASK_DURATIONS['write-tests']).toBe(10);
445
- expect(DEFAULT_TASK_DURATIONS.default).toBe(10);
446
- });
447
- });
448
-