sinapse-ai 9.4.0 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/.claude/CLAUDE.md +10 -4
  2. package/.claude/hooks/enforce-architecture-first.py +197 -197
  3. package/.claude/hooks/enforce-git-push-authority.sh +25 -4
  4. package/.claude/hooks/mind-clone-governance.py +193 -193
  5. package/.claude/hooks/read-protection.py +152 -152
  6. package/.claude/hooks/sql-governance.py +183 -183
  7. package/.claude/hooks/verify-packages.cjs +83 -0
  8. package/.claude/hooks/write-path-validation.py +195 -195
  9. package/.claude/rules/hook-governance.md +1 -0
  10. package/.claude/rules/mandatory-delegation.md +24 -0
  11. package/.claude/rules/project-intelligence.md +63 -0
  12. package/.claude/rules/response-format.md +4 -0
  13. package/.claude/rules/safe-collaboration.md +4 -2
  14. package/.claude/rules/security-data-protection.md +18 -0
  15. package/.claude/rules/squad-awareness.md +93 -67
  16. package/.claude/rules/token-economy.md +148 -0
  17. package/.codex/agents/analyst.md +90 -0
  18. package/.codex/agents/architect.md +78 -0
  19. package/.codex/agents/data-engineer.md +38 -0
  20. package/.codex/agents/developer.md +97 -0
  21. package/.codex/agents/devops.md +121 -0
  22. package/.codex/agents/product-lead.md +27 -0
  23. package/.codex/agents/project-lead.md +28 -0
  24. package/.codex/agents/quality-gate.md +89 -0
  25. package/.codex/agents/sprint-lead.md +28 -0
  26. package/.codex/agents/squad-creator.md +58 -0
  27. package/.codex/agents/ux-design-expert.md +28 -0
  28. package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
  29. package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
  30. package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
  31. package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
  32. package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
  33. package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
  34. package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
  35. package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
  36. package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
  37. package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
  38. package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
  39. package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
  40. package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
  41. package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
  42. package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
  43. package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
  44. package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
  45. package/.sinapse-ai/core/doctor/index.js +157 -50
  46. package/.sinapse-ai/core/ids/registry-updater.js +6 -1
  47. package/.sinapse-ai/core/logger/index.js +319 -0
  48. package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
  49. package/.sinapse-ai/core/telemetry/index.js +247 -0
  50. package/.sinapse-ai/data/entity-registry.yaml +1384 -944
  51. package/.sinapse-ai/development/agents/architect.md +5 -0
  52. package/.sinapse-ai/development/agents/data-engineer.md +38 -0
  53. package/.sinapse-ai/development/agents/developer.md +28 -0
  54. package/.sinapse-ai/development/agents/devops.md +4 -0
  55. package/.sinapse-ai/development/agents/product-lead.md +27 -0
  56. package/.sinapse-ai/development/agents/project-lead.md +28 -0
  57. package/.sinapse-ai/development/agents/quality-gate.md +4 -0
  58. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
  59. package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
  60. package/.sinapse-ai/development/agents/squad-creator.md +58 -0
  61. package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
  62. package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
  63. package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
  64. package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
  65. package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
  66. package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
  67. package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
  68. package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
  69. package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
  70. package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
  71. package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
  72. package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
  73. package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
  74. package/.sinapse-ai/development/skills/model-router.md +92 -0
  75. package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
  76. package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
  77. package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
  78. package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
  79. package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
  80. package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
  81. package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
  82. package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
  83. package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
  84. package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
  85. package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
  86. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  87. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  88. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  89. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  90. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  91. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  92. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  93. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  94. package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
  95. package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
  96. package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
  97. package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
  98. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
  99. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
  100. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
  101. package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
  102. package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
  103. package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
  104. package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
  105. package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
  106. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  107. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
  108. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
  109. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
  110. package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
  111. package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
  112. package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
  113. package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
  114. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  115. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  117. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  118. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  121. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  122. package/.sinapse-ai/install-manifest.yaml +275 -140
  123. package/.sinapse-ai/local-config.yaml.template +65 -65
  124. package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
  125. package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
  126. package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
  127. package/.sinapse-ai/monitor/hooks/notification.py +30 -30
  128. package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
  129. package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
  130. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
  131. package/.sinapse-ai/monitor/hooks/stop.py +30 -30
  132. package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
  133. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
  134. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  135. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  136. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  137. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  138. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  139. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  140. package/.sinapse-ai/product/templates/story-tmpl.yaml +59 -0
  141. package/.sinapse-ai/product/templates/story.hbs +264 -264
  142. package/.sinapse-ai/product/templates/task.hbs +171 -171
  143. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  144. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  145. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  146. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  147. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  148. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  149. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  150. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  151. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  152. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  153. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  154. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  155. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  156. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  157. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  158. package/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
  159. package/LICENSE +34 -34
  160. package/README.en.md +167 -20
  161. package/README.md +190 -22
  162. package/bin/cli.js +510 -196
  163. package/bin/postinstall.js +564 -0
  164. package/bin/sinapse-cli +283 -283
  165. package/bin/sinapse-graph.js +9 -0
  166. package/bin/sinapse-init.js +36 -4
  167. package/bin/sinapse-minimal.js +20 -9
  168. package/bin/sinapse.js +202 -122
  169. package/bin/utils/deprecation-warning.js +46 -0
  170. package/bin/utils/pre-push-safety.js +14 -0
  171. package/docs/TELEMETRY.md +131 -0
  172. package/docs/chrome-brain-upgrade-plan.md +624 -0
  173. package/docs/framework/orqx-plan.md +1 -1
  174. package/docs/installation/chrome-brain.md +17 -7
  175. package/docs/mega-upgrade-orchestration-plan.md +71 -0
  176. package/docs/pt/contributing.md +20 -0
  177. package/docs/research-synthesis-for-upgrade.md +511 -0
  178. package/docs/security-audit-report.md +306 -0
  179. package/package.json +20 -8
  180. package/packages/installer/src/config/configure-environment.js +19 -44
  181. package/packages/installer/src/detection/detect-project-type.js +181 -63
  182. package/packages/installer/src/installer/manifest-signature.js +32 -17
  183. package/packages/installer/src/wizard/i18n.js +12 -0
  184. package/packages/installer/src/wizard/ide-config-generator.js +8 -39
  185. package/packages/installer/src/wizard/index.js +119 -14
  186. package/packages/installer/src/wizard/questions.js +2 -3
  187. package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
  188. package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
  189. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
  190. package/packages/sinapse-install/bin/edmcp.js +0 -0
  191. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  192. package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
  193. package/scripts/check-markdown-links.py +353 -353
  194. package/scripts/coverage-report-summary.js +169 -0
  195. package/scripts/generate-install-manifest.js +6 -2
  196. package/scripts/release-readiness.js +169 -0
  197. package/scripts/test-install-matrix-local.sh +153 -0
  198. package/scripts/validate-install-docs.js +394 -0
  199. package/scripts/validate-no-external-refs.js +376 -0
  200. package/scripts/validate-squad-orqx.js +302 -0
  201. package/scripts/validate-story-meta.js +263 -0
  202. package/squads/claude-code-mastery/CHANGELOG.md +1 -1
  203. package/squads/claude-code-mastery/README.md +2 -2
  204. package/squads/claude-code-mastery/squad.yaml +1 -1
  205. package/squads/squad-artdir/README.md +90 -0
  206. package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
  207. package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
  208. package/squads/squad-artdir/agents/color-psychologist.md +166 -0
  209. package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
  210. package/squads/squad-artdir/agents/design-system-architect.md +100 -0
  211. package/squads/squad-artdir/agents/ia-architect.md +169 -0
  212. package/squads/squad-artdir/agents/interaction-designer.md +162 -0
  213. package/squads/squad-artdir/agents/layout-engineer.md +163 -0
  214. package/squads/squad-artdir/agents/motion-architect.md +185 -0
  215. package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
  216. package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
  217. package/squads/squad-artdir/agents/product-surface-director.md +86 -0
  218. package/squads/squad-artdir/agents/type-systemist.md +138 -0
  219. package/squads/squad-artdir/agents/visual-strategist.md +127 -0
  220. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
  221. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
  222. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
  223. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
  224. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
  225. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
  226. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
  227. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
  228. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
  229. package/squads/squad-artdir/package.json +20 -0
  230. package/squads/squad-artdir/squad.yaml +271 -0
  231. package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
  232. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
  233. package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
  234. package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
  235. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
  236. package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
  237. package/squads/squad-artdir/tasks/design-color-system.md +81 -0
  238. package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
  239. package/squads/squad-artdir/tasks/design-token-system.md +58 -0
  240. package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
  241. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
  242. package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
  243. package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
  244. package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
  245. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
  246. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
  247. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
  248. package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
  249. package/squads/squad-brand/squad.yaml +20 -6
  250. package/squads/squad-claude/knowledge-base/context-window-optimization.md +1 -1
  251. package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +2 -2
  252. package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
  253. package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
  254. package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
  255. package/squads/squad-content/squad.yaml +187 -27
  256. package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
  257. package/squads/squad-copy/squad.yaml +19 -4
  258. package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
  259. package/squads/squad-design/squad.yaml +19 -4
  260. package/.sinapse-ai/core/registry/service-registry.json +0 -6346
  261. package/.sinapse-ai/data/registry-update-log.jsonl +0 -1323
  262. package/.sinapse-ai/manifests/agents.csv +0 -29
  263. package/.sinapse-ai/manifests/tasks.csv +0 -204
  264. package/.sinapse-ai/manifests/workers.csv +0 -196
  265. package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
  266. package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
