sinapse-ai 9.3.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.
- package/.claude/CLAUDE.md +60 -341
- package/.claude/hooks/enforce-architecture-first.py +197 -197
- package/.claude/hooks/enforce-git-push-authority.sh +25 -4
- package/.claude/hooks/mind-clone-governance.py +193 -193
- package/.claude/hooks/read-protection.py +152 -152
- package/.claude/hooks/sql-governance.py +183 -183
- package/.claude/hooks/verify-packages.cjs +83 -0
- package/.claude/hooks/write-path-validation.py +195 -195
- package/.claude/rules/agent-authority.md +6 -0
- package/.claude/rules/agent-handoff.md +5 -0
- package/.claude/rules/cross-squad-routing.md +5 -0
- package/.claude/rules/hook-governance.md +7 -0
- package/.claude/rules/mandatory-delegation.md +24 -0
- package/.claude/rules/mcp-usage.md +3 -1
- package/.claude/rules/project-intelligence.md +63 -0
- package/.claude/rules/response-format.md +4 -0
- package/.claude/rules/safe-collaboration.md +14 -2
- package/.claude/rules/security-data-protection.md +27 -0
- package/.claude/rules/squad-awareness.md +96 -68
- package/.claude/rules/token-economy.md +148 -0
- package/.claude/rules/tool-examples.md +6 -0
- package/.claude/rules/workflow-execution.md +7 -0
- package/.codex/agents/analyst.md +342 -71
- package/.codex/agents/architect.md +533 -68
- package/.codex/agents/data-engineer.md +530 -106
- package/.codex/agents/developer.md +657 -0
- package/.codex/agents/devops.md +639 -69
- package/.codex/agents/product-lead.md +362 -0
- package/.codex/agents/project-lead.md +405 -0
- package/.codex/agents/quality-gate.md +538 -0
- package/.codex/agents/sinapse-orqx.md +9 -7
- package/.codex/agents/sprint-lead.md +315 -0
- package/.codex/agents/squad-creator.md +402 -0
- package/.codex/agents/ux-design-expert.md +523 -0
- package/.codex/delegation-matrix.json +756 -44
- package/.codex/handoff-packet.schema.json +30 -6
- package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
- package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
- package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
- package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
- package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
- package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
- package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
- package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
- package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
- package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
- package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
- package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
- package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
- package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
- package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
- package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
- package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
- package/.sinapse-ai/core/doctor/index.js +157 -50
- package/.sinapse-ai/core/ids/registry-updater.js +6 -1
- package/.sinapse-ai/core/logger/index.js +319 -0
- package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
- package/.sinapse-ai/core/telemetry/index.js +247 -0
- package/.sinapse-ai/data/entity-registry.yaml +1060 -808
- package/.sinapse-ai/development/agents/analyst.md +90 -0
- package/.sinapse-ai/development/agents/architect.md +78 -0
- package/.sinapse-ai/development/agents/data-engineer.md +38 -0
- package/.sinapse-ai/development/agents/developer.md +97 -0
- package/.sinapse-ai/development/agents/devops.md +121 -0
- package/.sinapse-ai/development/agents/product-lead.md +27 -0
- package/.sinapse-ai/development/agents/project-lead.md +28 -0
- package/.sinapse-ai/development/agents/quality-gate.md +89 -0
- package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
- package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
- package/.sinapse-ai/development/agents/squad-creator.md +58 -0
- package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
- package/.sinapse-ai/development/checklists/agent-quality-gate.md +27 -0
- package/.sinapse-ai/development/checklists/brownfield-compatibility-checklist.md +20 -0
- package/.sinapse-ai/development/checklists/code-review-checklist.md +106 -0
- package/.sinapse-ai/development/checklists/issue-triage-checklist.md +9 -0
- package/.sinapse-ai/development/checklists/memory-audit-checklist.md +16 -0
- package/.sinapse-ai/development/checklists/pr-quality-checklist.md +72 -0
- package/.sinapse-ai/development/checklists/security-deployment-checklist.md +54 -0
- package/.sinapse-ai/development/checklists/self-critique-checklist.md +19 -1
- package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
- package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
- package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
- package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
- package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
- package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
- package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
- package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
- package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
- package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
- package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
- package/.sinapse-ai/development/skills/debug.md +57 -0
- package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
- package/.sinapse-ai/development/skills/fast-review.md +69 -0
- package/.sinapse-ai/development/skills/model-router.md +92 -0
- package/.sinapse-ai/development/skills/research-synthesis.md +77 -0
- package/.sinapse-ai/development/skills/security-scan.md +73 -0
- package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
- package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
- package/.sinapse-ai/development/skills/verify.md +53 -0
- package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
- package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
- package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
- package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
- package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
- package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
- package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
- package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
- package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
- package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
- package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
- package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
- package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
- package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
- package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
- package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
- package/.sinapse-ai/development/templates/squad/agent-template.md +17 -4
- package/.sinapse-ai/development/templates/squad/checklist-template.md +13 -5
- package/.sinapse-ai/development/templates/squad/task-template.md +7 -0
- package/.sinapse-ai/development/templates/squad/workflow-template.yaml +7 -0
- package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
- package/.sinapse-ai/development/workflows/fast-track.yaml +87 -0
- package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
- package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
- package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
- package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
- package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
- package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
- package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
- package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +3 -1
- package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
- package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
- package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
- package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
- package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
- package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
- package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
- package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
- package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
- package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
- package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
- package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
- package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
- package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
- package/.sinapse-ai/install-manifest.yaml +333 -162
- package/.sinapse-ai/local-config.yaml.template +65 -65
- package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
- package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
- package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
- package/.sinapse-ai/monitor/hooks/notification.py +30 -30
- package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
- package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
- package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
- package/.sinapse-ai/monitor/hooks/stop.py +30 -30
- package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
- package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
- package/.sinapse-ai/product/templates/adr.hbs +126 -126
- package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
- package/.sinapse-ai/product/templates/epic.hbs +213 -213
- package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
- package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
- package/.sinapse-ai/product/templates/prd.hbs +202 -202
- package/.sinapse-ai/product/templates/story-tmpl.yaml +59 -0
- package/.sinapse-ai/product/templates/story.hbs +264 -264
- package/.sinapse-ai/product/templates/task.hbs +171 -171
- package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
- package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
- package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
- package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
- package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
- package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
- package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
- package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
- package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
- package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
- package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
- package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
- package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
- package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
- package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
- package/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
- package/LICENSE +34 -34
- package/README.en.md +167 -20
- package/README.md +190 -22
- package/bin/cli.js +510 -196
- package/bin/postinstall.js +564 -0
- package/bin/sinapse-cli +283 -283
- package/bin/sinapse-graph.js +9 -0
- package/bin/sinapse-init.js +36 -4
- package/bin/sinapse-minimal.js +20 -9
- package/bin/sinapse.js +202 -122
- package/bin/utils/deprecation-warning.js +46 -0
- package/bin/utils/pre-push-safety.js +14 -0
- package/docs/TELEMETRY.md +131 -0
- package/docs/chrome-brain-upgrade-plan.md +624 -0
- package/docs/codex-integration-process.md +22 -0
- package/docs/codex-parity-program.md +27 -0
- package/docs/framework/orqx-plan.md +1 -1
- package/docs/ide-integration.md +36 -0
- package/docs/installation/chrome-brain.md +17 -7
- package/docs/mega-upgrade-orchestration-plan.md +71 -0
- package/docs/pt/contributing.md +20 -0
- package/docs/research-synthesis-for-upgrade.md +511 -0
- package/docs/security-audit-report.md +306 -0
- package/package.json +20 -8
- package/packages/installer/src/config/configure-environment.js +19 -44
- package/packages/installer/src/detection/detect-project-type.js +181 -63
- package/packages/installer/src/installer/manifest-signature.js +32 -17
- package/packages/installer/src/wizard/i18n.js +12 -0
- package/packages/installer/src/wizard/ide-config-generator.js +8 -39
- package/packages/installer/src/wizard/index.js +119 -14
- package/packages/installer/src/wizard/questions.js +2 -3
- package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
- package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
- package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
- package/packages/sinapse-install/bin/edmcp.js +0 -0
- package/packages/sinapse-install/bin/sinapse-install.js +0 -0
- package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
- package/scripts/check-markdown-links.py +353 -353
- package/scripts/coverage-report-summary.js +169 -0
- package/scripts/generate-install-manifest.js +6 -2
- package/scripts/release-readiness.js +169 -0
- package/scripts/test-install-matrix-local.sh +153 -0
- package/scripts/validate-install-docs.js +394 -0
- package/scripts/validate-no-external-refs.js +376 -0
- package/scripts/validate-squad-orqx.js +302 -0
- package/scripts/validate-story-meta.js +263 -0
- package/squads/claude-code-mastery/CHANGELOG.md +1 -1
- package/squads/claude-code-mastery/README.md +2 -2
- package/squads/claude-code-mastery/knowledge-base/claude-code-internals-reference.md +927 -0
- package/squads/claude-code-mastery/squad.yaml +1 -1
- package/squads/squad-artdir/README.md +90 -0
- package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
- package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
- package/squads/squad-artdir/agents/color-psychologist.md +166 -0
- package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
- package/squads/squad-artdir/agents/design-system-architect.md +100 -0
- package/squads/squad-artdir/agents/ia-architect.md +169 -0
- package/squads/squad-artdir/agents/interaction-designer.md +162 -0
- package/squads/squad-artdir/agents/layout-engineer.md +163 -0
- package/squads/squad-artdir/agents/motion-architect.md +185 -0
- package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
- package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
- package/squads/squad-artdir/agents/product-surface-director.md +86 -0
- package/squads/squad-artdir/agents/type-systemist.md +138 -0
- package/squads/squad-artdir/agents/visual-strategist.md +127 -0
- package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
- package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
- package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
- package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
- package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
- package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
- package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
- package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
- package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
- package/squads/squad-artdir/package.json +20 -0
- package/squads/squad-artdir/squad.yaml +271 -0
- package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
- package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
- package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
- package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
- package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
- package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
- package/squads/squad-artdir/tasks/design-color-system.md +81 -0
- package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
- package/squads/squad-artdir/tasks/design-token-system.md +58 -0
- package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
- package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
- package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
- package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
- package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
- package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
- package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
- package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
- package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
- package/squads/squad-brand/knowledge-base/archetype-brand-mapping.md +12 -1
- package/squads/squad-brand/knowledge-base/brand-activism-cultural-branding.md +216 -0
- package/squads/squad-brand/knowledge-base/brand-audit-criteria.md +58 -0
- package/squads/squad-brand/knowledge-base/brand-digital-strategy.md +188 -0
- package/squads/squad-brand/knowledge-base/brand-legal-ip.md +222 -0
- package/squads/squad-brand/knowledge-base/brand-naming-framework.md +163 -0
- package/squads/squad-brand/knowledge-base/branding-master-reference.md +1001 -0
- package/squads/squad-brand/knowledge-base/color-psychology.md +25 -12
- package/squads/squad-brand/knowledge-base/employer-personal-branding.md +206 -0
- package/squads/squad-brand/knowledge-base/routing-catalog.md +34 -0
- package/squads/squad-brand/knowledge-base/sonic-branding-principles.md +6 -1
- package/squads/squad-brand/knowledge-base/typography-personality.md +34 -0
- package/squads/squad-brand/squad.yaml +20 -6
- package/squads/squad-claude/knowledge-base/context-window-optimization.md +334 -0
- package/squads/squad-claude/knowledge-base/knowledge-architecture-reference.md +403 -0
- package/squads/squad-claude/knowledge-base/memory-systems-reference.md +412 -0
- package/squads/squad-claude/knowledge-base/obsidian-claude-integration.md +423 -0
- package/squads/squad-claude/knowledge-base/retrieval-augmented-generation.md +320 -0
- package/squads/squad-claude/knowledge-base/skill-creation-patterns.md +380 -0
- package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +411 -0
- package/squads/squad-cloning/knowledge-base/clone-quality-assurance.md +211 -0
- package/squads/squad-cloning/knowledge-base/confidence-scoring.md +51 -0
- package/squads/squad-cloning/knowledge-base/cross-squad-deployment.md +47 -0
- package/squads/squad-cloning/knowledge-base/ethical-guidelines.md +237 -0
- package/squads/squad-cloning/knowledge-base/knowledge-graph-for-clones.md +295 -0
- package/squads/squad-cloning/knowledge-base/memory-architecture-for-clones.md +229 -0
- package/squads/squad-cloning/knowledge-base/multi-agent-deployment-patterns.md +320 -0
- package/squads/squad-cloning/knowledge-base/skill-standard-for-clones.md +262 -0
- package/squads/squad-cloning/knowledge-base/sop-extraction-guide.md +243 -0
- package/squads/squad-commercial/knowledge-base/account-based-selling.md +206 -0
- package/squads/squad-commercial/knowledge-base/ai-as-competitive-infrastructure.md +14 -0
- package/squads/squad-commercial/knowledge-base/ai-in-sales.md +199 -0
- package/squads/squad-commercial/knowledge-base/brazilian-sales-context.md +195 -0
- package/squads/squad-commercial/knowledge-base/customer-success-operations.md +83 -2
- package/squads/squad-commercial/knowledge-base/prospecting-pipeline-generation.md +69 -0
- package/squads/squad-commercial/knowledge-base/sales-enablement-playbook.md +260 -0
- package/squads/squad-commercial/knowledge-base/sales-methodology-comparison.md +185 -0
- package/squads/squad-commercial/knowledge-base/sales-revenue-master-reference.md +1123 -0
- package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
- package/squads/squad-content/knowledge-base/brazilian-content-context.md +176 -0
- package/squads/squad-content/knowledge-base/competitor-analysis-methods.md +40 -1
- package/squads/squad-content/knowledge-base/content-architecture-taxonomy.md +206 -0
- package/squads/squad-content/knowledge-base/content-formats-encyclopedia.md +58 -1
- package/squads/squad-content/knowledge-base/content-references-bibliography.md +130 -0
- package/squads/squad-content/knowledge-base/content-strategy-master-reference.md +1097 -0
- package/squads/squad-content/knowledge-base/content-tech-stack.md +150 -0
- package/squads/squad-content/knowledge-base/copywriting-formulas-library.md +188 -0
- package/squads/squad-content/knowledge-base/email-newsletter-strategy.md +161 -0
- package/squads/squad-content/knowledge-base/platform-algorithm-intelligence.md +86 -1
- package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
- package/squads/squad-content/knowledge-base/social-algorithms-master-reference.md +1007 -0
- package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
- package/squads/squad-content/knowledge-base/video-audio-content-playbook.md +218 -0
- package/squads/squad-content/squad.yaml +187 -27
- package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
- package/squads/squad-copy/knowledge-base/ai-copy-production.md +254 -0
- package/squads/squad-copy/knowledge-base/brazilian-copywriting-context.md +242 -0
- package/squads/squad-copy/knowledge-base/email-copywriting-system.md +299 -0
- package/squads/squad-copy/knowledge-base/landing-page-copy-architecture.md +267 -0
- package/squads/squad-copy/knowledge-base/power-words-catalog.md +205 -0
- package/squads/squad-copy/knowledge-base/seo-copywriting.md +255 -0
- package/squads/squad-copy/knowledge-base/video-script-copywriting.md +239 -0
- package/squads/squad-copy/squad.yaml +19 -4
- package/squads/squad-council/knowledge-base/brand-strategy-models.md +193 -0
- package/squads/squad-council/knowledge-base/growth-strategy-models.md +267 -0
- package/squads/squad-council/knowledge-base/innovation-disruption-frameworks.md +193 -0
- package/squads/squad-council/knowledge-base/market-analysis-frameworks.md +240 -0
- package/squads/squad-council/knowledge-base/organizational-leadership-models.md +212 -0
- package/squads/squad-council/knowledge-base/sales-strategy-models.md +215 -0
- package/squads/squad-courses/knowledge-base/course-launch-strategy.md +251 -0
- package/squads/squad-courses/knowledge-base/domain-advocacia-curriculum.md +385 -0
- package/squads/squad-courses/knowledge-base/domain-contabilidade-curriculum.md +266 -0
- package/squads/squad-courses/knowledge-base/platform-comparison.md +68 -0
- package/squads/squad-courses/knowledge-base/video-production-guide.md +70 -0
- package/squads/squad-cybersecurity/knowledge-base/cloud-security-reference.md +363 -0
- package/squads/squad-cybersecurity/knowledge-base/compliance-frameworks.md +273 -0
- package/squads/squad-cybersecurity/knowledge-base/database-security.md +438 -0
- package/squads/squad-cybersecurity/knowledge-base/incident-response-playbook.md +420 -0
- package/squads/squad-cybersecurity/knowledge-base/network-security-reference.md +477 -0
- package/squads/squad-cybersecurity/knowledge-base/penetration-testing-methodology.md +350 -0
- package/squads/squad-cybersecurity/knowledge-base/vulnerability-management.md +349 -0
- package/squads/squad-design/knowledge-base/brazilian-design-context.md +223 -0
- package/squads/squad-design/knowledge-base/component-api-patterns.md +208 -4
- package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
- package/squads/squad-design/knowledge-base/design-system-master-reference.md +1302 -0
- package/squads/squad-design/knowledge-base/design-systems-frameworks.md +91 -1
- package/squads/squad-design/knowledge-base/responsive-modern-css.md +96 -4
- package/squads/squad-design/knowledge-base/wcag-aria-reference.md +117 -5
- package/squads/squad-design/knowledge-base/web-performance-reference.md +127 -4
- package/squads/squad-design/squad.yaml +19 -4
- package/squads/squad-finance/knowledge-base/brazilian-taxation.md +263 -0
- package/squads/squad-finance/knowledge-base/contabilidade-master-reference.md +998 -0
- package/squads/squad-finance/knowledge-base/finance-master-reference.md +946 -0
- package/squads/squad-finance/knowledge-base/financial-reporting-analysis.md +316 -0
- package/squads/squad-finance/knowledge-base/fintech-brazilian-context.md +242 -0
- package/squads/squad-finance/knowledge-base/fpa-planning-frameworks.md +286 -0
- package/squads/squad-finance/knowledge-base/ma-and-transactions.md +285 -0
- package/squads/squad-finance/knowledge-base/risk-management.md +233 -0
- package/squads/squad-finance/knowledge-base/startups-venture-capital.md +337 -0
- package/squads/squad-growth/knowledge-base/ai-growth-playbook.md +216 -0
- package/squads/squad-growth/knowledge-base/attribution-models.md +78 -0
- package/squads/squad-growth/knowledge-base/brazilian-growth-context.md +208 -0
- package/squads/squad-growth/knowledge-base/community-led-growth.md +175 -0
- package/squads/squad-growth/knowledge-base/content-marketing-flywheel.md +190 -0
- package/squads/squad-growth/knowledge-base/email-lifecycle-framework.md +192 -0
- package/squads/squad-growth/knowledge-base/growth-frameworks-catalog.md +82 -0
- package/squads/squad-growth/knowledge-base/growth-master-reference.md +1168 -0
- package/squads/squad-growth/knowledge-base/routing-catalog.md +53 -11
- package/squads/squad-paidmedia/knowledge-base/audiences-segmentation-deep.md +285 -0
- package/squads/squad-paidmedia/knowledge-base/creative-strategy-deep.md +294 -0
- package/squads/squad-paidmedia/knowledge-base/google-ads-account-architecture.md +87 -0
- package/squads/squad-paidmedia/knowledge-base/meta-ads-campaign-architecture.md +76 -0
- package/squads/squad-paidmedia/knowledge-base/paid-media-metrics-reference.md +117 -0
- package/squads/squad-paidmedia/knowledge-base/paid-traffic-master-reference.md +1308 -0
- package/squads/squad-paidmedia/knowledge-base/routing-catalog.md +95 -18
- package/squads/squad-paidmedia/knowledge-base/traffic-masters-frameworks.md +71 -0
- package/squads/squad-product/knowledge-base/brazilian-product-context.md +284 -0
- package/squads/squad-product/knowledge-base/discovery-methodology-playbook.md +141 -0
- package/squads/squad-product/knowledge-base/pm-frameworks-reference.md +125 -9
- package/squads/squad-product/knowledge-base/product-analytics-formulas.md +72 -0
- package/squads/squad-product/knowledge-base/product-led-growth-reference.md +155 -13
- package/squads/squad-product/knowledge-base/product-market-fit-framework.md +222 -0
- package/squads/squad-product/knowledge-base/routing-catalog.md +32 -0
- package/squads/squad-research/knowledge-base/agentic-second-brain-reference.md +591 -0
- package/squads/squad-research/knowledge-base/ai-augmented-research.md +212 -0
- package/squads/squad-research/knowledge-base/brazilian-market-research-sources.md +197 -0
- package/squads/squad-research/knowledge-base/community-platforms-reference.md +786 -0
- package/squads/squad-research/knowledge-base/community-research-methods.md +194 -0
- package/squads/squad-research/knowledge-base/mixed-methods-research-design.md +168 -0
- package/squads/squad-research/knowledge-base/network-effects-analysis.md +192 -0
- package/squads/squad-research/knowledge-base/qualitative-research-deep-methods.md +202 -0
- package/squads/squad-research/knowledge-base/quantitative-research-methods.md +208 -0
- package/squads/squad-research/knowledge-base/research-frameworks-encyclopedia.md +40 -0
- package/squads/squad-research/knowledge-base/research-synthesis-frameworks.md +223 -0
- package/squads/squad-storytelling/knowledge-base/brand-mythology-framework.md +236 -0
- package/squads/squad-storytelling/knowledge-base/brazilian-storytelling-context.md +237 -0
- package/squads/squad-storytelling/knowledge-base/data-storytelling.md +232 -0
- package/squads/squad-storytelling/knowledge-base/improv-storytelling.md +226 -0
- package/squads/squad-storytelling/knowledge-base/persuasion-narrative-techniques.md +269 -0
- package/squads/squad-storytelling/knowledge-base/social-movement-narratives.md +191 -0
- package/squads/squad-storytelling/knowledge-base/video-storytelling.md +252 -0
- package/.sinapse-ai/core/registry/service-registry.json +0 -6346
- package/.sinapse-ai/data/registry-update-log.jsonl +0 -1307
- package/.sinapse-ai/manifests/agents.csv +0 -29
- package/.sinapse-ai/manifests/tasks.csv +0 -204
- package/.sinapse-ai/manifests/workers.csv +0 -196
- package/squads/claude-code-mastery/data/swarm-orchestration-patterns.yaml +0 -378
- package/squads/squad-animations/knowledge-base/framer-motion-complete-reference.md +0 -710
- package/squads/squad-animations/knowledge-base/web-animations-api-view-transitions.md +0 -478
- package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
- package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"title": "Codex Handoff Packet",
|
|
4
4
|
"type": "object",
|
|
5
|
-
"additionalProperties":
|
|
5
|
+
"additionalProperties": true,
|
|
6
6
|
"required": [
|
|
7
7
|
"mission",
|
|
8
|
-
"phase",
|
|
9
8
|
"owner",
|
|
10
9
|
"inputs",
|
|
11
10
|
"outputs",
|
|
12
|
-
"validators"
|
|
13
|
-
"shared-surface-risk",
|
|
14
|
-
"next-handoff"
|
|
11
|
+
"validators"
|
|
15
12
|
],
|
|
16
13
|
"properties": {
|
|
14
|
+
"routeId": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"minLength": 1
|
|
17
|
+
},
|
|
17
18
|
"mission": {
|
|
18
19
|
"type": "string",
|
|
19
20
|
"minLength": 1
|
|
@@ -26,6 +27,12 @@
|
|
|
26
27
|
"type": "string",
|
|
27
28
|
"minLength": 1
|
|
28
29
|
},
|
|
30
|
+
"classification": {
|
|
31
|
+
"type": "string"
|
|
32
|
+
},
|
|
33
|
+
"summary": {
|
|
34
|
+
"type": "string"
|
|
35
|
+
},
|
|
29
36
|
"inputs": {
|
|
30
37
|
"type": "array",
|
|
31
38
|
"minItems": 1,
|
|
@@ -50,14 +57,31 @@
|
|
|
50
57
|
"minLength": 1
|
|
51
58
|
}
|
|
52
59
|
},
|
|
60
|
+
"sharedSurfaceRisk": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
53
63
|
"shared-surface-risk": {
|
|
54
64
|
"type": "string",
|
|
55
|
-
"enum": ["none", "codex-only", "shared-review-required"]
|
|
65
|
+
"enum": ["none", "codex-only", "shared-review-required", "low"]
|
|
66
|
+
},
|
|
67
|
+
"nextHandoff": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"properties": {
|
|
70
|
+
"to": { "type": "string" },
|
|
71
|
+
"artifact": { "type": "string" }
|
|
72
|
+
}
|
|
56
73
|
},
|
|
57
74
|
"next-handoff": {
|
|
58
75
|
"type": "string",
|
|
59
76
|
"minLength": 1
|
|
60
77
|
},
|
|
78
|
+
"delegationChain": {
|
|
79
|
+
"type": "array"
|
|
80
|
+
},
|
|
81
|
+
"resources": {
|
|
82
|
+
"type": "array",
|
|
83
|
+
"items": { "type": "string" }
|
|
84
|
+
},
|
|
61
85
|
"notes": {
|
|
62
86
|
"type": "array",
|
|
63
87
|
"items": {
|
|
@@ -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
|
-
|
|
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
|
|
|
@@ -128,5 +128,9 @@ async function run(context) {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
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
|
|
|
@@ -50,5 +50,10 @@ async function run(context) {
|
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -115,5 +115,9 @@ async function run(context) {
|
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
|
|
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
|
|
|
@@ -58,5 +58,8 @@ async function run(context) {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
// Story A.3: rules files ship with the framework; exceptions indicate real damage.
|
|
62
|
+
const onError = 'fail';
|
|
63
|
+
|
|
64
|
+
module.exports = { name, run, EXPECTED_RULES, onError };
|
|
62
65
|
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SINAPSE Doctor — Environment Health Check Orchestrator
|
|
3
3
|
*
|
|
4
|
-
* Runs
|
|
4
|
+
* Runs modular checks against the SINAPSE environment and returns
|
|
5
5
|
* structured results with optional --fix, --json, and --dry-run support.
|
|
6
6
|
*
|
|
7
|
+
* Exception Classification (Story A.3):
|
|
8
|
+
* Each check module may export an `onError` field with one of:
|
|
9
|
+
* - 'fail' (default) — thrown exceptions map to a FAIL verdict
|
|
10
|
+
* - 'warn' — thrown exceptions map to a WARN verdict
|
|
11
|
+
* - 'skip' — thrown exceptions cause the check to be excluded
|
|
12
|
+
* from results entirely
|
|
13
|
+
*
|
|
14
|
+
* This replaces the previous behavior where the generic catch block
|
|
15
|
+
* marked every exception as FAIL, producing false alarms on fresh
|
|
16
|
+
* installs (no git repo, empty registry, missing agent memory dirs).
|
|
17
|
+
*
|
|
7
18
|
* @module sinapse-ai/doctor
|
|
8
|
-
* @version 2.
|
|
9
|
-
* @story INS-4.1
|
|
19
|
+
* @version 2.1.0
|
|
20
|
+
* @story INS-4.1, A.3
|
|
10
21
|
*/
|
|
11
22
|
|
|
12
23
|
const path = require('path');
|
|
@@ -15,7 +26,46 @@ const { formatText } = require('./formatters/text');
|
|
|
15
26
|
const { formatJson } = require('./formatters/json');
|
|
16
27
|
const { applyFixes } = require('./fix-handler');
|
|
17
28
|
|
|
18
|
-
const DOCTOR_VERSION = '2.
|
|
29
|
+
const DOCTOR_VERSION = '2.1.0';
|
|
30
|
+
|
|
31
|
+
const VALID_ON_ERROR = new Set(['fail', 'warn', 'skip']);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Map a check module's `onError` field to the verdict produced when
|
|
35
|
+
* the check itself throws. Falls back to 'fail' for safety.
|
|
36
|
+
*
|
|
37
|
+
* @param {Object} checkModule
|
|
38
|
+
* @returns {'fail' | 'warn' | 'skip'}
|
|
39
|
+
*/
|
|
40
|
+
function resolveOnError(checkModule) {
|
|
41
|
+
const declared = checkModule && checkModule.onError;
|
|
42
|
+
if (declared && VALID_ON_ERROR.has(declared)) {
|
|
43
|
+
return declared;
|
|
44
|
+
}
|
|
45
|
+
return 'fail';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Build a structured result entry for a thrown exception, based on
|
|
50
|
+
* the check's declared error policy. Returns null if the policy is
|
|
51
|
+
* 'skip' (excluded from results).
|
|
52
|
+
*
|
|
53
|
+
* @param {Object} checkModule
|
|
54
|
+
* @param {Error} error
|
|
55
|
+
* @returns {Object|null}
|
|
56
|
+
*/
|
|
57
|
+
function buildErrorResult(checkModule, error) {
|
|
58
|
+
const policy = resolveOnError(checkModule);
|
|
59
|
+
if (policy === 'skip') {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
check: checkModule.name || 'unknown',
|
|
64
|
+
status: policy === 'warn' ? 'WARN' : 'FAIL',
|
|
65
|
+
message: `Check threw error: ${error.message}`,
|
|
66
|
+
fixCommand: null,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
19
69
|
|
|
20
70
|
/**
|
|
21
71
|
* Run all doctor checks
|
|
@@ -26,7 +76,7 @@ const DOCTOR_VERSION = '2.0.0';
|
|
|
26
76
|
* @param {boolean} [options.dryRun=false] - Show what --fix would do
|
|
27
77
|
* @param {boolean} [options.quiet=false] - Minimal output
|
|
28
78
|
* @param {string} [options.projectRoot] - Project root (defaults to cwd)
|
|
29
|
-
* @returns {Promise<Object>} Doctor results
|
|
79
|
+
* @returns {Promise<Object>} Doctor results (includes `internalError` when the runner itself crashes)
|
|
30
80
|
*/
|
|
31
81
|
async function runDoctorChecks(options = {}) {
|
|
32
82
|
const {
|
|
@@ -38,58 +88,115 @@ async function runDoctorChecks(options = {}) {
|
|
|
38
88
|
projectRoot = process.cwd(),
|
|
39
89
|
} = options;
|
|
40
90
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
91
|
+
try {
|
|
92
|
+
const context = {
|
|
93
|
+
projectRoot,
|
|
94
|
+
frameworkRoot: path.resolve(__dirname, '..', '..', '..'),
|
|
95
|
+
options: { fix, json, dryRun, quiet, deep },
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Load and run all checks (deep checks only with --deep flag)
|
|
99
|
+
const checks = loadChecks({ deep });
|
|
100
|
+
const results = [];
|
|
46
101
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
status: 'FAIL',
|
|
59
|
-
message: `Check threw error: ${error.message}`,
|
|
60
|
-
fixCommand: null,
|
|
61
|
-
});
|
|
102
|
+
for (const checkModule of checks) {
|
|
103
|
+
try {
|
|
104
|
+
const result = await checkModule.run(context);
|
|
105
|
+
results.push(result);
|
|
106
|
+
} catch (error) {
|
|
107
|
+
const errorResult = buildErrorResult(checkModule, error);
|
|
108
|
+
if (errorResult !== null) {
|
|
109
|
+
results.push(errorResult);
|
|
110
|
+
}
|
|
111
|
+
// policy === 'skip' → silently exclude
|
|
112
|
+
}
|
|
62
113
|
}
|
|
63
|
-
}
|
|
64
114
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
115
|
+
// Apply fixes if requested
|
|
116
|
+
let fixResults = null;
|
|
117
|
+
if (fix || dryRun) {
|
|
118
|
+
fixResults = await applyFixes(results, context);
|
|
119
|
+
}
|
|
70
120
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
121
|
+
// Build summary
|
|
122
|
+
const summary = {
|
|
123
|
+
pass: results.filter((r) => r.status === 'PASS').length,
|
|
124
|
+
warn: results.filter((r) => r.status === 'WARN').length,
|
|
125
|
+
fail: results.filter((r) => r.status === 'FAIL').length,
|
|
126
|
+
info: results.filter((r) => r.status === 'INFO').length,
|
|
127
|
+
};
|
|
78
128
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
129
|
+
const output = {
|
|
130
|
+
version: DOCTOR_VERSION,
|
|
131
|
+
timestamp: new Date().toISOString(),
|
|
132
|
+
summary,
|
|
133
|
+
checks: results,
|
|
134
|
+
fixResults,
|
|
135
|
+
internalError: null,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// Format output
|
|
139
|
+
if (json) {
|
|
140
|
+
return { formatted: formatJson(output), data: output };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return { formatted: formatText(output, { quiet }), data: output };
|
|
144
|
+
} catch (runnerError) {
|
|
145
|
+
// Runner itself crashed (not a check throwing). Surface as exit code 3.
|
|
146
|
+
const summary = { pass: 0, warn: 0, fail: 0, info: 0 };
|
|
147
|
+
const errorPayload = {
|
|
148
|
+
message: runnerError.message,
|
|
149
|
+
stack: runnerError.stack,
|
|
150
|
+
};
|
|
151
|
+
const output = {
|
|
152
|
+
version: DOCTOR_VERSION,
|
|
153
|
+
timestamp: new Date().toISOString(),
|
|
154
|
+
summary,
|
|
155
|
+
checks: [],
|
|
156
|
+
fixResults: null,
|
|
157
|
+
internalError: errorPayload,
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const formatted = json
|
|
161
|
+
? formatJson(output)
|
|
162
|
+
: `SINAPSE Doctor v${DOCTOR_VERSION} — internal error: ${runnerError.message}`;
|
|
86
163
|
|
|
87
|
-
|
|
88
|
-
if (json) {
|
|
89
|
-
return { formatted: formatJson(output), data: output };
|
|
164
|
+
return { formatted, data: output };
|
|
90
165
|
}
|
|
166
|
+
}
|
|
91
167
|
|
|
92
|
-
|
|
168
|
+
/**
|
|
169
|
+
* Resolve a doctor result object into a canonical exit code.
|
|
170
|
+
*
|
|
171
|
+
* Story A.3 exit code mapping:
|
|
172
|
+
* 0 — PASS (no FAILs, no WARNs)
|
|
173
|
+
* 1 — WARN only (no FAILs)
|
|
174
|
+
* 2 — at least one FAIL
|
|
175
|
+
* 3 — internal runner error (runDoctorChecks itself crashed)
|
|
176
|
+
*
|
|
177
|
+
* @param {Object} result - Return value from runDoctorChecks()
|
|
178
|
+
* @returns {0 | 1 | 2 | 3}
|
|
179
|
+
*/
|
|
180
|
+
function resolveExitCode(result) {
|
|
181
|
+
if (!result || !result.data) {
|
|
182
|
+
return 3;
|
|
183
|
+
}
|
|
184
|
+
if (result.data.internalError) {
|
|
185
|
+
return 3;
|
|
186
|
+
}
|
|
187
|
+
const summary = result.data.summary || {};
|
|
188
|
+
if ((summary.fail || 0) > 0) {
|
|
189
|
+
return 2;
|
|
190
|
+
}
|
|
191
|
+
if ((summary.warn || 0) > 0) {
|
|
192
|
+
return 1;
|
|
193
|
+
}
|
|
194
|
+
return 0;
|
|
93
195
|
}
|
|
94
196
|
|
|
95
|
-
module.exports = {
|
|
197
|
+
module.exports = {
|
|
198
|
+
runDoctorChecks,
|
|
199
|
+
resolveExitCode,
|
|
200
|
+
resolveOnError,
|
|
201
|
+
DOCTOR_VERSION,
|
|
202
|
+
};
|
|
@@ -483,10 +483,15 @@ class RegistryUpdater {
|
|
|
483
483
|
}
|
|
484
484
|
|
|
485
485
|
_writeRegistry(registryData) {
|
|
486
|
+
// Story 10.24 — sortKeys: true makes the YAML output deterministic.
|
|
487
|
+
// Without it, key order follows JS object insertion order, which means
|
|
488
|
+
// semantically-identical writes can produce textually-different files
|
|
489
|
+
// and cause endless `M entity-registry.yaml` churn in `git status`.
|
|
490
|
+
// The registry is machine-managed so alphabetical key order is fine.
|
|
486
491
|
const yamlStr = yaml.dump(registryData, {
|
|
487
492
|
lineWidth: 120,
|
|
488
493
|
noRefs: true,
|
|
489
|
-
sortKeys:
|
|
494
|
+
sortKeys: true,
|
|
490
495
|
});
|
|
491
496
|
|
|
492
497
|
const dir = path.dirname(this._registryPath);
|