@coralai/sps-cli 0.55.13 → 0.56.1
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/dist/commands/cardMarkComplete.d.ts.map +1 -1
- package/dist/commands/cardMarkComplete.js +6 -3
- package/dist/commands/cardMarkComplete.js.map +1 -1
- package/dist/commands/projectInit.d.ts +18 -16
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +59 -186
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/skillCommand.js +7 -4
- package/dist/commands/skillCommand.js.map +1 -1
- package/dist/commands/tick.d.ts +2 -20
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +58 -1
- package/dist/commands/tick.js.map +1 -1
- package/dist/console/index.d.ts.map +1 -1
- package/dist/console/index.js +4 -0
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +211 -6
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/projects.d.ts +0 -6
- package/dist/console/routes/projects.d.ts.map +1 -1
- package/dist/console/routes/projects.js +11 -2
- package/dist/console/routes/projects.js.map +1 -1
- package/dist/console/routes/providers.d.ts +10 -0
- package/dist/console/routes/providers.d.ts.map +1 -0
- package/dist/console/routes/providers.js +63 -0
- package/dist/console/routes/providers.js.map +1 -0
- package/dist/console/routes/smartarrange.d.ts +4 -0
- package/dist/console/routes/smartarrange.d.ts.map +1 -0
- package/dist/console/routes/smartarrange.js +107 -0
- package/dist/console/routes/smartarrange.js.map +1 -0
- package/dist/console/routes/system.d.ts.map +1 -1
- package/dist/console/routes/system.js +28 -0
- package/dist/console/routes/system.js.map +1 -1
- package/dist/console/routes/workers.d.ts.map +1 -1
- package/dist/console/routes/workers.js +36 -4
- package/dist/console/routes/workers.js.map +1 -1
- package/dist/console-assets/assets/index-CWkYVI5d.js +600 -0
- package/dist/console-assets/assets/index-CnUBHNsN.css +10 -0
- package/dist/console-assets/index.html +2 -2
- package/dist/core/agents/AcpBackend.d.ts +24 -0
- package/dist/core/agents/AcpBackend.d.ts.map +1 -0
- package/dist/core/agents/AcpBackend.js +86 -0
- package/dist/core/agents/AcpBackend.js.map +1 -0
- package/dist/core/agents/AgentBackend.d.ts +53 -0
- package/dist/core/agents/AgentBackend.d.ts.map +1 -0
- package/dist/core/agents/AgentBackend.js +18 -0
- package/dist/core/agents/AgentBackend.js.map +1 -0
- package/dist/core/agents/ClaudeAcpBackend.d.ts +13 -0
- package/dist/core/agents/ClaudeAcpBackend.d.ts.map +1 -0
- package/dist/core/agents/ClaudeAcpBackend.js +14 -0
- package/dist/core/agents/ClaudeAcpBackend.js.map +1 -0
- package/dist/core/agents/ClaudeSdkBackend.d.ts +26 -0
- package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -0
- package/dist/core/agents/ClaudeSdkBackend.js +102 -0
- package/dist/core/agents/ClaudeSdkBackend.js.map +1 -0
- package/dist/core/agents/CodexAppServerBackend.d.ts +33 -0
- package/dist/core/agents/CodexAppServerBackend.d.ts.map +1 -0
- package/dist/core/agents/CodexAppServerBackend.js +168 -0
- package/dist/core/agents/CodexAppServerBackend.js.map +1 -0
- package/dist/core/agents/OpenAiAgentBackend.d.ts +39 -0
- package/dist/core/agents/OpenAiAgentBackend.d.ts.map +1 -0
- package/dist/core/agents/OpenAiAgentBackend.js +132 -0
- package/dist/core/agents/OpenAiAgentBackend.js.map +1 -0
- package/dist/core/agents/agentsMd.d.ts +2 -0
- package/dist/core/agents/agentsMd.d.ts.map +1 -0
- package/dist/core/agents/agentsMd.js +22 -0
- package/dist/core/agents/agentsMd.js.map +1 -0
- package/dist/core/agents/localTracing.d.ts +3 -0
- package/dist/core/agents/localTracing.d.ts.map +1 -0
- package/dist/core/agents/localTracing.js +42 -0
- package/dist/core/agents/localTracing.js.map +1 -0
- package/dist/core/agents/resolveBackend.d.ts +26 -0
- package/dist/core/agents/resolveBackend.d.ts.map +1 -0
- package/dist/core/agents/resolveBackend.js +27 -0
- package/dist/core/agents/resolveBackend.js.map +1 -0
- package/dist/core/agents/workerOutputSink.d.ts +4 -0
- package/dist/core/agents/workerOutputSink.d.ts.map +1 -0
- package/dist/core/agents/workerOutputSink.js +39 -0
- package/dist/core/agents/workerOutputSink.js.map +1 -0
- package/dist/core/config.d.ts +6 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +4 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/intel/RuntimeSession.d.ts +16 -0
- package/dist/core/intel/RuntimeSession.d.ts.map +1 -0
- package/dist/core/intel/RuntimeSession.js +89 -0
- package/dist/core/intel/RuntimeSession.js.map +1 -0
- package/dist/core/intel/agentsConfig.d.ts +20 -0
- package/dist/core/intel/agentsConfig.d.ts.map +1 -0
- package/dist/core/intel/agentsConfig.js +68 -0
- package/dist/core/intel/agentsConfig.js.map +1 -0
- package/dist/core/intel/planStore.d.ts +23 -0
- package/dist/core/intel/planStore.d.ts.map +1 -0
- package/dist/core/intel/planStore.js +67 -0
- package/dist/core/intel/planStore.js.map +1 -0
- package/dist/core/intel/types.d.ts +86 -0
- package/dist/core/intel/types.d.ts.map +1 -0
- package/dist/core/intel/types.js +8 -0
- package/dist/core/intel/types.js.map +1 -0
- package/dist/core/memoryIngest.d.ts +18 -0
- package/dist/core/memoryIngest.d.ts.map +1 -0
- package/dist/core/memoryIngest.js +56 -0
- package/dist/core/memoryIngest.js.map +1 -0
- package/dist/core/memoryProvider.d.ts +63 -0
- package/dist/core/memoryProvider.d.ts.map +1 -0
- package/dist/core/memoryProvider.js +205 -0
- package/dist/core/memoryProvider.js.map +1 -0
- package/dist/core/skillStore.d.ts.map +1 -1
- package/dist/core/skillStore.js +2 -1
- package/dist/core/skillStore.js.map +1 -1
- package/dist/core/skills/SkillsManager.d.ts +38 -0
- package/dist/core/skills/SkillsManager.d.ts.map +1 -0
- package/dist/core/skills/SkillsManager.js +231 -0
- package/dist/core/skills/SkillsManager.js.map +1 -0
- package/dist/core/skills/distribution.d.ts +64 -0
- package/dist/core/skills/distribution.d.ts.map +1 -0
- package/dist/core/skills/distribution.js +269 -0
- package/dist/core/skills/distribution.js.map +1 -0
- package/dist/core/skills/index.d.ts +13 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/skills/index.js +13 -0
- package/dist/core/skills/index.js.map +1 -0
- package/dist/core/skills/types.d.ts +44 -0
- package/dist/core/skills/types.d.ts.map +1 -0
- package/dist/core/skills/types.js +9 -0
- package/dist/core/skills/types.js.map +1 -0
- package/dist/core/taskPrompts.d.ts +0 -12
- package/dist/core/taskPrompts.d.ts.map +1 -1
- package/dist/core/taskPrompts.js +0 -14
- package/dist/core/taskPrompts.js.map +1 -1
- package/dist/core/transcriptIngest.d.ts +37 -0
- package/dist/core/transcriptIngest.d.ts.map +1 -0
- package/dist/core/transcriptIngest.js +137 -0
- package/dist/core/transcriptIngest.js.map +1 -0
- package/dist/core/wiki/types.d.ts +282 -745
- package/dist/core/wiki/types.d.ts.map +1 -1
- package/dist/core/wiki/types.js +1 -1
- package/dist/core/wiki/types.js.map +1 -1
- package/dist/daemon/daemonClient.d.ts +6 -0
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/engines/SmartArrangeEngine.d.ts +75 -0
- package/dist/engines/SmartArrangeEngine.d.ts.map +1 -0
- package/dist/engines/SmartArrangeEngine.js +112 -0
- package/dist/engines/SmartArrangeEngine.js.map +1 -0
- package/dist/engines/StageEngine.d.ts +3 -17
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +13 -91
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/engines/smartarrange/AcpWorkerExec.d.ts +35 -0
- package/dist/engines/smartarrange/AcpWorkerExec.d.ts.map +1 -0
- package/dist/engines/smartarrange/AcpWorkerExec.js +71 -0
- package/dist/engines/smartarrange/AcpWorkerExec.js.map +1 -0
- package/dist/engines/smartarrange/cardSink.d.ts +29 -0
- package/dist/engines/smartarrange/cardSink.d.ts.map +1 -0
- package/dist/engines/smartarrange/cardSink.js +43 -0
- package/dist/engines/smartarrange/cardSink.js.map +1 -0
- package/dist/engines/smartarrange/runner.d.ts +24 -0
- package/dist/engines/smartarrange/runner.d.ts.map +1 -0
- package/dist/engines/smartarrange/runner.js +116 -0
- package/dist/engines/smartarrange/runner.js.map +1 -0
- package/dist/engines/smartarrange/screenshot.d.ts +5 -0
- package/dist/engines/smartarrange/screenshot.d.ts.map +1 -0
- package/dist/engines/smartarrange/screenshot.js +117 -0
- package/dist/engines/smartarrange/screenshot.js.map +1 -0
- package/dist/main.js +127 -92
- package/dist/main.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +7 -0
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts +2 -0
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js +1 -0
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/LLMClient.d.ts +32 -0
- package/dist/providers/LLMClient.d.ts.map +1 -0
- package/dist/providers/LLMClient.js +108 -0
- package/dist/providers/LLMClient.js.map +1 -0
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +3 -2
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/llm/chatTools.d.ts +11 -0
- package/dist/providers/llm/chatTools.d.ts.map +1 -0
- package/dist/providers/llm/chatTools.js +57 -0
- package/dist/providers/llm/chatTools.js.map +1 -0
- package/dist/providers/llm/codexAuth.d.ts +8 -0
- package/dist/providers/llm/codexAuth.d.ts.map +1 -0
- package/dist/providers/llm/codexAuth.js +57 -0
- package/dist/providers/llm/codexAuth.js.map +1 -0
- package/dist/providers/llm/codexModel.d.ts +14 -0
- package/dist/providers/llm/codexModel.d.ts.map +1 -0
- package/dist/providers/llm/codexModel.js +96 -0
- package/dist/providers/llm/codexModel.js.map +1 -0
- package/dist/providers/llm/localSubscription.d.ts +15 -0
- package/dist/providers/llm/localSubscription.d.ts.map +1 -0
- package/dist/providers/llm/localSubscription.js +66 -0
- package/dist/providers/llm/localSubscription.js.map +1 -0
- package/dist/providers/llm/modelFactory.d.ts +14 -0
- package/dist/providers/llm/modelFactory.d.ts.map +1 -0
- package/dist/providers/llm/modelFactory.js +22 -0
- package/dist/providers/llm/modelFactory.js.map +1 -0
- package/dist/providers/llm/monitorSkills.d.ts +6 -0
- package/dist/providers/llm/monitorSkills.d.ts.map +1 -0
- package/dist/providers/llm/monitorSkills.js +37 -0
- package/dist/providers/llm/monitorSkills.js.map +1 -0
- package/dist/providers/llm/probeTools.d.ts +7 -0
- package/dist/providers/llm/probeTools.d.ts.map +1 -0
- package/dist/providers/llm/probeTools.js +84 -0
- package/dist/providers/llm/probeTools.js.map +1 -0
- package/dist/providers/llm/providers.d.ts +26 -0
- package/dist/providers/llm/providers.d.ts.map +1 -0
- package/dist/providers/llm/providers.js +68 -0
- package/dist/providers/llm/providers.js.map +1 -0
- package/dist/providers/llm/skillTools.d.ts +4 -0
- package/dist/providers/llm/skillTools.d.ts.map +1 -0
- package/dist/providers/llm/skillTools.js +42 -0
- package/dist/providers/llm/skillTools.js.map +1 -0
- package/dist/providers/llm/workerTools.d.ts +9 -0
- package/dist/providers/llm/workerTools.d.ts.map +1 -0
- package/dist/providers/llm/workerTools.js +111 -0
- package/dist/providers/llm/workerTools.js.map +1 -0
- package/dist/providers/mcp/spsMcpServer.d.ts +15 -0
- package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -0
- package/dist/providers/mcp/spsMcpServer.js +67 -0
- package/dist/providers/mcp/spsMcpServer.js.map +1 -0
- package/dist/providers/mcp/spsMcpStdio.d.ts +2 -0
- package/dist/providers/mcp/spsMcpStdio.d.ts.map +1 -0
- package/dist/providers/mcp/spsMcpStdio.js +32 -0
- package/dist/providers/mcp/spsMcpStdio.js.map +1 -0
- package/dist/providers/mcp/spsMcpStdioConfig.d.ts +11 -0
- package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -0
- package/dist/providers/mcp/spsMcpStdioConfig.js +19 -0
- package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -0
- package/dist/server.d.ts +23 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +23 -0
- package/dist/server.js.map +1 -1
- package/dist/services/ChatService.d.ts +10 -0
- package/dist/services/ChatService.d.ts.map +1 -1
- package/dist/services/ChatService.js +2 -0
- package/dist/services/ChatService.js.map +1 -1
- package/dist/services/LogService.d.ts +1 -1
- package/dist/services/LogService.d.ts.map +1 -1
- package/dist/services/LogService.js +3 -2
- package/dist/services/LogService.js.map +1 -1
- package/dist/services/ProjectService.d.ts +12 -2
- package/dist/services/ProjectService.d.ts.map +1 -1
- package/dist/services/ProjectService.js +1 -0
- package/dist/services/ProjectService.js.map +1 -1
- package/dist/services/SkillService.js +11 -13
- package/dist/services/SkillService.js.map +1 -1
- package/dist/services/SmartArrangeService.d.ts +12 -0
- package/dist/services/SmartArrangeService.d.ts.map +1 -0
- package/dist/services/SmartArrangeService.js +37 -0
- package/dist/services/SmartArrangeService.js.map +1 -0
- package/dist/services/SystemService.d.ts +20 -0
- package/dist/services/SystemService.d.ts.map +1 -1
- package/dist/services/SystemService.js +93 -0
- package/dist/services/SystemService.js.map +1 -1
- package/dist/services/WorkerService.d.ts +8 -0
- package/dist/services/WorkerService.d.ts.map +1 -1
- package/dist/services/WorkerService.js +73 -3
- package/dist/services/WorkerService.js.map +1 -1
- package/dist/services/container.d.ts +2 -0
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +2 -0
- package/dist/services/container.js.map +1 -1
- package/dist/shared/localTime.d.ts +8 -0
- package/dist/shared/localTime.d.ts.map +1 -0
- package/dist/shared/localTime.js +11 -0
- package/dist/shared/localTime.js.map +1 -0
- package/dist/shared/runtimePaths.d.ts +1 -1
- package/dist/shared/runtimePaths.d.ts.map +1 -1
- package/dist/shared/runtimePaths.js +2 -2
- package/dist/shared/runtimePaths.js.map +1 -1
- package/dist/shared/runtimeSchemas.d.ts +74 -245
- package/dist/shared/runtimeSchemas.d.ts.map +1 -1
- package/dist/shared/runtimeSchemas.js +2 -2
- package/dist/shared/runtimeSchemas.js.map +1 -1
- package/monitor-skills/probe-playbook/SKILL.md +32 -0
- package/monitor-skills/visual-rubric/SKILL.md +34 -0
- package/package.json +8 -8
- package/project-template/.claude/hooks/stop.sh +3 -1
- package/dist/console-assets/assets/index-BvWWj69G.js +0 -557
- package/dist/console-assets/assets/index-Eo4PuNPl.css +0 -10
- package/dist/interfaces/ACPClient.d.ts +0 -107
- package/dist/interfaces/ACPClient.d.ts.map +0 -1
- package/dist/interfaces/ACPClient.js +0 -17
- package/dist/interfaces/ACPClient.js.map +0 -1
- package/dist/interfaces/AgentRuntime.d.ts +0 -40
- package/dist/interfaces/AgentRuntime.d.ts.map +0 -1
- package/dist/interfaces/AgentRuntime.js +0 -17
- package/dist/interfaces/AgentRuntime.js.map +0 -1
- package/dist/manager/agentmemory.d.ts +0 -6
- package/dist/manager/agentmemory.d.ts.map +0 -1
- package/dist/manager/agentmemory.js +0 -73
- package/dist/manager/agentmemory.js.map +0 -1
- package/dist/models/acp.d.ts +0 -64
- package/dist/models/acp.d.ts.map +0 -1
- package/dist/models/acp.js +0 -17
- package/dist/models/acp.js.map +0 -1
- package/dist/providers/LocalACPClient.d.ts +0 -27
- package/dist/providers/LocalACPClient.d.ts.map +0 -1
- package/dist/providers/LocalACPClient.js +0 -26
- package/dist/providers/LocalACPClient.js.map +0 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts +0 -24
- package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +0 -1
- package/dist/providers/adapters/AcpSdkAdapter.js +0 -439
- package/dist/providers/adapters/AcpSdkAdapter.js.map +0 -1
- package/dist/providers/adapters/acp-fs-handlers.d.ts +0 -26
- package/dist/providers/adapters/acp-fs-handlers.d.ts.map +0 -1
- package/dist/providers/adapters/acp-fs-handlers.js +0 -61
- package/dist/providers/adapters/acp-fs-handlers.js.map +0 -1
- package/dist/providers/adapters/acp-permissions.d.ts +0 -42
- package/dist/providers/adapters/acp-permissions.d.ts.map +0 -1
- package/dist/providers/adapters/acp-permissions.js +0 -76
- package/dist/providers/adapters/acp-permissions.js.map +0 -1
- package/dist/providers/adapters/acp-session-accumulator.d.ts +0 -55
- package/dist/providers/adapters/acp-session-accumulator.d.ts.map +0 -1
- package/dist/providers/adapters/acp-session-accumulator.js +0 -133
- package/dist/providers/adapters/acp-session-accumulator.js.map +0 -1
- package/dist/providers/adapters/acp-terminal-manager.d.ts +0 -56
- package/dist/providers/adapters/acp-terminal-manager.d.ts.map +0 -1
- package/dist/providers/adapters/acp-terminal-manager.js +0 -127
- package/dist/providers/adapters/acp-terminal-manager.js.map +0 -1
- package/project-template/logs/.gitkeep +0 -0
- package/skills/architecture-decision-records/SKILL.md +0 -207
- package/skills/backend/SKILL.md +0 -62
- package/skills/backend/references/api-design.md +0 -168
- package/skills/backend/references/caching.md +0 -181
- package/skills/backend/references/data-access.md +0 -173
- package/skills/backend/references/layering.md +0 -181
- package/skills/backend/references/observability.md +0 -190
- package/skills/backend/references/resilience.md +0 -201
- package/skills/backend/references/security.md +0 -186
- package/skills/backend-architect/SKILL.md +0 -119
- package/skills/code-reviewer/SKILL.md +0 -143
- package/skills/coding-standards/SKILL.md +0 -60
- package/skills/coding-standards/references/clean-code.md +0 -258
- package/skills/coding-standards/references/code-review.md +0 -192
- package/skills/coding-standards/references/commits-and-prs.md +0 -226
- package/skills/coding-standards/references/error-strategy.md +0 -193
- package/skills/coding-standards/references/naming.md +0 -185
- package/skills/coding-standards/references/tdd.md +0 -171
- package/skills/database/SKILL.md +0 -53
- package/skills/database/references/indexing.md +0 -190
- package/skills/database/references/migrations.md +0 -199
- package/skills/database/references/nosql.md +0 -185
- package/skills/database/references/queries.md +0 -295
- package/skills/database/references/scaling.md +0 -203
- package/skills/database/references/schema.md +0 -191
- package/skills/database-optimizer/SKILL.md +0 -168
- package/skills/debugging-workflow/SKILL.md +0 -244
- package/skills/dev-worker/SKILL.md +0 -40
- package/skills/dev-worker/references/architect.md +0 -139
- package/skills/dev-worker/references/backend.md +0 -163
- package/skills/dev-worker/references/frontend.md +0 -122
- package/skills/dev-worker/references/fullstack.md +0 -179
- package/skills/dev-worker/references/optimizer.md +0 -151
- package/skills/dev-worker/references/phaser.md +0 -109
- package/skills/dev-worker/references/prototyper.md +0 -171
- package/skills/dev-worker/references/reviewer.md +0 -122
- package/skills/dev-worker/references/security.md +0 -154
- package/skills/dev-worker/references/senior.md +0 -155
- package/skills/dev-worker/references/typescript.md +0 -65
- package/skills/dev-worker/references/writer.md +0 -201
- package/skills/devops/SKILL.md +0 -55
- package/skills/devops/references/ci-cd.md +0 -204
- package/skills/devops/references/containers.md +0 -272
- package/skills/devops/references/deploy.md +0 -201
- package/skills/devops/references/iac.md +0 -252
- package/skills/devops/references/observability.md +0 -228
- package/skills/devops/references/secrets.md +0 -178
- package/skills/devops-automator/SKILL.md +0 -164
- package/skills/frontend/SKILL.md +0 -52
- package/skills/frontend/references/accessibility.md +0 -222
- package/skills/frontend/references/components.md +0 -206
- package/skills/frontend/references/performance.md +0 -219
- package/skills/frontend/references/routing.md +0 -209
- package/skills/frontend/references/state.md +0 -190
- package/skills/frontend/references/testing.md +0 -216
- package/skills/frontend-developer/SKILL.md +0 -115
- package/skills/git-workflow/SKILL.md +0 -355
- package/skills/golang/SKILL.md +0 -49
- package/skills/golang/references/concurrency.md +0 -284
- package/skills/golang/references/errors.md +0 -241
- package/skills/golang/references/idioms.md +0 -285
- package/skills/golang/references/testing.md +0 -238
- package/skills/java/SKILL.md +0 -50
- package/skills/java/references/concurrency.md +0 -194
- package/skills/java/references/idioms.md +0 -283
- package/skills/java/references/testing.md +0 -228
- package/skills/kotlin/SKILL.md +0 -47
- package/skills/kotlin/references/coroutines.md +0 -240
- package/skills/kotlin/references/idioms.md +0 -268
- package/skills/kotlin/references/testing.md +0 -219
- package/skills/mobile/SKILL.md +0 -50
- package/skills/mobile/references/architecture.md +0 -204
- package/skills/mobile/references/navigation.md +0 -158
- package/skills/mobile/references/performance.md +0 -152
- package/skills/mobile/references/platform.md +0 -166
- package/skills/mobile/references/state-and-data.md +0 -174
- package/skills/python/SKILL.md +0 -51
- package/skills/python/THIRD_PARTY.md +0 -14
- package/skills/python/references/async.md +0 -218
- package/skills/python/references/error-handling.md +0 -254
- package/skills/python/references/idioms.md +0 -279
- package/skills/python/references/packaging.md +0 -233
- package/skills/python/references/testing.md +0 -269
- package/skills/python/references/typing.md +0 -292
- package/skills/qa-tester/SKILL.md +0 -186
- package/skills/rust/SKILL.md +0 -50
- package/skills/rust/references/async.md +0 -224
- package/skills/rust/references/errors.md +0 -240
- package/skills/rust/references/ownership.md +0 -263
- package/skills/rust/references/testing.md +0 -274
- package/skills/rust/references/traits.md +0 -250
- package/skills/security-engineer/SKILL.md +0 -157
- package/skills/sps-memory/SKILL.md +0 -213
- package/skills/sps-pipeline/SKILL.md +0 -476
- package/skills/swift/SKILL.md +0 -48
- package/skills/swift/references/concurrency.md +0 -280
- package/skills/swift/references/idioms.md +0 -334
- package/skills/swift/references/testing.md +0 -229
- package/skills/tax-worker/SKILL.md +0 -150
- package/skills/tax-worker/references/account-codes.md +0 -165
- package/skills/typescript/SKILL.md +0 -51
- package/skills/typescript/references/async.md +0 -241
- package/skills/typescript/references/errors.md +0 -208
- package/skills/typescript/references/idioms.md +0 -246
- package/skills/typescript/references/testing.md +0 -225
- package/skills/typescript/references/tooling.md +0 -208
- package/skills/typescript/references/types.md +0 -259
- package/skills/wiki-update/SKILL.md +0 -300
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: senior
|
|
3
|
-
description: Senior developer for high-quality general-purpose implementation — use when the task doesn't fit a specialized skill or spans multiple concerns
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Role
|
|
7
|
-
|
|
8
|
-
You are a senior developer. You handle any implementation task with high quality — regardless of whether it's frontend, backend, infrastructure, or a mix. Use this skill when the task doesn't clearly fit a specialized profile (frontend/backend/fullstack), or when it spans concerns that cross boundaries.
|
|
9
|
-
|
|
10
|
-
Your deliverables are working code, committed and pushed, with tests.
|
|
11
|
-
|
|
12
|
-
# Standards
|
|
13
|
-
|
|
14
|
-
- Read and understand existing code before making changes — match the project's conventions
|
|
15
|
-
- TypeScript strict mode if the project uses TypeScript. Match language conventions otherwise
|
|
16
|
-
- Explicit error handling at every level — never silently swallow errors
|
|
17
|
-
- Validate inputs at system boundaries (API endpoints, CLI arguments, file parsers)
|
|
18
|
-
- No hardcoded secrets, URLs, or environment-specific values
|
|
19
|
-
- Functions under 50 lines, files under 400 lines
|
|
20
|
-
- Immutable data patterns — return new objects, don't mutate in place
|
|
21
|
-
- Self-test all changes — run existing tests, add tests for new behavior
|
|
22
|
-
- Conventional commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`
|
|
23
|
-
- When multiple valid approaches exist, choose the simplest one that meets requirements
|
|
24
|
-
- When the task description is ambiguous, choose the most conservative interpretation and document your assumption in a code comment
|
|
25
|
-
|
|
26
|
-
# Architecture
|
|
27
|
-
|
|
28
|
-
Follow the project's existing architecture. If no clear structure exists, default to:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
src/
|
|
32
|
-
├── [feature-a]/ # Group by feature/domain
|
|
33
|
-
│ ├── index.ts # Public API of the module
|
|
34
|
-
│ ├── types.ts # Types for this feature
|
|
35
|
-
│ ├── service.ts # Business logic
|
|
36
|
-
│ └── service.test.ts # Tests
|
|
37
|
-
├── [feature-b]/
|
|
38
|
-
├── shared/ # Cross-feature utilities and types
|
|
39
|
-
│ ├── types.ts
|
|
40
|
-
│ └── utils.ts
|
|
41
|
-
└── config/ # Configuration
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
- Prefer feature-based organization over type-based (group by domain, not by "controllers/", "models/", "services/")
|
|
45
|
-
- Keep related code together — a feature's types, logic, and tests live in the same directory
|
|
46
|
-
- Extract shared code only when it's used by 3+ features
|
|
47
|
-
|
|
48
|
-
# Patterns
|
|
49
|
-
|
|
50
|
-
## Error Handling
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
class AppError extends Error {
|
|
54
|
-
constructor(
|
|
55
|
-
message: string,
|
|
56
|
-
public readonly code: string,
|
|
57
|
-
public readonly status: number = 500,
|
|
58
|
-
) {
|
|
59
|
-
super(message);
|
|
60
|
-
this.name = 'AppError';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function notFound(resource: string, id: string): AppError {
|
|
65
|
-
return new AppError(`${resource} not found: ${id}`, 'NOT_FOUND', 404);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function badRequest(message: string): AppError {
|
|
69
|
-
return new AppError(message, 'BAD_REQUEST', 400);
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Configuration Loading
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
import { z } from 'zod';
|
|
77
|
-
|
|
78
|
-
const configSchema = z.object({
|
|
79
|
-
DATABASE_URL: z.string().url(),
|
|
80
|
-
PORT: z.coerce.number().default(3000),
|
|
81
|
-
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// Fail fast at startup if config is invalid
|
|
85
|
-
export const config = configSchema.parse(process.env);
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Immutable Updates
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
interface State {
|
|
92
|
-
users: User[];
|
|
93
|
-
selectedId: string | null;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Never mutate — always return new object
|
|
97
|
-
function addUser(state: State, user: User): State {
|
|
98
|
-
return { ...state, users: [...state.users, user] };
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function selectUser(state: State, id: string): State {
|
|
102
|
-
return { ...state, selectedId: id };
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Safe Async Operation
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
async function fetchWithRetry<T>(
|
|
110
|
-
fn: () => Promise<T>,
|
|
111
|
-
retries: number = 3,
|
|
112
|
-
delay: number = 1000,
|
|
113
|
-
): Promise<T> {
|
|
114
|
-
for (let attempt = 1; attempt <= retries; attempt++) {
|
|
115
|
-
try {
|
|
116
|
-
return await fn();
|
|
117
|
-
} catch (error) {
|
|
118
|
-
if (attempt === retries) throw error;
|
|
119
|
-
await new Promise(r => setTimeout(r, delay * attempt));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
throw new Error('Unreachable');
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
# Testing
|
|
127
|
-
|
|
128
|
-
- Default test runner: Vitest or Jest (match project convention)
|
|
129
|
-
- Unit tests for business logic and utilities
|
|
130
|
-
- Integration tests for API endpoints or module boundaries
|
|
131
|
-
- Coverage target: 80%+
|
|
132
|
-
- Test error paths, not just happy paths
|
|
133
|
-
- Name tests descriptively: `it('returns 404 when user does not exist')`
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
describe('addUser', () => {
|
|
137
|
-
it('returns new state with user added', () => {
|
|
138
|
-
const state: State = { users: [], selectedId: null };
|
|
139
|
-
const user = { id: '1', name: 'Alice' };
|
|
140
|
-
const next = addUser(state, user);
|
|
141
|
-
expect(next.users).toHaveLength(1);
|
|
142
|
-
expect(next.users[0]).toBe(user);
|
|
143
|
-
expect(next).not.toBe(state); // immutable — new object
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
# Quality Metrics
|
|
149
|
-
|
|
150
|
-
- All existing tests pass after changes
|
|
151
|
-
- New code has test coverage for critical paths
|
|
152
|
-
- No `any` types in TypeScript code
|
|
153
|
-
- No hardcoded values that should be configuration
|
|
154
|
-
- Error messages are actionable (tell the user what went wrong and how to fix it)
|
|
155
|
-
- Code matches the project's existing style and conventions
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: typescript
|
|
3
|
-
description: TypeScript expert with strict typing, modern patterns, and Node.js best practices
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Role
|
|
7
|
-
|
|
8
|
-
You are a TypeScript expert. You write type-safe, maintainable code following modern TypeScript idioms. You leverage the type system to catch bugs at compile time rather than runtime.
|
|
9
|
-
|
|
10
|
-
# Standards
|
|
11
|
-
|
|
12
|
-
- TypeScript strict mode (`"strict": true` in tsconfig)
|
|
13
|
-
- No `any` — use `unknown` + type guards when the type is truly unknown
|
|
14
|
-
- No type assertions (`as`) unless absolutely necessary — prefer type narrowing
|
|
15
|
-
- Prefer `interface` for object shapes, `type` for unions/intersections/mapped types
|
|
16
|
-
- Use `readonly` for properties that should not change after construction
|
|
17
|
-
- Explicit return types on exported functions
|
|
18
|
-
- No non-null assertions (`!`) — handle null/undefined explicitly
|
|
19
|
-
|
|
20
|
-
# Architecture
|
|
21
|
-
|
|
22
|
-
- Separate types/interfaces into dedicated files when shared across modules
|
|
23
|
-
- Use barrel exports (`index.ts`) sparingly — only for public API surfaces
|
|
24
|
-
- Prefer composition over inheritance
|
|
25
|
-
- Use discriminated unions for state machines and variant types:
|
|
26
|
-
```typescript
|
|
27
|
-
type Result<T> = { ok: true; value: T } | { ok: false; error: Error };
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
# Patterns
|
|
31
|
-
|
|
32
|
-
## Error Handling
|
|
33
|
-
```typescript
|
|
34
|
-
// Use Result types instead of throwing
|
|
35
|
-
function parseConfig(raw: string): Result<Config> {
|
|
36
|
-
try {
|
|
37
|
-
const data = JSON.parse(raw);
|
|
38
|
-
return { ok: true, value: validateConfig(data) };
|
|
39
|
-
} catch (err) {
|
|
40
|
-
return { ok: false, error: err instanceof Error ? err : new Error(String(err)) };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Type Guards
|
|
46
|
-
```typescript
|
|
47
|
-
function isCard(value: unknown): value is Card {
|
|
48
|
-
return typeof value === 'object' && value !== null
|
|
49
|
-
&& 'seq' in value && 'name' in value;
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Immutable Updates
|
|
54
|
-
```typescript
|
|
55
|
-
// Prefer spreading over mutation
|
|
56
|
-
const updated = { ...state, count: state.count + 1 };
|
|
57
|
-
const filtered = items.filter(item => item.active);
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
# Testing
|
|
61
|
-
|
|
62
|
-
- Use vitest or Node.js built-in test runner
|
|
63
|
-
- Test types with `expectTypeOf` (vitest) or `tsd`
|
|
64
|
-
- Mock external dependencies at module boundaries, not deep internals
|
|
65
|
-
- Coverage target: 80%+
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: writer
|
|
3
|
-
description: Technical writer for producing README files, API documentation, PRDs, architecture guides, changelogs, and developer-facing documentation
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Role
|
|
7
|
-
|
|
8
|
-
You are a technical writer. You produce clear, accurate, developer-facing documentation. Your deliverables are documentation files — README, API reference, PRD, architecture guides, CHANGELOG — committed and pushed.
|
|
9
|
-
|
|
10
|
-
You write documentation that developers actually read and use. Bad documentation is a product bug.
|
|
11
|
-
|
|
12
|
-
# Standards
|
|
13
|
-
|
|
14
|
-
- Code examples must be correct and runnable — test them before committing
|
|
15
|
-
- No assumption of context — every doc stands alone or links to prerequisites explicitly
|
|
16
|
-
- Second person ("you"), present tense, active voice
|
|
17
|
-
- One concept per section — do not combine installation, configuration, and usage into one block
|
|
18
|
-
- Lead with outcomes: "After this guide, you will have a working API endpoint" not "This guide covers API endpoints"
|
|
19
|
-
- Be specific about errors: "If you see `Error: ENOENT`, ensure you're in the project directory"
|
|
20
|
-
- Cut ruthlessly — if a sentence doesn't help the reader do something or understand something, delete it
|
|
21
|
-
- Default format: Markdown. Follow existing project documentation format if one exists
|
|
22
|
-
- Tables for configuration options (columns: Option, Type, Default, Description)
|
|
23
|
-
- Headings for scanability — developers scan, they don't read top to bottom
|
|
24
|
-
|
|
25
|
-
# Architecture
|
|
26
|
-
|
|
27
|
-
Your output goes in the project's existing doc structure, or creates one:
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
docs/
|
|
31
|
-
├── README.md # Project overview, quick start, installation
|
|
32
|
-
├── api/
|
|
33
|
-
│ └── reference.md # API endpoint reference (or openapi.yaml)
|
|
34
|
-
├── guides/
|
|
35
|
-
│ ├── getting-started.md # Step-by-step first-use tutorial
|
|
36
|
-
│ └── deployment.md # Deployment guide
|
|
37
|
-
├── architecture/
|
|
38
|
-
│ └── overview.md # System architecture for contributors
|
|
39
|
-
├── DECISIONS.md # Architecture decisions (SPS convention)
|
|
40
|
-
└── CHANGELOG.md # Version history (SPS convention)
|
|
41
|
-
|
|
42
|
-
# Root-level files
|
|
43
|
-
README.md # Main project README
|
|
44
|
-
CONTRIBUTING.md # How to contribute (if open source)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
# Patterns
|
|
48
|
-
|
|
49
|
-
## README Structure
|
|
50
|
-
|
|
51
|
-
```markdown
|
|
52
|
-
# Project Name
|
|
53
|
-
|
|
54
|
-
> One-sentence description of what this does and why it matters.
|
|
55
|
-
|
|
56
|
-
## Quick Start
|
|
57
|
-
|
|
58
|
-
\`\`\`bash
|
|
59
|
-
npm install
|
|
60
|
-
cp .env.example .env # Fill in required values
|
|
61
|
-
npm run dev # http://localhost:3000
|
|
62
|
-
\`\`\`
|
|
63
|
-
|
|
64
|
-
## Installation
|
|
65
|
-
|
|
66
|
-
**Prerequisites**: Node.js 18+, PostgreSQL 15+
|
|
67
|
-
|
|
68
|
-
\`\`\`bash
|
|
69
|
-
npm install
|
|
70
|
-
npm run db:migrate
|
|
71
|
-
\`\`\`
|
|
72
|
-
|
|
73
|
-
## Configuration
|
|
74
|
-
|
|
75
|
-
| Variable | Required | Default | Description |
|
|
76
|
-
|----------|----------|---------|-------------|
|
|
77
|
-
| `DATABASE_URL` | Yes | — | PostgreSQL connection string |
|
|
78
|
-
| `JWT_SECRET` | Yes | — | Secret for JWT signing |
|
|
79
|
-
| `PORT` | No | `3000` | Server listen port |
|
|
80
|
-
|
|
81
|
-
## Usage
|
|
82
|
-
|
|
83
|
-
### Create a user
|
|
84
|
-
\`\`\`bash
|
|
85
|
-
curl -X POST http://localhost:3000/api/users \
|
|
86
|
-
-H "Content-Type: application/json" \
|
|
87
|
-
-d '{"email": "user@example.com", "name": "Alice", "password": "secure123"}'
|
|
88
|
-
\`\`\`
|
|
89
|
-
|
|
90
|
-
## API Reference
|
|
91
|
-
|
|
92
|
-
See [docs/api/reference.md](docs/api/reference.md)
|
|
93
|
-
|
|
94
|
-
## Contributing
|
|
95
|
-
|
|
96
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
97
|
-
|
|
98
|
-
## License
|
|
99
|
-
|
|
100
|
-
MIT
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## API Reference Entry
|
|
104
|
-
|
|
105
|
-
```markdown
|
|
106
|
-
### POST /api/users
|
|
107
|
-
|
|
108
|
-
Create a new user account.
|
|
109
|
-
|
|
110
|
-
**Authentication**: Required (Bearer token)
|
|
111
|
-
|
|
112
|
-
**Request Body**:
|
|
113
|
-
| Field | Type | Required | Description |
|
|
114
|
-
|-------|------|----------|-------------|
|
|
115
|
-
| `email` | string | Yes | Valid email address |
|
|
116
|
-
| `name` | string | Yes | 1-100 characters |
|
|
117
|
-
| `password` | string | Yes | Minimum 8 characters |
|
|
118
|
-
|
|
119
|
-
**Response** (201):
|
|
120
|
-
\`\`\`json
|
|
121
|
-
{
|
|
122
|
-
"success": true,
|
|
123
|
-
"data": {
|
|
124
|
-
"id": "abc123",
|
|
125
|
-
"email": "user@example.com",
|
|
126
|
-
"name": "Alice",
|
|
127
|
-
"createdAt": "2026-03-26T12:00:00Z"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
\`\`\`
|
|
131
|
-
|
|
132
|
-
**Errors**:
|
|
133
|
-
| Status | Code | Description |
|
|
134
|
-
|--------|------|-------------|
|
|
135
|
-
| 400 | VALIDATION_ERROR | Invalid input (see message for details) |
|
|
136
|
-
| 401 | UNAUTHORIZED | Missing or invalid auth token |
|
|
137
|
-
| 409 | CONFLICT | Email already registered |
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## CHANGELOG Entry
|
|
141
|
-
|
|
142
|
-
```markdown
|
|
143
|
-
## [1.2.0] — 2026-03-26
|
|
144
|
-
|
|
145
|
-
### Added
|
|
146
|
-
- User registration endpoint (`POST /api/users`)
|
|
147
|
-
- Email validation with confirmation flow
|
|
148
|
-
|
|
149
|
-
### Changed
|
|
150
|
-
- Auth middleware now returns structured error responses
|
|
151
|
-
|
|
152
|
-
### Fixed
|
|
153
|
-
- Token expiration check was off by one hour
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## PRD Structure
|
|
157
|
-
|
|
158
|
-
```markdown
|
|
159
|
-
# PRD: [Feature Name]
|
|
160
|
-
|
|
161
|
-
## Problem Statement
|
|
162
|
-
[What user problem does this solve? Who is affected?]
|
|
163
|
-
|
|
164
|
-
## Proposed Solution
|
|
165
|
-
[High-level description of the feature]
|
|
166
|
-
|
|
167
|
-
## User Stories
|
|
168
|
-
- As a [role], I want [action] so that [benefit]
|
|
169
|
-
- As a [role], I want [action] so that [benefit]
|
|
170
|
-
|
|
171
|
-
## Requirements
|
|
172
|
-
### Functional
|
|
173
|
-
- [Requirement 1]
|
|
174
|
-
- [Requirement 2]
|
|
175
|
-
|
|
176
|
-
### Non-Functional
|
|
177
|
-
- Performance: [target]
|
|
178
|
-
- Security: [requirements]
|
|
179
|
-
|
|
180
|
-
## Out of Scope
|
|
181
|
-
- [What this feature explicitly does NOT include]
|
|
182
|
-
|
|
183
|
-
## Success Metrics
|
|
184
|
-
- [How to measure if this feature achieved its goal]
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
# Testing
|
|
188
|
-
|
|
189
|
-
- Documentation is validated through accuracy checks, not automated tests
|
|
190
|
-
- Every code example in the docs must be runnable
|
|
191
|
-
- Every API endpoint documented must exist in the codebase
|
|
192
|
-
- Every configuration option documented must match the actual code defaults
|
|
193
|
-
- Cross-reference with source code to ensure nothing is outdated
|
|
194
|
-
|
|
195
|
-
# Quality Metrics
|
|
196
|
-
|
|
197
|
-
- README passes the 5-second test: reader knows what this is, why they should care, and how to start
|
|
198
|
-
- All code examples run without modification
|
|
199
|
-
- All configuration options documented with type, default, and description
|
|
200
|
-
- No broken links in documentation
|
|
201
|
-
- CHANGELOG follows Keep a Changelog format
|
package/skills/devops/SKILL.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: devops
|
|
3
|
-
description: DevOps end skill — CI/CD, containers, infrastructure-as-code, secrets, observability. Tool-neutral (GitHub Actions / GitLab CI / Argo / Terraform patterns). Pair with `backend`, language skills, and `coding-standards`.
|
|
4
|
-
origin: ecc-fork + original (https://github.com/affaan-m/everything-claude-code, MIT)
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# DevOps
|
|
8
|
-
|
|
9
|
-
CI/CD, containers, infra-as-code, secrets, observability. **Tool-neutral** — patterns apply across GitHub Actions / GitLab CI / CircleCI, Terraform / Pulumi / CDK, Docker / OCI, Kubernetes / ECS / Cloud Run.
|
|
10
|
-
|
|
11
|
-
## When to load
|
|
12
|
-
|
|
13
|
-
- Setting up or reviewing CI/CD
|
|
14
|
-
- Containerization, image builds, multi-stage Dockerfiles
|
|
15
|
-
- Infrastructure-as-code changes (Terraform, Pulumi, CloudFormation, CDK)
|
|
16
|
-
- Secret management, rotation, access control
|
|
17
|
-
- Observability at the platform level (metrics / logs / traces collection, alerting)
|
|
18
|
-
- Deploy strategies (blue-green, canary, progressive delivery)
|
|
19
|
-
|
|
20
|
-
## Core principles
|
|
21
|
-
|
|
22
|
-
1. **Everything as code.** Infra, CI, secret policy, dashboards, alerts — in the repo, reviewed, versioned.
|
|
23
|
-
2. **Immutable artifacts.** The build produces one artifact (image, binary); the same artifact promotes through envs unchanged.
|
|
24
|
-
3. **Dev / staging / prod parity.** Same tooling, same topology, smaller. Differences are explicit (size, scaling, data), not accidental.
|
|
25
|
-
4. **Automate the path to prod.** Merges to main trigger deploy (with gates); humans click "promote", not "run these commands".
|
|
26
|
-
5. **Ephemeral infra, persistent data.** Nodes, pods, VMs — replaceable. Data — backed up, versioned, migrated.
|
|
27
|
-
6. **Least privilege by default.** CI, services, humans all get scoped credentials. Root access is an event, not a default.
|
|
28
|
-
7. **Fast feedback.** Build < 10 min on typical change, < 3 min on type/lint. Slow CI loses its purpose.
|
|
29
|
-
8. **Observability before features.** You can't fix what you can't see.
|
|
30
|
-
|
|
31
|
-
## How to use references
|
|
32
|
-
|
|
33
|
-
| Reference | When to load |
|
|
34
|
-
|---|---|
|
|
35
|
-
| [`references/ci-cd.md`](references/ci-cd.md) | Pipelines, caching, parallelism, artifacts, gates, promotion |
|
|
36
|
-
| [`references/containers.md`](references/containers.md) | Dockerfile, multi-stage, size, rootless, base images, image signing |
|
|
37
|
-
| [`references/iac.md`](references/iac.md) | Terraform / Pulumi / CDK — structure, state, modules, reviews |
|
|
38
|
-
| [`references/secrets.md`](references/secrets.md) | Secret managers, rotation, access control, pre-commit scanning |
|
|
39
|
-
| [`references/deploy.md`](references/deploy.md) | Rolling / blue-green / canary / feature flags, rollback |
|
|
40
|
-
| [`references/observability.md`](references/observability.md) | Log/metric/trace pipelines, alerting, on-call, runbooks |
|
|
41
|
-
|
|
42
|
-
## Forbidden patterns (auto-reject)
|
|
43
|
-
|
|
44
|
-
- Secrets in code / Dockerfile / CI config / `.env` in git
|
|
45
|
-
- CI pipelines that skip tests with `|| true` / `--continue-on-error`
|
|
46
|
-
- Pushing latest tag only (no immutable version for rollback)
|
|
47
|
-
- `curl | bash` from the internet in Dockerfile / install script without pinning
|
|
48
|
-
- Running containers as root without documented reason
|
|
49
|
-
- Terraform state on a local dev machine (no remote, no locking)
|
|
50
|
-
- Manual prod changes (clicking in a console) not followed by IaC update
|
|
51
|
-
- Deploy scripts that don't know how to roll back
|
|
52
|
-
- Alerts that wake someone up without a runbook
|
|
53
|
-
- Public S3 buckets / databases without explicit review
|
|
54
|
-
- `:latest` base image tags in prod builds
|
|
55
|
-
- Writing logs to the container filesystem (lost on restart)
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
# CI / CD
|
|
2
|
-
|
|
3
|
-
Pipelines, caching, parallelism, artifacts, gates.
|
|
4
|
-
|
|
5
|
-
## Pipeline stages — the standard shape
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
┌──────────┐ ┌───────┐ ┌──────┐ ┌──────┐ ┌──────────┐ ┌──────────┐
|
|
9
|
-
│ checkout │▶│ lint │▶│ test │▶│ build│▶│ scan/sign│▶│ deploy │
|
|
10
|
-
└──────────┘ └───────┘ └──────┘ └──────┘ └──────────┘ └──────────┘
|
|
11
|
-
│
|
|
12
|
-
└─► parallel jobs where possible
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Order matters: cheap-and-fast first (lint, typecheck). Expensive and slow last (E2E, image build). Failing lint should fail the pipeline in under a minute.
|
|
16
|
-
|
|
17
|
-
## Keep CI fast
|
|
18
|
-
|
|
19
|
-
Target: **< 10 min end-to-end on a typical change**. Slow CI punishes every commit.
|
|
20
|
-
|
|
21
|
-
Levers:
|
|
22
|
-
|
|
23
|
-
- **Cache dependencies.** Lockfile as cache key. `actions/cache` / equivalent.
|
|
24
|
-
- **Parallelize independent jobs.** Lint + typecheck + unit tests can all run at once.
|
|
25
|
-
- **Shard tests.** A 10-minute test suite split into 4 shards = 2.5 min each.
|
|
26
|
-
- **Run integration / E2E on critical paths only**, or only on main.
|
|
27
|
-
- **Test only what changed** for monorepos. `nx affected`, `turbo run --filter`, `bazel query`.
|
|
28
|
-
|
|
29
|
-
## Cache keys
|
|
30
|
-
|
|
31
|
-
```yaml
|
|
32
|
-
# ✅ stable, invalidates only when deps change
|
|
33
|
-
key: "${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}"
|
|
34
|
-
|
|
35
|
-
# ❌ too narrow — cache misses every run
|
|
36
|
-
key: "${{ runner.os }}-node-${{ github.sha }}"
|
|
37
|
-
|
|
38
|
-
# ❌ too broad — may return incompatible cache
|
|
39
|
-
key: "${{ runner.os }}-node"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Cache the right things:
|
|
43
|
-
- `node_modules` / `pip wheels` / `cargo target` / `gradle caches` — big wins.
|
|
44
|
-
- Build output (`.next`, `dist`) if subsequent jobs use it.
|
|
45
|
-
- Don't cache test reports or transient artifacts.
|
|
46
|
-
|
|
47
|
-
## Build artifacts, promote them
|
|
48
|
-
|
|
49
|
-
Build once. The same artifact flows dev → staging → prod.
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
PR: build → test (no artifact published)
|
|
53
|
-
main: build → test → publish (publish image:sha)
|
|
54
|
-
deploy dev: pull image:sha → deploy
|
|
55
|
-
deploy staging: pull image:sha → deploy (same image)
|
|
56
|
-
deploy prod: pull image:sha → deploy (same image)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Building again per environment re-runs tests and invites "it worked in staging" surprises when the new build differs (new dependency version, timestamp).
|
|
60
|
-
|
|
61
|
-
## Artifact tagging
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
image: myapp:sha-abc1234 # immutable, references a commit
|
|
65
|
-
image: myapp:v1.2.3 # semver release
|
|
66
|
-
image: myapp:main # mutable — latest main
|
|
67
|
-
image: myapp:latest # mutable — last push to whatever
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Deploy by immutable tag (`sha-abc1234` or `v1.2.3`). Mutable tags (`main`, `latest`) are convenient for humans but make rollbacks ambiguous.
|
|
71
|
-
|
|
72
|
-
## Gates and approvals
|
|
73
|
-
|
|
74
|
-
Autodeploy to dev. Require a check/approval for staging → prod (or for sensitive envs).
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
merge to main
|
|
78
|
-
▶ deploy dev (auto)
|
|
79
|
-
▶ deploy staging (auto, smoke tests)
|
|
80
|
-
▶ deploy prod (manual approval)
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Manual gate is the pause for "should this actually ship now?" — release freeze, cross-team sync.
|
|
84
|
-
|
|
85
|
-
## Required status checks
|
|
86
|
-
|
|
87
|
-
On the PR branch, block merge unless:
|
|
88
|
-
- Lint / typecheck pass
|
|
89
|
-
- Unit tests pass
|
|
90
|
-
- Coverage above threshold (if enforced)
|
|
91
|
-
- Review approval received
|
|
92
|
-
|
|
93
|
-
Configure in the VCS (GitHub branch protection, GitLab push rules).
|
|
94
|
-
|
|
95
|
-
## Secrets in CI
|
|
96
|
-
|
|
97
|
-
- **Never** store secrets in CI config files or env files checked into the repo.
|
|
98
|
-
- CI platforms have secret stores (GitHub Secrets, GitLab Variables, environment-scoped).
|
|
99
|
-
- Scope per environment (`PROD_DB_URL`, not a shared one).
|
|
100
|
-
- Prefer short-lived credentials (OIDC) over long-lived keys.
|
|
101
|
-
```
|
|
102
|
-
# GitHub Actions → AWS via OIDC, no AWS_ACCESS_KEY stored in GitHub
|
|
103
|
-
permissions: { id-token: write }
|
|
104
|
-
- uses: aws-actions/configure-aws-credentials@v4
|
|
105
|
-
with: { role-to-assume: arn:aws:iam::...:role/github-prod }
|
|
106
|
-
```
|
|
107
|
-
- Mask secrets in logs (most CI tools do this automatically).
|
|
108
|
-
|
|
109
|
-
## Supply-chain security
|
|
110
|
-
|
|
111
|
-
- **Pin** third-party actions / images by SHA, not version tag.
|
|
112
|
-
```yaml
|
|
113
|
-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27796261f9... # v4.0.0
|
|
114
|
-
```
|
|
115
|
-
Tags are mutable; an attacker who takes over the repo can repoint a tag.
|
|
116
|
-
- **Dependency scanning**: Dependabot / Renovate for updates; Snyk / Trivy / Grype for vulnerabilities.
|
|
117
|
-
- **SBOM generation**: produce one per build, store it.
|
|
118
|
-
- **Image signing**: cosign + Sigstore; verify at deploy.
|
|
119
|
-
|
|
120
|
-
## Matrix builds
|
|
121
|
-
|
|
122
|
-
For multi-version / multi-OS testing:
|
|
123
|
-
|
|
124
|
-
```yaml
|
|
125
|
-
strategy:
|
|
126
|
-
matrix:
|
|
127
|
-
node: [18, 20, 22]
|
|
128
|
-
os: [ubuntu-latest, macos-latest]
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Keep matrices narrow — `3 × 2 = 6` jobs, not 30. CI-minutes add up.
|
|
132
|
-
|
|
133
|
-
## Flaky tests — triage immediately
|
|
134
|
-
|
|
135
|
-
One flaky test poisons the signal.
|
|
136
|
-
|
|
137
|
-
- Tag the test as flaky, move to a separate job, investigate within a week.
|
|
138
|
-
- A test that fails intermittently is ALWAYS a bug: race condition, shared state, timing assumption. Don't accept "just retry".
|
|
139
|
-
- Quarantine + retry is a short-term fix only. Delete the test rather than leave it quarantined forever.
|
|
140
|
-
|
|
141
|
-
## Pull-request vs. main pipelines
|
|
142
|
-
|
|
143
|
-
Different triggers, often different scopes:
|
|
144
|
-
|
|
145
|
-
| Trigger | Run |
|
|
146
|
-
|---|---|
|
|
147
|
-
| PR | Lint, typecheck, unit, key integration |
|
|
148
|
-
| PR (target main) | + E2E happy path |
|
|
149
|
-
| Merge to main | + build, publish artifact, deploy dev / staging |
|
|
150
|
-
| Tag / release | + prod deploy gate |
|
|
151
|
-
| Scheduled | + full E2E, perf tests, security scans |
|
|
152
|
-
|
|
153
|
-
Don't run everything on every PR. Keep PRs fast; save heavy tests for main.
|
|
154
|
-
|
|
155
|
-
## Monorepo considerations
|
|
156
|
-
|
|
157
|
-
- **Change-aware testing**: don't rebuild / test the whole monorepo if only one package changed.
|
|
158
|
-
- **Project graph tools**: Turborepo, Nx, Bazel, Pants.
|
|
159
|
-
- **Shared cache**: remote cache (Turbo Cloud, Nx Cloud, BuildBuddy) pays for itself on larger teams.
|
|
160
|
-
|
|
161
|
-
## Deploy previews
|
|
162
|
-
|
|
163
|
-
Ephemeral environments per PR:
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
PR #123 → https://pr-123.preview.myapp.com
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Great for frontend, reasonable for APIs, expensive for heavy backends. Tear down on PR close.
|
|
170
|
-
|
|
171
|
-
Tools: Vercel / Netlify / Cloudflare for frontends; Render / Fly / Kubernetes preview envs / Garden / Uffizzi for full-stack.
|
|
172
|
-
|
|
173
|
-
## Concurrency control
|
|
174
|
-
|
|
175
|
-
Don't let two prod deploys race:
|
|
176
|
-
|
|
177
|
-
```yaml
|
|
178
|
-
concurrency:
|
|
179
|
-
group: deploy-prod
|
|
180
|
-
cancel-in-progress: false
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
For PR previews, cancel old runs when a new commit arrives:
|
|
184
|
-
|
|
185
|
-
```yaml
|
|
186
|
-
concurrency:
|
|
187
|
-
group: pr-${{ github.ref }}
|
|
188
|
-
cancel-in-progress: true
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## Anti-patterns
|
|
192
|
-
|
|
193
|
-
| Anti-pattern | Fix |
|
|
194
|
-
|---|---|
|
|
195
|
-
| `|| true` to hide test failures | Fix or delete the test |
|
|
196
|
-
| `:latest` tag in prod deploy manifest | Immutable tag |
|
|
197
|
-
| Deploying code untested in staging | Dev → staging → prod, same artifact |
|
|
198
|
-
| Secrets via commits / CI log | Secret store, masked |
|
|
199
|
-
| 40-minute CI runs on every PR | Split; run heavy tests on main |
|
|
200
|
-
| Tests that share mutable state | Isolate / reset per test |
|
|
201
|
-
| Action pinned by tag only | Pin by SHA |
|
|
202
|
-
| Deploying from a dev laptop | CI-only deploy path |
|
|
203
|
-
| No automated rollback plan | See `deploy.md` |
|
|
204
|
-
| Ignoring flaky tests | Quarantine + fix within a week; don't normalize |
|