@@ -278,6 +278,10 @@ dependencies:
278
278
  - remove-worktree.md
279
279
  - cleanup-worktrees.md
280
280
  - merge-worktree.md
281
+ # Environment & Deployment (Infra Research 2026-04)
282
+ - environment-promotion-pipeline.md
283
+ knowledge_bases:
284
+ - environment-deployment-patterns.md
281
285
  workflows:
282
286
  - auto-worktree.yaml
283
287
  templates:
@@ -450,6 +454,123 @@ autoClaude:
450
454
 
451
455
  ---
452
456
 
457
+ ## Research-Backed Frameworks
458
+
459
+ ### Modified GitHub Flow for AI Teams
460
+
461
+ GitHub Flow is the correct base strategy for SINAPSE. Do NOT use GitFlow (too complex for 2 humans), trunk-based (too risky without comprehensive test suite), or release branches (single npm package does not need them).
462
+
463
+ ```
464
+ main (protected, always deployable)
465
+ |
466
+ +-- caio/feat/{description} Human: Caio
467
+ +-- soier/feat/{description} Human: Matheus
468
+ +-- agent/{squad}/{agent-id}/{desc} AI agent (traceability)
469
+ +-- release/v{X.Y.Z} Release candidate (major versions only)
470
+ ```
471
+
472
+ **AI agent branch rules:**
473
+ 1. Always include agent ID in branch name (avoid agent-to-agent collision)
474
+ 2. Never reuse branch names
475
+ 3. Always branch from latest main (fetch + pull before branching)
476
+ 4. One concern per branch (never mix features)
477
+ 5. Short-lived: merge or close within 24 hours
478
+
479
+ ### OIDC Trusted Publishing for NPM
480
+
481
+ Eliminate long-lived NPM tokens by using GitHub as identity provider:
482
+
483
+ ```yaml
484
+ # In release workflow
485
+ permissions:
486
+ contents: write
487
+ id-token: write # OIDC for NPM trusted publishing
488
+
489
+ steps:
490
+ - run: npm publish --provenance
491
+ env:
492
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
493
+ ```
494
+
495
+ | Security Practice | Description |
496
+ |------------------|-------------|
497
+ | OIDC Trusted Publishing | No long-lived tokens; GitHub is identity provider for NPM |
498
+ | Provenance | `npm publish --provenance` signs package with Sigstore |
499
+ | 2FA | FIDO-based 2FA mandatory (TOTP deprecated by NPM) |
500
+ | Granular Tokens | NPM Granular Access Tokens (legacy tokens sunset 2025) |
501
+ | npm ci | Strict lockfile, fails on inconsistency |
502
+
503
+ ### DORA Metrics (2025 Benchmarks)
504
+
505
+ Track these four metrics to measure engineering performance:
506
+
507
+ | Metric | Top 15% (Elite) | Median | Bottom 15% |
508
+ |--------|-----------------|--------|------------|
509
+ | Deployment Frequency | Multiple/day | Weekly-Monthly | < Monthly |
510
+ | Change Lead Time | < 1 day | 1-7 days | > 1 month |
511
+ | Change Failure Rate | < 4% | 10-15% | > 30% |
512
+ | Failed Deploy Recovery | < 1 hour | 1-7 days | > 1 month |
513
+
514
+ **Key finding:** Only 16.2% of orgs deploy on-demand (multiple/day). PR Size is the single most significant driver of velocity -- smaller PRs = faster cycles.
515
+
516
+ ### PR-Level Metrics (LinearB 2025, 6.1M+ PRs)
517
+
518
+ | Metric | Elite | Average | Poor |
519
+ |--------|-------|---------|------|
520
+ | PR Cycle Time | < 1 day | 7 days | > 14 days |
521
+ | Pickup Time | < 2 hours | 4 days | > 7 days |
522
+ | Review Time | < 4 hours | 4 days | > 7 days |
523
+ | PR Size (lines) | < 100 | 200-400 | > 1,000 |
524
+
525
+ ### Graphite Stacked PRs
526
+
527
+ For large features, decompose into a stack of small dependent PRs:
528
+
529
+ ```bash
530
+ gt branch create feat-auth-types
531
+ gt commit create -m "feat: add auth type definitions"
532
+ gt branch create feat-auth-logic
533
+ gt commit create -m "feat: implement auth logic"
534
+ gt stack submit # Creates chained PRs
535
+ gt stack sync # Keeps stack synced with main
536
+ ```
537
+
538
+ **Impact:** Shopify saw 33% more PRs merged/dev. Asana engineers saved 7 hours/week and shipped 21% more code.
539
+
540
+ ### Semantic Release vs Changesets
541
+
542
+ | Tool | Best For | Automation Level |
543
+ |------|----------|-----------------|
544
+ | semantic-release | Single package, full automation | Fully automatic from commit messages |
545
+ | Changesets | Monorepo with multiple packages | Semi-automatic, explicit version intent |
546
+
547
+ **SINAPSE recommendation:** Changesets for monorepo packages, semantic-release for single-package projects.
548
+
549
+ ### Git Safety Nets for Autonomous Agents
550
+
551
+ | Safety Net | Implementation |
552
+ |-----------|---------------|
553
+ | Branch protection on main | GitHub branch rules (no direct push) |
554
+ | Required CI checks | All tests must pass before merge |
555
+ | Secret scanning | Pre-commit hook + GitHub secret scanning |
556
+ | File path validation | Hook rejects writes to protected paths |
557
+ | Commit message validation | commitlint + conventional commits |
558
+ | Max PR size | Bot warns if PR > 400 lines |
559
+ | Required human approval | At least 1 human must approve every PR |
560
+ | Audit trail | Co-Authored-By on every AI commit |
561
+
562
+ ### GitHub Actions Best Practices (2025)
563
+
564
+ 1. **Fail fast:** Lint and test first before expensive build steps
565
+ 2. **Use `npm ci`:** Respects lockfile exactly (reproducibility)
566
+ 3. **Aggressive caching:** `actions/setup-node` with `cache: 'npm'`
567
+ 4. **Protected environments:** Production requires manual approval
568
+ 5. **Pin actions by SHA:** Prevent supply chain attacks (tj-actions incident 2025)
569
+ 6. **OIDC federation:** Eliminate static cloud provider secrets
570
+ 7. **Reusable workflows:** DRY pattern for shared CI/CD logic
571
+
572
+ ---
573
+
453
574
  ## Quick Commands
