opencode-starterkit 1.0.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/README.md +47 -0
- package/baseline/.env.example +196 -0
- package/baseline/.template-manifest.json +646 -0
- package/baseline/.version +1 -0
- package/baseline/AGENTS.md +410 -0
- package/baseline/AGENT_ALIGNMENT.md +564 -0
- package/baseline/README.md +79 -0
- package/baseline/agent/build.md +373 -0
- package/baseline/agent/explore.md +96 -0
- package/baseline/agent/general.md +186 -0
- package/baseline/agent/painter.md +74 -0
- package/baseline/agent/plan.md +435 -0
- package/baseline/agent/review.md +243 -0
- package/baseline/agent/runner.md +79 -0
- package/baseline/agent/scout.md +100 -0
- package/baseline/agent/vision.md +91 -0
- package/baseline/command/compound.md +143 -0
- package/baseline/command/create.md +213 -0
- package/baseline/command/design.md +112 -0
- package/baseline/command/handoff.md +147 -0
- package/baseline/command/init-context.md +273 -0
- package/baseline/command/init-user.md +105 -0
- package/baseline/command/init.md +117 -0
- package/baseline/command/lfg.md +170 -0
- package/baseline/command/plan.md +355 -0
- package/baseline/command/pr.md +161 -0
- package/baseline/command/research.md +125 -0
- package/baseline/command/resume.md +87 -0
- package/baseline/command/review-codebase.md +131 -0
- package/baseline/command/ship.md +342 -0
- package/baseline/command/start.md +158 -0
- package/baseline/command/status.md +117 -0
- package/baseline/command/ui-review.md +92 -0
- package/baseline/command/ui-slop-check.md +146 -0
- package/baseline/command/verify.md +160 -0
- package/baseline/context/README.md +29 -0
- package/baseline/dcp.jsonc +72 -0
- package/baseline/memory/README.md +89 -0
- package/baseline/memory/_templates/design.md +59 -0
- package/baseline/memory/_templates/prd.md +192 -0
- package/baseline/memory/_templates/project.md +58 -0
- package/baseline/memory/_templates/proposal.md +38 -0
- package/baseline/memory/_templates/roadmap.md +93 -0
- package/baseline/memory/_templates/state.md +89 -0
- package/baseline/memory/_templates/tasks.md +198 -0
- package/baseline/memory/_templates/tech-stack.md +85 -0
- package/baseline/memory/_templates/user.md +26 -0
- package/baseline/memory/project/gotchas.md +67 -0
- package/baseline/memory/project/project.md +92 -0
- package/baseline/memory/project/roadmap.md +142 -0
- package/baseline/memory/project/state.md +84 -0
- package/baseline/memory/project/tech-stack.md +53 -0
- package/baseline/memory/project/user.md +38 -0
- package/baseline/memory/research/benchmark-framework.md +162 -0
- package/baseline/memory/research/ccpm-analysis.md +334 -0
- package/baseline/memory/research/context-management-analysis.md +685 -0
- package/baseline/memory/research/effectiveness-audit.md +213 -0
- package/baseline/memory/research/opencode-mcp-bug-report.md +129 -0
- package/baseline/memory/research/openspec-analysis.md +226 -0
- package/baseline/memory/session-context.md +40 -0
- package/baseline/opencode.json +1431 -0
- package/baseline/opencode.json.tui-migration.bak +1380 -0
- package/baseline/package-lock.json +87 -0
- package/baseline/package.json +21 -0
- package/baseline/plans/1768385996691-silent-wizard.md +247 -0
- package/baseline/plans/1770006237537-mighty-otter.md +418 -0
- package/baseline/plans/1770006913647-glowing-forest.md +170 -0
- package/baseline/plans/1770013678126-witty-planet.md +278 -0
- package/baseline/plans/1770112267595-shiny-rocket.md +258 -0
- package/baseline/plans/swarm-protocol.md +123 -0
- package/baseline/plugin/README.md +70 -0
- package/baseline/plugin/copilot-auth.ts +607 -0
- package/baseline/plugin/lib/capture.ts +177 -0
- package/baseline/plugin/lib/context.ts +198 -0
- package/baseline/plugin/lib/curator.ts +234 -0
- package/baseline/plugin/lib/db/maintenance.ts +312 -0
- package/baseline/plugin/lib/db/observations.ts +299 -0
- package/baseline/plugin/lib/db/pipeline.ts +520 -0
- package/baseline/plugin/lib/db/schema.ts +356 -0
- package/baseline/plugin/lib/db/types.ts +211 -0
- package/baseline/plugin/lib/distill.ts +376 -0
- package/baseline/plugin/lib/inject.ts +126 -0
- package/baseline/plugin/lib/memory-admin-tools.ts +188 -0
- package/baseline/plugin/lib/memory-db.ts +58 -0
- package/baseline/plugin/lib/memory-helpers.ts +111 -0
- package/baseline/plugin/lib/memory-hooks.ts +195 -0
- package/baseline/plugin/lib/memory-tools.ts +341 -0
- package/baseline/plugin/lib/notify.ts +81 -0
- package/baseline/plugin/memory.ts +89 -0
- package/baseline/plugin/notification.ts.bak +64 -0
- package/baseline/plugin/package.json +7 -0
- package/baseline/plugin/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +178 -0
- package/baseline/plugin/sdk/copilot/chat/get-response-metadata.ts +15 -0
- package/baseline/plugin/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
- package/baseline/plugin/sdk/copilot/chat/openai-compatible-api-types.ts +72 -0
- package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-language-model.ts +833 -0
- package/baseline/plugin/sdk/copilot/chat/openai-compatible-chat-options.ts +30 -0
- package/baseline/plugin/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +48 -0
- package/baseline/plugin/sdk/copilot/chat/openai-compatible-prepare-tools.ts +92 -0
- package/baseline/plugin/sdk/copilot/copilot-provider.ts +94 -0
- package/baseline/plugin/sdk/copilot/index.ts +5 -0
- package/baseline/plugin/sdk/copilot/openai-compatible-error.ts +30 -0
- package/baseline/plugin/sessions.ts +428 -0
- package/baseline/plugin/skill-mcp.ts +618 -0
- package/baseline/plugin/tsconfig.json +16 -0
- package/baseline/skill/accessibility-audit/SKILL.md +191 -0
- package/baseline/skill/agent-browser/SKILL.md +413 -0
- package/baseline/skill/agent-teams/SKILL.md +268 -0
- package/baseline/skill/augment-context-engine/SKILL.md +122 -0
- package/baseline/skill/augment-context-engine/mcp.json +6 -0
- package/baseline/skill/beads/SKILL.md +181 -0
- package/baseline/skill/beads/references/BEST_PRACTICES.md +27 -0
- package/baseline/skill/beads/references/BOUNDARIES.md +219 -0
- package/baseline/skill/beads/references/DEPENDENCIES.md +124 -0
- package/baseline/skill/beads/references/EXAMPLES.md +45 -0
- package/baseline/skill/beads/references/FILE_CLAIMING.md +101 -0
- package/baseline/skill/beads/references/GIT_SYNC.md +25 -0
- package/baseline/skill/beads/references/HIERARCHY.md +71 -0
- package/baseline/skill/beads/references/MULTI_AGENT.md +40 -0
- package/baseline/skill/beads/references/RESUMABILITY.md +177 -0
- package/baseline/skill/beads/references/SESSION_PROTOCOL.md +61 -0
- package/baseline/skill/beads/references/TASK_CREATION.md +38 -0
- package/baseline/skill/beads/references/TROUBLESHOOTING.md +38 -0
- package/baseline/skill/beads/references/WORKFLOWS.md +226 -0
- package/baseline/skill/beads-bridge/SKILL.md +321 -0
- package/baseline/skill/brainstorming/SKILL.md +114 -0
- package/baseline/skill/chrome-devtools/SKILL.md +76 -0
- package/baseline/skill/chrome-devtools/mcp.json +19 -0
- package/baseline/skill/cloudflare/SKILL.md +253 -0
- package/baseline/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/baseline/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/baseline/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/baseline/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/baseline/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/baseline/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/baseline/skill/cloudflare/references/ai-search/README.md +14 -0
- package/baseline/skill/cloudflare/references/ai-search/api.md +38 -0
- package/baseline/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/baseline/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/baseline/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/baseline/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/baseline/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/baseline/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/baseline/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/baseline/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/baseline/skill/cloudflare/references/api/README.md +21 -0
- package/baseline/skill/cloudflare/references/api/api.md +31 -0
- package/baseline/skill/cloudflare/references/api/configuration.md +20 -0
- package/baseline/skill/cloudflare/references/api/gotchas.md +28 -0
- package/baseline/skill/cloudflare/references/api/patterns.md +47 -0
- package/baseline/skill/cloudflare/references/api-shield/README.md +20 -0
- package/baseline/skill/cloudflare/references/api-shield/api.md +78 -0
- package/baseline/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/baseline/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/baseline/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/baseline/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/baseline/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/baseline/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/baseline/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/baseline/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/baseline/skill/cloudflare/references/bindings/README.md +14 -0
- package/baseline/skill/cloudflare/references/bindings/api.md +3 -0
- package/baseline/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/baseline/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/baseline/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/baseline/skill/cloudflare/references/bot-management/README.md +71 -0
- package/baseline/skill/cloudflare/references/bot-management/api.md +168 -0
- package/baseline/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/baseline/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/baseline/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/baseline/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/baseline/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/baseline/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/baseline/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/baseline/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/baseline/skill/cloudflare/references/c3/README.md +264 -0
- package/baseline/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/baseline/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/baseline/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/baseline/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/baseline/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/baseline/skill/cloudflare/references/containers/README.md +16 -0
- package/baseline/skill/cloudflare/references/containers/api.md +43 -0
- package/baseline/skill/cloudflare/references/containers/configuration.md +56 -0
- package/baseline/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/baseline/skill/cloudflare/references/containers/patterns.md +40 -0
- package/baseline/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/baseline/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/baseline/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/baseline/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/baseline/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/baseline/skill/cloudflare/references/d1/README.md +92 -0
- package/baseline/skill/cloudflare/references/d1/api.md +141 -0
- package/baseline/skill/cloudflare/references/d1/configuration.md +127 -0
- package/baseline/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/baseline/skill/cloudflare/references/d1/patterns.md +144 -0
- package/baseline/skill/cloudflare/references/ddos/README.md +34 -0
- package/baseline/skill/cloudflare/references/ddos/api.md +136 -0
- package/baseline/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/baseline/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/baseline/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/baseline/skill/cloudflare/references/do-storage/README.md +62 -0
- package/baseline/skill/cloudflare/references/do-storage/api.md +89 -0
- package/baseline/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/baseline/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/baseline/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/baseline/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/baseline/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/baseline/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/baseline/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/baseline/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/baseline/skill/cloudflare/references/email-routing/README.md +18 -0
- package/baseline/skill/cloudflare/references/email-routing/api.md +46 -0
- package/baseline/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/baseline/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/baseline/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/baseline/skill/cloudflare/references/email-workers/README.md +598 -0
- package/baseline/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/baseline/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/baseline/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/baseline/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/baseline/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/baseline/skill/cloudflare/references/images/README.md +14 -0
- package/baseline/skill/cloudflare/references/images/api.md +3 -0
- package/baseline/skill/cloudflare/references/images/configuration.md +45 -0
- package/baseline/skill/cloudflare/references/images/gotchas.md +23 -0
- package/baseline/skill/cloudflare/references/images/patterns.md +31 -0
- package/baseline/skill/cloudflare/references/kv/README.md +60 -0
- package/baseline/skill/cloudflare/references/kv/api.md +114 -0
- package/baseline/skill/cloudflare/references/kv/configuration.md +92 -0
- package/baseline/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/baseline/skill/cloudflare/references/kv/patterns.md +139 -0
- package/baseline/skill/cloudflare/references/miniflare/README.md +64 -0
- package/baseline/skill/cloudflare/references/miniflare/api.md +144 -0
- package/baseline/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/baseline/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/baseline/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/baseline/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/baseline/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/baseline/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/baseline/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/baseline/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/baseline/skill/cloudflare/references/observability/README.md +18 -0
- package/baseline/skill/cloudflare/references/observability/api.md +51 -0
- package/baseline/skill/cloudflare/references/observability/configuration.md +60 -0
- package/baseline/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/baseline/skill/cloudflare/references/observability/patterns.md +42 -0
- package/baseline/skill/cloudflare/references/pages/README.md +76 -0
- package/baseline/skill/cloudflare/references/pages/api.md +200 -0
- package/baseline/skill/cloudflare/references/pages/configuration.md +228 -0
- package/baseline/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/baseline/skill/cloudflare/references/pages/patterns.md +145 -0
- package/baseline/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/baseline/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/baseline/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/baseline/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/baseline/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/baseline/skill/cloudflare/references/pipelines/README.md +664 -0
- package/baseline/skill/cloudflare/references/pulumi/README.md +107 -0
- package/baseline/skill/cloudflare/references/pulumi/api.md +194 -0
- package/baseline/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/baseline/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/baseline/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/baseline/skill/cloudflare/references/queues/README.md +69 -0
- package/baseline/skill/cloudflare/references/queues/api.md +138 -0
- package/baseline/skill/cloudflare/references/queues/configuration.md +125 -0
- package/baseline/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/baseline/skill/cloudflare/references/queues/patterns.md +155 -0
- package/baseline/skill/cloudflare/references/r2/README.md +61 -0
- package/baseline/skill/cloudflare/references/r2/api.md +127 -0
- package/baseline/skill/cloudflare/references/r2/configuration.md +76 -0
- package/baseline/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/baseline/skill/cloudflare/references/r2/patterns.md +127 -0
- package/baseline/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/baseline/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/baseline/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/baseline/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/baseline/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/baseline/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/baseline/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/baseline/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/baseline/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/baseline/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/baseline/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/baseline/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/baseline/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/baseline/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/baseline/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/baseline/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/baseline/skill/cloudflare/references/sandbox/README.md +90 -0
- package/baseline/skill/cloudflare/references/sandbox/api.md +178 -0
- package/baseline/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/baseline/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/baseline/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/baseline/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/baseline/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/baseline/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/baseline/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/baseline/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/baseline/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/baseline/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/baseline/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/baseline/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/baseline/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/baseline/skill/cloudflare/references/snippets/README.md +15 -0
- package/baseline/skill/cloudflare/references/snippets/api.md +47 -0
- package/baseline/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/baseline/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/baseline/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/baseline/skill/cloudflare/references/spectrum/README.md +16 -0
- package/baseline/skill/cloudflare/references/spectrum/api.md +24 -0
- package/baseline/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/baseline/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/baseline/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/baseline/skill/cloudflare/references/static-assets/README.md +14 -0
- package/baseline/skill/cloudflare/references/static-assets/api.md +3 -0
- package/baseline/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/baseline/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/baseline/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/baseline/skill/cloudflare/references/stream/README.md +103 -0
- package/baseline/skill/cloudflare/references/stream/api.md +204 -0
- package/baseline/skill/cloudflare/references/stream/configuration.md +127 -0
- package/baseline/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/baseline/skill/cloudflare/references/stream/patterns.md +152 -0
- package/baseline/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/baseline/skill/cloudflare/references/terraform/README.md +76 -0
- package/baseline/skill/cloudflare/references/terraform/api.md +159 -0
- package/baseline/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/baseline/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/baseline/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/baseline/skill/cloudflare/references/tunnel/README.md +82 -0
- package/baseline/skill/cloudflare/references/tunnel/api.md +105 -0
- package/baseline/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/baseline/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/baseline/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/baseline/skill/cloudflare/references/turn/README.md +699 -0
- package/baseline/skill/cloudflare/references/turnstile/README.md +14 -0
- package/baseline/skill/cloudflare/references/turnstile/api.md +3 -0
- package/baseline/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/baseline/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/baseline/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/baseline/skill/cloudflare/references/vectorize/README.md +682 -0
- package/baseline/skill/cloudflare/references/waf/README.md +14 -0
- package/baseline/skill/cloudflare/references/waf/api.md +3 -0
- package/baseline/skill/cloudflare/references/waf/configuration.md +44 -0
- package/baseline/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/baseline/skill/cloudflare/references/waf/patterns.md +29 -0
- package/baseline/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/baseline/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/baseline/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/baseline/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/baseline/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/baseline/skill/cloudflare/references/workerd/README.md +47 -0
- package/baseline/skill/cloudflare/references/workerd/api.md +199 -0
- package/baseline/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/baseline/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/baseline/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/baseline/skill/cloudflare/references/workers/README.md +96 -0
- package/baseline/skill/cloudflare/references/workers/api.md +137 -0
- package/baseline/skill/cloudflare/references/workers/configuration.md +147 -0
- package/baseline/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/baseline/skill/cloudflare/references/workers/patterns.md +149 -0
- package/baseline/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/baseline/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/baseline/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/baseline/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/baseline/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/baseline/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/baseline/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/baseline/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/baseline/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/baseline/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/baseline/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/baseline/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/baseline/skill/cloudflare/references/workflows/README.md +62 -0
- package/baseline/skill/cloudflare/references/workflows/api.md +125 -0
- package/baseline/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/baseline/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/baseline/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/baseline/skill/cloudflare/references/wrangler/README.md +90 -0
- package/baseline/skill/cloudflare/references/wrangler/api.md +140 -0
- package/baseline/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/baseline/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/baseline/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/baseline/skill/cloudflare/references/zaraz/README.md +360 -0
- package/baseline/skill/code-navigation/SKILL.md +130 -0
- package/baseline/skill/compaction/SKILL.md +317 -0
- package/baseline/skill/condition-based-waiting/SKILL.md +123 -0
- package/baseline/skill/condition-based-waiting/example.ts +158 -0
- package/baseline/skill/context-engineering/SKILL.md +176 -0
- package/baseline/skill/context-initialization/SKILL.md +70 -0
- package/baseline/skill/context-management/SKILL.md +163 -0
- package/baseline/skill/core-data-expert/SKILL.md +93 -0
- package/baseline/skill/core-data-expert/references/batch-operations.md +543 -0
- package/baseline/skill/core-data-expert/references/cloudkit-integration.md +259 -0
- package/baseline/skill/core-data-expert/references/concurrency.md +522 -0
- package/baseline/skill/core-data-expert/references/fetch-requests.md +643 -0
- package/baseline/skill/core-data-expert/references/glossary.md +233 -0
- package/baseline/skill/core-data-expert/references/migration.md +393 -0
- package/baseline/skill/core-data-expert/references/model-configuration.md +597 -0
- package/baseline/skill/core-data-expert/references/performance.md +300 -0
- package/baseline/skill/core-data-expert/references/persistent-history.md +553 -0
- package/baseline/skill/core-data-expert/references/project-audit.md +60 -0
- package/baseline/skill/core-data-expert/references/saving.md +574 -0
- package/baseline/skill/core-data-expert/references/stack-setup.md +625 -0
- package/baseline/skill/core-data-expert/references/testing.md +300 -0
- package/baseline/skill/core-data-expert/references/threading.md +589 -0
- package/baseline/skill/deep-research/SKILL.md +384 -0
- package/baseline/skill/defense-in-depth/SKILL.md +166 -0
- package/baseline/skill/design-system-audit/SKILL.md +153 -0
- package/baseline/skill/development-lifecycle/SKILL.md +356 -0
- package/baseline/skill/dispatching-parallel-agents/SKILL.md +191 -0
- package/baseline/skill/executing-plans/SKILL.md +247 -0
- package/baseline/skill/figma/SKILL.md +224 -0
- package/baseline/skill/finishing-a-development-branch/SKILL.md +357 -0
- package/baseline/skill/frontend-design/SKILL.md +235 -0
- package/baseline/skill/frontend-design/references/animation/motion-advanced.md +224 -0
- package/baseline/skill/frontend-design/references/animation/motion-core.md +181 -0
- package/baseline/skill/frontend-design/references/canvas/execution.md +90 -0
- package/baseline/skill/frontend-design/references/canvas/philosophy.md +94 -0
- package/baseline/skill/frontend-design/references/design/color-system.md +111 -0
- package/baseline/skill/frontend-design/references/design/interaction.md +149 -0
- package/baseline/skill/frontend-design/references/design/typography-rules.md +106 -0
- package/baseline/skill/frontend-design/references/design/ux-writing.md +99 -0
- package/baseline/skill/frontend-design/references/shadcn/accessibility.md +132 -0
- package/baseline/skill/frontend-design/references/shadcn/core-components.md +153 -0
- package/baseline/skill/frontend-design/references/shadcn/form-components.md +158 -0
- package/baseline/skill/frontend-design/references/shadcn/setup.md +69 -0
- package/baseline/skill/frontend-design/references/shadcn/theming.md +152 -0
- package/baseline/skill/frontend-design/references/tailwind/responsive.md +112 -0
- package/baseline/skill/frontend-design/references/tailwind/utilities-layout.md +134 -0
- package/baseline/skill/frontend-design/references/tailwind/utilities-styling.md +165 -0
- package/baseline/skill/frontend-design/references/tailwind/v4-config.md +147 -0
- package/baseline/skill/frontend-design/references/tailwind/v4-features.md +128 -0
- package/baseline/skill/gemini-large-context/SKILL.md +216 -0
- package/baseline/skill/index-knowledge/SKILL.md +413 -0
- package/baseline/skill/jira/SKILL.md +283 -0
- package/baseline/skill/jira/mcp.json +6 -0
- package/baseline/skill/memory-system/SKILL.md +84 -0
- package/baseline/skill/mockup-to-code/SKILL.md +184 -0
- package/baseline/skill/mqdh/SKILL.md +171 -0
- package/baseline/skill/obsidian/SKILL.md +192 -0
- package/baseline/skill/obsidian/mcp.json +22 -0
- package/baseline/skill/opensrc/SKILL.md +127 -0
- package/baseline/skill/opensrc/references/architecture.md +176 -0
- package/baseline/skill/opensrc/references/cli-usage.md +176 -0
- package/baseline/skill/opensrc/references/registry-support.md +137 -0
- package/baseline/skill/pdf-extract/SKILL.md +438 -0
- package/baseline/skill/playwright/SKILL.md +320 -0
- package/baseline/skill/playwright/mcp.json +16 -0
- package/baseline/skill/playwriter/SKILL.md +158 -0
- package/baseline/skill/polar/SKILL.md +102 -0
- package/baseline/skill/prd/SKILL.md +146 -0
- package/baseline/skill/prd-task/SKILL.md +182 -0
- package/baseline/skill/prd-task/references/prd-schema.json +124 -0
- package/baseline/skill/ralph/SKILL.md +296 -0
- package/baseline/skill/react-best-practices/AGENTS.md +2410 -0
- package/baseline/skill/react-best-practices/README.md +123 -0
- package/baseline/skill/react-best-practices/SKILL.md +133 -0
- package/baseline/skill/react-best-practices/metadata.json +15 -0
- package/baseline/skill/react-best-practices/rules/_sections.md +46 -0
- package/baseline/skill/react-best-practices/rules/_template.md +28 -0
- package/baseline/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/baseline/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/baseline/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/baseline/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/baseline/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/baseline/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/baseline/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/baseline/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/baseline/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/baseline/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/baseline/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/baseline/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/baseline/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/baseline/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/baseline/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/baseline/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/baseline/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/baseline/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/baseline/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/baseline/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/baseline/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/baseline/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/baseline/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/baseline/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/baseline/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/baseline/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/baseline/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/baseline/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/baseline/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/baseline/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/baseline/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/baseline/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/baseline/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/baseline/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/baseline/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/baseline/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/baseline/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/baseline/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/baseline/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/baseline/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/baseline/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/baseline/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/baseline/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/baseline/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/baseline/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/baseline/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/baseline/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/baseline/skill/receiving-code-review/SKILL.md +252 -0
- package/baseline/skill/requesting-code-review/SKILL.md +397 -0
- package/baseline/skill/requesting-code-review/review.md +160 -0
- package/baseline/skill/resend/SKILL.md +177 -0
- package/baseline/skill/resend/references/react-email.md +287 -0
- package/baseline/skill/resend/references/receive-email.md +248 -0
- package/baseline/skill/resend/references/send-email.md +318 -0
- package/baseline/skill/root-cause-tracing/SKILL.md +192 -0
- package/baseline/skill/root-cause-tracing/find-polluter.sh +63 -0
- package/baseline/skill/session-management/SKILL.md +9 -0
- package/baseline/skill/sharing-skills/SKILL.md +214 -0
- package/baseline/skill/skill-creator/SKILL.md +156 -0
- package/baseline/skill/source-code-research/SKILL.md +293 -0
- package/baseline/skill/source-code-research/references/analysis-tips.md +43 -0
- package/baseline/skill/source-code-research/references/anti-patterns.md +36 -0
- package/baseline/skill/source-code-research/references/common-patterns.md +57 -0
- package/baseline/skill/source-code-research/references/example-workflow.md +60 -0
- package/baseline/skill/source-code-research/references/further-reading.md +5 -0
- package/baseline/skill/source-code-research/references/source-structure.md +45 -0
- package/baseline/skill/stitch/SKILL.md +147 -0
- package/baseline/skill/stitch/mcp.json +9 -0
- package/baseline/skill/structured-edit/SKILL.md +181 -0
- package/baseline/skill/subagent-driven-development/SKILL.md +237 -0
- package/baseline/skill/supabase/SKILL.md +130 -0
- package/baseline/skill/supabase/mcp.json +27 -0
- package/baseline/skill/supabase-postgres-best-practices/AGENTS.md +1490 -0
- package/baseline/skill/supabase-postgres-best-practices/SKILL.md +65 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
- package/baseline/skill/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
- package/baseline/skill/swarm-coordination/SKILL.md +179 -0
- package/baseline/skill/swarm-coordination/references/architecture.md +39 -0
- package/baseline/skill/swarm-coordination/references/delegation-worker-protocol.md +145 -0
- package/baseline/skill/swarm-coordination/references/dependency-graph.md +50 -0
- package/baseline/skill/swarm-coordination/references/drift-check.md +90 -0
- package/baseline/skill/swarm-coordination/references/integration-beads.md +20 -0
- package/baseline/skill/swarm-coordination/references/launch-flow.md +186 -0
- package/baseline/skill/swarm-coordination/references/reconciler.md +172 -0
- package/baseline/skill/swarm-coordination/references/tier-enforcement.md +78 -0
- package/baseline/skill/swarm-coordination/references/tmux-integration.md +134 -0
- package/baseline/skill/swift-concurrency/SKILL.md +266 -0
- package/baseline/skill/swift-concurrency/references/actors.md +640 -0
- package/baseline/skill/swift-concurrency/references/async-algorithms.md +822 -0
- package/baseline/skill/swift-concurrency/references/async-await-basics.md +249 -0
- package/baseline/skill/swift-concurrency/references/async-sequences.md +670 -0
- package/baseline/skill/swift-concurrency/references/core-data.md +533 -0
- package/baseline/skill/swift-concurrency/references/glossary.md +128 -0
- package/baseline/skill/swift-concurrency/references/linting.md +142 -0
- package/baseline/skill/swift-concurrency/references/memory-management.md +542 -0
- package/baseline/skill/swift-concurrency/references/migration.md +1076 -0
- package/baseline/skill/swift-concurrency/references/performance.md +574 -0
- package/baseline/skill/swift-concurrency/references/sendable.md +578 -0
- package/baseline/skill/swift-concurrency/references/tasks.md +604 -0
- package/baseline/skill/swift-concurrency/references/testing.md +565 -0
- package/baseline/skill/swift-concurrency/references/threading.md +452 -0
- package/baseline/skill/swiftui-expert-skill/SKILL.md +329 -0
- package/baseline/skill/swiftui-expert-skill/references/animation-advanced.md +351 -0
- package/baseline/skill/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/baseline/skill/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/baseline/skill/swiftui-expert-skill/references/image-optimization.md +286 -0
- package/baseline/skill/swiftui-expert-skill/references/layout-best-practices.md +312 -0
- package/baseline/skill/swiftui-expert-skill/references/liquid-glass.md +377 -0
- package/baseline/skill/swiftui-expert-skill/references/list-patterns.md +153 -0
- package/baseline/skill/swiftui-expert-skill/references/modern-apis.md +400 -0
- package/baseline/skill/swiftui-expert-skill/references/performance-patterns.md +377 -0
- package/baseline/skill/swiftui-expert-skill/references/scroll-patterns.md +305 -0
- package/baseline/skill/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
- package/baseline/skill/swiftui-expert-skill/references/state-management.md +447 -0
- package/baseline/skill/swiftui-expert-skill/references/text-formatting.md +285 -0
- package/baseline/skill/swiftui-expert-skill/references/view-structure.md +276 -0
- package/baseline/skill/systematic-debugging/SKILL.md +402 -0
- package/baseline/skill/test-driven-development/SKILL.md +388 -0
- package/baseline/skill/testing-anti-patterns/SKILL.md +333 -0
- package/baseline/skill/testing-skills-with-subagents/SKILL.md +405 -0
- package/baseline/skill/tilth-cli/SKILL.md +180 -0
- package/baseline/skill/tool-priority/SKILL.md +299 -0
- package/baseline/skill/ui-ux-research/SKILL.md +9 -0
- package/baseline/skill/using-git-worktrees/SKILL.md +259 -0
- package/baseline/skill/using-skills/SKILL.md +117 -0
- package/baseline/skill/v0/SKILL.md +158 -0
- package/baseline/skill/v1-run/SKILL.md +175 -0
- package/baseline/skill/v1-run/mcp.json +6 -0
- package/baseline/skill/vercel-deploy-claimable/SKILL.md +124 -0
- package/baseline/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/baseline/skill/verification-before-completion/SKILL.md +236 -0
- package/baseline/skill/verification-before-completion/references/VERIFICATION_PROTOCOL.md +171 -0
- package/baseline/skill/visual-analysis/SKILL.md +154 -0
- package/baseline/skill/web-design-guidelines/SKILL.md +46 -0
- package/baseline/skill/writing-plans/SKILL.md +320 -0
- package/baseline/skill/writing-skills/SKILL.md +287 -0
- package/baseline/skill/writing-skills/anthropic-best-practices.md +1173 -0
- package/baseline/skill/writing-skills/graphviz-conventions.dot +172 -0
- package/baseline/skill/writing-skills/persuasion-principles.md +220 -0
- package/baseline/skill/writing-skills/references/anti-patterns.md +25 -0
- package/baseline/skill/writing-skills/references/claude-search-optimization.md +140 -0
- package/baseline/skill/writing-skills/references/discovery-workflow.md +11 -0
- package/baseline/skill/writing-skills/references/file-organization.md +32 -0
- package/baseline/skill/writing-skills/references/flowcharts-and-examples.md +57 -0
- package/baseline/skill/writing-skills/references/rationalization-hardening.md +75 -0
- package/baseline/skill/writing-skills/references/testing-skill-types.md +52 -0
- package/baseline/tool/context7.ts +191 -0
- package/baseline/tool/grepsearch.ts +143 -0
- package/baseline/tsconfig.json +21 -0
- package/baseline/tui.json +15 -0
- package/bin/mrc-opc.mjs +25 -0
- package/bin/ocp.mjs +25 -0
- package/bin/opc.mjs +25 -0
- package/bin/opencode-starterkit.mjs +25 -0
- package/docs/reports/2026-03-18-memory-db-architecture-note.md +47 -0
- package/docs/reports/2026-03-18-vat-opencode-classification-matrix.md +180 -0
- package/package.json +25 -0
- package/src/cli.mjs +41 -0
- package/src/config-merge.mjs +61 -0
- package/src/constants.mjs +58 -0
- package/src/fs-utils.mjs +46 -0
- package/src/install-global.mjs +102 -0
- package/src/install-project.mjs +81 -0
- package/src/memory-bootstrap.mjs +29 -0
- package/src/prompt.mjs +31 -0
- package/src/templates.mjs +31 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# Send Email with Resend
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Resend provides two endpoints for sending emails:
|
|
6
|
+
|
|
7
|
+
| Approach | Endpoint | Use Case |
|
|
8
|
+
| ---------- | -------------------- | ------------------------------------------------------------------------- |
|
|
9
|
+
| **Single** | `POST /emails` | Individual transactional emails, emails with attachments, scheduled sends |
|
|
10
|
+
| **Batch** | `POST /emails/batch` | Multiple distinct emails in one request (max 100), bulk notifications |
|
|
11
|
+
|
|
12
|
+
**Choose batch when:**
|
|
13
|
+
|
|
14
|
+
- Sending 2+ distinct emails at once
|
|
15
|
+
- Reducing API calls is important (rate limit: 2 requests/second by default)
|
|
16
|
+
- No attachments or scheduling needed
|
|
17
|
+
|
|
18
|
+
**Choose single when:**
|
|
19
|
+
|
|
20
|
+
- Sending one email
|
|
21
|
+
- Email needs attachments
|
|
22
|
+
- Email needs to be scheduled
|
|
23
|
+
- Different recipients need different timing
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
1. **Detect project language** from config files (package.json, requirements.txt, go.mod, etc.)
|
|
28
|
+
2. **Install SDK** (preferred) or use cURL
|
|
29
|
+
3. **Choose single or batch** based on decision matrix above
|
|
30
|
+
4. **Implement best practices** - Idempotency keys, error handling, retries
|
|
31
|
+
|
|
32
|
+
## Single Email
|
|
33
|
+
|
|
34
|
+
**Endpoint:** `POST /emails` (prefer SDK over cURL)
|
|
35
|
+
|
|
36
|
+
### Required Parameters
|
|
37
|
+
|
|
38
|
+
| Parameter | Type | Description |
|
|
39
|
+
| ---------------- | -------- | --------------------------------------------------- |
|
|
40
|
+
| `from` | string | Sender address. Format: `"Name <email@domain.com>"` |
|
|
41
|
+
| `to` | string[] | Recipient addresses (max 50) |
|
|
42
|
+
| `subject` | string | Email subject line |
|
|
43
|
+
| `html` or `text` | string | Email body content |
|
|
44
|
+
|
|
45
|
+
### Optional Parameters
|
|
46
|
+
|
|
47
|
+
| Parameter | Type | Description |
|
|
48
|
+
| -------------- | -------- | --------------------------------- |
|
|
49
|
+
| `cc` | string[] | CC recipients |
|
|
50
|
+
| `bcc` | string[] | BCC recipients |
|
|
51
|
+
| `reply_to` | string[] | Reply-to addresses |
|
|
52
|
+
| `scheduled_at` | string | Schedule send time (ISO 8601) |
|
|
53
|
+
| `attachments` | array | File attachments (max 40MB total) |
|
|
54
|
+
| `tags` | array | Key/value pairs for tracking |
|
|
55
|
+
| `headers` | object | Custom headers |
|
|
56
|
+
|
|
57
|
+
### Example (Node.js)
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { Resend } from "resend";
|
|
61
|
+
|
|
62
|
+
const resend = new Resend(process.env.RESEND_API_KEY);
|
|
63
|
+
|
|
64
|
+
const { data, error } = await resend.emails.send(
|
|
65
|
+
{
|
|
66
|
+
from: "Acme <onboarding@resend.dev>",
|
|
67
|
+
to: ["delivered@resend.dev"],
|
|
68
|
+
subject: "Hello World",
|
|
69
|
+
html: "<p>Email body here</p>",
|
|
70
|
+
},
|
|
71
|
+
{ idempotencyKey: `welcome-email/${userId}` },
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
if (error) {
|
|
75
|
+
console.error("Failed:", error.message);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log("Sent:", data.id);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Example (Python)
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
import resend
|
|
85
|
+
import os
|
|
86
|
+
|
|
87
|
+
resend.api_key = os.environ["RESEND_API_KEY"]
|
|
88
|
+
|
|
89
|
+
params: resend.Emails.SendParams = {
|
|
90
|
+
"from": "Acme <onboarding@resend.dev>",
|
|
91
|
+
"to": ["delivered@resend.dev"],
|
|
92
|
+
"subject": "Hello World",
|
|
93
|
+
"html": "<p>Email body here</p>",
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
email = resend.Emails.send(params)
|
|
97
|
+
print(email)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Batch Email
|
|
101
|
+
|
|
102
|
+
**Endpoint:** `POST /emails/batch`
|
|
103
|
+
|
|
104
|
+
### Limitations
|
|
105
|
+
|
|
106
|
+
- **No attachments** - Use single sends for emails with attachments
|
|
107
|
+
- **No scheduling** - Use single sends for scheduled emails
|
|
108
|
+
- **Atomic** - If one email fails validation, the entire batch fails
|
|
109
|
+
- **Max 100 emails** per request
|
|
110
|
+
- **Max 50 recipients** per individual email in the batch
|
|
111
|
+
|
|
112
|
+
### Example (Node.js)
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { Resend } from "resend";
|
|
116
|
+
|
|
117
|
+
const resend = new Resend(process.env.RESEND_API_KEY);
|
|
118
|
+
|
|
119
|
+
const { data, error } = await resend.batch.send(
|
|
120
|
+
[
|
|
121
|
+
{
|
|
122
|
+
from: "Acme <notifications@acme.com>",
|
|
123
|
+
to: ["delivered@resend.dev"],
|
|
124
|
+
subject: "Order Shipped",
|
|
125
|
+
html: "<p>Your order has shipped!</p>",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
from: "Acme <notifications@acme.com>",
|
|
129
|
+
to: ["delivered@resend.dev"],
|
|
130
|
+
subject: "Order Confirmed",
|
|
131
|
+
html: "<p>Your order is confirmed!</p>",
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
{ idempotencyKey: `batch-orders/${batchId}` },
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
if (error) {
|
|
138
|
+
console.error("Batch failed:", error.message);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
console.log(
|
|
142
|
+
"Sent:",
|
|
143
|
+
data.map((e) => e.id),
|
|
144
|
+
);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Large Batches (100+ Emails)
|
|
148
|
+
|
|
149
|
+
For sends larger than 100 emails, chunk into multiple batch requests:
|
|
150
|
+
|
|
151
|
+
1. **Split into chunks** of 100 emails each
|
|
152
|
+
2. **Use unique idempotency keys** per chunk: `<batch-prefix>/chunk-<index>`
|
|
153
|
+
3. **Send chunks in parallel** for better throughput
|
|
154
|
+
4. **Track results** per chunk to handle partial failures
|
|
155
|
+
|
|
156
|
+
## Best Practices
|
|
157
|
+
|
|
158
|
+
### Idempotency Keys
|
|
159
|
+
|
|
160
|
+
Prevent duplicate emails when retrying failed requests.
|
|
161
|
+
|
|
162
|
+
| Key Facts | |
|
|
163
|
+
| ------------------- | ---------------------------------------------------------------- |
|
|
164
|
+
| **Format (single)** | `<event-type>/<entity-id>` (e.g., `welcome-email/user-123`) |
|
|
165
|
+
| **Format (batch)** | `batch-<event-type>/<batch-id>` (e.g., `batch-orders/batch-456`) |
|
|
166
|
+
| **Expiration** | 24 hours |
|
|
167
|
+
| **Max length** | 256 characters |
|
|
168
|
+
|
|
169
|
+
### Error Handling
|
|
170
|
+
|
|
171
|
+
| Code | Action |
|
|
172
|
+
| -------- | ------------------------------------------------- |
|
|
173
|
+
| 400, 422 | Fix request parameters, don't retry |
|
|
174
|
+
| 401, 403 | Check API key / verify domain, don't retry |
|
|
175
|
+
| 409 | Idempotency conflict - use new key or fix payload |
|
|
176
|
+
| 429 | Rate limited - retry with exponential backoff |
|
|
177
|
+
| 500 | Server error - retry with exponential backoff |
|
|
178
|
+
|
|
179
|
+
### Retry Strategy
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
async function sendWithRetry(emailData, maxRetries = 3) {
|
|
183
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
184
|
+
const { data, error } = await resend.emails.send(emailData);
|
|
185
|
+
|
|
186
|
+
if (!error) return data;
|
|
187
|
+
|
|
188
|
+
// Don't retry client errors
|
|
189
|
+
if (error.statusCode >= 400 && error.statusCode < 500 && error.statusCode !== 429) {
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Exponential backoff for rate limits and server errors
|
|
194
|
+
const delay = Math.pow(2, i) * 1000;
|
|
195
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
196
|
+
}
|
|
197
|
+
throw new Error("Max retries exceeded");
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Deliverability
|
|
202
|
+
|
|
203
|
+
### Required
|
|
204
|
+
|
|
205
|
+
| Practice | Why |
|
|
206
|
+
| ------------------------------ | --------------------------------------- |
|
|
207
|
+
| **Valid SPF, DKIM, DMARC** | Authenticate email, prevent spoofing |
|
|
208
|
+
| **Links match sending domain** | Mismatched domains trigger spam filters |
|
|
209
|
+
| **Include plain text version** | Accessibility and deliverability |
|
|
210
|
+
| **Avoid "no-reply" addresses** | Use real addresses for trust signals |
|
|
211
|
+
| **Keep body under 102KB** | Gmail clips larger messages |
|
|
212
|
+
|
|
213
|
+
### Recommended
|
|
214
|
+
|
|
215
|
+
| Practice | Why |
|
|
216
|
+
| -------------------------------------- | ---------------------------------------------------- |
|
|
217
|
+
| **Use subdomains** | Protects reputation (e.g., `notifications.acme.com`) |
|
|
218
|
+
| **Disable tracking for transactional** | Open/click tracking can trigger spam filters |
|
|
219
|
+
|
|
220
|
+
## Webhooks
|
|
221
|
+
|
|
222
|
+
Track email delivery status in real-time:
|
|
223
|
+
|
|
224
|
+
| Event | When to use |
|
|
225
|
+
| -------------------------------- | ------------------------------------ |
|
|
226
|
+
| `email.delivered` | Confirm successful delivery |
|
|
227
|
+
| `email.bounced` | Remove from mailing list, alert user |
|
|
228
|
+
| `email.complained` | Unsubscribe user (spam complaint) |
|
|
229
|
+
| `email.opened` / `email.clicked` | Track engagement (marketing only) |
|
|
230
|
+
|
|
231
|
+
**Always verify webhook signatures:**
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
const event = resend.webhooks.verify({
|
|
235
|
+
payload,
|
|
236
|
+
headers: {
|
|
237
|
+
"svix-id": req.headers.get("svix-id"),
|
|
238
|
+
"svix-timestamp": req.headers.get("svix-timestamp"),
|
|
239
|
+
"svix-signature": req.headers.get("svix-signature"),
|
|
240
|
+
},
|
|
241
|
+
secret: process.env.RESEND_WEBHOOK_SECRET,
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Tags
|
|
246
|
+
|
|
247
|
+
Key/value pairs for tracking and filtering:
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
tags: [
|
|
251
|
+
{ name: "user_id", value: "usr_123" },
|
|
252
|
+
{ name: "email_type", value: "welcome" },
|
|
253
|
+
{ name: "plan", value: "enterprise" },
|
|
254
|
+
];
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Constraints:** ASCII letters, numbers, underscores, dashes only. Max 256 chars each.
|
|
258
|
+
|
|
259
|
+
## Templates
|
|
260
|
+
|
|
261
|
+
Use pre-built templates instead of sending HTML:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
const { data, error } = await resend.emails.send({
|
|
265
|
+
from: "Acme <hello@acme.com>",
|
|
266
|
+
to: ["delivered@resend.dev"],
|
|
267
|
+
subject: "Welcome!",
|
|
268
|
+
template: {
|
|
269
|
+
id: "tmpl_abc123",
|
|
270
|
+
variables: {
|
|
271
|
+
USER_NAME: "John", // Case-sensitive!
|
|
272
|
+
ORDER_TOTAL: "$99.00",
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Important:** Variable names are **case-sensitive**. Templates must be **published** before use.
|
|
279
|
+
|
|
280
|
+
## Testing
|
|
281
|
+
|
|
282
|
+
**Never test with fake addresses at real providers (`test@gmail.com`)** - destroys reputation.
|
|
283
|
+
|
|
284
|
+
### Safe Testing
|
|
285
|
+
|
|
286
|
+
| Method | Address | Result |
|
|
287
|
+
| -------------- | ----------------------- | ----------------------------- |
|
|
288
|
+
| **Delivered** | `delivered@resend.dev` | Simulates successful delivery |
|
|
289
|
+
| **Bounced** | `bounced@resend.dev` | Simulates hard bounce |
|
|
290
|
+
| **Complained** | `complained@resend.dev` | Simulates spam complaint |
|
|
291
|
+
|
|
292
|
+
## Domain Warm-up
|
|
293
|
+
|
|
294
|
+
New domains must gradually increase volume:
|
|
295
|
+
|
|
296
|
+
**New domain schedule:**
|
|
297
|
+
| Day | Max emails/day |
|
|
298
|
+
|-----|---------------|
|
|
299
|
+
| 1 | 150 |
|
|
300
|
+
| 2 | 250 |
|
|
301
|
+
| 3 | 400 |
|
|
302
|
+
| 4 | 700 |
|
|
303
|
+
| 5 | 1,000 |
|
|
304
|
+
| 6 | 1,500 |
|
|
305
|
+
| 7 | 2,000 |
|
|
306
|
+
|
|
307
|
+
**Monitor:** Bounce rate < 4%, Spam complaint rate < 0.08%
|
|
308
|
+
|
|
309
|
+
## Common Mistakes
|
|
310
|
+
|
|
311
|
+
| Mistake | Fix |
|
|
312
|
+
| -------------------------------- | ------------------------------------- |
|
|
313
|
+
| Retrying without idempotency key | Always include - prevents duplicates |
|
|
314
|
+
| Batch for attachments | Use single sends instead |
|
|
315
|
+
| Retrying 400/422 errors | Fix request, don't retry |
|
|
316
|
+
| Tracking on transactional | Disable for receipts, password resets |
|
|
317
|
+
| Testing with fake emails | Use `delivered@resend.dev` |
|
|
318
|
+
| High volume on new domain | Warm up gradually |
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: root-cause-tracing
|
|
3
|
+
description: Use when errors occur deep in execution and you need to trace back to find the original trigger - systematically traces bugs backward through call stack, adding instrumentation when needed, to identify source of invalid data or incorrect behavior
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [debugging, workflow]
|
|
6
|
+
dependencies: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Root Cause Tracing
|
|
10
|
+
|
|
11
|
+
> **Replaces** ad-hoc print-statement debugging and "try random fixes until it works" approaches
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Errors occur deep in a call stack and the immediate failure is just a symptom
|
|
16
|
+
- You need to trace where invalid data or state originated
|
|
17
|
+
|
|
18
|
+
## When NOT to Use
|
|
19
|
+
|
|
20
|
+
- The error is at the entry point and the root cause is obvious
|
|
21
|
+
- You’re doing feature work with no failures to trace
|
|
22
|
+
|
|
23
|
+
## Anti-Patterns
|
|
24
|
+
|
|
25
|
+
| Anti-Pattern | Why It Fails | Instead |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Fixing symptoms where error appears | Hides origin; bug returns via other paths | Trace backward until original trigger is found |
|
|
28
|
+
| Skipping stack trace analysis | Misses the real caller and bad input source | Read full stack, file paths, and line numbers first |
|
|
29
|
+
| Adding instrumentation without hypothesis | Produces noisy logs and slows investigation | Instrument one boundary at a time to answer a specific question |
|
|
30
|
+
| Guessing the cause without evidence | Leads to random fixes and regressions | Form evidence-backed hypothesis, then test |
|
|
31
|
+
|
|
32
|
+
## Overview
|
|
33
|
+
|
|
34
|
+
Bugs often manifest deep in the call stack (git init in wrong directory, file created in wrong location, database opened with wrong path). Your instinct is to fix where the error appears, but that's treating a symptom.
|
|
35
|
+
|
|
36
|
+
**Core principle:** Trace backward through the call chain until you find the original trigger, then fix at the source.
|
|
37
|
+
|
|
38
|
+
## The Tracing Process
|
|
39
|
+
|
|
40
|
+
### 1. Observe the Symptom
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Error: git init failed in /Users/jesse/project/packages/core
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. Find Immediate Cause
|
|
47
|
+
|
|
48
|
+
**What code directly causes this?**
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
await execFileAsync("git", ["init"], { cwd: projectDir });
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Ask: What Called This?
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
WorktreeManager.createSessionWorktree(projectDir, sessionId)
|
|
58
|
+
→ called by Session.initializeWorkspace()
|
|
59
|
+
→ called by Session.create()
|
|
60
|
+
→ called by test at Project.create()
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. Keep Tracing Up
|
|
64
|
+
|
|
65
|
+
**What value was passed?**
|
|
66
|
+
|
|
67
|
+
- `projectDir = ''` (empty string!)
|
|
68
|
+
- Empty string as `cwd` resolves to `process.cwd()`
|
|
69
|
+
- That's the source code directory!
|
|
70
|
+
|
|
71
|
+
### 5. Find Original Trigger
|
|
72
|
+
|
|
73
|
+
**Where did empty string come from?**
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const context = setupCoreTest(); // Returns { tempDir: '' }
|
|
77
|
+
Project.create("name", context.tempDir); // Accessed before beforeEach!
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Adding Stack Traces
|
|
81
|
+
|
|
82
|
+
When you can't trace manually, add instrumentation:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Before the problematic operation
|
|
86
|
+
async function gitInit(directory: string) {
|
|
87
|
+
const stack = new Error().stack;
|
|
88
|
+
console.error("DEBUG git init:", {
|
|
89
|
+
directory,
|
|
90
|
+
cwd: process.cwd(),
|
|
91
|
+
nodeEnv: process.env.NODE_ENV,
|
|
92
|
+
stack,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
await execFileAsync("git", ["init"], { cwd: directory });
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Critical:** Use `console.error()` in tests (not logger - may not show)
|
|
100
|
+
|
|
101
|
+
**Run and capture:**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm test 2>&1 | grep 'DEBUG git init'
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Analyze stack traces:**
|
|
108
|
+
|
|
109
|
+
- Look for test file names
|
|
110
|
+
- Find the line number triggering the call
|
|
111
|
+
- Identify the pattern (same test? same parameter?)
|
|
112
|
+
|
|
113
|
+
## Finding Which Test Causes Pollution
|
|
114
|
+
|
|
115
|
+
If something appears during tests but you don't know which test:
|
|
116
|
+
|
|
117
|
+
Use the bisection script: @find-polluter.sh
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
./find-polluter.sh '.git' 'src/**/*.test.ts'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Runs tests one-by-one, stops at first polluter. See script for usage.
|
|
124
|
+
|
|
125
|
+
## Real Example: Empty projectDir
|
|
126
|
+
|
|
127
|
+
**Symptom:** `.git` created in `packages/core/` (source code)
|
|
128
|
+
|
|
129
|
+
**Trace chain:**
|
|
130
|
+
|
|
131
|
+
1. `git init` runs in `process.cwd()` ← empty cwd parameter
|
|
132
|
+
2. WorktreeManager called with empty projectDir
|
|
133
|
+
3. Session.create() passed empty string
|
|
134
|
+
4. Test accessed `context.tempDir` before beforeEach
|
|
135
|
+
5. setupCoreTest() returns `{ tempDir: '' }` initially
|
|
136
|
+
|
|
137
|
+
**Root cause:** Top-level variable initialization accessing empty value
|
|
138
|
+
|
|
139
|
+
**Fix:** Made tempDir a getter that throws if accessed before beforeEach
|
|
140
|
+
|
|
141
|
+
**Also added defense-in-depth:**
|
|
142
|
+
|
|
143
|
+
- Layer 1: Project.create() validates directory
|
|
144
|
+
- Layer 2: WorkspaceManager validates not empty
|
|
145
|
+
- Layer 3: NODE_ENV guard refuses git init outside tmpdir
|
|
146
|
+
- Layer 4: Stack trace logging before git init
|
|
147
|
+
|
|
148
|
+
## Key Principle
|
|
149
|
+
|
|
150
|
+
```dot
|
|
151
|
+
digraph principle {
|
|
152
|
+
"Found immediate cause" [shape=ellipse];
|
|
153
|
+
"Can trace one level up?" [shape=diamond];
|
|
154
|
+
"Trace backwards" [shape=box];
|
|
155
|
+
"Is this the source?" [shape=diamond];
|
|
156
|
+
"Fix at source" [shape=box];
|
|
157
|
+
"Add validation at each layer" [shape=box];
|
|
158
|
+
"Bug impossible" [shape=doublecircle];
|
|
159
|
+
"NEVER fix just the symptom" [shape=octagon, style=filled, fillcolor=red, fontcolor=white];
|
|
160
|
+
|
|
161
|
+
"Found immediate cause" -> "Can trace one level up?";
|
|
162
|
+
"Can trace one level up?" -> "Trace backwards" [label="yes"];
|
|
163
|
+
"Can trace one level up?" -> "NEVER fix just the symptom" [label="no"];
|
|
164
|
+
"Trace backwards" -> "Is this the source?";
|
|
165
|
+
"Is this the source?" -> "Trace backwards" [label="no - keeps going"];
|
|
166
|
+
"Is this the source?" -> "Fix at source" [label="yes"];
|
|
167
|
+
"Fix at source" -> "Add validation at each layer";
|
|
168
|
+
"Add validation at each layer" -> "Bug impossible";
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**NEVER fix just where the error appears.** Trace back to find the original trigger.
|
|
173
|
+
|
|
174
|
+
## Stack Trace Tips
|
|
175
|
+
|
|
176
|
+
**In tests:** Use `console.error()` not logger - logger may be suppressed
|
|
177
|
+
**Before operation:** Log before the dangerous operation, not after it fails
|
|
178
|
+
**Include context:** Directory, cwd, environment variables, timestamps
|
|
179
|
+
**Capture stack:** `new Error().stack` shows complete call chain
|
|
180
|
+
|
|
181
|
+
## Real-World Impact
|
|
182
|
+
|
|
183
|
+
From debugging session (2025-10-03):
|
|
184
|
+
|
|
185
|
+
- Found root cause through 5-level trace
|
|
186
|
+
- Fixed at source (getter validation)
|
|
187
|
+
- Added 4 layers of defense
|
|
188
|
+
- 1847 tests passed, zero pollution
|
|
189
|
+
|
|
190
|
+
## See Also
|
|
191
|
+
|
|
192
|
+
- **systematic-debugging** - Full four-phase process before/after tracing deep stack failures
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Bisection script to find which test creates unwanted files/state
|
|
3
|
+
# Usage: ./find-polluter.sh <file_or_dir_to_check> <test_pattern>
|
|
4
|
+
# Example: ./find-polluter.sh '.git' 'src/**/*.test.ts'
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
if [ $# -ne 2 ]; then
|
|
9
|
+
echo "Usage: $0 <file_to_check> <test_pattern>"
|
|
10
|
+
echo "Example: $0 '.git' 'src/**/*.test.ts'"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
POLLUTION_CHECK="$1"
|
|
15
|
+
TEST_PATTERN="$2"
|
|
16
|
+
|
|
17
|
+
echo "🔍 Searching for test that creates: $POLLUTION_CHECK"
|
|
18
|
+
echo "Test pattern: $TEST_PATTERN"
|
|
19
|
+
echo ""
|
|
20
|
+
|
|
21
|
+
# Get list of test files
|
|
22
|
+
TEST_FILES=$(find . -path "$TEST_PATTERN" | sort)
|
|
23
|
+
TOTAL=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
|
|
24
|
+
|
|
25
|
+
echo "Found $TOTAL test files"
|
|
26
|
+
echo ""
|
|
27
|
+
|
|
28
|
+
COUNT=0
|
|
29
|
+
for TEST_FILE in $TEST_FILES; do
|
|
30
|
+
COUNT=$((COUNT + 1))
|
|
31
|
+
|
|
32
|
+
# Skip if pollution already exists
|
|
33
|
+
if [ -e "$POLLUTION_CHECK" ]; then
|
|
34
|
+
echo "⚠️ Pollution already exists before test $COUNT/$TOTAL"
|
|
35
|
+
echo " Skipping: $TEST_FILE"
|
|
36
|
+
continue
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "[$COUNT/$TOTAL] Testing: $TEST_FILE"
|
|
40
|
+
|
|
41
|
+
# Run the test
|
|
42
|
+
npm test "$TEST_FILE" > /dev/null 2>&1 || true
|
|
43
|
+
|
|
44
|
+
# Check if pollution appeared
|
|
45
|
+
if [ -e "$POLLUTION_CHECK" ]; then
|
|
46
|
+
echo ""
|
|
47
|
+
echo "🎯 FOUND POLLUTER!"
|
|
48
|
+
echo " Test: $TEST_FILE"
|
|
49
|
+
echo " Created: $POLLUTION_CHECK"
|
|
50
|
+
echo ""
|
|
51
|
+
echo "Pollution details:"
|
|
52
|
+
ls -la "$POLLUTION_CHECK"
|
|
53
|
+
echo ""
|
|
54
|
+
echo "To investigate:"
|
|
55
|
+
echo " npm test $TEST_FILE # Run just this test"
|
|
56
|
+
echo " cat $TEST_FILE # Review test code"
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
done
|
|
60
|
+
|
|
61
|
+
echo ""
|
|
62
|
+
echo "✅ No polluter found - all tests clean!"
|
|
63
|
+
exit 0
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Merged into context-management. Load that skill instead."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Session Management
|
|
6
|
+
|
|
7
|
+
> This skill has been merged into `context-management` which now covers both context and session lifecycle management.
|
|
8
|
+
>
|
|
9
|
+
> Load `context-management` instead.
|