@jhm1909/ag-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Project Development
|
|
2
|
+
|
|
3
|
+
Design and build LLM-powered projects from ideation to deployment.
|
|
4
|
+
|
|
5
|
+
## Task-Model Fit
|
|
6
|
+
|
|
7
|
+
**LLM-Suited**: Synthesis, subjective judgment, NL output, error-tolerant batches
|
|
8
|
+
**LLM-Unsuited**: Precise computation, real-time, perfect accuracy, deterministic output
|
|
9
|
+
|
|
10
|
+
## Manual Prototype First
|
|
11
|
+
|
|
12
|
+
Test one example with target model before automation.
|
|
13
|
+
|
|
14
|
+
## Pipeline Architecture
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
acquire → prepare → process → parse → render
|
|
18
|
+
(fetch) (prompt) (LLM) (extract) (output)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Stages 1,2,4,5: Deterministic, cheap | Stage 3: Non-deterministic, expensive
|
|
22
|
+
|
|
23
|
+
## File System as State
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
data/{id}/
|
|
27
|
+
├── raw.json # acquire done
|
|
28
|
+
├── prompt.md # prepare done
|
|
29
|
+
├── response.md # process done
|
|
30
|
+
└── parsed.json # parse done
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
def get_stage(id):
|
|
35
|
+
if exists(f"{id}/parsed.json"): return "render"
|
|
36
|
+
if exists(f"{id}/response.md"): return "parse"
|
|
37
|
+
# ... check backwards
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Benefits**: Idempotent, resumable, debuggable
|
|
41
|
+
|
|
42
|
+
## Structured Output
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## SUMMARY
|
|
46
|
+
[Overview]
|
|
47
|
+
|
|
48
|
+
## KEY_FINDINGS
|
|
49
|
+
- Finding 1
|
|
50
|
+
|
|
51
|
+
## SCORE
|
|
52
|
+
[1-5]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
def parse(response):
|
|
57
|
+
return {
|
|
58
|
+
"summary": extract_section(response, "SUMMARY"),
|
|
59
|
+
"findings": extract_list(response, "KEY_FINDINGS"),
|
|
60
|
+
"score": extract_int(response, "SCORE")
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Cost Estimation
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
def estimate(items, tokens_per, price_per_1k):
|
|
68
|
+
return len(items) * tokens_per / 1000 * price_per_1k * 1.1 # 10% buffer
|
|
69
|
+
# 1000 items × 2000 tokens × $0.01/1k = $22
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Case Studies
|
|
73
|
+
|
|
74
|
+
**Karpathy HN**: 930 items, $58, 1hr, 15 workers
|
|
75
|
+
**Vercel d0**: 17→2 tools, 80%→100% success, 3.5x faster
|
|
76
|
+
|
|
77
|
+
## Single vs Multi-Agent
|
|
78
|
+
|
|
79
|
+
| Factor | Single | Multi |
|
|
80
|
+
|--------|--------|-------|
|
|
81
|
+
| Context | Fits window | Exceeds |
|
|
82
|
+
| Tasks | Sequential | Parallel |
|
|
83
|
+
| Tokens | Limited | 15x OK |
|
|
84
|
+
|
|
85
|
+
## Guidelines
|
|
86
|
+
|
|
87
|
+
1. Validate manually before automating
|
|
88
|
+
2. Use 5-stage pipeline
|
|
89
|
+
3. Track state via files
|
|
90
|
+
4. Design structured output
|
|
91
|
+
5. Estimate costs first
|
|
92
|
+
6. Start single, add multi when needed
|
|
93
|
+
|
|
94
|
+
## Related
|
|
95
|
+
|
|
96
|
+
- [Context Optimization](./context-optimization.md)
|
|
97
|
+
- [Multi-Agent Patterns](./multi-agent-patterns.md)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Tool Design
|
|
2
|
+
|
|
3
|
+
Design effective tools for agent systems.
|
|
4
|
+
|
|
5
|
+
## Consolidation Principle
|
|
6
|
+
|
|
7
|
+
Single comprehensive tools > multiple narrow tools. **Target**: 10-20 tools max.
|
|
8
|
+
|
|
9
|
+
## Architectural Reduction Evidence
|
|
10
|
+
|
|
11
|
+
| Metric | 17 Tools | 2 Tools | Improvement |
|
|
12
|
+
|--------|----------|---------|-------------|
|
|
13
|
+
| Time | 274.8s | 77.4s | 3.5x faster |
|
|
14
|
+
| Success | 80% | 100% | +20% |
|
|
15
|
+
| Tokens | 102k | 61k | 37% fewer |
|
|
16
|
+
|
|
17
|
+
**Key**: Good documentation replaces tool sophistication.
|
|
18
|
+
|
|
19
|
+
## When Reduction Works
|
|
20
|
+
|
|
21
|
+
**Prerequisites**: High docs quality, capable model, navigable problem
|
|
22
|
+
**Avoid when**: Messy systems, specialized domain, safety-critical
|
|
23
|
+
|
|
24
|
+
## Description Engineering
|
|
25
|
+
|
|
26
|
+
Answer four questions:
|
|
27
|
+
1. **What** does the tool do?
|
|
28
|
+
2. **When** should it be used?
|
|
29
|
+
3. **What inputs** does it accept?
|
|
30
|
+
4. **What** does it return?
|
|
31
|
+
|
|
32
|
+
### Good Example
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"name": "get_customer",
|
|
37
|
+
"description": "Retrieve customer profile by ID. Use for order processing, support. Returns 404 if not found.",
|
|
38
|
+
"parameters": {
|
|
39
|
+
"customer_id": {"type": "string", "pattern": "^CUST-[0-9]{6}$"},
|
|
40
|
+
"format": {"enum": ["concise", "detailed"]}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Poor Example
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{"name": "search", "description": "Search for things", "parameters": {"q": {}}}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Error Messages
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
def format_error(code, message, resolution):
|
|
55
|
+
return {
|
|
56
|
+
"error": {"code": code, "message": message,
|
|
57
|
+
"resolution": resolution, "retryable": code in RETRYABLE}
|
|
58
|
+
}
|
|
59
|
+
# "Use YYYY-MM-DD format, e.g., '2024-01-05'"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Response Formats
|
|
63
|
+
|
|
64
|
+
Offer concise vs detailed:
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
def get_data(id, format="concise"):
|
|
68
|
+
if format == "concise":
|
|
69
|
+
return {"name": data.name}
|
|
70
|
+
return data.full() # Detailed
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Guidelines
|
|
74
|
+
|
|
75
|
+
1. Consolidate tools (target 10-20)
|
|
76
|
+
2. Answer all four questions
|
|
77
|
+
3. Use full parameter names
|
|
78
|
+
4. Design errors for recovery
|
|
79
|
+
5. Offer concise/detailed formats
|
|
80
|
+
6. Test with agents before deploy
|
|
81
|
+
7. Start minimal, add when proven
|
|
82
|
+
|
|
83
|
+
## Related
|
|
84
|
+
|
|
85
|
+
- [Context Fundamentals](./context-fundamentals.md)
|
|
86
|
+
- [Multi-Agent Patterns](./multi-agent-patterns.md)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debugging
|
|
3
|
+
description: Systematic debugging frameworks for finding and fixing bugs. Use when encountering bugs, test failures, unexpected behavior, or needing to validate fixes before claiming completion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debugging Skills
|
|
7
|
+
|
|
8
|
+
Systematic debugging methodologies that ensure thorough investigation before attempting fixes.
|
|
9
|
+
|
|
10
|
+
## Core Principle
|
|
11
|
+
|
|
12
|
+
> "NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST"
|
|
13
|
+
|
|
14
|
+
Systematic approach: 15-30 min to fix. Random fixes: 2-3 hours of thrashing.
|
|
15
|
+
|
|
16
|
+
## Sub-Skills
|
|
17
|
+
|
|
18
|
+
| How You're Stuck | Use This | Reference |
|
|
19
|
+
|------------------|----------|-----------|
|
|
20
|
+
| Bug, test failure, unexpected behavior | Systematic Debugging | [systematic-debugging.md](./references/systematic-debugging.md) |
|
|
21
|
+
| Error deep in call stack | Root Cause Tracing | [root-cause-tracing.md](./references/root-cause-tracing.md) |
|
|
22
|
+
| Same bug keeps recurring | Defense-in-Depth | [defense-in-depth.md](./references/defense-in-depth.md) |
|
|
23
|
+
| About to claim "done" | Verification Before Completion | [verification-before-completion.md](./references/verification-before-completion.md) |
|
|
24
|
+
|
|
25
|
+
## The Four Phases (Quick Reference)
|
|
26
|
+
|
|
27
|
+
| Phase | Key Activities | Success Criteria |
|
|
28
|
+
|-------|---------------|------------------|
|
|
29
|
+
| **1. Root Cause** | Read errors, reproduce, check changes, gather evidence | Understand WHAT and WHY |
|
|
30
|
+
| **2. Pattern** | Find working examples, compare | Identify differences |
|
|
31
|
+
| **3. Hypothesis** | Form theory, test minimally | Confirmed or new hypothesis |
|
|
32
|
+
| **4. Implementation** | Create test, fix, verify | Bug resolved, tests pass |
|
|
33
|
+
|
|
34
|
+
## Red Flags — STOP and Follow Process
|
|
35
|
+
|
|
36
|
+
If thinking any of these → return to Phase 1:
|
|
37
|
+
- "Quick fix for now, investigate later"
|
|
38
|
+
- "Just try changing X and see if it works"
|
|
39
|
+
- "I don't fully understand but this might work"
|
|
40
|
+
- "One more fix attempt" (when already tried 2+)
|
|
41
|
+
- Each fix reveals new problem in different place
|
|
42
|
+
|
|
43
|
+
## 3+ Fixes Failed → Question Architecture
|
|
44
|
+
|
|
45
|
+
Pattern: each fix reveals new shared state/coupling/problem → **STOP**.
|
|
46
|
+
- Is this pattern fundamentally sound?
|
|
47
|
+
- Should we refactor architecture vs. continue fixing symptoms?
|
|
48
|
+
- Discuss with user before attempting more fixes.
|
|
49
|
+
|
|
50
|
+
## Iron Law: Verification Before Completion
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
|
|
54
|
+
|
|
55
|
+
1. IDENTIFY: What command proves this claim?
|
|
56
|
+
2. RUN: Execute the FULL command (fresh, complete)
|
|
57
|
+
3. READ: Full output, check exit code
|
|
58
|
+
4. VERIFY: Does output confirm the claim?
|
|
59
|
+
5. ONLY THEN: Make the claim
|
|
60
|
+
```
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Defense-in-Depth Validation
|
|
3
|
+
description: Validate at every layer data passes through to make bugs impossible
|
|
4
|
+
when_to_use: when invalid data causes failures deep in execution, requiring validation at multiple system layers
|
|
5
|
+
version: 1.1.0
|
|
6
|
+
languages: all
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Defense-in-Depth Validation
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
When you fix a bug caused by invalid data, adding validation at one place feels sufficient. But that single check can be bypassed by different code paths, refactoring, or mocks.
|
|
14
|
+
|
|
15
|
+
**Core principle:** Validate at EVERY layer data passes through. Make the bug structurally impossible.
|
|
16
|
+
|
|
17
|
+
## Why Multiple Layers
|
|
18
|
+
|
|
19
|
+
Single validation: "We fixed the bug"
|
|
20
|
+
Multiple layers: "We made the bug impossible"
|
|
21
|
+
|
|
22
|
+
Different layers catch different cases:
|
|
23
|
+
- Entry validation catches most bugs
|
|
24
|
+
- Business logic catches edge cases
|
|
25
|
+
- Environment guards prevent context-specific dangers
|
|
26
|
+
- Debug logging helps when other layers fail
|
|
27
|
+
|
|
28
|
+
## The Four Layers
|
|
29
|
+
|
|
30
|
+
### Layer 1: Entry Point Validation
|
|
31
|
+
**Purpose:** Reject obviously invalid input at API boundary
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
function createProject(name: string, workingDirectory: string) {
|
|
35
|
+
if (!workingDirectory || workingDirectory.trim() === '') {
|
|
36
|
+
throw new Error('workingDirectory cannot be empty');
|
|
37
|
+
}
|
|
38
|
+
if (!existsSync(workingDirectory)) {
|
|
39
|
+
throw new Error(`workingDirectory does not exist: ${workingDirectory}`);
|
|
40
|
+
}
|
|
41
|
+
if (!statSync(workingDirectory).isDirectory()) {
|
|
42
|
+
throw new Error(`workingDirectory is not a directory: ${workingDirectory}`);
|
|
43
|
+
}
|
|
44
|
+
// ... proceed
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Layer 2: Business Logic Validation
|
|
49
|
+
**Purpose:** Ensure data makes sense for this operation
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
function initializeWorkspace(projectDir: string, sessionId: string) {
|
|
53
|
+
if (!projectDir) {
|
|
54
|
+
throw new Error('projectDir required for workspace initialization');
|
|
55
|
+
}
|
|
56
|
+
// ... proceed
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Layer 3: Environment Guards
|
|
61
|
+
**Purpose:** Prevent dangerous operations in specific contexts
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
async function gitInit(directory: string) {
|
|
65
|
+
// In tests, refuse git init outside temp directories
|
|
66
|
+
if (process.env.NODE_ENV === 'test') {
|
|
67
|
+
const normalized = normalize(resolve(directory));
|
|
68
|
+
const tmpDir = normalize(resolve(tmpdir()));
|
|
69
|
+
|
|
70
|
+
if (!normalized.startsWith(tmpDir)) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
`Refusing git init outside temp dir during tests: ${directory}`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ... proceed
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Layer 4: Debug Instrumentation
|
|
81
|
+
**Purpose:** Capture context for forensics
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
async function gitInit(directory: string) {
|
|
85
|
+
const stack = new Error().stack;
|
|
86
|
+
logger.debug('About to git init', {
|
|
87
|
+
directory,
|
|
88
|
+
cwd: process.cwd(),
|
|
89
|
+
stack,
|
|
90
|
+
});
|
|
91
|
+
// ... proceed
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Applying the Pattern
|
|
96
|
+
|
|
97
|
+
When you find a bug:
|
|
98
|
+
|
|
99
|
+
1. **Trace the data flow** - Where does bad value originate? Where used?
|
|
100
|
+
2. **Map all checkpoints** - List every point data passes through
|
|
101
|
+
3. **Add validation at each layer** - Entry, business, environment, debug
|
|
102
|
+
4. **Test each layer** - Try to bypass layer 1, verify layer 2 catches it
|
|
103
|
+
|
|
104
|
+
## Example from Session
|
|
105
|
+
|
|
106
|
+
Bug: Empty `projectDir` caused `git init` in source code
|
|
107
|
+
|
|
108
|
+
**Data flow:**
|
|
109
|
+
1. Test setup → empty string
|
|
110
|
+
2. `Project.create(name, '')`
|
|
111
|
+
3. `WorkspaceManager.createWorkspace('')`
|
|
112
|
+
4. `git init` runs in `process.cwd()`
|
|
113
|
+
|
|
114
|
+
**Four layers added:**
|
|
115
|
+
- Layer 1: `Project.create()` validates not empty/exists/writable
|
|
116
|
+
- Layer 2: `WorkspaceManager` validates projectDir not empty
|
|
117
|
+
- Layer 3: `WorktreeManager` refuses git init outside tmpdir in tests
|
|
118
|
+
- Layer 4: Stack trace logging before git init
|
|
119
|
+
|
|
120
|
+
**Result:** All 1847 tests passed, bug impossible to reproduce
|
|
121
|
+
|
|
122
|
+
## Key Insight
|
|
123
|
+
|
|
124
|
+
All four layers were necessary. During testing, each layer caught bugs the others missed:
|
|
125
|
+
- Different code paths bypassed entry validation
|
|
126
|
+
- Mocks bypassed business logic checks
|
|
127
|
+
- Edge cases on different platforms needed environment guards
|
|
128
|
+
- Debug logging identified structural misuse
|
|
129
|
+
|
|
130
|
+
**Don't stop at one validation point.** Add checks at every layer.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Root Cause Tracing
|
|
3
|
+
description: Systematically trace bugs backward through call stack to find original trigger
|
|
4
|
+
when_to_use: when errors occur deep in execution and you need to trace back to find the original trigger
|
|
5
|
+
version: 1.1.0
|
|
6
|
+
languages: all
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Root Cause Tracing
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
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.
|
|
14
|
+
|
|
15
|
+
**Core principle:** Trace backward through the call chain until you find the original trigger, then fix at the source.
|
|
16
|
+
|
|
17
|
+
## When to Use
|
|
18
|
+
|
|
19
|
+
```dot
|
|
20
|
+
digraph when_to_use {
|
|
21
|
+
"Bug appears deep in stack?" [shape=diamond];
|
|
22
|
+
"Can trace backwards?" [shape=diamond];
|
|
23
|
+
"Fix at symptom point" [shape=box];
|
|
24
|
+
"Trace to original trigger" [shape=box];
|
|
25
|
+
"BETTER: Also add defense-in-depth" [shape=box];
|
|
26
|
+
|
|
27
|
+
"Bug appears deep in stack?" -> "Can trace backwards?" [label="yes"];
|
|
28
|
+
"Can trace backwards?" -> "Trace to original trigger" [label="yes"];
|
|
29
|
+
"Can trace backwards?" -> "Fix at symptom point" [label="no - dead end"];
|
|
30
|
+
"Trace to original trigger" -> "BETTER: Also add defense-in-depth";
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Use when:**
|
|
35
|
+
- Error happens deep in execution (not at entry point)
|
|
36
|
+
- Stack trace shows long call chain
|
|
37
|
+
- Unclear where invalid data originated
|
|
38
|
+
- Need to find which test/code triggers the problem
|
|
39
|
+
|
|
40
|
+
## The Tracing Process
|
|
41
|
+
|
|
42
|
+
### 1. Observe the Symptom
|
|
43
|
+
```
|
|
44
|
+
Error: git init failed in /Users/jesse/project/packages/core
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Find Immediate Cause
|
|
48
|
+
**What code directly causes this?**
|
|
49
|
+
```typescript
|
|
50
|
+
await execFileAsync('git', ['init'], { cwd: projectDir });
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 3. Ask: What Called This?
|
|
54
|
+
```typescript
|
|
55
|
+
WorktreeManager.createSessionWorktree(projectDir, sessionId)
|
|
56
|
+
→ called by Session.initializeWorkspace()
|
|
57
|
+
→ called by Session.create()
|
|
58
|
+
→ called by test at Project.create()
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 4. Keep Tracing Up
|
|
62
|
+
**What value was passed?**
|
|
63
|
+
- `projectDir = ''` (empty string!)
|
|
64
|
+
- Empty string as `cwd` resolves to `process.cwd()`
|
|
65
|
+
- That's the source code directory!
|
|
66
|
+
|
|
67
|
+
### 5. Find Original Trigger
|
|
68
|
+
**Where did empty string come from?**
|
|
69
|
+
```typescript
|
|
70
|
+
const context = setupCoreTest(); // Returns { tempDir: '' }
|
|
71
|
+
Project.create('name', context.tempDir); // Accessed before beforeEach!
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Adding Stack Traces
|
|
75
|
+
|
|
76
|
+
When you can't trace manually, add instrumentation:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Before the problematic operation
|
|
80
|
+
async function gitInit(directory: string) {
|
|
81
|
+
const stack = new Error().stack;
|
|
82
|
+
console.error('DEBUG git init:', {
|
|
83
|
+
directory,
|
|
84
|
+
cwd: process.cwd(),
|
|
85
|
+
nodeEnv: process.env.NODE_ENV,
|
|
86
|
+
stack,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
await execFileAsync('git', ['init'], { cwd: directory });
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Critical:** Use `console.error()` in tests (not logger - may not show)
|
|
94
|
+
|
|
95
|
+
**Run and capture:**
|
|
96
|
+
```bash
|
|
97
|
+
npm test 2>&1 | grep 'DEBUG git init'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Analyze stack traces:**
|
|
101
|
+
- Look for test file names
|
|
102
|
+
- Find the line number triggering the call
|
|
103
|
+
- Identify the pattern (same test? same parameter?)
|
|
104
|
+
|
|
105
|
+
## Finding Which Test Causes Pollution
|
|
106
|
+
|
|
107
|
+
If something appears during tests but you don't know which test:
|
|
108
|
+
|
|
109
|
+
Use the bisection script: @find-polluter.sh
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
./find-polluter.sh '.git' 'src/**/*.test.ts'
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Runs tests one-by-one, stops at first polluter. See script for usage.
|
|
116
|
+
|
|
117
|
+
## Real Example: Empty projectDir
|
|
118
|
+
|
|
119
|
+
**Symptom:** `.git` created in `packages/core/` (source code)
|
|
120
|
+
|
|
121
|
+
**Trace chain:**
|
|
122
|
+
1. `git init` runs in `process.cwd()` ← empty cwd parameter
|
|
123
|
+
2. WorktreeManager called with empty projectDir
|
|
124
|
+
3. Session.create() passed empty string
|
|
125
|
+
4. Test accessed `context.tempDir` before beforeEach
|
|
126
|
+
5. setupCoreTest() returns `{ tempDir: '' }` initially
|
|
127
|
+
|
|
128
|
+
**Root cause:** Top-level variable initialization accessing empty value
|
|
129
|
+
|
|
130
|
+
**Fix:** Made tempDir a getter that throws if accessed before beforeEach
|
|
131
|
+
|
|
132
|
+
**Also added defense-in-depth:**
|
|
133
|
+
- Layer 1: Project.create() validates directory
|
|
134
|
+
- Layer 2: WorkspaceManager validates not empty
|
|
135
|
+
- Layer 3: NODE_ENV guard refuses git init outside tmpdir
|
|
136
|
+
- Layer 4: Stack trace logging before git init
|
|
137
|
+
|
|
138
|
+
## Key Principle
|
|
139
|
+
|
|
140
|
+
```dot
|
|
141
|
+
digraph principle {
|
|
142
|
+
"Found immediate cause" [shape=ellipse];
|
|
143
|
+
"Can trace one level up?" [shape=diamond];
|
|
144
|
+
"Trace backwards" [shape=box];
|
|
145
|
+
"Is this the source?" [shape=diamond];
|
|
146
|
+
"Fix at source" [shape=box];
|
|
147
|
+
"Add validation at each layer" [shape=box];
|
|
148
|
+
"Bug impossible" [shape=doublecircle];
|
|
149
|
+
"NEVER fix just the symptom" [shape=octagon, style=filled, fillcolor=red, fontcolor=white];
|
|
150
|
+
|
|
151
|
+
"Found immediate cause" -> "Can trace one level up?";
|
|
152
|
+
"Can trace one level up?" -> "Trace backwards" [label="yes"];
|
|
153
|
+
"Can trace one level up?" -> "NEVER fix just the symptom" [label="no"];
|
|
154
|
+
"Trace backwards" -> "Is this the source?";
|
|
155
|
+
"Is this the source?" -> "Trace backwards" [label="no - keeps going"];
|
|
156
|
+
"Is this the source?" -> "Fix at source" [label="yes"];
|
|
157
|
+
"Fix at source" -> "Add validation at each layer";
|
|
158
|
+
"Add validation at each layer" -> "Bug impossible";
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**NEVER fix just where the error appears.** Trace back to find the original trigger.
|
|
163
|
+
|
|
164
|
+
## Stack Trace Tips
|
|
165
|
+
|
|
166
|
+
**In tests:** Use `console.error()` not logger - logger may be suppressed
|
|
167
|
+
**Before operation:** Log before the dangerous operation, not after it fails
|
|
168
|
+
**Include context:** Directory, cwd, environment variables, timestamps
|
|
169
|
+
**Capture stack:** `new Error().stack` shows complete call chain
|
|
170
|
+
|
|
171
|
+
## Real-World Impact
|
|
172
|
+
|
|
173
|
+
From debugging session (2025-10-03):
|
|
174
|
+
- Found root cause through 5-level trace
|
|
175
|
+
- Fixed at source (getter validation)
|
|
176
|
+
- Added 4 layers of defense
|
|
177
|
+
- 1847 tests passed, zero pollution
|