454
575
 
455
576
  **Repository Management:**
@@ -227,6 +227,33 @@ autoClaude:
227
227
 
228
228
  ---
229
229
 
230
+ ## Anti-Hallucination Protocol
231
+
232
+ Hallucination is mathematically inevitable in LLMs (arXiv:2401.11817). Apply these defenses when validating stories:
233
+
234
+ **1. Chain-of-Verification (CoVe) — 50-70% hallucination reduction:**
235
+ 1. Draft your validation assessment
236
+ 2. List verification questions: Does each AC match PRD? Are scope items traceable? Are estimates grounded?
237
+ 3. Answer each verification question INDEPENDENTLY by re-reading source documents
238
+ 4. Produce final validation with only verified claims
239
+
240
+ **2. Phantom Package Prevention (Slopsquatting):**
241
+ - During story validation, flag any referenced library/package that hasn't been verified
242
+ - If a story lists a dependency, confirm it exists: `npm view {package}`
243
+ - 19.7% of packages recommended by LLMs are fabricated — catch them at validation gate
244
+
245
+ **3. Fact Grounding — Cite What You See:**
246
+ - When validating, cite specific PRD sections and line numbers supporting each AC
247
+ - Use Read tool to verify source document content — never rely on memory alone
248
+ - Cross-check story dependencies against existing stories and architecture docs
249
+
250
+ **4. Confidence Signaling:**
251
+ - Mark uncertain validation items with [NEEDS VERIFICATION]
252
+ - When unsure about business value claims or technical feasibility, request evidence
253
+ - NO-GO stories that contain unverifiable claims until evidence is provided
254
+
255
+ ---
256
+
230
257
  ## Quick Commands
