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
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
# GENTYR Deployment Flow Reference
|
|
2
|
+
|
|
3
|
+
Complete deployment pipeline reference for GENTYR-managed projects.
|
|
4
|
+
|
|
5
|
+
## Infrastructure Architecture
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Vercel (Frontend) <--> Render (Backend API) <--> Supabase (Database)
|
|
9
|
+
| |
|
|
10
|
+
Cloudflare (DNS) 1Password (Secrets)
|
|
11
|
+
| |
|
|
12
|
+
GitHub Actions (CI/CD) Elastic Cloud (Logs)
|
|
13
|
+
|
|
|
14
|
+
Resend (Email)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 4 Environments
|
|
18
|
+
|
|
19
|
+
| Environment | Branch | Frontend | Backend | Database | CTO Protection |
|
|
20
|
+
|-------------|--------|----------|---------|----------|----------------|
|
|
21
|
+
| **Development** | `feature/*` | localhost | localhost | Supabase preview branch | None |
|
|
22
|
+
| **Preview** | `preview` | Vercel preview | Render staging | Supabase preview branch | None |
|
|
23
|
+
| **Staging** | `staging` | Vercel staging | Render staging | Supabase staging branch | Optional |
|
|
24
|
+
| **Production** | `main` | Vercel production | Render production | Supabase main branch | **Required** |
|
|
25
|
+
|
|
26
|
+
## Branch Strategy & Merge Chain
|
|
27
|
+
|
|
28
|
+
### Canonical Chain
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
feature/* --PR--> preview --PR--> staging --PR--> main (production)
|
|
32
|
+
| | | |
|
|
33
|
+
| No approval | Deputy-CTO | CTO |
|
|
34
|
+
| | approval | approval |
|
|
35
|
+
v v v v
|
|
36
|
+
CI only Vercel preview Vercel staging Vercel prod
|
|
37
|
+
Render staging Render staging Render prod
|
|
38
|
+
Supabase preview Supabase staging Supabase main
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Merge Rules (ENFORCED)
|
|
42
|
+
|
|
43
|
+
| Source | Target | Allowed | Approval |
|
|
44
|
+
|--------|--------|---------|----------|
|
|
45
|
+
| `feature/*` | `preview` | YES | None (agent autonomous) |
|
|
46
|
+
| `preview` | `staging` | YES | Deputy-CTO |
|
|
47
|
+
| `staging` | `main` | YES | **CTO** |
|
|
48
|
+
| `feature/*` | `staging` | **FORBIDDEN** | - |
|
|
49
|
+
| `feature/*` | `main` | **FORBIDDEN** | - |
|
|
50
|
+
| `preview` | `main` | **FORBIDDEN** | - |
|
|
51
|
+
|
|
52
|
+
Enforcement: `merge-chain-check.yml` CI workflow (required status check) + agent instructions.
|
|
53
|
+
|
|
54
|
+
**Why CI enforcement?** GitHub has NO native rule on any plan (Teams or Enterprise) to restrict which source branch a PR comes from. The `merge-chain-check.yml` workflow fills this gap.
|
|
55
|
+
|
|
56
|
+
## Local Branch Protection
|
|
57
|
+
|
|
58
|
+
### Pre-Commit Guard (Unbypassable)
|
|
59
|
+
|
|
60
|
+
GENTYR enforces branch protection at the local level via pre-commit and pre-push hooks. Direct commits to protected branches (`main`, `staging`, `preview`) are blocked:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
COMMIT BLOCKED: Direct commits to 'main' are forbidden.
|
|
64
|
+
|
|
65
|
+
Merge chain: feature/* -> preview -> staging -> main
|
|
66
|
+
|
|
67
|
+
Create a feature branch:
|
|
68
|
+
git checkout -b feature/<name> preview
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The guard is enforced by `.claude/hooks/pre-commit-review.js` and cannot be bypassed with `--no-verify` (blocked by `block-no-verify.js`).
|
|
72
|
+
|
|
73
|
+
**Exception**: Promotion pipeline agents with `GENTYR_PROMOTION_PIPELINE=true` are allowed to merge PRs to protected branches.
|
|
74
|
+
|
|
75
|
+
### Pre-Push Guard
|
|
76
|
+
|
|
77
|
+
The pre-push hook (`templates/config/husky/pre-push.template`) blocks direct pushes to protected branches:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
PUSH BLOCKED: Direct pushes to 'main' are forbidden.
|
|
81
|
+
|
|
82
|
+
Merge chain: feature/* -> preview -> staging -> main
|
|
83
|
+
Push to your feature branch instead, then create a PR to preview.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
This provides immediate local feedback before any attempt to push to a protected branch.
|
|
87
|
+
|
|
88
|
+
## Git Worktrees for Concurrent Agents
|
|
89
|
+
|
|
90
|
+
GENTYR uses git worktrees to enable multiple agents to work concurrently on separate feature branches without checkout conflicts. Each agent gets an isolated working directory.
|
|
91
|
+
|
|
92
|
+
**Worktree lifecycle:**
|
|
93
|
+
1. Task agent spawns → worktree manager creates `.claude/worktrees/<branch-name>/`
|
|
94
|
+
2. Worktree provisioned with symlinks to `.claude/agents/`, `.claude/hooks/`, `.husky/`
|
|
95
|
+
3. Worktree-specific `.mcp.json` generated with `CLAUDE_PROJECT_DIR` pointing to main project
|
|
96
|
+
4. Agent works in isolation, commits to feature branch
|
|
97
|
+
5. After branch merged to preview → worktree cleanup (6-hour cycle)
|
|
98
|
+
|
|
99
|
+
**State isolation:** SQLite databases (todo.db, deputy-cto.db, agent-tracker.db) remain in main project directory, shared via `CLAUDE_PROJECT_DIR` environment variable.
|
|
100
|
+
|
|
101
|
+
**Modules:**
|
|
102
|
+
- `.claude/hooks/lib/worktree-manager.js` - Worktree lifecycle (create, provision, cleanup)
|
|
103
|
+
- `.claude/hooks/lib/feature-branch-helper.js` - Branch naming and protection checks
|
|
104
|
+
|
|
105
|
+
## Feature Branch Workflow
|
|
106
|
+
|
|
107
|
+
### Creating Feature Branches
|
|
108
|
+
|
|
109
|
+
All work should be organized into descriptive feature branches:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Create from latest preview
|
|
113
|
+
git checkout preview
|
|
114
|
+
git pull origin preview
|
|
115
|
+
git checkout -b feature/add-user-auth
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Automated creation:** When task agents spawn, the worktree manager automatically creates feature branches from `preview` if they don't exist.
|
|
119
|
+
|
|
120
|
+
### Branch Naming
|
|
121
|
+
|
|
122
|
+
- `feature/<description>` -- New functionality
|
|
123
|
+
- `fix/<description>` -- Bug fixes
|
|
124
|
+
- `refactor/<description>` -- Code refactoring
|
|
125
|
+
- `docs/<description>` -- Documentation changes
|
|
126
|
+
|
|
127
|
+
### Merging to Preview
|
|
128
|
+
|
|
129
|
+
When the feature is complete and CI passes:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Push feature branch
|
|
133
|
+
git push -u origin feature/add-user-auth
|
|
134
|
+
|
|
135
|
+
# Create PR to preview
|
|
136
|
+
gh pr create --base preview --title "Add user authentication" --body "..."
|
|
137
|
+
|
|
138
|
+
# Merge after CI passes (no approval needed)
|
|
139
|
+
gh pr merge --merge
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### When to Merge
|
|
143
|
+
|
|
144
|
+
- CI passes (lint, type check, unit tests, build)
|
|
145
|
+
- Code review complete
|
|
146
|
+
- No blocking issues
|
|
147
|
+
- Feature is functionally complete
|
|
148
|
+
|
|
149
|
+
### When NOT to Merge
|
|
150
|
+
|
|
151
|
+
- Tests failing
|
|
152
|
+
- Unresolved code review issues
|
|
153
|
+
- Incomplete feature
|
|
154
|
+
- Blocked by dependencies
|
|
155
|
+
|
|
156
|
+
## Emergency Hotfix Pathway
|
|
157
|
+
|
|
158
|
+
When production is broken and a fix has already landed on staging, the CTO can trigger immediate promotion bypassing time gates.
|
|
159
|
+
|
|
160
|
+
**Prerequisites:**
|
|
161
|
+
- Fix must be merged to staging
|
|
162
|
+
- CTO authorization required
|
|
163
|
+
|
|
164
|
+
**Workflow:**
|
|
165
|
+
1. Agent calls `mcp__deputy-cto__request_hotfix_promotion`
|
|
166
|
+
- Validates staging has unreleased commits
|
|
167
|
+
- Returns 6-character approval code (expires in 5 minutes)
|
|
168
|
+
2. Agent presents code to CTO: `APPROVE HOTFIX <code>`
|
|
169
|
+
3. CTO types approval in terminal (agents cannot trigger UserPromptSubmit hooks)
|
|
170
|
+
4. Agent calls `mcp__deputy-cto__execute_hotfix_promotion` with code
|
|
171
|
+
- Validates HMAC-signed token
|
|
172
|
+
- Spawns staging→main promotion agent immediately
|
|
173
|
+
|
|
174
|
+
**What Gets Bypassed:**
|
|
175
|
+
- 24-hour stability requirement
|
|
176
|
+
- Midnight deployment window
|
|
177
|
+
|
|
178
|
+
**What Remains Required:**
|
|
179
|
+
- Code review (via spawned promotion agent)
|
|
180
|
+
- Deputy-CTO approval
|
|
181
|
+
- Isolated worktree (no disruption to other work)
|
|
182
|
+
|
|
183
|
+
**Safety:**
|
|
184
|
+
- One-time codes (HMAC-signed, consumed on use)
|
|
185
|
+
- 5-minute expiration
|
|
186
|
+
- Only CTO can approve (terminal input required)
|
|
187
|
+
|
|
188
|
+
See `.claude/commands/hotfix.md` for usage details.
|
|
189
|
+
|
|
190
|
+
## Automated Promotion Pipelines
|
|
191
|
+
|
|
192
|
+
### Preview -> Staging (6-hour cycle)
|
|
193
|
+
|
|
194
|
+
The hourly automation checks every 6 hours for new commits on `preview` not yet in `staging`.
|
|
195
|
+
|
|
196
|
+
**Conditions:**
|
|
197
|
+
1. New commits exist on `preview` not in `staging`
|
|
198
|
+
2. >= 24 hours since last staging merge (unless bug-fix commits detected)
|
|
199
|
+
3. Bug-fix fast-track: Commits with keywords `fix`, `bug`, `hotfix`, `patch`, `critical` bypass the 24h wait
|
|
200
|
+
|
|
201
|
+
**Pipeline:**
|
|
202
|
+
1. Spawn code-reviewer agent to review commits
|
|
203
|
+
2. Spawn test-writer agent to assess test quality
|
|
204
|
+
3. If both pass, deputy-CTO makes the merge decision
|
|
205
|
+
4. Deputy-CTO creates PR: `gh pr create --base staging --head preview`
|
|
206
|
+
5. Wait for CI to pass, then merge
|
|
207
|
+
|
|
208
|
+
### Staging -> Production (midnight cycle)
|
|
209
|
+
|
|
210
|
+
Checked once nightly during the midnight window (00:00-00:30).
|
|
211
|
+
|
|
212
|
+
**Conditions:**
|
|
213
|
+
1. New commits exist on `staging` not in `main`
|
|
214
|
+
2. Staging has been stable >= 24 hours (no bypass)
|
|
215
|
+
3. Midnight time window
|
|
216
|
+
|
|
217
|
+
**Pipeline:**
|
|
218
|
+
1. Same review pipeline (code-reviewer + test-writer)
|
|
219
|
+
2. Deputy-CTO creates PR: `gh pr create --base main --head staging`
|
|
220
|
+
3. Deputy-CTO creates CTO decision task via `add_question`
|
|
221
|
+
4. CTO approves via `/deputy-cto` slash command
|
|
222
|
+
5. Merge executed after CTO approval
|
|
223
|
+
|
|
224
|
+
## Stale Work Detection
|
|
225
|
+
|
|
226
|
+
GENTYR automatically detects stale branches and uncommitted work via `.claude/hooks/stale-work-detector.js`.
|
|
227
|
+
|
|
228
|
+
**Detection categories:**
|
|
229
|
+
1. **Uncommitted changes** - `git status --porcelain` in project directory
|
|
230
|
+
2. **Unpushed commits** - `git log origin/<branch>..HEAD --oneline` for each local branch
|
|
231
|
+
3. **Stale feature branches** - Remote feature branches with no PR activity in 3+ days
|
|
232
|
+
|
|
233
|
+
**Integration:**
|
|
234
|
+
- Runs every 24 hours via hourly automation
|
|
235
|
+
- Reports via `mcp__agent-reports__report_to_deputy_cto` with category `git-hygiene`
|
|
236
|
+
- Surfaced in `/deputy-cto` briefing under "Merge Chain Status"
|
|
237
|
+
- Deputy-CTO either auto-handles (spawns cleanup task) or escalates to CTO
|
|
238
|
+
|
|
239
|
+
**Deputy-CTO MCP tool:** `get_merge_chain_status` returns structured merge chain state for briefing.
|
|
240
|
+
|
|
241
|
+
## Health Monitoring
|
|
242
|
+
|
|
243
|
+
### Staging Health Monitor (3-hour cycle)
|
|
244
|
+
|
|
245
|
+
Runs every 3 hours when the `staging` branch exists and has been deployed.
|
|
246
|
+
|
|
247
|
+
**Checks:**
|
|
248
|
+
| Check | MCP Tool | What to Look For |
|
|
249
|
+
|-------|----------|-----------------|
|
|
250
|
+
| Render service status | `mcp__render__render_get_service` | Service health, deploy failures |
|
|
251
|
+
| Render recent deploys | `mcp__render__render_list_deploys` | Failed or stuck deploys |
|
|
252
|
+
| Vercel deployments | `mcp__vercel__vercel_list_deployments` | Build failures, error states |
|
|
253
|
+
| Elasticsearch errors | `mcp__elastic-logs__query_logs` | `level:error` in last 3h |
|
|
254
|
+
| Error rate stats | `mcp__elastic-logs__get_log_stats` | Error count grouped by service |
|
|
255
|
+
| Supabase health | Supabase MCP tools | Migration issues, connectivity |
|
|
256
|
+
|
|
257
|
+
**Reporting:** Issues are reported to deputy-CTO via `mcp__cto-reports__report_to_cto` and fixer tasks are created via `create_task` with `priority: 'urgent'`.
|
|
258
|
+
|
|
259
|
+
### Production Health Monitor (1-hour cycle)
|
|
260
|
+
|
|
261
|
+
Same checks as staging (targeting production services), plus:
|
|
262
|
+
|
|
263
|
+
| Additional Action | MCP Tool | Purpose |
|
|
264
|
+
|-------------------|----------|---------|
|
|
265
|
+
| CTO escalation | `mcp__deputy-cto__add_question` | Creates CTO decision task |
|
|
266
|
+
| Deputy-CTO report | `mcp__cto-reports__report_to_cto` | Health report for triage |
|
|
267
|
+
| Fixer task | `mcp__todo-db__create_task` (priority: urgent) | Tasks to address issues |
|
|
268
|
+
|
|
269
|
+
Production issues use `priority: "critical"` for reporting and escalation.
|
|
270
|
+
|
|
271
|
+
### Service IDs
|
|
272
|
+
|
|
273
|
+
Health monitors read service IDs from `.claude/config/services.json`:
|
|
274
|
+
|
|
275
|
+
```json
|
|
276
|
+
{
|
|
277
|
+
"render": {
|
|
278
|
+
"production": "srv-xxx",
|
|
279
|
+
"staging": "srv-yyy"
|
|
280
|
+
},
|
|
281
|
+
"vercel": {
|
|
282
|
+
"projectId": "prj_xxx"
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
This file is created during `/setup-gentyr` Phase 4.
|
|
288
|
+
|
|
289
|
+
## Deployment Pipeline
|
|
290
|
+
|
|
291
|
+
### Stage 1: Feature Development
|
|
292
|
+
|
|
293
|
+
1. Create feature branch from `preview`
|
|
294
|
+
2. Develop and test locally
|
|
295
|
+
3. CI runs: lint, type check, unit tests, build
|
|
296
|
+
4. Push to feature branch
|
|
297
|
+
|
|
298
|
+
### Stage 2: Preview
|
|
299
|
+
|
|
300
|
+
1. Create PR: `feature/*` -> `preview`
|
|
301
|
+
2. CI runs (merge-chain-check, lint, tests, build)
|
|
302
|
+
3. Merge (no approval needed)
|
|
303
|
+
4. Vercel deploys preview
|
|
304
|
+
5. Supabase preview branch active
|
|
305
|
+
|
|
306
|
+
### Stage 3: Staging
|
|
307
|
+
|
|
308
|
+
1. Automated pipeline creates PR: `preview` -> `staging` (every 6h)
|
|
309
|
+
2. Code review + test assessment
|
|
310
|
+
3. Deputy-CTO approves
|
|
311
|
+
4. CI runs
|
|
312
|
+
5. Merge
|
|
313
|
+
6. Vercel deploys staging
|
|
314
|
+
7. Render deploys staging
|
|
315
|
+
|
|
316
|
+
### Stage 4: Production
|
|
317
|
+
|
|
318
|
+
1. Automated pipeline creates PR: `staging` -> `main` (nightly)
|
|
319
|
+
2. Code review + test assessment
|
|
320
|
+
3. Deputy-CTO creates CTO decision task
|
|
321
|
+
4. **CTO approves** via `/deputy-cto`
|
|
322
|
+
5. CI runs (includes security scan)
|
|
323
|
+
6. Merge
|
|
324
|
+
7. Vercel deploys production
|
|
325
|
+
8. Render deploys production
|
|
326
|
+
|
|
327
|
+
## CI Pipeline
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
Merge Chain Check ─────────────────────────────────────────────
|
|
331
|
+
|
|
|
332
|
+
Lint & Type Check ──> Unit Tests ──> Security Scan ──> Build ──|
|
|
333
|
+
| |
|
|
334
|
+
Integration Tests ──> E2E Tests |
|
|
335
|
+
|
|
|
336
|
+
Deploy (per branch target) <───────────────────────────────────
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Required status checks per branch:**
|
|
340
|
+
|
|
341
|
+
| Branch | Required Checks |
|
|
342
|
+
|--------|----------------|
|
|
343
|
+
| `preview` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build |
|
|
344
|
+
| `staging` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build |
|
|
345
|
+
| `main` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build, Security Scan |
|
|
346
|
+
|
|
347
|
+
## MCP Tools for Deployment & Monitoring
|
|
348
|
+
|
|
349
|
+
| Tool | Action | Approval |
|
|
350
|
+
|------|--------|----------|
|
|
351
|
+
| `mcp__vercel__vercel_list_deployments` | List deployments | None |
|
|
352
|
+
| `mcp__vercel__vercel_promote_deployment` | Promote deployment | `APPROVE DEPLOY` |
|
|
353
|
+
| `mcp__vercel__vercel_rollback` | Rollback deployment | `APPROVE DEPLOY` |
|
|
354
|
+
| `mcp__vercel__vercel_create_env_var` | Set environment variable | `APPROVE DEPLOY` |
|
|
355
|
+
| `mcp__render__render_list_services` | List services | None |
|
|
356
|
+
| `mcp__render__render_get_service` | Get service details | None |
|
|
357
|
+
| `mcp__render__render_trigger_deploy` | Trigger deployment | `APPROVE INFRA` |
|
|
358
|
+
| `mcp__render__render_update_service` | Update service config | `APPROVE INFRA` |
|
|
359
|
+
| `mcp__render__render_create_env_var` | Set environment variable | `APPROVE INFRA` |
|
|
360
|
+
| `mcp__supabase__supabase_sql` | Execute SQL | `APPROVE DATABASE` |
|
|
361
|
+
| `mcp__github__github_merge_pull_request` | Merge PR | `APPROVE GIT` |
|
|
362
|
+
| `mcp__github__github_create_pull_request` | Create PR | `APPROVE GIT` |
|
|
363
|
+
| `mcp__elastic-logs__query_logs` | Query logs | None |
|
|
364
|
+
| `mcp__elastic-logs__get_log_stats` | Log statistics | None |
|
|
365
|
+
|
|
366
|
+
## GENTYR Approval Gates
|
|
367
|
+
|
|
368
|
+
| Phrase | Scope | When Required |
|
|
369
|
+
|--------|-------|---------------|
|
|
370
|
+
| `APPROVE GIT` | GitHub: merges, secrets, branch protection | Production merges, secret management |
|
|
371
|
+
| `APPROVE DEPLOY` | Vercel: promotions, env vars, rollbacks | Frontend deployment changes |
|
|
372
|
+
| `APPROVE INFRA` | Render: deploys, service changes, env vars | Backend infrastructure changes |
|
|
373
|
+
| `APPROVE DATABASE` | Supabase: SQL, migrations, deletions | Database operations on production |
|
|
374
|
+
| `APPROVE DNS` | Cloudflare: DNS record changes | DNS configuration |
|
|
375
|
+
| `APPROVE VAULT` | 1Password: service account creation | Secret management infrastructure |
|
|
376
|
+
| `APPROVE EMAIL` | Resend: API key management | Email service configuration |
|
|
377
|
+
| `APPROVE BYPASS` | Deputy-CTO: emergency bypass | Bypassing automated protections |
|
|
378
|
+
| `APPROVE HOTFIX` | Deputy-CTO: emergency promotion | Immediate staging→main promotion |
|
|
379
|
+
|
|
380
|
+
## Rollback Procedures
|
|
381
|
+
|
|
382
|
+
### Frontend (Vercel)
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
# List recent deployments
|
|
386
|
+
mcp__vercel__vercel_list_deployments
|
|
387
|
+
|
|
388
|
+
# Rollback to previous deployment (requires APPROVE DEPLOY)
|
|
389
|
+
mcp__vercel__vercel_rollback
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Backend (Render)
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# View recent deploys
|
|
396
|
+
mcp__render__render_list_deploys
|
|
397
|
+
|
|
398
|
+
# Trigger redeploy of last known good commit (requires APPROVE INFRA)
|
|
399
|
+
mcp__render__render_trigger_deploy
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Database (Supabase)
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
# Check migration status (requires APPROVE DATABASE for production)
|
|
406
|
+
mcp__supabase__supabase_sql
|
|
407
|
+
|
|
408
|
+
# Rollback migration (requires APPROVE DATABASE)
|
|
409
|
+
# Run the down migration SQL
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Full Rollback
|
|
413
|
+
|
|
414
|
+
For critical production issues:
|
|
415
|
+
1. Rollback frontend (Vercel) -- immediate
|
|
416
|
+
2. Rollback backend (Render) -- redeploy previous commit
|
|
417
|
+
3. Rollback database -- run down migration if applicable
|
|
418
|
+
4. Verify health via production health monitor
|
|
419
|
+
|
|
420
|
+
## Branch Protection Setup
|
|
421
|
+
|
|
422
|
+
### GitHub Teams Plan (Branch Protection Rules)
|
|
423
|
+
|
|
424
|
+
Go to: Repository > Settings > Branches > Add branch protection rule
|
|
425
|
+
|
|
426
|
+
#### `preview` branch
|
|
427
|
+
|
|
428
|
+
- Branch name pattern: `preview`
|
|
429
|
+
- Require a pull request before merging: YES
|
|
430
|
+
- Required approving reviews: `0` (feature -> preview is autonomous)
|
|
431
|
+
- Dismiss stale pull request approvals: YES
|
|
432
|
+
- Require status checks to pass: YES
|
|
433
|
+
- Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`
|
|
434
|
+
- Require branches to be up to date: YES
|
|
435
|
+
- Block force pushes: YES
|
|
436
|
+
- Do not allow bypassing the above settings: YES
|
|
437
|
+
|
|
438
|
+
#### `staging` branch
|
|
439
|
+
|
|
440
|
+
- Branch name pattern: `staging`
|
|
441
|
+
- Require a pull request before merging: YES
|
|
442
|
+
- Required approving reviews: `1` (deputy-CTO review)
|
|
443
|
+
- Dismiss stale pull request approvals: YES
|
|
444
|
+
- Require status checks to pass: YES
|
|
445
|
+
- Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`
|
|
446
|
+
- Require branches to be up to date: YES
|
|
447
|
+
- Block force pushes: YES
|
|
448
|
+
- Do not allow bypassing the above settings: YES
|
|
449
|
+
|
|
450
|
+
#### `main` branch
|
|
451
|
+
|
|
452
|
+
- Branch name pattern: `main`
|
|
453
|
+
- Require a pull request before merging: YES
|
|
454
|
+
- Required approving reviews: `1` (CTO review)
|
|
455
|
+
- Dismiss stale pull request approvals: YES
|
|
456
|
+
- Require status checks to pass: YES
|
|
457
|
+
- Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`, `Security Scan`
|
|
458
|
+
- Require branches to be up to date: YES
|
|
459
|
+
- Block force pushes: YES
|
|
460
|
+
- Do not allow bypassing the above settings: YES
|
|
461
|
+
- Restrict who can push: (optional, restrict to admins only)
|
|
462
|
+
|
|
463
|
+
### GitHub Enterprise Cloud (Additional Features)
|
|
464
|
+
|
|
465
|
+
If on Enterprise Cloud, also configure:
|
|
466
|
+
- **Organization Rulesets** (Settings > Rules > Rulesets): Apply merge chain rules across all repos
|
|
467
|
+
- **Deployment Protection Rules**: Require manual approval for `staging` and `production` environments
|
|
468
|
+
- **Merge Queue** for `main`: Automatically rebase and test PRs before merging
|
|
469
|
+
- **Required Team Reviews**: Use rulesets to require specific team approvals
|
|
470
|
+
|
|
471
|
+
## Prerequisites
|
|
472
|
+
|
|
473
|
+
- `gh` CLI installed and authenticated: `gh auth login`
|
|
474
|
+
- Branch protection configured per above
|
|
475
|
+
- `.claude/config/services.json` populated with service IDs
|
|
476
|
+
- All MCP servers configured via `/setup-gentyr`
|
|
477
|
+
- `merge-chain-check.yml` in `.github/workflows/` (copied from GENTYR template)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# GENTYR Developer Guide
|
|
2
|
+
|
|
3
|
+
Local development from the cloned gentyr source repository.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js 20+
|
|
8
|
+
- pnpm 8+
|
|
9
|
+
- Claude Code CLI
|
|
10
|
+
|
|
11
|
+
## Setup: Link gentyr to a target project
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
cd ~/git/my-project # your target project
|
|
15
|
+
pnpm link ~/git/gentyr # creates node_modules/gentyr -> ~/git/gentyr
|
|
16
|
+
npx gentyr init --op-token TOKEN # first-time setup (configs, symlinks, services)
|
|
17
|
+
sudo npx gentyr protect # optional: enable root-owned file protection
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`pnpm link` creates a symlink from `node_modules/gentyr` to your local gentyr working tree. All framework changes propagate automatically through this symlink.
|
|
21
|
+
|
|
22
|
+
## Propagation model
|
|
23
|
+
|
|
24
|
+
After linking, editing anything in `~/git/gentyr` takes effect:
|
|
25
|
+
|
|
26
|
+
| What you edit | When it takes effect | Mechanism |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| Hook JS code (`.claude/hooks/`) | Immediate | Directory symlink |
|
|
29
|
+
| Command MDs (`.claude/commands/`) | Immediate | Directory symlink |
|
|
30
|
+
| Agent definitions (`.claude/agents/*.md`) | Immediate | File symlinks |
|
|
31
|
+
| MCP docs (`.claude/docs/`) | Immediate | Directory symlink |
|
|
32
|
+
| MCP server dist JS | Immediate (after TS build) | Referenced via node_modules/gentyr in .mcp.json |
|
|
33
|
+
| `settings.json.template` | Next Claude Code session | SessionStart re-merges on config hash change |
|
|
34
|
+
| `.mcp.json.template` | Next Claude Code session | SessionStart regenerates on config hash change |
|
|
35
|
+
| MCP TypeScript source | Next Claude Code session | Auto-rebuild attempted; build explicitly after edits |
|
|
36
|
+
| Husky hooks (`husky/`) | Next Claude Code session | Auto-sync compares and re-copies |
|
|
37
|
+
| `CLAUDE.md.gentyr-section` | Next Claude Code session | SessionStart replaces managed section |
|
|
38
|
+
| New agent definitions | Next Claude Code session | SessionStart symlinks on version change |
|
|
39
|
+
| `rotation-proxy.js` | Next service restart | Launchd plist uses resolved path |
|
|
40
|
+
| `hourly-automation.js` | Next 10-min trigger | Launchd plist uses symlink path |
|
|
41
|
+
| Launchd plist config | `npx gentyr sync` in target project | Developer responsibility (rare) |
|
|
42
|
+
|
|
43
|
+
No manual copy steps are needed. Everything auto-propagates through symlinks or the SessionStart sync hook.
|
|
44
|
+
|
|
45
|
+
## Migrate an existing project
|
|
46
|
+
|
|
47
|
+
If the target project was previously installed via `.claude-framework`:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
cd ~/git/my-project
|
|
51
|
+
pnpm link ~/git/gentyr # creates node_modules/gentyr
|
|
52
|
+
npx gentyr migrate # converts symlinks, regenerates .mcp.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Common development tasks
|
|
56
|
+
|
|
57
|
+
### Edit a hook
|
|
58
|
+
|
|
59
|
+
Edit the file directly in `~/git/gentyr/.claude/hooks/`. Changes are visible immediately in any linked project (directory symlink).
|
|
60
|
+
|
|
61
|
+
### Edit an MCP server
|
|
62
|
+
|
|
63
|
+
Edit TypeScript in `~/git/gentyr/packages/mcp-servers/src/`. The next Claude Code session will auto-rebuild when it detects `src/` is newer than `dist/`. Or rebuild manually:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cd ~/git/gentyr/packages/mcp-servers && npm run build
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Edit settings.json.template
|
|
70
|
+
|
|
71
|
+
Edit `~/git/gentyr/.claude/settings.json.template`. The next Claude Code session detects the config hash change and re-merges into the target project's `settings.json`.
|
|
72
|
+
|
|
73
|
+
### Edit husky hooks
|
|
74
|
+
|
|
75
|
+
Edit files in `~/git/gentyr/husky/`. The next Claude Code session compares content and re-copies any changed hooks to `.husky/` in the target project.
|
|
76
|
+
|
|
77
|
+
### Edit CLAUDE.md section
|
|
78
|
+
|
|
79
|
+
Edit `~/git/gentyr/CLAUDE.md.gentyr-section`. The next Claude Code session replaces the managed section (between `<!-- GENTYR-FRAMEWORK-START -->` and `<!-- GENTYR-FRAMEWORK-END -->` markers) in the target project's `CLAUDE.md`.
|
|
80
|
+
|
|
81
|
+
### Force sync everything
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
cd ~/git/my-project && npx gentyr sync
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Rebuilds MCP servers, re-merges settings.json, regenerates .mcp.json, syncs husky hooks, and regenerates launchd plists.
|
|
88
|
+
|
|
89
|
+
## Protection
|
|
90
|
+
|
|
91
|
+
Root-owned file protection prevents agent self-modification of critical framework files:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
sudo npx gentyr protect # enable protection
|
|
95
|
+
sudo npx gentyr unprotect # disable (required before editing protected files)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
When protection is active, `.claude/hooks/` is root-owned. You must unprotect before creating new files there.
|
|
99
|
+
|
|
100
|
+
## Verify installation
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd ~/git/my-project && npx gentyr status
|
|
104
|
+
cd ~/git/my-project && claude mcp list # verify all MCP servers start
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## For published package users
|
|
108
|
+
|
|
109
|
+
Non-developers install from npm:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
pnpm add gentyr
|
|
113
|
+
npx gentyr init --op-token TOKEN
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Updates require `pnpm update gentyr`.
|