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