231
258
 
232
259
  **Backlog Management:**
@@ -274,6 +274,34 @@ autoClaude:
274
274
 
275
275
  ---
276
276
 
277
+ ## Anti-Hallucination Protocol
278
+
279
+ Hallucination is mathematically inevitable in LLMs (arXiv:2401.11817). Apply these defenses when creating PRDs and epics:
280
+
281
+ **1. Chain-of-Verification (CoVe) — 50-70% hallucination reduction:**
282
+ 1. Draft requirements or epic structure from stakeholder input and research
283
+ 2. List verification questions: Are market claims sourced? Are technical assumptions validated?
284
+ 3. Answer each verification question INDEPENDENTLY — consult research docs, not your draft
285
+ 4. Produce final document with only verified, traceable requirements
286
+
287
+ **2. Phantom Package Prevention (Slopsquatting):**
288
+ - When PRDs specify technology choices, verify each package exists: `npm view {package}`
289
+ - 19.7% of packages recommended by LLMs are fabricated
290
+ - Mark unverified technology references with [NEEDS VERIFICATION] in PRD
291
+
292
+ **3. Fact Grounding — Cite What You See:**
293
+ - Every requirement in PRD must trace to stakeholder input, research finding, or business goal
294
+ - Cite source documents, meeting notes, or research paths for each major requirement
295
+ - NEVER invent market data, user statistics, or competitive analysis without sources
296
+ - Use Read tool to verify existing architecture docs before referencing them
297
+
298
+ **4. Confidence Signaling:**
299
+ - Mark uncertain requirements with [NEEDS VERIFICATION]
300
+ - When market data or competitive claims lack sources, flag them explicitly
301
+ - Prefer "requires research validation" over fabricating supporting evidence
302
+
303
+ ---
304
+
277
305
  ## Quick Commands
278
306
 
279
307
  **Document Creation:**
@@ -226,6 +226,10 @@ dependencies:
226
226
  - qa-evidence-requirements.md
227
227
  - qa-false-positive-detection.md
228
228
  - qa-browser-console-check.md
229
+ # Load Testing & Security (Infra Research 2026-04)
230
+ - load-testing-setup.md
231
+ knowledge_bases:
232
+ - security-pre-deploy-checklist.md
229
233
  templates:
230
234
  - qa-gate-tmpl.yaml
231
235
  - story-tmpl.yaml
@@ -360,6 +364,91 @@ autoClaude:
360
364
 
361
365
  ---
362
366
 
