gentyr 1.3.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/agents/antipattern-hunter.md +176 -0
- package/.claude/agents/code-reviewer.md +205 -0
- package/.claude/agents/code-writer.md +154 -0
- package/.claude/agents/deputy-cto.md +309 -0
- package/.claude/agents/feedback-agent.md +101 -0
- package/.claude/agents/investigator.md +136 -0
- package/.claude/agents/product-manager.md +97 -0
- package/.claude/agents/project-manager.md +116 -0
- package/.claude/agents/repo-hygiene-expert.md +626 -0
- package/.claude/agents/secret-manager.md +324 -0
- package/.claude/agents/test-writer.md +354 -0
- package/.claude/commands/configure-personas.md +144 -0
- package/.claude/commands/cto-report.md +36 -0
- package/.claude/commands/demo.md +89 -0
- package/.claude/commands/deputy-cto.md +345 -0
- package/.claude/commands/hotfix.md +31 -0
- package/.claude/commands/overdrive-gentyr.md +167 -0
- package/.claude/commands/product-manager.md +32 -0
- package/.claude/commands/push-migrations.md +86 -0
- package/.claude/commands/push-secrets.md +97 -0
- package/.claude/commands/services.json.example +30 -0
- package/.claude/commands/setup-gentyr.md +396 -0
- package/.claude/commands/show.md +42 -0
- package/.claude/commands/spawn-tasks.md +79 -0
- package/.claude/commands/toggle-automation-gentyr.md +75 -0
- package/.claude/commands/toggle-product-manager.md +19 -0
- package/.claude/commands/triage.md +69 -0
- package/.claude/hooks/README.md +686 -0
- package/.claude/hooks/__tests__/README.md +129 -0
- package/.claude/hooks/agent-tracker.js +434 -0
- package/.claude/hooks/antipattern-hunter-hook.js +401 -0
- package/.claude/hooks/api-key-watcher.js +289 -0
- package/.claude/hooks/block-no-verify.js +301 -0
- package/.claude/hooks/bypass-approval-hook.js +313 -0
- package/.claude/hooks/compliance-checker.js +1309 -0
- package/.claude/hooks/config-reader.js +143 -0
- package/.claude/hooks/credential-file-guard.js +1139 -0
- package/.claude/hooks/credential-health-check.js +168 -0
- package/.claude/hooks/credential-sync-hook.js +79 -0
- package/.claude/hooks/cto-notification-hook.js +656 -0
- package/.claude/hooks/feedback-launcher.js +424 -0
- package/.claude/hooks/feedback-orchestrator.js +367 -0
- package/.claude/hooks/gentyr-splash.js +47 -0
- package/.claude/hooks/gentyr-sync.js +389 -0
- package/.claude/hooks/hourly-automation.js +3340 -0
- package/.claude/hooks/key-sync.js +899 -0
- package/.claude/hooks/lib/approval-utils.js +731 -0
- package/.claude/hooks/lib/feature-branch-helper.js +102 -0
- package/.claude/hooks/lib/worktree-manager.js +330 -0
- package/.claude/hooks/mapping-validator.js +285 -0
- package/.claude/hooks/plan-executor.js +398 -0
- package/.claude/hooks/playwright-cli-guard.js +104 -0
- package/.claude/hooks/playwright-health-check.js +71 -0
- package/.claude/hooks/pre-commit-review.js +725 -0
- package/.claude/hooks/prompts/local-spec-enforcement.md +310 -0
- package/.claude/hooks/prompts/mapping-fix.md +92 -0
- package/.claude/hooks/prompts/mapping-review.md +140 -0
- package/.claude/hooks/prompts/schema-mapper.md +185 -0
- package/.claude/hooks/prompts/spec-enforcement.md +233 -0
- package/.claude/hooks/protected-action-approval-hook.js +336 -0
- package/.claude/hooks/protected-action-gate.js +562 -0
- package/.claude/hooks/protected-actions.json +208 -0
- package/.claude/hooks/protected-actions.json.template +122 -0
- package/.claude/hooks/quota-monitor.js +490 -0
- package/.claude/hooks/reporters/jest-failure-reporter.js +401 -0
- package/.claude/hooks/reporters/playwright-failure-reporter.js +446 -0
- package/.claude/hooks/reporters/vitest-failure-reporter.js +443 -0
- package/.claude/hooks/schema-mapper-hook.js +544 -0
- package/.claude/hooks/secret-leak-detector.js +216 -0
- package/.claude/hooks/session-reviver.js +514 -0
- package/.claude/hooks/slash-command-prefetch.js +1145 -0
- package/.claude/hooks/stale-work-detector.js +205 -0
- package/.claude/hooks/stop-continue-hook.js +414 -0
- package/.claude/hooks/todo-maintenance.js +522 -0
- package/.claude/hooks/todo-processing-prompt.md +75 -0
- package/.claude/hooks/usage-optimizer.js +791 -0
- package/.claude/mcp/README.md +246 -0
- package/.claude/settings.json.template +168 -0
- package/.mcp.json.template +207 -0
- package/CLAUDE.md +340 -0
- package/CLAUDE.md.gentyr-section +89 -0
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/cli/commands/init.js +471 -0
- package/cli/commands/migrate.js +132 -0
- package/cli/commands/protect.js +271 -0
- package/cli/commands/scaffold.js +48 -0
- package/cli/commands/status.js +133 -0
- package/cli/commands/sync.js +101 -0
- package/cli/commands/uninstall.js +207 -0
- package/cli/index.js +111 -0
- package/cli/lib/config-gen.js +214 -0
- package/cli/lib/resolve-framework.js +97 -0
- package/cli/lib/state.js +140 -0
- package/cli/lib/symlinks.js +260 -0
- package/docs/AUTOMATION-SYSTEMS.md +484 -0
- package/docs/BINARY-PATCHING.md +212 -0
- package/docs/CHANGELOG.md +2830 -0
- package/docs/CREDENTIAL-DETECTION.md +151 -0
- package/docs/CTO-DASHBOARD.md +476 -0
- package/docs/DEPLOYMENT-FLOW.md +477 -0
- package/docs/DEVELOPER.md +116 -0
- package/docs/Executive.md +372 -0
- package/docs/SECRET-PATHS.md +77 -0
- package/docs/SETUP-GUIDE.md +419 -0
- package/docs/STACK.md +109 -0
- package/docs/TESTING.md +440 -0
- package/docs/assets/claude-logo.svg +3 -0
- package/docs/sessions/2026-01-24-spec-suite-implementation.md +190 -0
- package/docs/sessions/2026-02-15-feedback-e2e-audit.md +484 -0
- package/docs/sessions/2026-02-20-credential-rotation-experiments.md +340 -0
- package/docs/sessions/TEST-COVERAGE-REPORT-2026-02-20.md +168 -0
- package/docs/shared/EPHEMERAL-STATE-FILES.md +115 -0
- package/docs/shared/PROTECTION-SYSTEM.md +341 -0
- package/husky/post-commit +10 -0
- package/husky/pre-commit +40 -0
- package/husky/pre-push +94 -0
- package/package.json +43 -0
- package/packages/cto-dashboard/package-lock.json +3510 -0
- package/packages/cto-dashboard/package.json +41 -0
- package/packages/cto-dashboard/pnpm-lock.yaml +2168 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts +220 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.js +376 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.js.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/index.d.ts +121 -0
- package/packages/mcp-servers/dist/__testUtils__/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/index.js +180 -0
- package/packages/mcp-servers/dist/__testUtils__/index.js.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts +84 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.js +309 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/index.d.ts +7 -0
- package/packages/mcp-servers/dist/agent-reports/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/index.js +8 -0
- package/packages/mcp-servers/dist/agent-reports/index.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/server.d.ts +22 -0
- package/packages/mcp-servers/dist/agent-reports/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/server.js +535 -0
- package/packages/mcp-servers/dist/agent-reports/server.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/types.d.ts +258 -0
- package/packages/mcp-servers/dist/agent-reports/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/types.js +81 -0
- package/packages/mcp-servers/dist/agent-reports/types.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/index.d.ts +5 -0
- package/packages/mcp-servers/dist/agent-tracker/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/index.js +5 -0
- package/packages/mcp-servers/dist/agent-tracker/index.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/server.d.ts +12 -0
- package/packages/mcp-servers/dist/agent-tracker/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/server.js +919 -0
- package/packages/mcp-servers/dist/agent-tracker/server.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/types.d.ts +328 -0
- package/packages/mcp-servers/dist/agent-tracker/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/types.js +128 -0
- package/packages/mcp-servers/dist/agent-tracker/types.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts +27 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js +167 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.d.ts +6 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.js +6 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.d.ts +13 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.js +959 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.d.ts +41 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.js +8 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/index.d.ts +8 -0
- package/packages/mcp-servers/dist/cloudflare/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/index.js +8 -0
- package/packages/mcp-servers/dist/cloudflare/index.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/server.d.ts +16 -0
- package/packages/mcp-servers/dist/cloudflare/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/server.js +253 -0
- package/packages/mcp-servers/dist/cloudflare/server.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/types.d.ts +141 -0
- package/packages/mcp-servers/dist/cloudflare/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/types.js +53 -0
- package/packages/mcp-servers/dist/cloudflare/types.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/index.d.ts +7 -0
- package/packages/mcp-servers/dist/codecov/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/index.js +7 -0
- package/packages/mcp-servers/dist/codecov/index.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/server.d.ts +21 -0
- package/packages/mcp-servers/dist/codecov/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/server.js +376 -0
- package/packages/mcp-servers/dist/codecov/server.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/types.d.ts +269 -0
- package/packages/mcp-servers/dist/codecov/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/types.js +128 -0
- package/packages/mcp-servers/dist/codecov/types.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/index.d.ts +9 -0
- package/packages/mcp-servers/dist/cto-report/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/index.js +9 -0
- package/packages/mcp-servers/dist/cto-report/index.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/server.d.ts +14 -0
- package/packages/mcp-servers/dist/cto-report/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/server.js +859 -0
- package/packages/mcp-servers/dist/cto-report/server.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/types.d.ts +213 -0
- package/packages/mcp-servers/dist/cto-report/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/types.js +29 -0
- package/packages/mcp-servers/dist/cto-report/types.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/index.d.ts +7 -0
- package/packages/mcp-servers/dist/cto-reports/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/index.js +8 -0
- package/packages/mcp-servers/dist/cto-reports/index.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/server.d.ts +20 -0
- package/packages/mcp-servers/dist/cto-reports/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/server.js +538 -0
- package/packages/mcp-servers/dist/cto-reports/server.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/types.d.ts +236 -0
- package/packages/mcp-servers/dist/cto-reports/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/types.js +77 -0
- package/packages/mcp-servers/dist/cto-reports/types.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/index.d.ts +7 -0
- package/packages/mcp-servers/dist/deputy-cto/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/index.js +8 -0
- package/packages/mcp-servers/dist/deputy-cto/index.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/server.d.ts +23 -0
- package/packages/mcp-servers/dist/deputy-cto/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/server.js +1700 -0
- package/packages/mcp-servers/dist/deputy-cto/server.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/types.d.ts +439 -0
- package/packages/mcp-servers/dist/deputy-cto/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/types.js +102 -0
- package/packages/mcp-servers/dist/deputy-cto/types.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/index.d.ts +5 -0
- package/packages/mcp-servers/dist/elastic-logs/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/index.js +5 -0
- package/packages/mcp-servers/dist/elastic-logs/index.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/server.d.ts +18 -0
- package/packages/mcp-servers/dist/elastic-logs/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/server.js +259 -0
- package/packages/mcp-servers/dist/elastic-logs/server.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/types.d.ts +107 -0
- package/packages/mcp-servers/dist/elastic-logs/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/types.js +31 -0
- package/packages/mcp-servers/dist/elastic-logs/types.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.d.ts +2 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.js +2 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.d.ts +21 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.js +580 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.d.ts +331 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.js +40 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.d.ts +9 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.js +9 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.d.ts +36 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.js +392 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.d.ts +152 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.js +67 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.js.map +1 -0
- package/packages/mcp-servers/dist/github/index.d.ts +7 -0
- package/packages/mcp-servers/dist/github/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/index.js +7 -0
- package/packages/mcp-servers/dist/github/index.js.map +1 -0
- package/packages/mcp-servers/dist/github/server.d.ts +15 -0
- package/packages/mcp-servers/dist/github/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/server.js +686 -0
- package/packages/mcp-servers/dist/github/server.js.map +1 -0
- package/packages/mcp-servers/dist/github/types.d.ts +660 -0
- package/packages/mcp-servers/dist/github/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/types.js +209 -0
- package/packages/mcp-servers/dist/github/types.js.map +1 -0
- package/packages/mcp-servers/dist/index.d.ts +30 -0
- package/packages/mcp-servers/dist/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/index.js +32 -0
- package/packages/mcp-servers/dist/index.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.d.ts +5 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.js +5 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.d.ts +15 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.js +252 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.d.ts +74 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.js +20 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/index.d.ts +2 -0
- package/packages/mcp-servers/dist/onepassword/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/index.js +2 -0
- package/packages/mcp-servers/dist/onepassword/index.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/server.d.ts +2 -0
- package/packages/mcp-servers/dist/onepassword/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/server.js +159 -0
- package/packages/mcp-servers/dist/onepassword/server.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/types.d.ts +55 -0
- package/packages/mcp-servers/dist/onepassword/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/types.js +22 -0
- package/packages/mcp-servers/dist/onepassword/types.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/helpers.d.ts +20 -0
- package/packages/mcp-servers/dist/playwright/helpers.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/helpers.js +31 -0
- package/packages/mcp-servers/dist/playwright/helpers.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/index.d.ts +5 -0
- package/packages/mcp-servers/dist/playwright/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/index.js +5 -0
- package/packages/mcp-servers/dist/playwright/index.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/server.d.ts +13 -0
- package/packages/mcp-servers/dist/playwright/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/server.js +1201 -0
- package/packages/mcp-servers/dist/playwright/server.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/types.d.ts +216 -0
- package/packages/mcp-servers/dist/playwright/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/types.js +172 -0
- package/packages/mcp-servers/dist/playwright/types.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts +39 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js +71 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.d.ts +5 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.js +5 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.d.ts +34 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.js +538 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.d.ts +305 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.js +123 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/product-manager/server.d.ts +17 -0
- package/packages/mcp-servers/dist/product-manager/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/product-manager/server.js +690 -0
- package/packages/mcp-servers/dist/product-manager/server.js.map +1 -0
- package/packages/mcp-servers/dist/product-manager/types.d.ts +286 -0
- package/packages/mcp-servers/dist/product-manager/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/product-manager/types.js +99 -0
- package/packages/mcp-servers/dist/product-manager/types.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts +7 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.js +7 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts +19 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js +174 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts +35 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.js +465 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts +127 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.js +80 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/render/index.d.ts +8 -0
- package/packages/mcp-servers/dist/render/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/index.js +8 -0
- package/packages/mcp-servers/dist/render/index.js.map +1 -0
- package/packages/mcp-servers/dist/render/server.d.ts +15 -0
- package/packages/mcp-servers/dist/render/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/server.js +428 -0
- package/packages/mcp-servers/dist/render/server.js.map +1 -0
- package/packages/mcp-servers/dist/render/types.d.ts +273 -0
- package/packages/mcp-servers/dist/render/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/types.js +102 -0
- package/packages/mcp-servers/dist/render/types.js.map +1 -0
- package/packages/mcp-servers/dist/resend/index.d.ts +7 -0
- package/packages/mcp-servers/dist/resend/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/index.js +7 -0
- package/packages/mcp-servers/dist/resend/index.js.map +1 -0
- package/packages/mcp-servers/dist/resend/server.d.ts +15 -0
- package/packages/mcp-servers/dist/resend/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/server.js +298 -0
- package/packages/mcp-servers/dist/resend/server.js.map +1 -0
- package/packages/mcp-servers/dist/resend/types.d.ts +222 -0
- package/packages/mcp-servers/dist/resend/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/types.js +58 -0
- package/packages/mcp-servers/dist/resend/types.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/index.d.ts +6 -0
- package/packages/mcp-servers/dist/review-queue/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/index.js +6 -0
- package/packages/mcp-servers/dist/review-queue/index.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/server.d.ts +17 -0
- package/packages/mcp-servers/dist/review-queue/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/server.js +348 -0
- package/packages/mcp-servers/dist/review-queue/server.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/types.d.ts +162 -0
- package/packages/mcp-servers/dist/review-queue/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/types.js +56 -0
- package/packages/mcp-servers/dist/review-queue/types.js.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/server.d.ts +19 -0
- package/packages/mcp-servers/dist/secret-sync/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/server.js +1139 -0
- package/packages/mcp-servers/dist/secret-sync/server.js.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/types.d.ts +442 -0
- package/packages/mcp-servers/dist/secret-sync/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/types.js +113 -0
- package/packages/mcp-servers/dist/secret-sync/types.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/index.d.ts +5 -0
- package/packages/mcp-servers/dist/session-events/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/index.js +5 -0
- package/packages/mcp-servers/dist/session-events/index.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/server.d.ts +11 -0
- package/packages/mcp-servers/dist/session-events/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/server.js +290 -0
- package/packages/mcp-servers/dist/session-events/server.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/types.d.ts +213 -0
- package/packages/mcp-servers/dist/session-events/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/types.js +69 -0
- package/packages/mcp-servers/dist/session-events/types.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/index.d.ts +9 -0
- package/packages/mcp-servers/dist/session-restart/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/index.js +9 -0
- package/packages/mcp-servers/dist/session-restart/index.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/server.d.ts +20 -0
- package/packages/mcp-servers/dist/session-restart/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/server.js +411 -0
- package/packages/mcp-servers/dist/session-restart/server.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/types.d.ts +26 -0
- package/packages/mcp-servers/dist/session-restart/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/types.js +16 -0
- package/packages/mcp-servers/dist/session-restart/types.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/index.d.ts +5 -0
- package/packages/mcp-servers/dist/setup-helper/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/index.js +5 -0
- package/packages/mcp-servers/dist/setup-helper/index.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/server.d.ts +14 -0
- package/packages/mcp-servers/dist/setup-helper/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/server.js +454 -0
- package/packages/mcp-servers/dist/setup-helper/server.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/types.d.ts +81 -0
- package/packages/mcp-servers/dist/setup-helper/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/types.js +41 -0
- package/packages/mcp-servers/dist/setup-helper/types.js.map +1 -0
- package/packages/mcp-servers/dist/shared/audited-server.d.ts +31 -0
- package/packages/mcp-servers/dist/shared/audited-server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/audited-server.js +126 -0
- package/packages/mcp-servers/dist/shared/audited-server.js.map +1 -0
- package/packages/mcp-servers/dist/shared/constants.d.ts +26 -0
- package/packages/mcp-servers/dist/shared/constants.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/constants.js +41 -0
- package/packages/mcp-servers/dist/shared/constants.js.map +1 -0
- package/packages/mcp-servers/dist/shared/index.d.ts +6 -0
- package/packages/mcp-servers/dist/shared/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/index.js +6 -0
- package/packages/mcp-servers/dist/shared/index.js.map +1 -0
- package/packages/mcp-servers/dist/shared/readonly-db.d.ts +11 -0
- package/packages/mcp-servers/dist/shared/readonly-db.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/readonly-db.js +47 -0
- package/packages/mcp-servers/dist/shared/readonly-db.js.map +1 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.d.ts +20 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.js +65 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.js.map +1 -0
- package/packages/mcp-servers/dist/shared/server.d.ts +86 -0
- package/packages/mcp-servers/dist/shared/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/server.js +291 -0
- package/packages/mcp-servers/dist/shared/server.js.map +1 -0
- package/packages/mcp-servers/dist/shared/types.d.ts +113 -0
- package/packages/mcp-servers/dist/shared/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/types.js +36 -0
- package/packages/mcp-servers/dist/shared/types.js.map +1 -0
- package/packages/mcp-servers/dist/show/server.d.ts +12 -0
- package/packages/mcp-servers/dist/show/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/show/server.js +97 -0
- package/packages/mcp-servers/dist/show/server.js.map +1 -0
- package/packages/mcp-servers/dist/show/types.d.ts +19 -0
- package/packages/mcp-servers/dist/show/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/show/types.js +32 -0
- package/packages/mcp-servers/dist/show/types.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/index.d.ts +5 -0
- package/packages/mcp-servers/dist/specs-browser/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/index.js +5 -0
- package/packages/mcp-servers/dist/specs-browser/index.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/server.d.ts +13 -0
- package/packages/mcp-servers/dist/specs-browser/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/server.js +692 -0
- package/packages/mcp-servers/dist/specs-browser/server.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/types.d.ts +337 -0
- package/packages/mcp-servers/dist/specs-browser/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/types.js +134 -0
- package/packages/mcp-servers/dist/specs-browser/types.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/index.d.ts +10 -0
- package/packages/mcp-servers/dist/supabase/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/index.js +10 -0
- package/packages/mcp-servers/dist/supabase/index.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/server.d.ts +20 -0
- package/packages/mcp-servers/dist/supabase/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/server.js +451 -0
- package/packages/mcp-servers/dist/supabase/server.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/types.d.ts +196 -0
- package/packages/mcp-servers/dist/supabase/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/types.js +76 -0
- package/packages/mcp-servers/dist/supabase/types.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/index.d.ts +5 -0
- package/packages/mcp-servers/dist/todo-db/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/index.js +5 -0
- package/packages/mcp-servers/dist/todo-db/index.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/server.d.ts +13 -0
- package/packages/mcp-servers/dist/todo-db/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/server.js +649 -0
- package/packages/mcp-servers/dist/todo-db/server.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/types.d.ts +225 -0
- package/packages/mcp-servers/dist/todo-db/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/types.js +69 -0
- package/packages/mcp-servers/dist/todo-db/types.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/index.d.ts +7 -0
- package/packages/mcp-servers/dist/user-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/index.js +8 -0
- package/packages/mcp-servers/dist/user-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/server.d.ts +25 -0
- package/packages/mcp-servers/dist/user-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/server.js +914 -0
- package/packages/mcp-servers/dist/user-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/types.d.ts +415 -0
- package/packages/mcp-servers/dist/user-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/types.js +132 -0
- package/packages/mcp-servers/dist/user-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/index.d.ts +9 -0
- package/packages/mcp-servers/dist/vercel/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/index.js +9 -0
- package/packages/mcp-servers/dist/vercel/index.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/server.d.ts +17 -0
- package/packages/mcp-servers/dist/vercel/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/server.js +265 -0
- package/packages/mcp-servers/dist/vercel/server.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/types.d.ts +189 -0
- package/packages/mcp-servers/dist/vercel/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/types.js +65 -0
- package/packages/mcp-servers/dist/vercel/types.js.map +1 -0
- package/packages/mcp-servers/package-lock.json +3765 -0
- package/packages/mcp-servers/package.json +64 -0
- package/packages/mcp-servers/test/reporters/test-failure-reporter.ts +372 -0
- package/packages/mcp-servers/vitest.config.ts +27 -0
- package/scripts/__tests__/README.md +163 -0
- package/scripts/apply-credential-hardening.sh +271 -0
- package/scripts/credential-providers/manual.js +56 -0
- package/scripts/credential-providers/onepassword.js +85 -0
- package/scripts/credential-providers/provider-interface.js +104 -0
- package/scripts/encrypt-credential.js +337 -0
- package/scripts/feedback-launcher.js +338 -0
- package/scripts/feedback-orchestrator.js +373 -0
- package/scripts/fix-mcp-launcher-issues.sh +97 -0
- package/scripts/force-spawn-tasks.js +651 -0
- package/scripts/force-triage-reports.js +560 -0
- package/scripts/generate-protected-actions-spec.js +142 -0
- package/scripts/generate-proxy-certs.sh +158 -0
- package/scripts/grant-chrome-ext-permissions.sh +242 -0
- package/scripts/mcp-launcher.js +125 -0
- package/scripts/merge-settings.cjs +167 -0
- package/scripts/patch-clawd.py +844 -0
- package/scripts/patch-credential-cache.py +313 -0
- package/scripts/patches/credential-file-guard-patched.mjs +573 -0
- package/scripts/patches/credential-file-guard.js.patched +573 -0
- package/scripts/patches/verify-tokenizer.mjs +132 -0
- package/scripts/protect-framework.sh +478 -0
- package/scripts/readme-chrome.template +12 -0
- package/scripts/reap-completed-agents.js +439 -0
- package/scripts/reinstall.sh +86 -0
- package/scripts/resign-node.sh +185 -0
- package/scripts/rotation-proxy.js +656 -0
- package/scripts/rotation-stress-monitor.mjs +862 -0
- package/scripts/setup-automation-service.sh +648 -0
- package/scripts/setup-check.js +251 -0
- package/scripts/watch-claude-version.js +142 -0
- package/specs/framework/CORE-INVARIANTS.md +161 -0
- package/specs/patterns/AGENT-PATTERNS.md +223 -0
- package/specs/patterns/HOOK-PATTERNS.md +242 -0
- package/specs/patterns/MCP-SERVER-PATTERNS.md +144 -0
- package/templates/config/gitignore.template +14 -0
- package/templates/config/merge-chain-check.yml.template +51 -0
- package/templates/config/package.json.template +18 -0
- package/templates/config/pnpm-workspace.yaml +5 -0
- package/templates/config/services.json.template +18 -0
- package/templates/config/tsconfig.base.json +17 -0
- package/templates/scaffold/integrations/_template/.gitkeep +0 -0
- package/templates/scaffold/packages/logger/package.json +17 -0
- package/templates/scaffold/packages/logger/src/logger.ts +44 -0
- package/templates/scaffold/packages/shared/package.json +17 -0
- package/templates/scaffold/packages/shared/src/errors.ts +43 -0
- package/templates/scaffold/products/_product/apps/backend/package.json +21 -0
- package/templates/scaffold/products/_product/apps/backend/src/index.ts +17 -0
- package/templates/scaffold/products/_product/apps/extension/.gitkeep +0 -0
- package/templates/scaffold/products/_product/apps/web/.gitkeep +0 -0
- package/templates/scaffold/specs/global/.gitkeep +0 -0
- package/templates/scaffold/specs/local/.gitkeep +0 -0
- package/templates/scaffold/specs/reference/.gitkeep +0 -0
- package/version.json +15 -0
package/docs/TESTING.md
ADDED
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
# GENTYR - Comprehensive End-to-End Test Plan
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
This plan provides a complete inventory of all node_modules/gentyr components and an end-to-end test plan for each. The goal is to test all capabilities naturally without mocking, using realistic workflows that exercise the system as it would run in production.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Framework Component Inventory
|
|
10
|
+
|
|
11
|
+
### MCP Servers (8 total)
|
|
12
|
+
|
|
13
|
+
| Server | Database | Purpose | Key Tools |
|
|
14
|
+
|--------|----------|---------|-----------|
|
|
15
|
+
| **todo-db** | `.claude/todo.db` | Task tracking across agent sections | `create_task`, `start_task`, `complete_task`, `get_sessions_for_task` |
|
|
16
|
+
| **agent-tracker** | `agent-tracker-history.json` | Track spawned agents + session browser | `list_spawned_agents`, `list_sessions`, `search_sessions` |
|
|
17
|
+
| **specs-browser** | Filesystem (`specs/`) | Read project specifications | `list_specs`, `get_spec` |
|
|
18
|
+
| **deputy-cto** | `.claude/deputy-cto.db` | CTO question queue + commit control | `add_question`, `approve_commit`, `reject_commit`, `request_bypass` |
|
|
19
|
+
| **agent-reports** | `.claude/agent-reports.db` | Agent report triage queue | `report_to_deputy_cto`, `start_triage`, `complete_triage` |
|
|
20
|
+
| **review-queue** | `.claude/review-queue.db` | Schema mapping review | `list_pending_reviews`, `approve_review` |
|
|
21
|
+
| **session-events** | `.claude/session-events.db` | Session event logging | `session_events_record`, `session_events_search` |
|
|
22
|
+
| **cto-report** | Multiple sources | Metrics generation | `get_report`, `get_session_metrics`, `get_task_metrics` |
|
|
23
|
+
|
|
24
|
+
### Hooks (11 automation hooks + 5 utility modules)
|
|
25
|
+
|
|
26
|
+
| Hook | Trigger | Purpose | Cooldown |
|
|
27
|
+
|------|---------|---------|----------|
|
|
28
|
+
| **block-no-verify.js** | PreToolUse | Blocks `--no-verify` and bypass commands | None |
|
|
29
|
+
| **playwright-cli-guard.js** | PreToolUse(Bash) | Warn agents against CLI-based Playwright test invocation; advises MCP tools instead | None |
|
|
30
|
+
| **api-key-watcher.js** | SessionStart | Auto-rotate API keys based on usage | Per-session |
|
|
31
|
+
| **cto-notification-hook.js** | UserPromptSubmit | Display CTO status at session start | None |
|
|
32
|
+
| **todo-maintenance.js** | UserPromptSubmit | Auto-spawn todo-processing agent | 15 min |
|
|
33
|
+
| **bypass-approval-hook.js** | UserPromptSubmit | Process "APPROVE BYPASS <code>" messages | None |
|
|
34
|
+
| **antipattern-hunter-hook.js** | Post-Commit | Spawn spec violation hunters | 6 hours |
|
|
35
|
+
| **compliance-checker.js** | Post-Commit | Enforce spec compliance | 7 days per file |
|
|
36
|
+
| **schema-mapper-hook.js** | CLI/Programmatic | Generate schema mappings | 24h per schema |
|
|
37
|
+
| **hourly-automation.js** | Hourly service | Triage, plan execution, refactoring | 55 min |
|
|
38
|
+
| **pre-commit-review.js** | Git pre-commit | Deputy-CTO review + lint | Per commit |
|
|
39
|
+
| **agent-tracker.js** | Support module | Shared spawn tracking | N/A |
|
|
40
|
+
| **config-reader.js** | Support module | Shared cooldown configuration | N/A |
|
|
41
|
+
| **mapping-validator.js** | Support module | Validate spec-file-mappings.json | N/A |
|
|
42
|
+
| **plan-executor.js** | Support module | Execute pending plans (via hourly) | N/A |
|
|
43
|
+
| **usage-optimizer.js** | Support module | Dynamic cooldown adjustment | N/A |
|
|
44
|
+
|
|
45
|
+
### Git Hooks (3 total)
|
|
46
|
+
|
|
47
|
+
| Hook | Location | Triggers |
|
|
48
|
+
|------|----------|----------|
|
|
49
|
+
| **pre-commit** | `.husky/pre-commit` | lint-staged + pre-commit-review.js |
|
|
50
|
+
| **post-commit** | `.husky/post-commit` | antipattern-hunter + compliance-checker |
|
|
51
|
+
| **pre-push** | `.husky/pre-push` | Tests + repo-hygiene-expert |
|
|
52
|
+
|
|
53
|
+
### Framework Agents (8 total)
|
|
54
|
+
|
|
55
|
+
| Agent | Model | Purpose | Spawned By |
|
|
56
|
+
|-------|-------|---------|------------|
|
|
57
|
+
| **investigator** | Opus | Research and planning (read-only) | First in workflow |
|
|
58
|
+
| **code-writer** | Sonnet | Implementation | After investigator |
|
|
59
|
+
| **test-writer** | Sonnet | Unit/integration testing | After code-writer |
|
|
60
|
+
| **code-reviewer** | Opus | Review and commits | After test-writer |
|
|
61
|
+
| **project-manager** | Sonnet | Doc sync and cleanup | Last in workflow |
|
|
62
|
+
| **deputy-cto** | Opus | Commit review, CTO decisions | pre-commit-review.js, /deputy-cto |
|
|
63
|
+
| **antipattern-hunter** | Opus | Spec violation detection | antipattern-hunter-hook.js |
|
|
64
|
+
| **repo-hygiene-expert** | Opus | Repository structure audit | pre-push hook |
|
|
65
|
+
|
|
66
|
+
### Project-Specific Agents (x_test example)
|
|
67
|
+
|
|
68
|
+
These agents are NOT part of the framework - they're project-specific and stored in the project's `.claude/agents.backup/`:
|
|
69
|
+
|
|
70
|
+
| Agent | Model | Purpose | Spawned By |
|
|
71
|
+
|-------|-------|---------|------------|
|
|
72
|
+
| **federation-mapper** | Opus | Schema mapping generation | schema-mapper-hook.js |
|
|
73
|
+
| **integration-researcher** | Opus | Platform API research | Manual for integrations |
|
|
74
|
+
| **integration-frontend-dev** | Sonnet | Browser extension connector | After researcher |
|
|
75
|
+
| **integration-backend-dev** | Sonnet | Backend API connector | After researcher |
|
|
76
|
+
| **integration-guide-dev** | Sonnet | Credential setup guide | After researcher |
|
|
77
|
+
|
|
78
|
+
### Commands (2 total)
|
|
79
|
+
|
|
80
|
+
| Command | Purpose | Interactive |
|
|
81
|
+
|---------|---------|-------------|
|
|
82
|
+
| `/cto-report` | Generate CTO status report | No |
|
|
83
|
+
| `/deputy-cto` | Interactive CTO briefing session | Yes |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Test Plan
|
|
88
|
+
|
|
89
|
+
### Phase 1: MCP Server Tests (Parallel OK)
|
|
90
|
+
|
|
91
|
+
#### Test 1.1: todo-db Full CRUD
|
|
92
|
+
**Natural Action:** Create tasks for different agents, track their lifecycle
|
|
93
|
+
```
|
|
94
|
+
1. mcp__todo-db__create_task({ section: "TEST-WRITER", title: "Write auth tests" })
|
|
95
|
+
2. mcp__todo-db__list_tasks({ section: "TEST-WRITER" })
|
|
96
|
+
3. mcp__todo-db__start_task({ id: <id> })
|
|
97
|
+
4. mcp__todo-db__complete_task({ id: <id> })
|
|
98
|
+
5. mcp__todo-db__get_summary()
|
|
99
|
+
6. mcp__todo-db__cleanup()
|
|
100
|
+
```
|
|
101
|
+
**Verify:** Query `.claude/todo.db` directly; check state transitions
|
|
102
|
+
|
|
103
|
+
#### Test 1.2: todo-db Session Attribution
|
|
104
|
+
**Natural Action:** Complete a task, find which session did it
|
|
105
|
+
```
|
|
106
|
+
1. Create and complete a task
|
|
107
|
+
2. mcp__todo-db__get_sessions_for_task({ id: <completed-id> })
|
|
108
|
+
3. mcp__todo-db__browse_session({ session_id: <candidate> })
|
|
109
|
+
```
|
|
110
|
+
**Verify:** Session file content matches what was done
|
|
111
|
+
|
|
112
|
+
#### Test 1.3: specs-browser Operations
|
|
113
|
+
**Natural Action:** Look up project specifications
|
|
114
|
+
```
|
|
115
|
+
1. mcp__specs-browser__list_specs()
|
|
116
|
+
2. mcp__specs-browser__get_spec({ spec_id: "G001" })
|
|
117
|
+
3. mcp__specs-browser__get_spec({ spec_id: "TESTING" })
|
|
118
|
+
```
|
|
119
|
+
**Verify:** Spec content returned correctly; categories match directory structure
|
|
120
|
+
|
|
121
|
+
#### Test 1.4: deputy-cto Question Queue
|
|
122
|
+
**Natural Action:** Escalate a decision to CTO
|
|
123
|
+
```
|
|
124
|
+
1. mcp__deputy-cto__add_question({ type: "decision", title: "Architecture choice", description: "..." })
|
|
125
|
+
2. mcp__deputy-cto__list_questions({})
|
|
126
|
+
3. mcp__deputy-cto__read_question({ id: <id> })
|
|
127
|
+
4. mcp__deputy-cto__answer_question({ id: <id>, answer: "Use option A", decided_by: "cto" })
|
|
128
|
+
5. mcp__deputy-cto__clear_question({ id: <id> })
|
|
129
|
+
```
|
|
130
|
+
**Verify:** Question flows through states; cleared questions searchable via `search_cleared_items`
|
|
131
|
+
|
|
132
|
+
#### Test 1.5: agent-reports Triage Flow
|
|
133
|
+
**Natural Action:** Report an issue, have it triaged
|
|
134
|
+
```
|
|
135
|
+
1. mcp__agent-reports__report_to_deputy_cto({ reporting_agent: "code-reviewer", title: "Security concern", summary: "...", category: "security", priority: "high" })
|
|
136
|
+
2. mcp__agent-reports__get_reports_for_triage({ limit: 10 })
|
|
137
|
+
3. mcp__agent-reports__start_triage({ id: <id> })
|
|
138
|
+
4. mcp__agent-reports__complete_triage({ id: <id>, status: "escalated", outcome: "Added to CTO queue" })
|
|
139
|
+
```
|
|
140
|
+
**Verify:** Report moves through pending → in_progress → completed; stats updated
|
|
141
|
+
|
|
142
|
+
#### Test 1.6: cto-report Metrics
|
|
143
|
+
**Natural Action:** Generate a CTO status report
|
|
144
|
+
```
|
|
145
|
+
1. Create activity (tasks, sessions, reports)
|
|
146
|
+
2. mcp__cto-report__get_report({ hours: 24 })
|
|
147
|
+
```
|
|
148
|
+
**Verify:** Report includes token usage, session counts, task metrics, pending items
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### Phase 2: Hook Behavioral Tests (Sequential)
|
|
153
|
+
|
|
154
|
+
#### Test 2.1: PreToolUse block-no-verify
|
|
155
|
+
**Natural Action:** Try to bypass git hooks
|
|
156
|
+
**Steps:**
|
|
157
|
+
```bash
|
|
158
|
+
# Simulate hook input
|
|
159
|
+
echo '{"tool_name":"Bash","tool_input":{"command":"git commit --no-verify"}}' | node .claude/hooks/block-no-verify.js
|
|
160
|
+
```
|
|
161
|
+
**Expected:** Exit code 1, error message about blocked command
|
|
162
|
+
**Also test:** `git commit -n`, `git config core.hooksPath`, `rm -rf .husky`, `eslint --quiet`
|
|
163
|
+
|
|
164
|
+
#### Test 2.2: SessionStart cto-notification-hook
|
|
165
|
+
**Natural Action:** Start a new session, see CTO status
|
|
166
|
+
**Steps:**
|
|
167
|
+
```bash
|
|
168
|
+
node .claude/hooks/cto-notification-hook.js
|
|
169
|
+
```
|
|
170
|
+
**Expected:** JSON with `systemMessage` showing quota, token usage, pending items
|
|
171
|
+
|
|
172
|
+
#### Test 2.3: UserPromptSubmit bypass-approval-hook
|
|
173
|
+
**Natural Action:** CTO approves emergency bypass
|
|
174
|
+
**Steps:**
|
|
175
|
+
```
|
|
176
|
+
1. mcp__deputy-cto__request_bypass({ reason: "System error", reporting_agent: "test" })
|
|
177
|
+
→ Returns code like "X7K9M2"
|
|
178
|
+
2. CTO types: "APPROVE BYPASS X7K9M2"
|
|
179
|
+
3. bypass-approval-hook creates .claude/bypass-approval-token.json
|
|
180
|
+
4. mcp__deputy-cto__execute_bypass({ bypass_code: "X7K9M2" })
|
|
181
|
+
```
|
|
182
|
+
**Verify:** Token file created with 5-minute expiry; bypass proceeds
|
|
183
|
+
|
|
184
|
+
#### Test 2.4: Post-commit antipattern-hunter
|
|
185
|
+
**Natural Action:** Commit code, hunters spawn
|
|
186
|
+
**Steps:**
|
|
187
|
+
```
|
|
188
|
+
1. Reset antipattern-hunter-state.json (set lastSpawn to 7+ hours ago)
|
|
189
|
+
2. git commit -m "test commit"
|
|
190
|
+
3. Check agent-tracker-history.json
|
|
191
|
+
```
|
|
192
|
+
**Expected:** Two hunters spawned (antipattern-hunter-repo, antipattern-hunter-commit)
|
|
193
|
+
**Time Acceleration:** Modify `lastSpawn` timestamp in state file
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### Phase 3: Git Workflow Tests (Sequential)
|
|
198
|
+
|
|
199
|
+
#### Test 3.1: Full Commit Approval Flow
|
|
200
|
+
**Natural Action:** Make a code change and commit it
|
|
201
|
+
**Steps:**
|
|
202
|
+
```
|
|
203
|
+
1. Edit a TypeScript file
|
|
204
|
+
2. git add <file>
|
|
205
|
+
3. git commit -m "Add feature" (spawns deputy-cto review)
|
|
206
|
+
4. Wait for deputy-cto to call approve_commit()
|
|
207
|
+
5. git commit -m "Add feature" (second attempt succeeds)
|
|
208
|
+
6. Verify post-commit hooks run (antipattern-hunter, compliance-checker)
|
|
209
|
+
```
|
|
210
|
+
**Verify:** Commit succeeds after approval; approval token created and consumed
|
|
211
|
+
|
|
212
|
+
#### Test 3.2: Commit Rejection Flow
|
|
213
|
+
**Natural Action:** Try to commit code with security issue
|
|
214
|
+
**Steps:**
|
|
215
|
+
```
|
|
216
|
+
1. Stage file with hardcoded API key
|
|
217
|
+
2. git commit -m "test" (deputy-cto rejects)
|
|
218
|
+
3. Verify commits blocked (rejection question exists)
|
|
219
|
+
4. Run /deputy-cto to address rejection
|
|
220
|
+
5. Fix code, commit succeeds
|
|
221
|
+
```
|
|
222
|
+
**Verify:** Rejection blocks all commits until addressed
|
|
223
|
+
|
|
224
|
+
#### Test 3.3: Lint Enforcement (Unbypassable)
|
|
225
|
+
**Natural Action:** Try to commit with lint errors
|
|
226
|
+
**Steps:**
|
|
227
|
+
```
|
|
228
|
+
1. Stage TypeScript file with lint errors
|
|
229
|
+
2. Attempt commit (even with valid approval token)
|
|
230
|
+
```
|
|
231
|
+
**Expected:** Commit blocked by ESLint - cannot be bypassed
|
|
232
|
+
|
|
233
|
+
#### Test 3.4: Forbidden Config Files
|
|
234
|
+
**Natural Action:** Try to add .eslintignore
|
|
235
|
+
**Steps:**
|
|
236
|
+
```
|
|
237
|
+
1. Create .eslintignore in project root
|
|
238
|
+
2. git add .eslintignore
|
|
239
|
+
3. Attempt commit
|
|
240
|
+
```
|
|
241
|
+
**Expected:** Commit blocked with message about forbidden config files
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### Phase 4: Hourly Automation Tests (Sequential)
|
|
246
|
+
|
|
247
|
+
#### Test 4.1: Autonomous Mode Toggle
|
|
248
|
+
**Natural Action:** Enable/disable hourly automation
|
|
249
|
+
**Steps:**
|
|
250
|
+
```
|
|
251
|
+
1. mcp__deputy-cto__toggle_autonomous_mode({ enabled: true })
|
|
252
|
+
2. Check .claude/autonomous-mode.json
|
|
253
|
+
3. mcp__deputy-cto__get_autonomous_mode_status()
|
|
254
|
+
```
|
|
255
|
+
**Verify:** Config file updated; status shows next run time
|
|
256
|
+
|
|
257
|
+
#### Test 4.2: Report Triage Automation
|
|
258
|
+
**Natural Action:** Let hourly automation triage reports
|
|
259
|
+
**Steps:**
|
|
260
|
+
```
|
|
261
|
+
1. Enable autonomous mode
|
|
262
|
+
2. Create pending reports via report_to_deputy_cto
|
|
263
|
+
3. Set lastTriageCheck to 6+ minutes ago
|
|
264
|
+
4. Run: node .claude/hooks/hourly-automation.js
|
|
265
|
+
```
|
|
266
|
+
**Expected:** Deputy-CTO spawned to triage; reports move to completed
|
|
267
|
+
**Time Acceleration:** Modify `lastTriageCheck` in hourly-automation-state.json
|
|
268
|
+
|
|
269
|
+
#### Test 4.3: Task Runner (Hourly TODO Processing)
|
|
270
|
+
**Natural Action:** Let hourly automation process pending TODO items
|
|
271
|
+
**Steps:**
|
|
272
|
+
```
|
|
273
|
+
1. Enable autonomous mode with taskRunnerEnabled: true
|
|
274
|
+
2. Create TODO items via mcp__todo-db__create_task (wait >1h or backdate)
|
|
275
|
+
3. Set lastTaskRunnerCheck to 61+ minutes ago
|
|
276
|
+
4. Run: node .claude/hooks/hourly-automation.js
|
|
277
|
+
```
|
|
278
|
+
**Expected:** A separate Claude session spawned for each pending TODO >1h old
|
|
279
|
+
**Time Acceleration:** Modify `lastTaskRunnerCheck` in state file
|
|
280
|
+
|
|
281
|
+
#### Test 4.4: CLAUDE.md Refactoring
|
|
282
|
+
**Natural Action:** Let hourly automation compact CLAUDE.md
|
|
283
|
+
**Steps:**
|
|
284
|
+
```
|
|
285
|
+
1. Make CLAUDE.md > 25,000 characters
|
|
286
|
+
2. Enable claudeMdRefactorEnabled: true
|
|
287
|
+
3. Run hourly-automation.js
|
|
288
|
+
```
|
|
289
|
+
**Expected:** claudemd-refactor agent spawned; content moved to sub-files
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### Phase 5: Agent Workflow Tests (Sequential, Natural)
|
|
294
|
+
|
|
295
|
+
#### Test 5.1: Standard Bug Fix Workflow
|
|
296
|
+
**Natural Action:** Ask to fix a bug, watch full workflow
|
|
297
|
+
```
|
|
298
|
+
User: "There's a bug in the login function - it accepts empty passwords"
|
|
299
|
+
|
|
300
|
+
Expected flow:
|
|
301
|
+
1. INVESTIGATOR: Researches codebase, creates plan, creates TODOs
|
|
302
|
+
2. CODE-WRITER: Implements fix based on plan
|
|
303
|
+
3. TEST-WRITER: Adds test cases for empty password rejection
|
|
304
|
+
4. CODE-REVIEWER: Reviews changes, commits
|
|
305
|
+
5. PROJECT-MANAGER: Updates docs if needed
|
|
306
|
+
```
|
|
307
|
+
**Verify:** Each agent completes; TODOs tracked in todo-db; commit succeeds
|
|
308
|
+
|
|
309
|
+
#### Test 5.2: Antipattern Hunter Detection
|
|
310
|
+
**Natural Action:** Commit code with spec violation, let hunter find it
|
|
311
|
+
**Steps:**
|
|
312
|
+
```
|
|
313
|
+
1. Add code with G001 violation: `const value = dangerousCall() || null`
|
|
314
|
+
2. Commit the code (hunters spawn after 6h cooldown - accelerate)
|
|
315
|
+
3. Wait for hunters to complete
|
|
316
|
+
4. Check agent-reports for findings
|
|
317
|
+
5. Check todo-db for created fix tasks
|
|
318
|
+
```
|
|
319
|
+
**Verify:** Hunters detect violation; report to CTO; create TODO for fix
|
|
320
|
+
|
|
321
|
+
#### Test 5.3: Deputy-CTO Interactive Session
|
|
322
|
+
**Natural Action:** Run /deputy-cto command, address pending items
|
|
323
|
+
**Steps:**
|
|
324
|
+
```
|
|
325
|
+
1. Create: pending questions, reports, rejected commit
|
|
326
|
+
2. Run: /deputy-cto
|
|
327
|
+
3. Review items, answer questions, spawn tasks
|
|
328
|
+
4. Verify commits unblocked
|
|
329
|
+
```
|
|
330
|
+
**Verify:** All pending items addressed; commit block lifted
|
|
331
|
+
|
|
332
|
+
#### Test 5.4: CTO Report Generation
|
|
333
|
+
**Natural Action:** Run /cto-report command
|
|
334
|
+
**Steps:**
|
|
335
|
+
```
|
|
336
|
+
1. Generate activity (tasks, sessions, reports)
|
|
337
|
+
2. Run: /cto-report
|
|
338
|
+
```
|
|
339
|
+
**Verify:** Formatted report with quota, usage, sessions, tasks, pending items
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
### Phase 6: Installation Tests (Parallel, Isolated Directories)
|
|
344
|
+
|
|
345
|
+
#### Test 6.1: Fresh Installation
|
|
346
|
+
**Steps:**
|
|
347
|
+
```bash
|
|
348
|
+
mkdir /tmp/test-install && cd /tmp/test-install
|
|
349
|
+
git init
|
|
350
|
+
pnpm link ~/git/gentyr
|
|
351
|
+
npx gentyr init
|
|
352
|
+
sudo npx gentyr protect
|
|
353
|
+
```
|
|
354
|
+
**Verify:** Symlinks created, .mcp.json generated, husky hooks installed, MCP servers built, protection active
|
|
355
|
+
|
|
356
|
+
#### Test 6.2: Protection Toggle
|
|
357
|
+
**Steps:**
|
|
358
|
+
```bash
|
|
359
|
+
sudo npx gentyr unprotect
|
|
360
|
+
ls -la .claude/hooks/pre-commit-review.js # Should be user-owned
|
|
361
|
+
sudo npx gentyr protect
|
|
362
|
+
ls -la .claude/hooks/pre-commit-review.js # Should be root-owned
|
|
363
|
+
```
|
|
364
|
+
**Verify:** Protection toggles correctly
|
|
365
|
+
|
|
366
|
+
#### Test 6.3: Hourly Service Setup
|
|
367
|
+
**Steps:**
|
|
368
|
+
```bash
|
|
369
|
+
./scripts/setup-automation-service.sh
|
|
370
|
+
./scripts/setup-automation-service.sh status
|
|
371
|
+
./scripts/setup-automation-service.sh run # Manual trigger
|
|
372
|
+
./scripts/setup-automation-service.sh remove
|
|
373
|
+
```
|
|
374
|
+
**Verify:** Service installs (systemd or launchd), runs, can be removed
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Time Acceleration Strategies
|
|
379
|
+
|
|
380
|
+
| Component | Cooldown | Acceleration Method |
|
|
381
|
+
|-----------|----------|---------------------|
|
|
382
|
+
| antipattern-hunter | 6 hours | Edit `lastSpawn` in `antipattern-hunter-state.json` |
|
|
383
|
+
| compliance-checker | 7 days/file | Edit timestamps in `compliance-state.json` |
|
|
384
|
+
| todo-maintenance | 15 minutes | Edit `lastSpawn` in `todo-maintenance-state.json` |
|
|
385
|
+
| schema-mapper | 24h/schema | Edit `cooldowns` in `schema-mapper-state.json` |
|
|
386
|
+
| hourly-automation | 55 minutes | Edit `lastRun` in `hourly-automation-state.json` |
|
|
387
|
+
| approval tokens | 5 minutes | Edit `expiresAt` in token files |
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## State Files to Reset Between Tests
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# Databases
|
|
395
|
+
rm -f .claude/todo.db .claude/deputy-cto.db .claude/agent-reports.db
|
|
396
|
+
rm -f .claude/review-queue.db .claude/session-events.db
|
|
397
|
+
|
|
398
|
+
# State files
|
|
399
|
+
rm -f .claude/hooks/agent-tracker-history.json
|
|
400
|
+
rm -f .claude/hooks/antipattern-hunter-state.json
|
|
401
|
+
rm -f .claude/hooks/compliance-state.json
|
|
402
|
+
rm -f .claude/hooks/todo-maintenance-state.json
|
|
403
|
+
rm -f .claude/hooks/schema-mapper-state.json
|
|
404
|
+
rm -f .claude/hourly-automation-state.json
|
|
405
|
+
rm -f .claude/autonomous-mode.json
|
|
406
|
+
rm -f .claude/commit-approval-token.json
|
|
407
|
+
rm -f .claude/bypass-approval-token.json
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## Verification Checklist
|
|
413
|
+
|
|
414
|
+
After all tests, verify:
|
|
415
|
+
|
|
416
|
+
- [ ] All 8 MCP servers respond correctly to tool calls
|
|
417
|
+
- [ ] All 14 hooks execute without crashes
|
|
418
|
+
- [ ] Commit blocking works when CTO items pending
|
|
419
|
+
- [ ] Commit approval flow completes (spawn → review → approve → commit)
|
|
420
|
+
- [ ] Emergency bypass system works end-to-end
|
|
421
|
+
- [ ] Hourly automation runs when enabled (with time acceleration)
|
|
422
|
+
- [ ] All 8 framework agents spawn correctly from appropriate triggers
|
|
423
|
+
- [ ] Agent-tracker records all spawns with prompts
|
|
424
|
+
- [ ] TODO database maintains data integrity through lifecycle
|
|
425
|
+
- [ ] Protection system prevents unauthorized modifications
|
|
426
|
+
- [ ] Installation script is idempotent (safe to run multiple times)
|
|
427
|
+
- [ ] Uninstallation is clean (no orphaned files)
|
|
428
|
+
- [ ] All cooldowns enforced at boundaries
|
|
429
|
+
- [ ] Rate limits work (daily agent caps, per-file cooldowns)
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Test Execution Order
|
|
434
|
+
|
|
435
|
+
1. **Phase 1** (parallel): MCP Server Tests - verify all tools work
|
|
436
|
+
2. **Phase 2** (sequential): Hook Behavioral Tests - verify hook logic
|
|
437
|
+
3. **Phase 3** (sequential): Git Workflow Tests - verify commit flow
|
|
438
|
+
4. **Phase 4** (sequential): Hourly Automation Tests - verify automation
|
|
439
|
+
5. **Phase 5** (sequential): Agent Workflow Tests - verify end-to-end
|
|
440
|
+
6. **Phase 6** (parallel, isolated): Installation Tests
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#d97757" class="bi bi-claude" viewBox="0 0 16 16">
|
|
2
|
+
<path d="m3.127 10.604 3.135-1.76.053-.153-.053-.085H6.11l-.525-.032-1.791-.048-1.554-.065-1.505-.08-.38-.081L0 7.832l.036-.234.32-.214.455.04 1.009.069 1.513.105 1.097.064 1.626.17h.259l.036-.105-.089-.065-.068-.064-1.566-1.062-1.695-1.121-.887-.646-.48-.327-.243-.306-.104-.67.435-.48.585.04.15.04.593.456 1.267.981 1.654 1.218.242.202.097-.068.012-.049-.109-.181-.9-1.626-.96-1.655-.428-.686-.113-.411a2 2 0 0 1-.068-.484l.496-.674L4.446 0l.662.089.279.242.411.94.666 1.48 1.033 2.014.302.597.162.553.06.17h.105v-.097l.085-1.134.157-1.392.154-1.792.052-.504.25-.605.497-.327.387.186.319.456-.045.294-.19 1.23-.37 1.93-.243 1.29h.142l.161-.16.654-.868 1.097-1.372.484-.545.565-.601.363-.287h.686l.505.751-.226.775-.707.895-.585.759-.839 1.13-.524.904.048.072.125-.012 1.897-.403 1.024-.186 1.223-.21.553.258.06.263-.218.536-1.307.323-1.533.307-2.284.54-.028.02.032.04 1.029.098.44.024h1.077l2.005.15.525.346.315.424-.053.323-.807.411-3.631-.863-.872-.218h-.12v.073l.726.71 1.331 1.202 1.667 1.55.084.383-.214.302-.226-.032-1.464-1.101-.565-.497-1.28-1.077h-.084v.113l.295.432 1.557 2.34.08.718-.112.234-.404.141-.444-.08-.911-1.28-.94-1.44-.759-1.291-.093.053-.448 4.821-.21.246-.484.186-.403-.307-.214-.496.214-.98.258-1.28.21-1.016.19-1.263.112-.42-.008-.028-.092.012-.953 1.307-1.448 1.957-1.146 1.227-.274.109-.477-.247.045-.44.266-.39 1.586-2.018.956-1.25.617-.723-.004-.105h-.036l-4.212 2.736-.75.096-.324-.302.04-.496.154-.162 1.267-.871z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Spec Suite System Implementation
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-01-24
|
|
4
|
+
**Session Type**: Implementation
|
|
5
|
+
**Agent**: Investigator & Planner, Code-Reviewer, Test-Writer, Project-Manager
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
Implemented the spec suite system for the specs-browser MCP server and compliance-checker hook. The system allows projects to define groups of specifications (suites) that apply to specific file scopes using glob patterns.
|
|
10
|
+
|
|
11
|
+
## Implementation Details
|
|
12
|
+
|
|
13
|
+
### Phase 1: Specs Browser MCP Server
|
|
14
|
+
|
|
15
|
+
Added full CRUD operations for both specs and suites to the specs-browser MCP server.
|
|
16
|
+
|
|
17
|
+
**Files Modified:**
|
|
18
|
+
- `packages/mcp-servers/src/specs-browser/types.ts`
|
|
19
|
+
- `packages/mcp-servers/src/specs-browser/server.ts`
|
|
20
|
+
|
|
21
|
+
**New MCP Tools (8 total):**
|
|
22
|
+
|
|
23
|
+
#### Spec Management (3 tools)
|
|
24
|
+
1. `createSpec` - Create new specification files
|
|
25
|
+
2. `editSpec` - Edit existing specification files
|
|
26
|
+
3. `deleteSpec` - Delete specification files
|
|
27
|
+
|
|
28
|
+
#### Suite Management (5 tools)
|
|
29
|
+
4. `listSuites` - List all configured spec suites
|
|
30
|
+
5. `getSuite` - Get detailed configuration for a specific suite
|
|
31
|
+
6. `createSuite` - Create a new spec suite with scope and spec patterns
|
|
32
|
+
7. `editSuite` - Modify existing suite configuration
|
|
33
|
+
8. `deleteSuite` - Remove a suite from configuration
|
|
34
|
+
|
|
35
|
+
**Configuration File:**
|
|
36
|
+
- `.claude/hooks/suites-config.json` - Defines spec suites with scope patterns
|
|
37
|
+
|
|
38
|
+
**Schema Additions:**
|
|
39
|
+
- Zod validation schemas for all new operations
|
|
40
|
+
- TypeScript types for suite configuration
|
|
41
|
+
- SuiteConfig and SuitesConfig interfaces
|
|
42
|
+
|
|
43
|
+
### Phase 2: Compliance Checker Integration
|
|
44
|
+
|
|
45
|
+
Updated the compliance-checker hook to use the new suite system for enforcement.
|
|
46
|
+
|
|
47
|
+
**Files Modified:**
|
|
48
|
+
- `.claude/hooks/compliance-checker.js`
|
|
49
|
+
- `.claude/hooks/prompts/spec-enforcement.md`
|
|
50
|
+
- `.claude/hooks/prompts/local-spec-enforcement.md`
|
|
51
|
+
- `.claude/hooks/README.md`
|
|
52
|
+
|
|
53
|
+
**Key Functions Added:**
|
|
54
|
+
- `loadSuitesConfig()` - Load suite configuration from JSON
|
|
55
|
+
- `getSuitesForFile()` - Determine which suites apply to a file using glob matching
|
|
56
|
+
- `getAllApplicableSpecs()` - Collect all global specs for a file across matching suites
|
|
57
|
+
- `getAllExploratorySpecs()` - Collect all local specs for a file across matching suites
|
|
58
|
+
- `matchesGlob()` - Simple glob pattern matching implementation
|
|
59
|
+
|
|
60
|
+
**Enforcement Changes:**
|
|
61
|
+
- Global enforcement now checks files against only the specs from matching suites
|
|
62
|
+
- Local enforcement constrains exploratory agents to suite scope patterns
|
|
63
|
+
- Both prompts updated with optional suite context sections
|
|
64
|
+
|
|
65
|
+
### Phase 3: Documentation
|
|
66
|
+
|
|
67
|
+
**Files Updated:**
|
|
68
|
+
- `.claude/hooks/README.md` - Added comprehensive Spec Suites section
|
|
69
|
+
|
|
70
|
+
**Documentation Includes:**
|
|
71
|
+
- Setup instructions for suites-config.json
|
|
72
|
+
- Configuration reference with examples
|
|
73
|
+
- Suite resolution algorithm explanation
|
|
74
|
+
- MCP tools list with usage examples
|
|
75
|
+
- Backward compatibility notes
|
|
76
|
+
|
|
77
|
+
## Architecture
|
|
78
|
+
|
|
79
|
+
### Suite Structure
|
|
80
|
+
|
|
81
|
+
A suite consists of:
|
|
82
|
+
- **ID**: Unique identifier (e.g., "integration-frontend")
|
|
83
|
+
- **Description**: Human-readable purpose
|
|
84
|
+
- **Scope**: Glob pattern determining which files it applies to
|
|
85
|
+
- **Global specs**: Directory and pattern for global specs (enforced mode)
|
|
86
|
+
- **Local specs**: Directory and pattern for local specs (exploratory mode)
|
|
87
|
+
- **Enabled**: Boolean flag to activate/deactivate
|
|
88
|
+
- **Priority**: Lower number = higher priority when multiple suites match
|
|
89
|
+
|
|
90
|
+
### Pattern Matching
|
|
91
|
+
|
|
92
|
+
The implementation uses a simple custom glob matcher instead of minimatch to avoid adding dependencies. Supports:
|
|
93
|
+
- `*` - Match anything except path separator
|
|
94
|
+
- `**` - Match zero or more path segments
|
|
95
|
+
- Basic literal matching
|
|
96
|
+
|
|
97
|
+
### Backward Compatibility
|
|
98
|
+
|
|
99
|
+
The system maintains full backward compatibility:
|
|
100
|
+
- If `suites-config.json` doesn't exist, enforcement uses legacy behavior
|
|
101
|
+
- Existing spec-file-mappings.json still supported
|
|
102
|
+
- No breaking changes to existing workflows
|
|
103
|
+
|
|
104
|
+
## Verification
|
|
105
|
+
|
|
106
|
+
### Build Verification
|
|
107
|
+
```bash
|
|
108
|
+
cd packages/mcp-servers
|
|
109
|
+
npm run build
|
|
110
|
+
```
|
|
111
|
+
Result: TypeScript compilation passed with no errors
|
|
112
|
+
|
|
113
|
+
### JavaScript Syntax Check
|
|
114
|
+
```bash
|
|
115
|
+
node --check .claude/hooks/compliance-checker.js
|
|
116
|
+
```
|
|
117
|
+
Result: No syntax errors
|
|
118
|
+
|
|
119
|
+
### Code Review
|
|
120
|
+
- All changes reviewed by code-reviewer agent
|
|
121
|
+
- No spec violations found
|
|
122
|
+
- Implementation follows project conventions
|
|
123
|
+
|
|
124
|
+
## Test Coverage Gap
|
|
125
|
+
|
|
126
|
+
**Issue Identified**: The test-writer agent identified that tests are needed for:
|
|
127
|
+
|
|
128
|
+
1. **8 new MCP tools** in specs-browser server:
|
|
129
|
+
- createSpec, editSpec, deleteSpec
|
|
130
|
+
- listSuites, getSuite, createSuite, editSuite, deleteSuite
|
|
131
|
+
|
|
132
|
+
2. **compliance-checker.js**: No tests exist for this file at all
|
|
133
|
+
|
|
134
|
+
**Test Framework**: Tests should use Vitest (not Jest) per project standards
|
|
135
|
+
|
|
136
|
+
**Action Taken**: Report submitted to deputy-cto for triage
|
|
137
|
+
|
|
138
|
+
## Related Files
|
|
139
|
+
|
|
140
|
+
### Implementation Files
|
|
141
|
+
- `packages/mcp-servers/src/specs-browser/types.ts`
|
|
142
|
+
- `packages/mcp-servers/src/specs-browser/server.ts`
|
|
143
|
+
- `.claude/hooks/compliance-checker.js`
|
|
144
|
+
- `.claude/hooks/prompts/spec-enforcement.md`
|
|
145
|
+
- `.claude/hooks/prompts/local-spec-enforcement.md`
|
|
146
|
+
|
|
147
|
+
### Documentation Files
|
|
148
|
+
- `.claude/hooks/README.md`
|
|
149
|
+
- `docs/SPEC-SUITE-SYSTEM-PLAN.md` (planning document)
|
|
150
|
+
|
|
151
|
+
### Configuration Files
|
|
152
|
+
- `.claude/hooks/suites-config.json` (runtime, created by projects)
|
|
153
|
+
|
|
154
|
+
## Impact
|
|
155
|
+
|
|
156
|
+
### User-Facing Changes
|
|
157
|
+
- Projects can now configure spec suites via MCP tools
|
|
158
|
+
- Specs can be scoped to specific directories using glob patterns
|
|
159
|
+
- Integration-specific specs only check integration files
|
|
160
|
+
- Reduces noise from spec enforcement
|
|
161
|
+
|
|
162
|
+
### Framework Changes
|
|
163
|
+
- Specs-browser MCP server expanded with 8 new tools
|
|
164
|
+
- Compliance checker supports suite-based enforcement
|
|
165
|
+
- New configuration file format (suites-config.json)
|
|
166
|
+
|
|
167
|
+
### Portability
|
|
168
|
+
The implementation is fully portable across projects:
|
|
169
|
+
- Framework code in .claude/hooks (symlinked)
|
|
170
|
+
- MCP server in packages/mcp-servers (shared)
|
|
171
|
+
- Project-specific config in .claude/hooks/suites-config.json
|
|
172
|
+
|
|
173
|
+
## Next Steps
|
|
174
|
+
|
|
175
|
+
1. **Testing**: Implement Vitest tests for new MCP tools and compliance-checker
|
|
176
|
+
2. **Project Setup**: Create example suites-config.json for production projects
|
|
177
|
+
3. **Documentation**: Add usage examples to project CLAUDE.md files
|
|
178
|
+
4. **Migration**: Create migration utility for projects using spec-file-mappings.json
|
|
179
|
+
|
|
180
|
+
## Session Metadata
|
|
181
|
+
|
|
182
|
+
**Agents Involved:**
|
|
183
|
+
- investigator: Initial planning and design
|
|
184
|
+
- code-reviewer: Code review and verification
|
|
185
|
+
- test-writer: Test coverage analysis and gap identification
|
|
186
|
+
- project-manager: Documentation and organization
|
|
187
|
+
|
|
188
|
+
**Session Duration**: ~2 hours
|
|
189
|
+
**Commit Status**: Changes ready for commit (verified)
|
|
190
|
+
**Test Status**: Tests needed (reported to deputy-cto)
|