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
@@ -320,14 +320,13 @@ function llmLabel(selectedLLM) {
320
320
  }
321
321
 
322
322
  /**
323
- * 19 orqx agent definitions to install globally.
323
+ * 18 orqx agent definitions to install globally (17 squad orqx + 1 master).
324
324
  * Each entry maps agent-id to its squad directory name.
325
325
  */
326
326
  const GLOBAL_AGENTS = [
327
327
  { id: 'sinapse-orqx', squad: 'sinapse' },
328
328
  { id: 'animations-orqx', squad: 'squad-animations' },
329
329
  { id: 'brand-orqx', squad: 'squad-brand' },
330
- { id: 'claude-orqx', squad: 'squad-claude' },
331
330
  { id: 'cloning-orqx', squad: 'squad-cloning' },
332
331
  { id: 'commercial-orqx', squad: 'squad-commercial' },
333
332
  { id: 'content-orqx', squad: 'squad-content' },
@@ -342,7 +341,7 @@ const GLOBAL_AGENTS = [
342
341
  { id: 'product-orqx', squad: 'squad-product' },
343
342
  { id: 'research-orqx', squad: 'squad-research' },
344
343
  { id: 'storytelling-orqx', squad: 'squad-storytelling' },
345
- { id: 'swarm-orqx', squad: 'squad-claude' },
344
+ { id: 'swarm-orqx', squad: 'claude-code-mastery' },
346
345
  ];
347
346
 
348
347
  /**
@@ -381,7 +380,7 @@ function buildAgentTemplate(agentId, squadName, homedir) {
381
380
  }
382
381
 
383
382
  /**
384
- * Install 19 global orqx agent definitions to ~/.claude/agents/
383
+ * Install 18 global orqx agent definitions to ~/.claude/agents/
385
384
  * Each file is a small markdown that points to the full agent definition
386
385
  * inside the user's ~/.sinapse/{squad}/ directory.
387
386
  *
@@ -433,6 +432,16 @@ async function installGlobalAgents() {
433
432
  async function generateAgentsMd(targetDir = process.cwd()) {
434
433
  const agentsPath = path.join(targetDir, 'AGENTS.md');
435
434
  if (await fse.pathExists(agentsPath)) return false;
435
+ // Prefer the canonical, honest AGENTS.md shipped with the framework (single
436
+ // source of truth; its counts are verified against disk by validate:agents-md).
437
+ // Fall back to the minimal table only if the canonical copy is unavailable.
438
+ const canonicalAgentsMd = path.join(__dirname, '..', '..', '..', '..', 'AGENTS.md');
439
+ try {
440
+ if (await fse.pathExists(canonicalAgentsMd)) {
441
+ await fse.copy(canonicalAgentsMd, agentsPath);
442
+ return true;
443
+ }
444
+ } catch (_e) { /* fall through to minimal generation */ }
436
445
  const lines = [
437
446
  '# AGENTS.md', '', 'Universal agent reference for AI-powered development tools.', '',
438
447
  '## Available Agents', '', '| Agent | Persona | Scope |', '|-------|---------|-------|',
@@ -536,6 +545,7 @@ async function runWizard(options = {}) {
536
545
  try {
537
546
  sinapseCoreResult = await installSinapseCore({
538
547
  targetDir: process.cwd(),
548
+ includeCodex: (answers.selectedLLM || 'claude-code') !== 'claude-code',
539
549
  onProgress: (_status) => {
540
550
  // Silent progress - spinner handles feedback
541
551
  },
@@ -787,6 +797,28 @@ async function runWizard(options = {}) {
787
797
  process.chdir(savedCwd);
788
798
  }
789
799
 
800
+ // Codex local-first sync: the ide-sync above drives claude-code only now,
801
+ // so .codex/agents + .codex/skills are regenerated here from the canonical
802
+ // source (the static .codex payload — scripts/tasks/JSONs — was already
803
+ // copied by installSinapseCore when Codex was selected). Codex installs only.
804
+ if (selectedLLM === 'codex' || selectedLLM === 'both') {
805
+ console.log('\n🔄 Running Codex local-first sync...');
806
+ const savedCwdCodex = process.cwd();
807
+ try {
808
+ const { syncCodexLocalFirst } = require('../../../../.sinapse-ai/infrastructure/scripts/sync-codex-local-first');
809
+ process.chdir(targetProjectRoot);
810
+ const codexResult = syncCodexLocalFirst({ projectRoot: targetProjectRoot, quiet: true });
811
+ answers.codexSyncStatus = codexResult.ok ? 'synced' : 'failed';
812
+ const m = codexResult.metrics || {};
813
+ console.log(`✅ Codex sync: ${codexResult.ok ? 'synced' : 'issues'} (${m.codexAgents || 0} agents, ${m.codexSkills || 0} skills)`);
814
+ } catch (codexErr) {
815
+ console.warn(`⚠️ Codex sync failed: ${codexErr.message} — run 'npm run sync:ide:codex' post-install`);
816
+ answers.codexSyncStatus = 'failed';
817
+ } finally {
818
+ process.chdir(savedCwdCodex);
819
+ }
820
+ }
821
+
790
822
  // Story INS-4.6: Entity Registry Bootstrap — populate entity-registry.yaml on install
791
823
  // Story INS-4.12: Fix module resolution + bootstrap timing
792
824
  // Bootstrap runs AFTER .sinapse-ai deps are installed (sinapse-ai-installer.js:324-345)
@@ -1134,6 +1166,23 @@ async function runWizard(options = {}) {
1134
1166
  }
1135
1167
  }
1136
1168
 
1169
+ // Statusline feedback loop: install global statusline + agent trackers (Cluster D).
1170
+ // Graceful skip if the user already has a statusLine; idempotent on hooks.
1171
+ if (answers.selectedLLM === 'claude-code' || answers.selectedLLM === 'both') {
1172
+ try {
1173
+ const { setupStatusline } = require('../../../../bin/lib/setup-statusline');
1174
+ const sourceCoreDir = path.join(__dirname, '..', '..', '..', '..', '.sinapse-ai');
1175
+ const slResult = await setupStatusline({ sourceCoreDir });
1176
+ if (slResult.installed) {
1177
+ console.log('\n✅ Statusline configurada (agente/squad ao vivo).');
1178
+ }
1179
+ answers.statuslineInstalled = !!slResult.installed;
1180
+ } catch (_slErr) {
1181
+ // Non-critical — statusline is observability, never blocks install.
1182
+ answers.statuslineInstalled = false;
1183
+ }
1184
+ }
1185
+
1137
1186
  // Generate AGENTS.md at project root (universal format for Claude Code + Codex)
1138
1187
  try {
1139
1188
  const agentsCreated = await generateAgentsMd(process.cwd());
File without changes
File without changes
@@ -1,10 +1,19 @@
1
1
  /**
2
2
  * SINAPSE Task Audit Script
3
- * Audits all task markdown files across squads for structural compliance.
3
+ * Audits task markdown files for structural completeness across the whole framework.
4
+ *
5
+ * Scope: squad tasks (squads/<name>/tasks), the framework core tasks
6
+ * (.sinapse-ai/development/tasks) and the master-squad tasks (sinapse/tasks).
7
+ *
8
+ * The checks are FORMAT-AGNOSTIC: a task is credited for a trait whether it is
9
+ * declared in YAML frontmatter OR in a markdown section (## Metadata,
10
+ * ## Task Definition, ## Inputs, ## Steps, etc.). This measures real completeness
11
+ * instead of conformance to one rigid template — which is what produced thousands
12
+ * of false "critical" flags before.
4
13
  *
5
14
  * Usage: node scripts/audit-tasks.cjs [--fix] [--json]
6
- * --fix Add basic frontmatter to tasks missing it entirely
7
- * --json Output raw JSON instead of summary
15
+ * --fix Add basic frontmatter to tasks missing any structured header
16
+ * --json Output raw JSON instead of the summary
8
17
  */
9
18
 
10
19
  const fs = require('fs');
@@ -12,34 +21,63 @@ const path = require('path');
12
21
  const { glob } = require('glob');
13
22
 
14
23
  const ROOT = path.resolve(__dirname, '..');
15
- const SQUADS_DIR = path.join(ROOT, 'squads');
16
24
  const FIX_MODE = process.argv.includes('--fix');
17
25
  const JSON_MODE = process.argv.includes('--json');
18
26
 
19
- // ── Scoring weights ──────────────────────────────────────────────
27
+ // Task sources scanned, in order. Paths are relative to ROOT.
28
+ const SOURCE_PATTERNS = [
29
+ 'squads/*/tasks/*.md',
30
+ '.sinapse-ai/development/tasks/*.md',
31
+ 'sinapse/tasks/*.md',
32
+ ];
33
+
34
+ // ── Scoring weights (sum = 100) ──────────────────────────────────
20
35
  const CHECKS = [
21
- { id: 'has_frontmatter', weight: 20, label: 'Has YAML frontmatter' },
22
- { id: 'has_task_field', weight: 15, label: 'Frontmatter has task: field' },
23
- { id: 'has_responsavel', weight: 10, label: 'Frontmatter has responsavel/responsible' },
24
- { id: 'has_entrada', weight: 10, label: 'Frontmatter has Entrada/input' },
25
- { id: 'has_saida', weight: 10, label: 'Frontmatter has Saida/output' },
26
- { id: 'has_title', weight: 10, label: 'Has # Task: or # title' },
27
- { id: 'has_steps', weight: 10, label: 'Has ## Steps or ## Description' },
28
- { id: 'has_metadata', weight: 5, label: 'Has ## Metadata section' },
36
+ { id: 'has_header', weight: 20, label: 'Structured header (frontmatter OR ## Metadata / ## Task Definition)' },
37
+ { id: 'has_identity', weight: 10, label: 'Identifiable (task/id/name field OR # title)' },
38
+ { id: 'has_responsavel', weight: 10, label: 'Owner declared (responsavel/agent field OR ## Agent / ## Owner)' },
39
+ { id: 'has_entrada', weight: 10, label: 'Inputs declared (field OR ## Input / ## Entrada / ## Context)' },
40
+ { id: 'has_saida', weight: 10, label: 'Outputs declared (field OR ## Output / ## Saida / ## Acceptance)' },
41
+ { id: 'has_title', weight: 10, label: 'Has # title' },
42
+ { id: 'has_steps', weight: 20, label: 'Has a process (## Steps/Process/Workflow/... OR numbered steps)' },
29
43
  { id: 'min_content_length', weight: 10, label: 'Content >= 200 chars' },
30
44
  ];
31
45
 
32
46
  const MAX_SCORE = CHECKS.reduce((s, c) => s + c.weight, 0);
33
47
 
34
- // ── Parse frontmatter ────────────────────────────────────────────
48
+ // ── Detection helpers ────────────────────────────────────────────
35
49
  function parseFrontmatter(content) {
36
50
  const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
37
- if (!match) return null;
38
- return match[1];
51
+ return match ? match[1] : null;
52
+ }
53
+
54
+ // True if the body has a `## Heading` whose text starts with one of `names`.
55
+ function hasSection(body, names) {
56
+ const re = new RegExp('^#{2,4}\\s+(' + names.join('|') + ')(?:\\b|\\s|:|$)', 'mi');
57
+ return re.test(body);
39
58
  }
40
59
 
60
+ // True if the frontmatter declares one of `fields` as a key.
61
+ function fmHas(fm, fields) {
62
+ if (!fm) return false;
63
+ const re = new RegExp('^\\s*(' + fields.join('|') + ')\\s*:', 'mi');
64
+ return re.test(fm);
65
+ }
66
+
67
+ // True if the body contains a numbered procedure of at least 3 steps.
68
+ function hasNumberedSteps(body) {
69
+ const m = body.match(/^\s*\d+[.)]\s+\S/gm);
70
+ return !!m && m.length >= 3;
71
+ }
72
+
73
+ const METADATA_SECTIONS = ['Metadata', 'Task Definition', 'Definição', 'Overview', 'Visão Geral'];
74
+ const OWNER_SECTIONS = ['Agent', 'Owner', 'Responsável', 'Responsible', 'Persona', 'Executor'];
75
+ const INPUT_SECTIONS = ['Input', 'Inputs', 'Entrada', 'Entradas', 'Context', 'Contexto', 'Prerequisites', 'Pré-requisitos', 'Pre-requisitos'];
76
+ const OUTPUT_SECTIONS = ['Output', 'Outputs', 'Saída', 'Saida', 'Saídas', 'Saidas', 'Deliverable', 'Deliverables', 'Result', 'Results', 'Acceptance', 'Critérios', 'Criterios'];
77
+ const STEP_SECTIONS = ['Steps', 'Step', 'Description', 'Etapas', 'Process', 'Processo', 'Workflow', 'Execution', 'Execução', 'Instructions', 'Instruções', 'Procedure', 'Activities', 'Activity', 'Phases', 'Fases', 'Fluxo', 'How', 'Como', 'Task Definition'];
78
+
41
79
  // ── Audit a single file ──────────────────────────────────────────
42
- function auditFile(filePath) {
80
+ function auditFile(filePath, group) {
43
81
  const content = fs.readFileSync(filePath, 'utf-8');
44
82
  const filename = path.basename(filePath, '.md');
45
83
  const fm = parseFrontmatter(content);
@@ -48,57 +86,43 @@ function auditFile(filePath) {
48
86
  const results = {};
49
87
  const issues = [];
50
88
 
51
- // 1. Has frontmatter
52
- results.has_frontmatter = !!fm;
53
- if (!fm) issues.push('Missing frontmatter entirely');
89
+ results.has_title = /^#\s+\S/m.test(body);
90
+ if (!results.has_title) issues.push('No # title');
54
91
 
55
- // 2. task: field
56
- results.has_task_field = fm ? /^task:/m.test(fm) : false;
57
- if (!results.has_task_field && fm) issues.push('Missing task: field in frontmatter');
92
+ results.has_header = !!fm || hasSection(body, METADATA_SECTIONS);
93
+ if (!results.has_header) issues.push('No structured header (frontmatter or Metadata/Task Definition section)');
58
94
 
59
- // 3. responsavel / responsible
60
- results.has_responsavel = fm ? /^(responsavel|responsible):/m.test(fm) : false;
61
- if (!results.has_responsavel && fm) issues.push('Missing responsavel/responsible field');
95
+ results.has_identity = fmHas(fm, ['task', 'id', 'name', 'slug', 'title']) || results.has_title;
96
+ if (!results.has_identity) issues.push('Not identifiable (no task/id/name field and no title)');
62
97
 
63
- // 4. Entrada / input
64
- results.has_entrada = fm ? /^(Entrada|input):/m.test(fm) : false;
65
- if (!results.has_entrada && fm) issues.push('Missing Entrada/input section');
98
+ results.has_responsavel = fmHas(fm, ['responsavel', 'responsável', 'responsible', 'agent', 'owner', 'persona', 'executor']) || hasSection(body, OWNER_SECTIONS);
99
+ if (!results.has_responsavel) issues.push('No owner/agent declared');
66
100
 
67
- // 5. Saida / output
68
- results.has_saida = fm ? /^(Saida|output):/m.test(fm) : false;
69
- if (!results.has_saida && fm) issues.push('Missing Saida/output section');
101
+ results.has_entrada = fmHas(fm, ['entrada', 'entradas', 'input', 'inputs', 'context', 'contexto', 'prerequisites']) || hasSection(body, INPUT_SECTIONS);
102
+ if (!results.has_entrada) issues.push('No inputs declared');
70
103
 
71
- // 6. Title
72
- results.has_title = /^#\s+.+/m.test(body);
73
- if (!results.has_title) issues.push('Missing # title in body');
104
+ results.has_saida = fmHas(fm, ['saida', 'saída', 'saidas', 'output', 'outputs', 'deliverable', 'result', 'acceptance']) || hasSection(body, OUTPUT_SECTIONS);
105
+ if (!results.has_saida) issues.push('No outputs/acceptance declared');
74
106
 
75
- // 7. Steps / Description
76
- results.has_steps = /^##\s+(Steps|Description|Etapas)/mi.test(body);
77
- if (!results.has_steps) issues.push('Missing ## Steps or ## Description');
107
+ results.has_steps = hasSection(body, STEP_SECTIONS) || hasNumberedSteps(body);
108
+ if (!results.has_steps) issues.push('No process (steps/workflow/numbered procedure)');
78
109
 
79
- // 8. Metadata
80
- results.has_metadata = /^##\s+Metadata/mi.test(body);
81
- if (!results.has_metadata) issues.push('Missing ## Metadata section');
82
-
83
- // 9. Content length
84
110
  results.min_content_length = content.length >= 200;
85
111
  if (!results.min_content_length) issues.push(`Content too short (${content.length} chars)`);
86
112
 
87
- // Score
88
113
  let score = 0;
89
114
  for (const check of CHECKS) {
90
115
  if (results[check.id]) score += check.weight;
91
116
  }
92
117
  const pct = Math.round((score / MAX_SCORE) * 100);
93
118
 
94
- return { file: filename, path: filePath, score: pct, results, issues };
119
+ return { file: filename, path: filePath, group, score: pct, results, issues };
95
120
  }
96
121
 
97
- // ── Fix: add frontmatter to files missing it ─────────────────────
122
+ // ── Fix: add a minimal frontmatter to files lacking any header ────
98
123
  function fixFrontmatter(filePath) {
99
124
  const content = fs.readFileSync(filePath, 'utf-8');
100
125
  const filename = path.basename(filePath, '.md');
101
-
102
126
  const frontmatter = [
103
127
  '---',
104
128
  `task: ${filename}`,
@@ -108,56 +132,64 @@ function fixFrontmatter(filePath) {
108
132
  '---',
109
133
  '',
110
134
  ].join('\n');
111
-
112
135
  fs.writeFileSync(filePath, frontmatter + content, 'utf-8');
113
- return true;
136
+ }
137
+
138
+ // ── Group a file by its source location ──────────────────────────
139
+ function groupFor(absPath) {
140
+ const rel = path.relative(ROOT, absPath).replace(/\\/g, '/');
141
+ if (rel.startsWith('squads/')) return rel.split('/')[1];
142
+ if (rel.startsWith('.sinapse-ai/development/tasks/')) return 'core/development';
143
+ if (rel.startsWith('sinapse/tasks/')) return 'sinapse-master';
144
+ return rel.split('/')[0];
114
145
  }
115
146
 
116
147
  // ── Main ─────────────────────────────────────────────────────────
117
148
  async function main() {
118
- const pattern = path.join(SQUADS_DIR, '*/tasks/*.md').replace(/\\/g, '/');
119
- const files = await glob(pattern);
149
+ let files = [];
150
+ for (const pattern of SOURCE_PATTERNS) {
151
+ const matched = await glob(pattern, { cwd: ROOT, absolute: true });
152
+ files = files.concat(matched);
153
+ }
154
+ // De-dupe (defensive) and sort for stable output.
155
+ files = Array.from(new Set(files)).sort();
120
156
 
121
157
  if (files.length === 0) {
122
158
  console.error('No task files found.');
123
159
  process.exit(1);
124
160
  }
125
161
 
126
- const squadMap = {};
162
+ const groupMap = {};
127
163
  const allResults = [];
128
164
  let fixedCount = 0;
129
165
 
130
166
  for (const filePath of files) {
131
- const rel = path.relative(SQUADS_DIR, filePath);
132
- const squadName = rel.split(/[/\\]/)[0];
133
-
134
- if (!squadMap[squadName]) {
135
- squadMap[squadName] = { tasks: [], totalScore: 0, issues: [] };
136
- }
167
+ const group = groupFor(filePath);
168
+ if (!groupMap[group]) groupMap[group] = { tasks: [], totalScore: 0 };
137
169
 
138
- // Fix mode: add frontmatter before auditing
139
170
  if (FIX_MODE) {
140
171
  const content = fs.readFileSync(filePath, 'utf-8');
141
- if (!content.startsWith('---')) {
172
+ const fm = parseFrontmatter(content);
173
+ if (!fm && !hasSection(content, METADATA_SECTIONS)) {
142
174
  fixFrontmatter(filePath);
143
175
  fixedCount++;
144
176
  }
145
177
  }
146
178
 
147
- const result = auditFile(filePath);
148
- squadMap[squadName].tasks.push(result);
149
- squadMap[squadName].totalScore += result.score;
179
+ const result = auditFile(filePath, group);
180
+ groupMap[group].tasks.push(result);
181
+ groupMap[group].totalScore += result.score;
150
182
  allResults.push(result);
151
183
  }
152
184
 
153
185
  // ── Build report ───────────────────────────────────────────────
154
- const squadSummaries = [];
155
- for (const [name, data] of Object.entries(squadMap).sort((a, b) => a[0].localeCompare(b[0]))) {
186
+ const groupSummaries = [];
187
+ for (const [name, data] of Object.entries(groupMap).sort((a, b) => a[0].localeCompare(b[0]))) {
156
188
  const avg = Math.round(data.totalScore / data.tasks.length);
157
189
  const critical = data.tasks.filter(t => t.score < 50).length;
158
190
  const warning = data.tasks.filter(t => t.score >= 50 && t.score < 70).length;
159
- squadSummaries.push({
160
- squad: name,
191
+ groupSummaries.push({
192
+ group: name,
161
193
  taskCount: data.tasks.length,
162
194
  avgScore: avg,
163
195
  critical,
@@ -166,12 +198,9 @@ async function main() {
166
198
  });
167
199
  }
168
200
 
169
- // Issue frequency
170
201
  const issueFreq = {};
171
202
  for (const r of allResults) {
172
- for (const iss of r.issues) {
173
- issueFreq[iss] = (issueFreq[iss] || 0) + 1;
174
- }
203
+ for (const iss of r.issues) issueFreq[iss] = (issueFreq[iss] || 0) + 1;
175
204
  }
176
205
  const commonIssues = Object.entries(issueFreq)
177
206
  .sort((a, b) => b[1] - a[1])
@@ -183,42 +212,36 @@ async function main() {
183
212
  const report = {
184
213
  summary: {
185
214
  totalFiles: allResults.length,
186
- totalSquads: squadSummaries.length,
215
+ totalGroups: groupSummaries.length,
187
216
  overallAvgScore: overallAvg,
188
217
  passingFiles: allResults.filter(r => r.score >= 70).length,
189
218
  warningFiles: allResults.filter(r => r.score >= 50 && r.score < 70).length,
190
219
  criticalFiles: allResults.filter(r => r.score < 50).length,
191
220
  fixedInThisRun: fixedCount,
192
221
  },
193
- squadSummaries,
222
+ groupSummaries,
194
223
  commonIssues,
195
- problemFiles: problemFiles.map(f => ({
196
- file: f.file,
197
- squad: path.relative(SQUADS_DIR, f.path).split(/[/\\]/)[0],
198
- score: f.score,
199
- issues: f.issues,
200
- })),
224
+ problemFiles: problemFiles.map(f => ({ file: f.file, group: f.group, score: f.score, issues: f.issues })),
201
225
  };
202
226
 
203
227
  if (JSON_MODE) {
204
228
  console.log(JSON.stringify(report, null, 2));
205
229
  } else {
206
- // Human-readable output
207
230
  console.log('\n=== SINAPSE Task Audit Report ===\n');
208
231
  console.log(`Total files: ${report.summary.totalFiles}`);
209
- console.log(`Total squads: ${report.summary.totalSquads}`);
232
+ console.log(`Total groups: ${report.summary.totalGroups}`);
210
233
  console.log(`Overall avg score: ${report.summary.overallAvgScore}%`);
211
234
  console.log(`Passing (>=70): ${report.summary.passingFiles}`);
212
235
  console.log(`Warning (50-69): ${report.summary.warningFiles}`);
213
236
  console.log(`Critical (<50): ${report.summary.criticalFiles}`);
214
237
  if (fixedCount > 0) console.log(`Fixed (frontmatter added): ${fixedCount}`);
215
238
 
216
- console.log('\n--- Squad Summary ---\n');
217
- console.log('Squad'.padEnd(30) + 'Tasks'.padEnd(8) + 'Avg'.padEnd(6) + 'Crit'.padEnd(6) + 'Warn'.padEnd(6) + 'Pass');
239
+ console.log('\n--- Group Summary ---\n');
240
+ console.log('Group'.padEnd(30) + 'Tasks'.padEnd(8) + 'Avg'.padEnd(6) + 'Crit'.padEnd(6) + 'Warn'.padEnd(6) + 'Pass');
218
241
  console.log('-'.repeat(62));
219
- for (const s of squadSummaries) {
242
+ for (const s of groupSummaries) {
220
243
  console.log(
221
- s.squad.padEnd(30) +
244
+ s.group.padEnd(30) +
222
245
  String(s.taskCount).padEnd(8) +
223
246
  `${s.avgScore}%`.padEnd(6) +
224
247
  String(s.critical).padEnd(6) +
@@ -235,17 +258,15 @@ async function main() {
235
258
  if (problemFiles.length > 0) {
236
259
  console.log(`\n--- Problem Files (score < 70): ${problemFiles.length} files ---\n`);
237
260
  for (const f of problemFiles.slice(0, 50)) {
238
- const squad = path.relative(SQUADS_DIR, f.path).split(/[/\\]/)[0];
239
- console.log(` [${f.score}%] ${squad}/${f.file}: ${f.issues.join('; ')}`);
240
- }
241
- if (problemFiles.length > 50) {
242
- console.log(` ... and ${problemFiles.length - 50} more`);
261
+ console.log(` [${f.score}%] ${f.group}/${f.file}: ${f.issues.join('; ')}`);
243
262
  }
263
+ if (problemFiles.length > 50) console.log(` ... and ${problemFiles.length - 50} more`);
244
264
  }
245
265
  }
246
266
 
247
- // Write JSON for report generation
267
+ // Write JSON report (create the directory first — this used to crash with ENOENT).
248
268
  const jsonPath = path.join(ROOT, 'docs', 'reports', '9.3-task-audit.json');
269
+ fs.mkdirSync(path.dirname(jsonPath), { recursive: true });
249
270
  fs.writeFileSync(jsonPath, JSON.stringify(report, null, 2), 'utf-8');
250
271
  console.log(`\nJSON saved to: ${jsonPath}`);
251
272
  }