367
+ ## Research-Backed Frameworks
368
+
369
+ ### Verification-First Architecture (7-Layer Defense)
370
+
371
+ Hallucination is a mathematically inevitable property of LLMs (arXiv:2401.11817). No single technique eliminates it. Apply defense in depth:
372
+
373
+ ```
374
+ Layer 1: Prompt Engineering — Allow "I don't know", citation anchoring, CoVe (50-70% reduction)
375
+ Layer 2: Tool Grounding — Read/Grep BEFORE generating (Read-before-Edit pattern)
376
+ Layer 3: Type Checking — TypeScript strict mode catches phantom APIs
377
+ Layer 4: Linting — ESLint catches incorrect patterns
378
+ Layer 5: Test Execution — Vitest/Playwright catches logic errors
379
+ Layer 6: Code Review — CodeRabbit + human review catches architectural issues
380
+ Layer 7: Quality Gates — Automated gates before merge (this agent's domain)
381
+ ```
382
+
383
+ **Key insight (Simon Willison):** Code hallucinations are the LEAST dangerous type because execution reveals them immediately. The real danger is **logic errors that compile and run but produce incorrect results**. Focus QA effort on logic verification, not just syntax.
384
+
385
+ ### Hallucination Detection Patterns for Code
386
+
387
+ | Type | Detection Method | Tool |
388
+ |------|-----------------|------|
389
+ | Phantom APIs | Type checking | `tsc --strict` |
390
+ | Ghost packages | Dependency audit | `npm audit`, verify against registry |
391
+ | Version confusion | Lock file validation | `npm ci` (strict lockfile) |
392
+ | File path hallucination | Glob verification | Read tool before Edit |
393
+ | Config hallucination | Schema validation | Zod schemas for config |
394
+ | Logic errors | Test execution + review | Vitest + manual review of edge cases |
395
+
396
+ **Slopsquatting risk:** 19.7% of packages recommended by LLMs are fabricated. 58% are repeated across runs (deterministic hallucination). Always verify packages exist in registry before installation.
397
+
398
+ ### AI Code Quality Metrics (2025 Benchmarks)
399
+
400
+ | Metric | AI-Generated Code | Implication |
401
+ |--------|-------------------|-------------|
402
+ | Security vulnerabilities | 29-45% contain vulns | Security review is mandatory |
403
+ | Package hallucination | 19.7% recommend fake packages | Dependency audit is mandatory |
404
+ | Major issues (CodeRabbit, 470 PRs) | 1.7x more than human code | Automated review catches most |
405
+ | Misconfigurations | 75% more than human code | Config validation gates needed |
406
+ | SWE-bench accuracy (best model) | 80.9% | 1 in 5 tasks needs human intervention |
407
+
408
+ ### Testing Pyramid with Concrete Tools
409
+
410
+ | Layer | Tools | What to Test | Coverage Target |
411
+ |-------|-------|-------------|----------------|
412
+ | Unit (70%) | Vitest | Domain logic, validators, transforms, pure functions | > 80% line coverage |
413
+ | Integration (20%) | Vitest + MSW + Testing Library | Component interactions, API contracts, DB queries | Critical paths |
414
+ | E2E (10%) | Playwright | Login, checkout, core user journeys | Happy path + main error paths |
415
+
416
+ **Adjustments by context:** Prototypes: reduce E2E, focus unit. Fintech: increase integration + E2E. Safety-critical: test everything extensively.
417
+
418
+ ### Code Churn as Quality Signal
419
+
420
+ **Code churn** = percentage of recently changed code changed again within 2-3 weeks.
421
+
422
+ | Churn Level | Interpretation | Action |
423
+ |-------------|---------------|--------|
424
+ | < 15% | Healthy | Normal review |
425
+ | 15-25% | Moderate | Watch for unclear requirements |
426
+ | > 25% | Red flag | Investigate: unclear specs, poor implementation, scope creep |
427
+
428
+ ### Self-Healing Loop Pattern (TDAD)
429
+
430
+ Test-Driven AI Development reduces regressions by 70% (6.08% to 1.82%):
431
+
432
+ ```
433
+ 1. Tests define "correct" (human writes or validates test specs)
434
+ 2. AI implements code to pass tests
435
+ 3. Tests auto-execute after each change
436
+ 4. Failures feed back to agent for correction
437
+ 5. Max N iterations, then escalate
438
+ 6. Trust scoring with fallback reduces failure rates by 50%
439
+ ```
440
+
441
+ ### Chain-of-Verification (CoVe) for QA Reviews
442
+
443
+ When reviewing AI-generated deliverables, apply CoVe to reduce factual hallucinations by 50-70%:
444
+
445
+ 1. **Draft:** Read the code/document
446
+ 2. **Plan:** Formulate verification questions (Does this API exist? Is this pattern correct for this framework version?)
447
+ 3. **Execute:** Answer each question INDEPENDENTLY (without bias from the draft)
448
+ 4. **Revise:** Final assessment based on verified facts
449
+
450
+ ---
451
+
363
452
  ## Quick Commands
364
453
 
365
454
  **Code Review & Analysis:**
@@ -187,6 +187,34 @@ autoClaude:
187
187
 
188
188
  ---
189
189
 
