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
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* validate-install-docs.js
|
|
5
|
+
*
|
|
6
|
+
* Story 10.13 — Doc-drift guard for the canonical install commands.
|
|
7
|
+
*
|
|
8
|
+
* Scans user-facing installation documentation for any reference to a
|
|
9
|
+
* non-canonical install/update/uninstall command. Fails with exit code 1
|
|
10
|
+
* (and a clear, grep-friendly report) if drift is detected.
|
|
11
|
+
*
|
|
12
|
+
* Canonical commands (the ONLY public entry points):
|
|
13
|
+
* npx sinapse-ai install
|
|
14
|
+
* npx sinapse-ai update
|
|
15
|
+
* npx sinapse-ai uninstall
|
|
16
|
+
*
|
|
17
|
+
* Non-canonical patterns the guard rejects in public docs:
|
|
18
|
+
* - `sinapse install|update|uninstall` (missing the `-ai` suffix)
|
|
19
|
+
* - `sinapse-minimal` (internal/legacy binary)
|
|
20
|
+
* - `sinapse-graph` (internal/legacy binary)
|
|
21
|
+
* - `install-squads.sh` (internal script, must not be exposed)
|
|
22
|
+
* - `update-squads.sh` (internal script, must not be exposed)
|
|
23
|
+
* - `install-chrome-brain.sh` (internal script, must not be exposed)
|
|
24
|
+
* - `install-monitor-hooks.sh` (internal script, must not be exposed)
|
|
25
|
+
*
|
|
26
|
+
* Allow-lists (to prevent false positives):
|
|
27
|
+
* - Sections explicitly marked as `### Internal (developer-only)` within a
|
|
28
|
+
* file are treated as developer notes and skipped by the scanner. The
|
|
29
|
+
* section ends at the next heading of equal or higher level.
|
|
30
|
+
* - Historical / release-notes paths: `CHANGELOG.md`, `docs/releases/**`,
|
|
31
|
+
* `docs/changelog/**`.
|
|
32
|
+
*
|
|
33
|
+
* Usage:
|
|
34
|
+
* node scripts/validate-install-docs.js [--root <dir>]
|
|
35
|
+
*
|
|
36
|
+
* Exit codes:
|
|
37
|
+
* 0 = no drift
|
|
38
|
+
* 1 = drift detected (report printed to stdout)
|
|
39
|
+
* 2 = usage / filesystem error (message printed to stderr)
|
|
40
|
+
*
|
|
41
|
+
* The scanner is pure (no side-effects) so it can be unit-tested by passing
|
|
42
|
+
* a custom `rootDir` to `validateInstallDocs()` — see tests/scripts/validate-install-docs.test.js.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
'use strict';
|
|
46
|
+
|
|
47
|
+
const fs = require('fs');
|
|
48
|
+
const path = require('path');
|
|
49
|
+
|
|
50
|
+
// ── Rules ────────────────────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Each rule has a regex and a human-readable reason. The regex is applied
|
|
54
|
+
* line-by-line so the reporter can pinpoint the exact line number.
|
|
55
|
+
*/
|
|
56
|
+
const FORBIDDEN_PATTERNS = [
|
|
57
|
+
{
|
|
58
|
+
id: 'legacy-sinapse-install',
|
|
59
|
+
regex: /\bsinapse\s+install\b/,
|
|
60
|
+
reason: 'Use `npx sinapse-ai install` (the `sinapse install` form is deprecated).',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'legacy-sinapse-update',
|
|
64
|
+
regex: /\bsinapse\s+update\b/,
|
|
65
|
+
reason: 'Use `npx sinapse-ai update` (the `sinapse update` form is deprecated).',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'legacy-sinapse-uninstall',
|
|
69
|
+
regex: /\bsinapse\s+uninstall\b/,
|
|
70
|
+
reason: 'Use `npx sinapse-ai uninstall` (the `sinapse uninstall` form is deprecated).',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'sinapse-minimal-binary',
|
|
74
|
+
regex: /\bsinapse-minimal\b/,
|
|
75
|
+
reason: '`sinapse-minimal` is internal/deprecated. Use `npx sinapse-ai install`.',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'sinapse-graph-binary',
|
|
79
|
+
regex: /\bsinapse-graph\b/,
|
|
80
|
+
reason: '`sinapse-graph` is internal/deprecated. Use `npx sinapse-ai --help`.',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'install-squads-script',
|
|
84
|
+
regex: /\binstall-squads\.sh\b/,
|
|
85
|
+
reason: 'Internal script — do not expose in public docs. It runs under `npx sinapse-ai install`.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'update-squads-script',
|
|
89
|
+
regex: /\bupdate-squads\.sh\b/,
|
|
90
|
+
reason: 'Internal script — do not expose in public docs. It runs under `npx sinapse-ai update`.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'install-chrome-brain-script',
|
|
94
|
+
regex: /\binstall-chrome-brain\.sh\b/,
|
|
95
|
+
reason:
|
|
96
|
+
'Internal script — use `npx sinapse-ai chrome-brain install`. Developer-only mentions must live under a `### Internal (developer-only)` section.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'install-monitor-hooks-script',
|
|
100
|
+
regex: /\binstall-monitor-hooks\.sh\b/,
|
|
101
|
+
reason:
|
|
102
|
+
'Internal script — must be invoked internally by `npx sinapse-ai install`, never shown as a user-facing command.',
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
|
|
106
|
+
// ── Paths ────────────────────────────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Directories whose `.md` files are public user-facing installation docs.
|
|
110
|
+
* Everything in these trees is scanned.
|
|
111
|
+
*/
|
|
112
|
+
const PUBLIC_DOC_DIRS = ['docs/installation'];
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Additional top-level public doc files (relative to root).
|
|
116
|
+
*/
|
|
117
|
+
const PUBLIC_DOC_FILES = ['README.md'];
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Path fragments that identify historical / release notes. Any file whose
|
|
121
|
+
* relative path (forward-slash normalized) contains one of these is skipped
|
|
122
|
+
* even if it lives under a public directory.
|
|
123
|
+
*/
|
|
124
|
+
const HISTORICAL_PATH_FRAGMENTS = [
|
|
125
|
+
'CHANGELOG.md',
|
|
126
|
+
'docs/releases/',
|
|
127
|
+
'docs/changelog/',
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
// ── Internal-section allow-list ──────────────────────────────────────────────
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Matches a heading that opens a developer-only section. The section is
|
|
134
|
+
* considered active until the next heading of the same or higher level.
|
|
135
|
+
*
|
|
136
|
+
* Accepts both exact phrasing and the loose form "internal — developer-only".
|
|
137
|
+
*/
|
|
138
|
+
const INTERNAL_SECTION_HEADING = /^(#{1,6})\s+Internal\s*(\(|—|-)\s*developer[-\s]?only/i;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Walk the file line-by-line and return the set of line indices (0-based)
|
|
142
|
+
* that fall inside an "Internal (developer-only)" block. These lines are
|
|
143
|
+
* exempt from the forbidden-pattern scan.
|
|
144
|
+
*/
|
|
145
|
+
function computeAllowedLineSet(lines) {
|
|
146
|
+
const allowed = new Set();
|
|
147
|
+
let insideInternal = false;
|
|
148
|
+
let internalLevel = 0;
|
|
149
|
+
// Track fenced code blocks so that shell comments like `# Run this` inside
|
|
150
|
+
// a ```bash``` block are NOT misinterpreted as markdown headings (which
|
|
151
|
+
// would incorrectly close an internal section).
|
|
152
|
+
let insideFence = false;
|
|
153
|
+
|
|
154
|
+
const FENCE_RE = /^\s*(```|~~~)/;
|
|
155
|
+
|
|
156
|
+
for (let i = 0; i < lines.length; i++) {
|
|
157
|
+
const line = lines[i];
|
|
158
|
+
|
|
159
|
+
// Toggle code-fence state first — everything else honours the current state.
|
|
160
|
+
if (FENCE_RE.test(line)) {
|
|
161
|
+
// If we are inside an internal block, the fence lines themselves are allowed.
|
|
162
|
+
if (insideInternal) allowed.add(i);
|
|
163
|
+
insideFence = !insideFence;
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (insideFence) {
|
|
168
|
+
// Lines inside a fenced block are verbatim content — never treat them as
|
|
169
|
+
// headings. If we are inside an internal section, they are allowed.
|
|
170
|
+
if (insideInternal) allowed.add(i);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const headingMatch = line.match(/^(#{1,6})\s+/);
|
|
175
|
+
|
|
176
|
+
if (insideInternal && headingMatch) {
|
|
177
|
+
const level = headingMatch[1].length;
|
|
178
|
+
if (level <= internalLevel) {
|
|
179
|
+
// New heading at same or higher level closes the internal block.
|
|
180
|
+
insideInternal = false;
|
|
181
|
+
internalLevel = 0;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const internalMatch = line.match(INTERNAL_SECTION_HEADING);
|
|
186
|
+
if (internalMatch) {
|
|
187
|
+
insideInternal = true;
|
|
188
|
+
internalLevel = internalMatch[1].length;
|
|
189
|
+
// The heading line itself is part of the allowed region.
|
|
190
|
+
allowed.add(i);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (insideInternal) {
|
|
195
|
+
allowed.add(i);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return allowed;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// ── File discovery ───────────────────────────────────────────────────────────
|
|
203
|
+
|
|
204
|
+
function isHistorical(relPath) {
|
|
205
|
+
const normalized = relPath.replace(/\\/g, '/');
|
|
206
|
+
return HISTORICAL_PATH_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function walkMarkdown(rootDir, relDir, collected) {
|
|
210
|
+
const absDir = path.join(rootDir, relDir);
|
|
211
|
+
let entries;
|
|
212
|
+
try {
|
|
213
|
+
entries = fs.readdirSync(absDir, { withFileTypes: true });
|
|
214
|
+
} catch {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
const entryRel = path.posix.join(relDir.replace(/\\/g, '/'), entry.name);
|
|
219
|
+
if (entry.isDirectory()) {
|
|
220
|
+
walkMarkdown(rootDir, entryRel, collected);
|
|
221
|
+
} else if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
|
|
222
|
+
if (!isHistorical(entryRel)) collected.push(entryRel);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function discoverPublicDocs(rootDir) {
|
|
228
|
+
const files = [];
|
|
229
|
+
for (const dir of PUBLIC_DOC_DIRS) {
|
|
230
|
+
walkMarkdown(rootDir, dir, files);
|
|
231
|
+
}
|
|
232
|
+
for (const file of PUBLIC_DOC_FILES) {
|
|
233
|
+
const abs = path.join(rootDir, file);
|
|
234
|
+
if (fs.existsSync(abs) && !isHistorical(file)) files.push(file);
|
|
235
|
+
}
|
|
236
|
+
return files;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// ── Scanner ──────────────────────────────────────────────────────────────────
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Scan a single file for forbidden patterns, respecting internal-section
|
|
243
|
+
* allow-lists. Returns an array of violation objects.
|
|
244
|
+
*
|
|
245
|
+
* @param {string} rootDir
|
|
246
|
+
* @param {string} relPath
|
|
247
|
+
* @returns {Array<{file:string, line:number, col:number, ruleId:string, reason:string, snippet:string}>}
|
|
248
|
+
*/
|
|
249
|
+
function scanFile(rootDir, relPath) {
|
|
250
|
+
const absPath = path.join(rootDir, relPath);
|
|
251
|
+
const content = fs.readFileSync(absPath, 'utf8');
|
|
252
|
+
const lines = content.split(/\r?\n/);
|
|
253
|
+
const allowed = computeAllowedLineSet(lines);
|
|
254
|
+
const violations = [];
|
|
255
|
+
|
|
256
|
+
for (let i = 0; i < lines.length; i++) {
|
|
257
|
+
if (allowed.has(i)) continue;
|
|
258
|
+
const line = lines[i];
|
|
259
|
+
for (const rule of FORBIDDEN_PATTERNS) {
|
|
260
|
+
const match = line.match(rule.regex);
|
|
261
|
+
if (match) {
|
|
262
|
+
violations.push({
|
|
263
|
+
file: relPath,
|
|
264
|
+
line: i + 1,
|
|
265
|
+
col: (match.index || 0) + 1,
|
|
266
|
+
ruleId: rule.id,
|
|
267
|
+
reason: rule.reason,
|
|
268
|
+
snippet: line.trim(),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return violations;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Validate all public install docs under `rootDir`. Returns a structured
|
|
279
|
+
* result object (no side effects). Callers decide how to present it.
|
|
280
|
+
*
|
|
281
|
+
* @param {string} rootDir
|
|
282
|
+
* @returns {{ok:boolean, scanned:string[], violations:Array<object>}}
|
|
283
|
+
*/
|
|
284
|
+
function validateInstallDocs(rootDir) {
|
|
285
|
+
const scanned = discoverPublicDocs(rootDir);
|
|
286
|
+
const violations = [];
|
|
287
|
+
for (const relPath of scanned) {
|
|
288
|
+
violations.push(...scanFile(rootDir, relPath));
|
|
289
|
+
}
|
|
290
|
+
return { ok: violations.length === 0, scanned, violations };
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// ── Reporter ─────────────────────────────────────────────────────────────────
|
|
294
|
+
|
|
295
|
+
function formatReport(result) {
|
|
296
|
+
const lines = [];
|
|
297
|
+
lines.push('');
|
|
298
|
+
lines.push('=== validate-install-docs ===');
|
|
299
|
+
lines.push(`Scanned ${result.scanned.length} public install doc(s).`);
|
|
300
|
+
if (result.ok) {
|
|
301
|
+
lines.push('');
|
|
302
|
+
lines.push('OK — no drift detected. Every public doc uses the canonical');
|
|
303
|
+
lines.push('`npx sinapse-ai install | update | uninstall` commands.');
|
|
304
|
+
lines.push('');
|
|
305
|
+
return lines.join('\n');
|
|
306
|
+
}
|
|
307
|
+
lines.push('');
|
|
308
|
+
lines.push(`FAIL — ${result.violations.length} non-canonical reference(s):`);
|
|
309
|
+
lines.push('');
|
|
310
|
+
for (const v of result.violations) {
|
|
311
|
+
lines.push(` ${v.file}:${v.line}:${v.col} [${v.ruleId}]`);
|
|
312
|
+
lines.push(` ${v.snippet}`);
|
|
313
|
+
lines.push(` -> ${v.reason}`);
|
|
314
|
+
lines.push('');
|
|
315
|
+
}
|
|
316
|
+
lines.push('Canonical commands:');
|
|
317
|
+
lines.push(' npx sinapse-ai install');
|
|
318
|
+
lines.push(' npx sinapse-ai update');
|
|
319
|
+
lines.push(' npx sinapse-ai uninstall');
|
|
320
|
+
lines.push('');
|
|
321
|
+
lines.push('Wrap developer-only mentions in an `### Internal (developer-only)` section to opt them out.');
|
|
322
|
+
lines.push('');
|
|
323
|
+
return lines.join('\n');
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// ── CLI entry point ──────────────────────────────────────────────────────────
|
|
327
|
+
|
|
328
|
+
function parseArgs(argv) {
|
|
329
|
+
const args = { root: process.cwd() };
|
|
330
|
+
for (let i = 0; i < argv.length; i++) {
|
|
331
|
+
const a = argv[i];
|
|
332
|
+
if (a === '--root' || a === '-r') {
|
|
333
|
+
args.root = argv[++i];
|
|
334
|
+
} else if (a === '--help' || a === '-h') {
|
|
335
|
+
args.help = true;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return args;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function printUsage() {
|
|
342
|
+
process.stdout.write(
|
|
343
|
+
[
|
|
344
|
+
'Usage: node scripts/validate-install-docs.js [--root <dir>]',
|
|
345
|
+
'',
|
|
346
|
+
'Validates that user-facing install docs reference only the canonical',
|
|
347
|
+
'`npx sinapse-ai install | update | uninstall` commands.',
|
|
348
|
+
'',
|
|
349
|
+
'Options:',
|
|
350
|
+
' --root, -r <dir> Root directory to scan (defaults to cwd).',
|
|
351
|
+
' --help, -h Show this help.',
|
|
352
|
+
'',
|
|
353
|
+
].join('\n'),
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
function main() {
|
|
358
|
+
const args = parseArgs(process.argv.slice(2));
|
|
359
|
+
if (args.help) {
|
|
360
|
+
printUsage();
|
|
361
|
+
process.exit(0);
|
|
362
|
+
}
|
|
363
|
+
try {
|
|
364
|
+
const rootAbs = path.resolve(args.root);
|
|
365
|
+
if (!fs.existsSync(rootAbs)) {
|
|
366
|
+
process.stderr.write(`error: root directory not found: ${rootAbs}\n`);
|
|
367
|
+
process.exit(2);
|
|
368
|
+
}
|
|
369
|
+
const result = validateInstallDocs(rootAbs);
|
|
370
|
+
process.stdout.write(formatReport(result));
|
|
371
|
+
process.exit(result.ok ? 0 : 1);
|
|
372
|
+
} catch (err) {
|
|
373
|
+
process.stderr.write(`error: ${err && err.message ? err.message : err}\n`);
|
|
374
|
+
process.exit(2);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// Exports for unit testing.
|
|
379
|
+
module.exports = {
|
|
380
|
+
FORBIDDEN_PATTERNS,
|
|
381
|
+
PUBLIC_DOC_DIRS,
|
|
382
|
+
PUBLIC_DOC_FILES,
|
|
383
|
+
HISTORICAL_PATH_FRAGMENTS,
|
|
384
|
+
computeAllowedLineSet,
|
|
385
|
+
discoverPublicDocs,
|
|
386
|
+
scanFile,
|
|
387
|
+
validateInstallDocs,
|
|
388
|
+
formatReport,
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
// Only run the CLI when invoked directly (not when required by tests).
|
|
392
|
+
if (require.main === module) {
|
|
393
|
+
main();
|
|
394
|
+
}
|