190
+ ## Anti-Hallucination Protocol
191
+
192
+ Hallucination is mathematically inevitable in LLMs (arXiv:2401.11817). Apply these defenses when creating stories:
193
+
194
+ **1. Chain-of-Verification (CoVe) — 50-70% hallucination reduction:**
195
+ 1. Draft the story content from PRD/epic sources
196
+ 2. List verification questions: Does each AC trace to a PRD requirement? Are dependencies real?
197
+ 3. Answer each verification question INDEPENDENTLY against source documents
198
+ 4. Produce final story with only verified, traceable content
199
+
200
+ **2. Phantom Package Prevention (Slopsquatting):**
201
+ - When stories reference specific libraries or packages, verify they exist via `npm view {package}`
202
+ - 19.7% of packages recommended by LLMs are fabricated
203
+ - Flag any unverified dependency in story notes as [NEEDS VERIFICATION]
204
+
205
+ **3. Fact Grounding — Cite What You See:**
206
+ - When referencing architecture decisions, cite the source document path and section
207
+ - Use Read tool to verify PRD content before including in stories
208
+ - NEVER invent acceptance criteria not traceable to requirements
209
+ - Cross-reference existing stories to avoid duplicate scope
210
+
211
+ **4. Confidence Signaling:**
212
+ - Mark uncertain scope items with [NEEDS VERIFICATION]
213
+ - When unsure about technical feasibility or dependency availability, flag it
214
+ - Prefer explicit "requires architect input" over fabricating technical details
215
+
216
+ ---
217
+
190
218
  ## Quick Commands
191
219
 
192
220
  **Story Management:**
@@ -209,6 +209,64 @@ autoClaude:
209
209
 
210
210
  ---
211
211
 
212
+ ## Enhanced Squad Creation Protocol
213
+
214
+ ### 1. 4-Layer Persona Model (Mandatory for All New Agents)
215
+
216
+ Every agent created by `*create-squad` or `*extend-squad` MUST define all 4 layers:
217
+
218
+ | Layer | Contents | Required Fields |
219
+ |-------|----------|-----------------|
220
+ | **L1: Identity** | Role, archetype, voice, icon | `name`, `role`, `archetype`, `tone`, `icon` |
221
+ | **L2: Expertise** | Domain knowledge, frameworks, tools | `focus`, `core_principles[]`, `tools[]` |
222
+ | **L3: Behavior** | Decision style, collaboration patterns, quality bar | `style`, `customization`, `coderabbit_integration` |
223
+ | **L4: Boundaries** | Can do, cannot do, escalation paths | `commands[]`, `security_notes[]`, Agent Collaboration section |
224
+
225
+ Validation: `*validate-squad` checks all agents for 4-layer completeness. Missing layers produce a FAIL verdict.
226
+
227
+ ### 2. Auto-KB Generation
228
+
229
+ When creating a new squad, automatically generate knowledge base scaffolding:
230
+
231
+ **Step 1 — Research Discovery:**
232
+ - Check `squads/*/knowledge-base/` for existing patterns in similar domains
233
+ - Check `.sinapse-ai/development/knowledge-base/` for cross-cutting references
234
+ - If `caioimori-pesquisas` research exists for the domain, extract key patterns
235
+
236
+ **Step 2 — KB Skeleton Generation:**
237
+ Generate at minimum 3 knowledge-base files per squad:
238
+
239
+ ```
240
+ squads/{squad-name}/knowledge-base/
241
+ {domain}-fundamentals.md # Core concepts and terminology
242
+ {domain}-patterns.md # Proven patterns and anti-patterns
243
+ {domain}-tool-reference.md # Tools, frameworks, and integrations
244
+ ```
245
+
246
+ **Step 3 — Cross-Squad Integration:**
247
+ - Add routing catalog entry in squad's `squad.yaml` under `routing`
248
+ - Define cross-squad patterns (which squads this one collaborates with)
249
+ - Update `.claude/rules/squad-awareness.md` delegation map
250
+
251
+ ### 3. Quality Checklist (Every New Squad Must Pass)
252
+
253
+ Before a squad is considered complete, ALL items must be checked:
254
+
255
+ - [ ] All agents have 4-layer personas (L1-L4 complete)
256
+ - [ ] Knowledge base has at least 3 reference files
257
+ - [ ] All tasks have pre-conditions and post-conditions defined
258
+ - [ ] Workflows connect all agents (no orphan agents)
259
+ - [ ] Anti-hallucination protocol present on all agents that generate domain output
260
+ - [ ] `squad.yaml` manifest passes JSON Schema validation
261
+ - [ ] README.md exists with activation instructions
262
+ - [ ] At least one workflow defined in `workflows/`
263
+ - [ ] Cross-squad routing documented if applicable
264
+ - [ ] Agent collaboration section defines handoff patterns
265
+
266
+ Run `*validate-squad {name}` to execute this checklist automatically.
267
+
268
+ ---
269
+
212
270
  ## Quick Commands
213
271
 
214
272
  **Squad Design & Creation:**
@@ -418,6 +418,34 @@ autoClaude:
418
418
 
419
419
  ---
420
420
 
421
+ ## Anti-Hallucination Protocol
422
+
423
+ Hallucination is mathematically inevitable in LLMs (arXiv:2401.11817). Apply these defenses on every design task:
424
+
425
+ **1. Chain-of-Verification (CoVe) — 50-70% hallucination reduction:**
426
+ 1. Draft your design recommendation, audit finding, or component specification
427
+ 2. List verification questions: Do referenced components exist? Are metric claims sourced? Are accessibility standards correct?
428
+ 3. Answer each verification question INDEPENDENTLY — check actual codebase, WCAG docs, or design tokens
429
+ 4. Produce final deliverable with only verified claims and references
430
+
431
+ **2. Phantom Package Prevention (Slopsquatting):**
432
+ - When recommending UI libraries or design tools, verify packages exist: `npm view {package}`
433
+ - 19.7% of packages recommended by LLMs are fabricated
434
+ - Verify Tailwind plugins, Radix components, and icon libraries exist before specifying them
435
+
436
+ **3. Fact Grounding — Cite What You See:**
437
+ - When auditing patterns, cite specific file paths and line numbers for each finding
438
+ - Use Grep/Glob to verify component counts — never estimate without scanning
439
+ - NEVER claim a design token exists without checking `tokens.yaml` or equivalent
440
+ - Cross-reference WCAG criteria by standard number (e.g., WCAG 2.1 SC 1.4.3)
441
+
442
+ **4. Confidence Signaling:**
443
+ - Mark uncertain ROI calculations or pattern counts with [NEEDS VERIFICATION]
444
+ - When unsure about browser support or CSS feature availability, say so
445
+ - Prefer "let me scan the codebase" over fabricating audit metrics
446
+
447
+ ---
448
+
421
449
  ## Quick Commands
422
450
 
423
451
  **UX Research:**
@@ -2,6 +2,7 @@
2
2
 
3
3
  const fs = require('fs');
4
4
  const path = require('path');
5
+ const crypto = require('crypto');
5
6
  const yaml = require('js-yaml');
6
7
  const { getClient, isCodeIntelAvailable } = require('../code-intel');
7
8
  const { RegistryLoader, DEFAULT_REGISTRY_PATH } = require('../ids/registry-loader');
@@ -112,16 +113,68 @@ class RegistrySyncer {
112
113
  }
113
114
  }
114
115
 
115
- // Update metadata
116
+ // Update metadata (entityCount is structural; lastUpdated is deferred to after hash check)
116
117
  registry.metadata = registry.metadata || {};
117
- registry.metadata.lastUpdated = new Date().toISOString();
118
118
  registry.metadata.entityCount = allEntities.length;
119
119
 
120
+ // Idempotency: compute content hash excluding metadata.lastUpdated.
121
+ // If the on-disk registry produces the same hash, skip the write entirely
122
+ // so timestamp-only reruns do not churn the working tree.
123
+ const newHash = this._computeContentHash(registry);
124
+ const oldHash = this._readDiskContentHash(this._registryPath);
125
+
126
+ if (oldHash !== null && oldHash === newHash) {
127
+ this._logger(`[registry-syncer] Sync complete: ${this._stats.processed} processed, ${this._stats.skipped} skipped, ${this._stats.errors} errors (no content change — write skipped)`);
128
+ return { ...this._stats, writeSkipped: true };
129
+ }
130
+
131
+ // Stamp fresh timestamp only when we know we are going to write.
132
+ registry.metadata.lastUpdated = new Date().toISOString();
133
+
120
134
  // Atomic write
121
135
  this._atomicWrite(this._registryPath, registry);
122
136
 
123
137
  this._logger(`[registry-syncer] Sync complete: ${this._stats.processed} processed, ${this._stats.skipped} skipped, ${this._stats.errors} errors`);
124
- return { ...this._stats };
138
+ return { ...this._stats, writeSkipped: false };
139
+ }
140
+
141
+ /**
142
+ * Compute a stable content hash of the registry, deliberately excluding
143
+ * `metadata.lastUpdated` so that timestamp-only reruns produce the same hash.
144
+ * @param {Object} registry - Registry object
145
+ * @returns {string} SHA-256 hex digest
146
+ * @private
147
+ */
148
+ _computeContentHash(registry) {
149
+ // Shallow clone + strip lastUpdated from the metadata copy only.
150
+ const clone = {
151
+ ...registry,
152
+ metadata: { ...(registry.metadata || {}) },
153
+ };
154
+ delete clone.metadata.lastUpdated;
155
+ // yaml.dump with stable key ordering produces a deterministic serialization.
156
+ const serialized = yaml.dump(clone, { lineWidth: 120, noRefs: true, sortKeys: true });
157
+ return crypto.createHash('sha256').update(serialized).digest('hex');
158
+ }
159
+
160
+ /**
161
+ * Read the existing on-disk registry and compute its content hash
162
+ * (excluding metadata.lastUpdated). Returns null if the file does not
163
+ * exist or cannot be parsed — callers should treat null as "write needed".
164
+ * @param {string} registryPath - Path to on-disk registry
165
+ * @returns {string|null} SHA-256 hex digest or null
166
+ * @private
167
+ */
168
+ _readDiskContentHash(registryPath) {
169
+ try {
170
+ if (!fs.existsSync(registryPath)) return null;
171
+ const raw = fs.readFileSync(registryPath, 'utf8');
172
+ const parsed = yaml.load(raw);
173
+ if (!parsed || typeof parsed !== 'object') return null;
174
+ return this._computeContentHash(parsed);
175
+ } catch (_error) {
176
+ return null;
177
+ }
125
178
  }
126
179
 
127
180
  /**
@@ -60,5 +60,9 @@ async function run(context) {
60
60
  };
61
61
  }
62
62
 
63
- module.exports = { name, run, EXPECTED_AGENTS };
63
+ // Story A.3: agent memory directories may not exist yet on a fresh install.
64
+ // Treat runtime exceptions as WARN so fresh installs exit cleanly.
65
+ const onError = 'warn';
66
+
67
+ module.exports = { name, run, EXPECTED_AGENTS, onError };
64
68
 
@@ -53,5 +53,8 @@ async function run(context) {
53
53
  };
54
54
  }
55
55
 
56
- module.exports = { name, run };
56
+ // Story A.3: CLAUDE.md ships with the framework; exceptions indicate corruption.
57
+ const onError = 'fail';
58
+
59
+ module.exports = { name, run, onError };
57
60
 
@@ -128,5 +128,9 @@ async function run(context) {
128
128
  }
129
129
  }
130
130
 
131
- module.exports = { name, run };
131
+ // Story A.3: code-intel is optional infrastructure; runtime exceptions are not
132
+ // blocking and the check itself already handles missing providers gracefully.
133
+ const onError = 'warn';
134
+
135
+ module.exports = { name, run, onError };
132
136
 
@@ -78,5 +78,8 @@ async function run(context) {
78
78
  };
79
79
  }
80
80
 
81
- module.exports = { name, run };
81
+ // Story A.3: commands dir ships with the framework.
82
+ const onError = 'fail';
83
+
84
+ module.exports = { name, run, onError };
82
85
 
@@ -115,4 +115,7 @@ async function run(context) {
115
115
  };
116
116
  }
117
117
 
118
- module.exports = { name, run };
118
+ // Story A.3: deep check; exceptions are real and should FAIL.
119
+ const onError = 'fail';
120
+
121
+ module.exports = { name, run, onError };
@@ -50,5 +50,8 @@ async function run(context) {
50
50
  };
51
51
  }
52
52
 
53
- module.exports = { name, run };
53
+ // Story A.3: core-config.yaml is a hard requirement for framework operation.
54
+ const onError = 'fail';
55
+
56
+ module.exports = { name, run, onError };
54
57
 
@@ -50,5 +50,10 @@ async function run(context) {
50
50
  };
51
51
  }
52
52
 
53
- module.exports = { name, run };
53
+ // Story A.3: entity-registry may be absent or unreadable on a fresh install
54
+ // (before `sinapse install` populates it). Treat runtime exceptions as WARN
55
+ // so that fresh installs do not produce false FAILs.
56
+ const onError = 'warn';
57
+
58
+ module.exports = { name, run, onError };
54
59
 
@@ -47,5 +47,9 @@ async function run(context) {
47
47
  };
48
48
  }
49
49
 
50
- module.exports = { name, run };
50
+ // Story A.3: git hooks rely on a git repo + husky install. Neither is
51
+ // guaranteed on a fresh global install, so exceptions are treated as WARN.
52
+ const onError = 'warn';
53
+
54
+ module.exports = { name, run, onError };
51
55
 
@@ -45,5 +45,8 @@ async function run(context) {
45
45
  };
46
46
  }
47
47
 
48
- module.exports = { name, run };
48
+ // Story A.3: graph-dashboard ships with the framework.
49
+ const onError = 'fail';
50
+
51
+ module.exports = { name, run, onError };
49
52
 
@@ -115,5 +115,9 @@ async function run(context) {
115
115
  };
116
116
  }
117
117
 
118
- module.exports = { name, run };
118
+ // Story A.3: Claude Code hooks live in .claude/, which may not be fully
119
+ // populated on a fresh install. Degrade to WARN rather than FAIL.
120
+ const onError = 'warn';
121
+
122
+ module.exports = { name, run, onError };
119
123
 
@@ -82,5 +82,8 @@ async function run(context) {
82
82
  };
83
83
  }
84
84
 
85
- module.exports = { name, run };
85
+ // Story A.3: IDE sync mirrors agents; exceptions indicate broken install state.
86
+ const onError = 'fail';
87
+
88
+ module.exports = { name, run, onError };
86
89
 
@@ -30,5 +30,8 @@ async function run() {
30
30
  };
31
31
  }
32
32
 
33
- module.exports = { name, run };
33
+ // Story A.3: Node.js version is a hard prerequisite. Exceptions are FAIL.
34
+ const onError = 'fail';
35
+
36
+ module.exports = { name, run, onError };
34
37
 
@@ -75,5 +75,8 @@ async function run(context) {
75
75
  };
76
76
  }
77
77
 
78
- module.exports = { name, run };
78
+ // Story A.3: missing npm packages are always blocking. Exceptions are FAIL.
79
+ const onError = 'fail';
80
+
81
+ module.exports = { name, run, onError };
79
82