@poolzin/plcode 2.1.1 → 3.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/.plcode/.gitkeep +0 -0
- package/.plcode/AGENTS.md +160 -0
- package/.plcode/README.md +214 -0
- package/.plcode/agent/backend-architect.md +40 -0
- package/.plcode/agent/backend-security-coder.md +11 -0
- package/.plcode/agent/backend-specialist.md +117 -0
- package/.plcode/agent/backend-typescript-architect.md +18 -0
- package/.plcode/agent/code-reviewer.md +48 -0
- package/.plcode/agent/content/0-category.json +19 -0
- package/.plcode/agent/content/copywriter.md +68 -0
- package/.plcode/agent/content/technical-writer.md +68 -0
- package/.plcode/agent/core/0-category.json +50 -0
- package/.plcode/agent/core/health-monitor.md +187 -0
- package/.plcode/agent/core/memory-manager.md +168 -0
- package/.plcode/agent/core/openagent.md +430 -0
- package/.plcode/agent/core/opencoder.md +282 -0
- package/.plcode/agent/core/pool.md +383 -0
- package/.plcode/agent/data/0-category.json +13 -0
- package/.plcode/agent/data/data-analyst.md +69 -0
- package/.plcode/agent/database-architect.md +262 -0
- package/.plcode/agent/database-optimizer.md +161 -0
- package/.plcode/agent/database-specialist.md +101 -0
- package/.plcode/agent/development/0-category.json +36 -0
- package/.plcode/agent/development/backend-specialist.md +68 -0
- package/.plcode/agent/development/codebase-agent.md +137 -0
- package/.plcode/agent/development/devops-specialist.md +70 -0
- package/.plcode/agent/development/frontend-specialist.md +214 -0
- package/.plcode/agent/docs.md +33 -0
- package/.plcode/agent/eval-runner.md +34 -0
- package/.plcode/agent/frontend-developer.md +188 -0
- package/.plcode/agent/frontend-security-coder.md +11 -0
- package/.plcode/agent/git-committer.md +12 -0
- package/.plcode/agent/meta/0-category.json +19 -0
- package/.plcode/agent/meta/repo-manager.md +1078 -0
- package/.plcode/agent/meta/system-builder.md +724 -0
- package/.plcode/agent/orchestration/0-category.json +40 -0
- package/.plcode/agent/orchestration/adversarial-agent.md +115 -0
- package/.plcode/agent/orchestration/background-agent.md +121 -0
- package/.plcode/agent/orchestration/chat-agent.md +108 -0
- package/.plcode/agent/orchestration/code-agent.md +91 -0
- package/.plcode/agent/orchestration/critic-agent.md +103 -0
- package/.plcode/agent/orchestration/executor-agent.md +107 -0
- package/.plcode/agent/orchestration/media-agent.md +99 -0
- package/.plcode/agent/orchestration/planner-agent.md +105 -0
- package/.plcode/agent/orchestration/review-agent.md +105 -0
- package/.plcode/agent/orchestration/support-agent.md +117 -0
- package/.plcode/agent/orchestration/test-agent.md +104 -0
- package/.plcode/agent/subagents/code/build-agent.md +75 -0
- package/.plcode/agent/subagents/code/codebase-pattern-analyst.md +459 -0
- package/.plcode/agent/subagents/code/coder-agent.md +71 -0
- package/.plcode/agent/subagents/code/reviewer.md +58 -0
- package/.plcode/agent/subagents/code/tester.md +59 -0
- package/.plcode/agent/subagents/core/context-retriever.md +904 -0
- package/.plcode/agent/subagents/core/contextscout.md +149 -0
- package/.plcode/agent/subagents/core/documentation.md +49 -0
- package/.plcode/agent/subagents/core/task-manager.md +345 -0
- package/.plcode/agent/subagents/superpowers/code-reviewer.md +113 -0
- package/.plcode/agent/subagents/system-builder/agent-generator.md +452 -0
- package/.plcode/agent/subagents/system-builder/command-creator.md +226 -0
- package/.plcode/agent/subagents/system-builder/context-organizer.md +455 -0
- package/.plcode/agent/subagents/system-builder/domain-analyzer.md +459 -0
- package/.plcode/agent/subagents/system-builder/workflow-designer.md +240 -0
- package/.plcode/agent/subagents/test/simple-responder.md +44 -0
- package/.plcode/agent/subagents/utils/image-specialist.md +67 -0
- package/.plcode/agent/triage.md +86 -0
- package/.plcode/agent/typescript-pro.md +11 -0
- package/.plcode/agnos/config.json +154 -0
- package/.plcode/auto-update.json +7 -0
- package/.plcode/bra/config.json +109 -0
- package/.plcode/command/Indexes.md +35 -0
- package/.plcode/command/brainstorm.md +14 -0
- package/.plcode/command/build-context-system.md +849 -0
- package/.plcode/command/clean.md +82 -0
- package/.plcode/command/commit-openagents.md +589 -0
- package/.plcode/command/commit.md +158 -0
- package/.plcode/command/context.md +302 -0
- package/.plcode/command/data-model.md +519 -0
- package/.plcode/command/debug.md +14 -0
- package/.plcode/command/design-system.md +177 -0
- package/.plcode/command/enhance.md +159 -0
- package/.plcode/command/execute-plan.md +5 -0
- package/.plcode/command/fix.md +1474 -0
- package/.plcode/command/generate-agents.md +269 -0
- package/.plcode/command/issues.md +23 -0
- package/.plcode/command/mobile-responsiveness.md +30 -0
- package/.plcode/command/openagents/check-context-deps.md +457 -0
- package/.plcode/command/openagents/new-agents/README.md +404 -0
- package/.plcode/command/openagents/new-agents/create-agent.md +492 -0
- package/.plcode/command/openagents/new-agents/create-tests.md +918 -0
- package/.plcode/command/openagents/new-agents/templates/agent-template.md +123 -0
- package/.plcode/command/openagents/new-agents/templates/context-template.md +37 -0
- package/.plcode/command/openagents/new-agents/templates/test-1-planning-approval.yaml +41 -0
- package/.plcode/command/openagents/new-agents/templates/test-2-context-loading.yaml +36 -0
- package/.plcode/command/openagents/new-agents/templates/test-3-incremental.yaml +38 -0
- package/.plcode/command/openagents/new-agents/templates/test-4-tool-usage.yaml +35 -0
- package/.plcode/command/openagents/new-agents/templates/test-5-error-handling.yaml +49 -0
- package/.plcode/command/openagents/new-agents/templates/test-6-extended-thinking.yaml +42 -0
- package/.plcode/command/openagents/new-agents/templates/test-7-compaction.yaml +38 -0
- package/.plcode/command/openagents/new-agents/templates/test-8-completion.yaml +38 -0
- package/.plcode/command/openagents/new-agents/templates/test-config-template.yaml +27 -0
- package/.plcode/command/optimize.md +206 -0
- package/.plcode/command/prompt-engineering/prompt-enhancer.md +471 -0
- package/.plcode/command/prompt-engineering/prompt-optimizer.md +668 -0
- package/.plcode/command/review.md +14 -0
- package/.plcode/command/rmslop.md +15 -0
- package/.plcode/command/seo.md +68 -0
- package/.plcode/command/spellcheck.md +5 -0
- package/.plcode/command/subagent-driven-development.md +14 -0
- package/.plcode/command/superpowers-brainstorm.md +45 -0
- package/.plcode/command/superpowers-execute-plan.md +49 -0
- package/.plcode/command/superpowers-write-plan.md +55 -0
- package/.plcode/command/superpowers.md +10 -0
- package/.plcode/command/test-new-command.md +27 -0
- package/.plcode/command/test.md +26 -0
- package/.plcode/command/ultra-think.md +160 -0
- package/.plcode/command/validate-repo.md +369 -0
- package/.plcode/command/worktrees.md +116 -0
- package/.plcode/command/write-plan.md +5 -0
- package/.plcode/command/writing-plans.md +14 -0
- package/.plcode/context/content/README.md +39 -0
- package/.plcode/context/content/copywriting-frameworks.md +317 -0
- package/.plcode/context/content/tone-voice.md +391 -0
- package/.plcode/context/content-creation/examples/navigation.md +37 -0
- package/.plcode/context/content-creation/formats/audio-content.md +493 -0
- package/.plcode/context/content-creation/formats/image-content.md +387 -0
- package/.plcode/context/content-creation/formats/navigation.md +79 -0
- package/.plcode/context/content-creation/formats/video-content.md +533 -0
- package/.plcode/context/content-creation/formats/written-content.md +459 -0
- package/.plcode/context/content-creation/navigation.md +55 -0
- package/.plcode/context/content-creation/principles/audience-targeting.md +417 -0
- package/.plcode/context/content-creation/principles/copywriting-frameworks.md +317 -0
- package/.plcode/context/content-creation/principles/hooks.md +279 -0
- package/.plcode/context/content-creation/principles/navigation.md +79 -0
- package/.plcode/context/content-creation/principles/tone-voice.md +391 -0
- package/.plcode/context/content-creation/workflows/audience-review.md +474 -0
- package/.plcode/context/content-creation/workflows/content-ideas.md +504 -0
- package/.plcode/context/content-creation/workflows/content-matrix.md +397 -0
- package/.plcode/context/content-creation/workflows/navigation.md +85 -0
- package/.plcode/context/content-creation/workflows/remix-repurpose.md +577 -0
- package/.plcode/context/core/context-system/CHANGELOG.md +87 -0
- package/.plcode/context/core/context-system/examples/navigation-examples.md +510 -0
- package/.plcode/context/core/context-system/guides/compact.md +351 -0
- package/.plcode/context/core/context-system/guides/creation.md +363 -0
- package/.plcode/context/core/context-system/guides/navigation-design.md +458 -0
- package/.plcode/context/core/context-system/guides/organizing-context.md +549 -0
- package/.plcode/context/core/context-system/guides/workflows.md +598 -0
- package/.plcode/context/core/context-system/operations/error.md +299 -0
- package/.plcode/context/core/context-system/operations/extract.md +190 -0
- package/.plcode/context/core/context-system/operations/harvest.md +310 -0
- package/.plcode/context/core/context-system/operations/organize.md +245 -0
- package/.plcode/context/core/context-system/operations/update.md +260 -0
- package/.plcode/context/core/context-system/standards/mvi.md +154 -0
- package/.plcode/context/core/context-system/standards/structure.md +262 -0
- package/.plcode/context/core/context-system/standards/templates.md +350 -0
- package/.plcode/context/core/context-system.md +453 -0
- package/.plcode/context/core/essential-patterns.md +225 -0
- package/.plcode/context/core/navigation.md +69 -0
- package/.plcode/context/core/standards/code-analysis.md +172 -0
- package/.plcode/context/core/standards/code-quality.md +182 -0
- package/.plcode/context/core/standards/code.md +1 -0
- package/.plcode/context/core/standards/docs.md +1 -0
- package/.plcode/context/core/standards/documentation.md +173 -0
- package/.plcode/context/core/standards/navigation.md +46 -0
- package/.plcode/context/core/standards/security-patterns.md +149 -0
- package/.plcode/context/core/standards/test-coverage.md +133 -0
- package/.plcode/context/core/standards/tests.md +1 -0
- package/.plcode/context/core/system/context-guide.md +218 -0
- package/.plcode/context/core/workflows/code-review.md +150 -0
- package/.plcode/context/core/workflows/delegation.md +1 -0
- package/.plcode/context/core/workflows/design-iteration.md +595 -0
- package/.plcode/context/core/workflows/feature-breakdown.md +303 -0
- package/.plcode/context/core/workflows/navigation.md +44 -0
- package/.plcode/context/core/workflows/review.md +1 -0
- package/.plcode/context/core/workflows/session-management.md +162 -0
- package/.plcode/context/core/workflows/task-delegation.md +95 -0
- package/.plcode/context/data/README.md +18 -0
- package/.plcode/context/data/navigation.md +18 -0
- package/.plcode/context/development/README.md +52 -0
- package/.plcode/context/development/animation-patterns.md +831 -0
- package/.plcode/context/development/api-design.md +394 -0
- package/.plcode/context/development/backend/navigation.md +55 -0
- package/.plcode/context/development/backend-navigation.md +77 -0
- package/.plcode/context/development/clean-code.md +189 -0
- package/.plcode/context/development/data/navigation.md +36 -0
- package/.plcode/context/development/design-assets.md +604 -0
- package/.plcode/context/development/design-systems.md +395 -0
- package/.plcode/context/development/frontend/navigation.md +47 -0
- package/.plcode/context/development/fullstack-navigation.md +80 -0
- package/.plcode/context/development/infrastructure/navigation.md +31 -0
- package/.plcode/context/development/integration/navigation.md +36 -0
- package/.plcode/context/development/navigation.md +80 -0
- package/.plcode/context/development/principles/api-design.md +427 -0
- package/.plcode/context/development/principles/clean-code.md +189 -0
- package/.plcode/context/development/principles/navigation.md +46 -0
- package/.plcode/context/development/react-patterns.md +323 -0
- package/.plcode/context/development/ui-navigation.md +58 -0
- package/.plcode/context/development/ui-styling-standards.md +566 -0
- package/.plcode/context/learning/README.md +18 -0
- package/.plcode/context/learning/navigation.md +18 -0
- package/.plcode/context/navigation.md +47 -0
- package/.plcode/context/openagents-repo/blueprints/context-bundle-template.md +279 -0
- package/.plcode/context/openagents-repo/concepts/subagent-testing-modes.md +142 -0
- package/.plcode/context/openagents-repo/core-concepts/agents.md +368 -0
- package/.plcode/context/openagents-repo/core-concepts/categories.md +467 -0
- package/.plcode/context/openagents-repo/core-concepts/evals.md +515 -0
- package/.plcode/context/openagents-repo/core-concepts/registry.md +473 -0
- package/.plcode/context/openagents-repo/errors/tool-permission-errors.md +227 -0
- package/.plcode/context/openagents-repo/examples/context-bundle-example.md +234 -0
- package/.plcode/context/openagents-repo/examples/subagent-prompt-structure.md +291 -0
- package/.plcode/context/openagents-repo/guides/adding-agent.md +326 -0
- package/.plcode/context/openagents-repo/guides/creating-release.md +296 -0
- package/.plcode/context/openagents-repo/guides/debugging.md +438 -0
- package/.plcode/context/openagents-repo/guides/profile-validation.md +367 -0
- package/.plcode/context/openagents-repo/guides/subagent-invocation.md +386 -0
- package/.plcode/context/openagents-repo/guides/testing-agent.md +310 -0
- package/.plcode/context/openagents-repo/guides/testing-subagents-approval.md +140 -0
- package/.plcode/context/openagents-repo/guides/testing-subagents.md +301 -0
- package/.plcode/context/openagents-repo/guides/updating-registry.md +453 -0
- package/.plcode/context/openagents-repo/lookup/commands.md +400 -0
- package/.plcode/context/openagents-repo/lookup/file-locations.md +322 -0
- package/.plcode/context/openagents-repo/lookup/subagent-framework-maps.md +79 -0
- package/.plcode/context/openagents-repo/lookup/subagent-test-commands.md +213 -0
- package/.plcode/context/openagents-repo/navigation.md +143 -0
- package/.plcode/context/openagents-repo/plugins/context/architecture/lifecycle.md +39 -0
- package/.plcode/context/openagents-repo/plugins/context/architecture/overview.md +61 -0
- package/.plcode/context/openagents-repo/plugins/context/capabilities/agents.md +45 -0
- package/.plcode/context/openagents-repo/plugins/context/capabilities/events.md +48 -0
- package/.plcode/context/openagents-repo/plugins/context/capabilities/events_skills.md +608 -0
- package/.plcode/context/openagents-repo/plugins/context/capabilities/tools.md +48 -0
- package/.plcode/context/openagents-repo/plugins/context/context-overview.md +35 -0
- package/.plcode/context/openagents-repo/plugins/context/reference/best-practices.md +28 -0
- package/.plcode/context/openagents-repo/quality/registry-dependencies.md +642 -0
- package/.plcode/context/openagents-repo/quick-start.md +168 -0
- package/.plcode/context/openagents-repo/templates/context-bundle-template.md +272 -0
- package/.plcode/context/product/README.md +18 -0
- package/.plcode/context/product/navigation.md +18 -0
- package/.plcode/context/project/navigation.md +31 -0
- package/.plcode/context/project/project-context.md +102 -0
- package/.plcode/context/system-builder-templates/SYSTEM-BUILDER-GUIDE.md +495 -0
- package/.plcode/context/system-builder-templates/navigation.md +72 -0
- package/.plcode/context/system-builder-templates/orchestrator-template.md +261 -0
- package/.plcode/context/system-builder-templates/subagent-template.md +213 -0
- package/.plcode/context/ui/navigation.md +83 -0
- package/.plcode/context/ui/terminal/navigation.md +99 -0
- package/.plcode/context/ui/web/animation-patterns.md +831 -0
- package/.plcode/context/ui/web/design/concepts/scroll-linked-animations.md +52 -0
- package/.plcode/context/ui/web/design/examples/scrollytelling-headphone.md +242 -0
- package/.plcode/context/ui/web/design/guides/building-scrollytelling-pages.md +274 -0
- package/.plcode/context/ui/web/design/lookup/scroll-animation-prompts.md +211 -0
- package/.plcode/context/ui/web/design/navigation.md +87 -0
- package/.plcode/context/ui/web/design-assets.md +604 -0
- package/.plcode/context/ui/web/design-systems.md +395 -0
- package/.plcode/context/ui/web/navigation.md +116 -0
- package/.plcode/context/ui/web/react-patterns.md +323 -0
- package/.plcode/context/ui/web/ui-styling-standards.md +566 -0
- package/.plcode/env.d.ts +4 -0
- package/.plcode/instructions/agent-rules.md +21 -0
- package/.plcode/instructions/coding-preferences-general.md +26 -0
- package/.plcode/instructions/coding-preferences-typescript.md +7 -0
- package/.plcode/instructions/commits.md +10 -0
- package/.plcode/instructions/responses.md +7 -0
- package/.plcode/instructions/testing.md +6 -0
- package/.plcode/instructions/tooling-preferences.md +20 -0
- package/.plcode/plcode.jsonc +393 -0
- package/.plcode/plugin/fs-tool.js +169 -0
- package/.plcode/plugin/github-triage.ts +90 -0
- package/.plcode/plugin/github-triage.txt +88 -0
- package/.plcode/plugin/notification.ts +21 -0
- package/.plcode/plugin/superpowers.js +417 -0
- package/.plcode/scripts/install-mcp-servers.ps1 +33 -0
- package/.plcode/scripts/install-mcp-servers.sh +30 -0
- package/.plcode/skill/core/agents-md-generator/SKILL.md +220 -0
- package/.plcode/skill/core/api-design-principles/SKILL.md +41 -0
- package/.plcode/skill/core/api-design-principles/assets/api-design-checklist.md +155 -0
- package/.plcode/skill/core/api-design-principles/assets/rest-api-template.py +182 -0
- package/.plcode/skill/core/api-design-principles/references/graphql-schema-design.md +583 -0
- package/.plcode/skill/core/api-design-principles/references/rest-best-practices.md +408 -0
- package/.plcode/skill/core/api-design-principles/resources/implementation-playbook.md +513 -0
- package/.plcode/skill/core/api-documentation/SKILL.md +185 -0
- package/.plcode/skill/core/api-security-best-practices/SKILL.md +927 -0
- package/.plcode/skill/core/api-testing-observability-api-mock/SKILL.md +50 -0
- package/.plcode/skill/core/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/.plcode/skill/core/audit/SKILL.md +141 -0
- package/.plcode/skill/core/backend-dev/README.md +333 -0
- package/.plcode/skill/core/backend-dev/SKILL.md +437 -0
- package/.plcode/skill/core/backend-dev/examples.md +622 -0
- package/.plcode/skill/core/backend-dev-guidelines/SKILL.md +344 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/architecture-overview.md +479 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/async-and-errors.md +305 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/complete-examples.md +607 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/configuration.md +285 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/database-patterns.md +227 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/middleware-guide.md +205 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/routing-and-controllers.md +704 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/sentry-and-monitoring.md +338 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/services-and-repositories.md +814 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/testing-guide.md +230 -0
- package/.plcode/skill/core/backend-dev-guidelines/resources/validation-patterns.md +750 -0
- package/.plcode/skill/core/browser/SKILL.md +67 -0
- package/.plcode/skill/core/browser/eval.js +38 -0
- package/.plcode/skill/core/browser/nav.js +37 -0
- package/.plcode/skill/core/browser/package-lock.json +928 -0
- package/.plcode/skill/core/browser/pick.js +106 -0
- package/.plcode/skill/core/browser/screenshot.js +31 -0
- package/.plcode/skill/core/browser/start.js +71 -0
- package/.plcode/skill/core/changelog-generator/SKILL.md +105 -0
- package/.plcode/skill/core/clarify/SKILL.md +199 -0
- package/.plcode/skill/core/code-refactoring/SKILL.md +232 -0
- package/.plcode/skill/core/code-review/SKILL.md +60 -0
- package/.plcode/skill/core/critique/SKILL.md +137 -0
- package/.plcode/skill/core/database-design/SKILL.md +186 -0
- package/.plcode/skill/core/dispatching-parallel-agents/SKILL.md +192 -0
- package/.plcode/skill/core/error-handling-patterns/SKILL.md +39 -0
- package/.plcode/skill/core/error-handling-patterns/resources/implementation-playbook.md +634 -0
- package/.plcode/skill/core/executing-plans/SKILL.md +97 -0
- package/.plcode/skill/core/finishing-a-development-branch/SKILL.md +214 -0
- package/.plcode/skill/core/frontend-design/LICENSE.txt +177 -0
- package/.plcode/skill/core/frontend-design/SKILL.md +516 -0
- package/.plcode/skill/core/javascript-typescript/SKILL.md +147 -0
- package/.plcode/skill/core/python-development/SKILL.md +142 -0
- package/.plcode/skill/core/receiving-code-review/SKILL.md +227 -0
- package/.plcode/skill/core/requesting-code-review/SKILL.md +116 -0
- package/.plcode/skill/core/requesting-code-review/code-reviewer.md +160 -0
- package/.plcode/skill/core/skill-creator/LICENSE.txt +202 -0
- package/.plcode/skill/core/skill-creator/SKILL.md +357 -0
- package/.plcode/skill/core/skill-creator/references/output-patterns.md +92 -0
- package/.plcode/skill/core/skill-creator/references/workflows.md +28 -0
- package/.plcode/skill/core/skill-creator/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
- package/.plcode/skill/core/skill-creator/scripts/init_skill.py +303 -0
- package/.plcode/skill/core/skill-creator/scripts/package_skill.py +110 -0
- package/.plcode/skill/core/skill-creator/scripts/quick_validate.py +103 -0
- package/.plcode/skill/core/subagent-driven-development/SKILL.md +256 -0
- package/.plcode/skill/core/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
- package/.plcode/skill/core/subagent-driven-development/implementer-prompt.md +78 -0
- package/.plcode/skill/core/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/.plcode/skill/core/systematic-debugging/CREATION-LOG.md +133 -0
- package/.plcode/skill/core/systematic-debugging/SKILL.md +309 -0
- package/.plcode/skill/core/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/.plcode/skill/core/systematic-debugging/condition-based-waiting.md +120 -0
- package/.plcode/skill/core/systematic-debugging/defense-in-depth.md +128 -0
- package/.plcode/skill/core/systematic-debugging/find-polluter.sh +63 -0
- package/.plcode/skill/core/systematic-debugging/root-cause-tracing.md +183 -0
- package/.plcode/skill/core/systematic-debugging/test-academic.md +14 -0
- package/.plcode/skill/core/systematic-debugging/test-pressure-1.md +65 -0
- package/.plcode/skill/core/systematic-debugging/test-pressure-2.md +75 -0
- package/.plcode/skill/core/systematic-debugging/test-pressure-3.md +75 -0
- package/.plcode/skill/core/task-generator/SKILL.md +72 -0
- package/.plcode/skill/core/test-driven-development/SKILL.md +393 -0
- package/.plcode/skill/core/test-driven-development/testing-anti-patterns.md +317 -0
- package/.plcode/skill/core/using-git-worktrees/SKILL.md +224 -0
- package/.plcode/skill/core/using-superpowers/SKILL.md +96 -0
- package/.plcode/skill/core/verification-before-completion/SKILL.md +148 -0
- package/.plcode/skill/core/writing-plans/SKILL.md +122 -0
- package/.plcode/skill/core/writing-skills/SKILL.md +717 -0
- package/.plcode/skill/core/writing-skills/anthropic-best-practices.md +1176 -0
- package/.plcode/skill/core/writing-skills/examples/CLAUDE_MD_TESTING.md +200 -0
- package/.plcode/skill/core/writing-skills/graphviz-conventions.dot +172 -0
- package/.plcode/skill/core/writing-skills/persuasion-principles.md +220 -0
- package/.plcode/skill/core/writing-skills/render-graphs.js +171 -0
- package/.plcode/skill/core/writing-skills/testing-skills-with-subagents.md +404 -0
- package/.plcode/skill/experimental/accessibility-compliance-accessibility-audit/SKILL.md +46 -0
- package/.plcode/skill/experimental/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +489 -0
- package/.plcode/skill/experimental/adapt/SKILL.md +214 -0
- package/.plcode/skill/experimental/agnos/ROUTING.md +128 -0
- package/.plcode/skill/experimental/agnos/SKILL.md +142 -0
- package/.plcode/skill/experimental/algorithmic-art/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/algorithmic-art/SKILL.md +444 -0
- package/.plcode/skill/experimental/algorithmic-art/templates/generator_template.js +223 -0
- package/.plcode/skill/experimental/algorithmic-art/templates/viewer.html +634 -0
- package/.plcode/skill/experimental/animate/SKILL.md +204 -0
- package/.plcode/skill/experimental/application-performance-performance-optimization/SKILL.md +158 -0
- package/.plcode/skill/experimental/architecture-diagram/SKILL.md +378 -0
- package/.plcode/skill/experimental/artifacts-builder/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/artifacts-builder/SKILL.md +80 -0
- package/.plcode/skill/experimental/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/.plcode/skill/experimental/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/.plcode/skill/experimental/automem-memory-management/SKILL.md +401 -0
- package/.plcode/skill/experimental/backend-architect/SKILL.md +331 -0
- package/.plcode/skill/experimental/backend-security-coder/SKILL.md +172 -0
- package/.plcode/skill/experimental/bolder/SKILL.md +140 -0
- package/.plcode/skill/experimental/brainstorming/SKILL.md +102 -0
- package/.plcode/skill/experimental/canvas-design/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/canvas-design/SKILL.md +138 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/.plcode/skill/experimental/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/.plcode/skill/experimental/colorize/SKILL.md +170 -0
- package/.plcode/skill/experimental/content-research-writer/SKILL.md +596 -0
- package/.plcode/skill/experimental/delight/SKILL.md +350 -0
- package/.plcode/skill/experimental/design-tokens/SKILL.md +456 -0
- package/.plcode/skill/experimental/distill/SKILL.md +146 -0
- package/.plcode/skill/experimental/doc-coauthoring/SKILL.md +395 -0
- package/.plcode/skill/experimental/document-docx/LICENSE.txt +30 -0
- package/.plcode/skill/experimental/document-docx/SKILL.md +581 -0
- package/.plcode/skill/experimental/document-docx/docx-js.md +488 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.plcode/skill/experimental/document-docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/pack.py +159 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/unpack.py +29 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validate.py +69 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validation/__init__.py +15 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validation/base.py +951 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validation/docx.py +274 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validation/pptx.py +315 -0
- package/.plcode/skill/experimental/document-docx/ooxml/scripts/validation/redlining.py +279 -0
- package/.plcode/skill/experimental/document-docx/ooxml.md +635 -0
- package/.plcode/skill/experimental/document-docx/scripts/__init__.py +1 -0
- package/.plcode/skill/experimental/document-docx/scripts/accept_changes.py +135 -0
- package/.plcode/skill/experimental/document-docx/scripts/comment.py +318 -0
- package/.plcode/skill/experimental/document-docx/scripts/document.py +1276 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/helpers/__init__.py +0 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/helpers/merge_runs.py +199 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/pack.py +159 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/soffice.py +183 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/unpack.py +132 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validate.py +111 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validators/__init__.py +15 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validators/base.py +847 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validators/docx.py +446 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validators/pptx.py +275 -0
- package/.plcode/skill/experimental/document-docx/scripts/office/validators/redlining.py +247 -0
- package/.plcode/skill/experimental/document-docx/scripts/templates/comments.xml +3 -0
- package/.plcode/skill/experimental/document-docx/scripts/templates/commentsExtended.xml +3 -0
- package/.plcode/skill/experimental/document-docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.plcode/skill/experimental/document-docx/scripts/templates/commentsIds.xml +3 -0
- package/.plcode/skill/experimental/document-docx/scripts/templates/people.xml +3 -0
- package/.plcode/skill/experimental/document-docx/scripts/utilities.py +374 -0
- package/.plcode/skill/experimental/document-pdf/LICENSE.txt +30 -0
- package/.plcode/skill/experimental/document-pdf/SKILL.md +332 -0
- package/.plcode/skill/experimental/document-pdf/forms.md +312 -0
- package/.plcode/skill/experimental/document-pdf/reference.md +640 -0
- package/.plcode/skill/experimental/document-pdf/scripts/check_bounding_boxes.py +65 -0
- package/.plcode/skill/experimental/document-pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/.plcode/skill/experimental/document-pdf/scripts/check_fillable_fields.py +11 -0
- package/.plcode/skill/experimental/document-pdf/scripts/convert_pdf_to_images.py +33 -0
- package/.plcode/skill/experimental/document-pdf/scripts/create_validation_image.py +37 -0
- package/.plcode/skill/experimental/document-pdf/scripts/extract_form_field_info.py +122 -0
- package/.plcode/skill/experimental/document-pdf/scripts/extract_form_structure.py +115 -0
- package/.plcode/skill/experimental/document-pdf/scripts/fill_fillable_fields.py +98 -0
- package/.plcode/skill/experimental/document-pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/.plcode/skill/experimental/document-pptx/LICENSE.txt +30 -0
- package/.plcode/skill/experimental/document-pptx/SKILL.md +236 -0
- package/.plcode/skill/experimental/document-pptx/editing.md +213 -0
- package/.plcode/skill/experimental/document-pptx/html2pptx.md +719 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/pack.py +159 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/unpack.py +29 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validate.py +69 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validation/base.py +951 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validation/docx.py +274 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/.plcode/skill/experimental/document-pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/.plcode/skill/experimental/document-pptx/ooxml.md +446 -0
- package/.plcode/skill/experimental/document-pptx/pptxgenjs.md +511 -0
- package/.plcode/skill/experimental/document-pptx/scripts/__init__.py +0 -0
- package/.plcode/skill/experimental/document-pptx/scripts/add_slide.py +195 -0
- package/.plcode/skill/experimental/document-pptx/scripts/clean.py +286 -0
- package/.plcode/skill/experimental/document-pptx/scripts/html2pptx.js +1008 -0
- package/.plcode/skill/experimental/document-pptx/scripts/inventory.py +1029 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/helpers/__init__.py +0 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/pack.py +159 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/soffice.py +183 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/unpack.py +132 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validate.py +111 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validators/__init__.py +15 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validators/base.py +847 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validators/docx.py +446 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validators/pptx.py +275 -0
- package/.plcode/skill/experimental/document-pptx/scripts/office/validators/redlining.py +247 -0
- package/.plcode/skill/experimental/document-pptx/scripts/rearrange.py +231 -0
- package/.plcode/skill/experimental/document-pptx/scripts/replace.py +385 -0
- package/.plcode/skill/experimental/document-pptx/scripts/thumbnail.py +289 -0
- package/.plcode/skill/experimental/document-xlsx/LICENSE.txt +30 -0
- package/.plcode/skill/experimental/document-xlsx/SKILL.md +320 -0
- package/.plcode/skill/experimental/document-xlsx/recalc.py +211 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/helpers/__init__.py +0 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/pack.py +159 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/soffice.py +183 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/unpack.py +132 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validate.py +111 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validators/__init__.py +15 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validators/base.py +847 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validators/docx.py +446 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validators/pptx.py +275 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/office/validators/redlining.py +247 -0
- package/.plcode/skill/experimental/document-xlsx/scripts/recalc.py +184 -0
- package/.plcode/skill/experimental/domain-driven-design/SKILL.md +75 -0
- package/.plcode/skill/experimental/domain-driven-design/references/ddd-deliverables.md +24 -0
- package/.plcode/skill/experimental/excalidraw/SKILL.md +537 -0
- package/.plcode/skill/experimental/extract/SKILL.md +94 -0
- package/.plcode/skill/experimental/frontend-ui-animator/SKILL.md +147 -0
- package/.plcode/skill/experimental/frontend-ui-animator/references/animation-patterns.md +583 -0
- package/.plcode/skill/experimental/frontend-ui-animator/references/component-checklist.md +161 -0
- package/.plcode/skill/experimental/frontend-ui-animator/references/tailwind-presets.md +404 -0
- package/.plcode/skill/experimental/frontend-ui-integration/SKILL.md +79 -0
- package/.plcode/skill/experimental/harden/SKILL.md +385 -0
- package/.plcode/skill/experimental/infographic/SKILL.md +469 -0
- package/.plcode/skill/experimental/llm-application-dev/SKILL.md +221 -0
- package/.plcode/skill/experimental/mcp-builder/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/mcp-builder/SKILL.md +256 -0
- package/.plcode/skill/experimental/mcp-builder/reference/evaluation.md +630 -0
- package/.plcode/skill/experimental/mcp-builder/reference/mcp_best_practices.md +269 -0
- package/.plcode/skill/experimental/mcp-builder/reference/node_mcp_server.md +974 -0
- package/.plcode/skill/experimental/mcp-builder/reference/python_mcp_server.md +737 -0
- package/.plcode/skill/experimental/mcp-builder/scripts/connections.py +151 -0
- package/.plcode/skill/experimental/mcp-builder/scripts/evaluation.py +373 -0
- package/.plcode/skill/experimental/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.plcode/skill/experimental/mcp-builder/scripts/requirements.txt +2 -0
- package/.plcode/skill/experimental/normalize/SKILL.md +69 -0
- package/.plcode/skill/experimental/onboard/SKILL.md +272 -0
- package/.plcode/skill/experimental/optimize/SKILL.md +291 -0
- package/.plcode/skill/experimental/polish/SKILL.md +204 -0
- package/.plcode/skill/experimental/product-management/SKILL.md +327 -0
- package/.plcode/skill/experimental/quieter/SKILL.md +125 -0
- package/.plcode/skill/experimental/ralph/scripts/prompt.md +108 -0
- package/.plcode/skill/experimental/ralph/scripts/ralph.sh +77 -0
- package/.plcode/skill/experimental/ralph/skill.md +170 -0
- package/.plcode/skill/experimental/ralph-executor/skill.md +130 -0
- package/.plcode/skill/experimental/rsc-data-optimizer/SKILL.md +117 -0
- package/.plcode/skill/experimental/rsc-data-optimizer/references/patterns.md +285 -0
- package/.plcode/skill/experimental/shadcn-management/SKILL.md +109 -0
- package/.plcode/skill/experimental/shadcn-management/references/workflows.md +214 -0
- package/.plcode/skill/experimental/sketch/SKILL.md +232 -0
- package/.plcode/skill/experimental/teach-impeccable/SKILL.md +78 -0
- package/.plcode/skill/experimental/theme-factory/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/theme-factory/SKILL.md +63 -0
- package/.plcode/skill/experimental/theme-factory/theme-showcase.pdf +0 -0
- package/.plcode/skill/experimental/theme-factory/themes/arctic-frost.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/botanical-garden.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/desert-rose.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/forest-canopy.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/golden-hour.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/midnight-galaxy.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/modern-minimalist.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/ocean-depths.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/sunset-boulevard.md +19 -0
- package/.plcode/skill/experimental/theme-factory/themes/tech-innovation.md +19 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/SKILL.md +238 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/charts.csv +26 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/colors.csv +97 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/landing.csv +31 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/products.csv +97 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/styles.csv +59 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/typography.csv +58 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/scripts/core.py +236 -0
- package/.plcode/skill/experimental/ui-ux-pro-max/scripts/search.py +61 -0
- package/.plcode/skill/experimental/webapp-testing/LICENSE.txt +202 -0
- package/.plcode/skill/experimental/webapp-testing/SKILL.md +108 -0
- package/.plcode/skill/experimental/webapp-testing/examples/console_logging.py +35 -0
- package/.plcode/skill/experimental/webapp-testing/examples/element_discovery.py +40 -0
- package/.plcode/skill/experimental/webapp-testing/examples/static_html_automation.py +33 -0
- package/.plcode/skill/experimental/webapp-testing/scripts/with_server.py +106 -0
- package/.plcode/themes/mytheme.json +223 -0
- package/README.md +6 -33
- package/bin/plcode +10 -90
- package/lib/cli.js +212182 -0
- package/lib/worker.js +143504 -0
- package/package.json +14 -17
|
@@ -0,0 +1,1474 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diagnose and fix bugs with architecture-aware analysis and diagnostic-first approach
|
|
3
|
+
argument-hint: Bug description or error message
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Bug Diagnosis and Fix Command
|
|
7
|
+
|
|
8
|
+
Intelligently diagnose and fix bugs by:
|
|
9
|
+
|
|
10
|
+
1. **Adding diagnostic instrumentation** to capture current behavior
|
|
11
|
+
2. **Deep architecture analysis** using `/docs/architecture/data-model.md`
|
|
12
|
+
3. **Hypothesis generation** (5-7 possible sources, distilled to 1-2 most likely)
|
|
13
|
+
4. **User confirmation** before implementing fix
|
|
14
|
+
5. **Root cause documentation** for cross-project memory
|
|
15
|
+
|
|
16
|
+
## Current Bug Report
|
|
17
|
+
|
|
18
|
+
**User Input:** `$ARGUMENTS`
|
|
19
|
+
|
|
20
|
+
Please diagnose and fix the bug described above using the complete workflow outlined in this document.
|
|
21
|
+
|
|
22
|
+
## Command Usage
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
/fix "payment processing fails for subscriptions"
|
|
26
|
+
/fix "null pointer error in user service"
|
|
27
|
+
/fix "UI not updating after API call"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Execution Flow
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
flowchart TD
|
|
34
|
+
START[User Reports Bug] --> CHECK{data-model.md exists?}
|
|
35
|
+
CHECK -->|No| GEN[Generate data-model.md]
|
|
36
|
+
CHECK -->|Yes| READ[Read architecture docs]
|
|
37
|
+
GEN --> READ
|
|
38
|
+
|
|
39
|
+
READ --> CONTEXT[Gather bug context]
|
|
40
|
+
CONTEXT --> LOGS[Add diagnostic logs/instrumentation]
|
|
41
|
+
|
|
42
|
+
LOGS --> REPRODUCE[Attempt to reproduce bug]
|
|
43
|
+
REPRODUCE --> ANALYZE[Analyze log output]
|
|
44
|
+
|
|
45
|
+
ANALYZE --> HYPOTHESIS[Generate 5-7 hypotheses]
|
|
46
|
+
HYPOTHESIS --> DISTILL[Distill to 1-2 most likely causes]
|
|
47
|
+
|
|
48
|
+
DISTILL --> VALIDATE[Validate with diagnostic data]
|
|
49
|
+
VALIDATE --> PRESENT[Present diagnosis to user]
|
|
50
|
+
|
|
51
|
+
PRESENT --> CONFIRM{User confirms diagnosis?}
|
|
52
|
+
CONFIRM -->|No| LOGS
|
|
53
|
+
CONFIRM -->|Yes| FIX[Implement fix]
|
|
54
|
+
|
|
55
|
+
FIX --> TEST[Test fix thoroughly]
|
|
56
|
+
TEST --> VERIFY[Verify bug resolved]
|
|
57
|
+
|
|
58
|
+
VERIFY --> CLEANUP[Remove diagnostic logs]
|
|
59
|
+
CLEANUP --> DOCS[Document root cause]
|
|
60
|
+
DOCS --> MEMORY[Write to cross-project memory]
|
|
61
|
+
|
|
62
|
+
MEMORY --> COMPLETE[✅ Bug Fixed]
|
|
63
|
+
|
|
64
|
+
style START fill:#fbb,stroke:#333,stroke-width:2px
|
|
65
|
+
style COMPLETE fill:#bfb,stroke:#333,stroke-width:2px
|
|
66
|
+
style CONFIRM fill:#ffb,stroke:#333,stroke-width:2px
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Phase 1: Context Gathering & Architecture Analysis (5-10 min)
|
|
70
|
+
|
|
71
|
+
### Step 1.1: Check for Data Model Documentation
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
const dataModelPath = "./docs/architecture/data-model.md"
|
|
75
|
+
const exists = await fileExists(dataModelPath)
|
|
76
|
+
|
|
77
|
+
if (!exists) {
|
|
78
|
+
console.log("⚠️ Architecture documentation missing")
|
|
79
|
+
console.log("📝 Generating data-model.md for context...")
|
|
80
|
+
await executeCommand("data-model")
|
|
81
|
+
console.log("✅ Data model documentation created")
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Step 1.2: Read Architecture for Context
|
|
86
|
+
|
|
87
|
+
Deep analysis of architecture to understand bug context:
|
|
88
|
+
|
|
89
|
+
**Database Layer Analysis**:
|
|
90
|
+
|
|
91
|
+
- Read ERD and entity relationships
|
|
92
|
+
- Understand foreign key constraints
|
|
93
|
+
- Check indexes and query patterns
|
|
94
|
+
- Identify potential N+1 query scenarios
|
|
95
|
+
- Review validation rules and constraints
|
|
96
|
+
|
|
97
|
+
**Service Layer Analysis**:
|
|
98
|
+
|
|
99
|
+
- Understand DTO structures and validation
|
|
100
|
+
- Review domain model business logic
|
|
101
|
+
- Check data transformation patterns
|
|
102
|
+
- Identify error handling approaches
|
|
103
|
+
- Analyze dependency injection patterns
|
|
104
|
+
|
|
105
|
+
**API Layer Analysis**:
|
|
106
|
+
|
|
107
|
+
- Review endpoint implementations
|
|
108
|
+
- Check request/response DTOs
|
|
109
|
+
- Understand middleware and error handling
|
|
110
|
+
- Analyze authentication/authorization flows
|
|
111
|
+
- Review rate limiting and validation
|
|
112
|
+
|
|
113
|
+
**UI Layer Analysis**:
|
|
114
|
+
|
|
115
|
+
- Understand component data flows
|
|
116
|
+
- Review state management patterns
|
|
117
|
+
- Check form validation logic
|
|
118
|
+
- Analyze error display mechanisms
|
|
119
|
+
- Review data fetching strategies
|
|
120
|
+
|
|
121
|
+
**Data Flow Analysis**:
|
|
122
|
+
|
|
123
|
+
- Trace end-to-end data flow for affected feature
|
|
124
|
+
- Identify all transformation points
|
|
125
|
+
- Check validation at each layer
|
|
126
|
+
- Review error propagation
|
|
127
|
+
- Understand state synchronization
|
|
128
|
+
|
|
129
|
+
### Step 1.3: Cross-Project Memory Check
|
|
130
|
+
|
|
131
|
+
Search for similar bugs in past projects:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
const failurePatterns = await readJSON("/Users/besi/Code/memory/failure_patterns.json")
|
|
135
|
+
|
|
136
|
+
// Search for patterns matching:
|
|
137
|
+
const similarBugs = failurePatterns.filter((pattern) => {
|
|
138
|
+
return (
|
|
139
|
+
pattern.technologies.some((tech) => projectTechStack.includes(tech)) ||
|
|
140
|
+
pattern.problem.includes(bugKeywords) ||
|
|
141
|
+
pattern.symptoms.some((symptom) => bugDescription.includes(symptom))
|
|
142
|
+
)
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Output**:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
🧠 Cross-Project Memory - Similar Bugs:
|
|
150
|
+
✅ Found: n1-query-user-relations-2025-08
|
|
151
|
+
- Symptom: Slow API responses with multiple users
|
|
152
|
+
- Cause: N+1 query pattern in user relationships
|
|
153
|
+
|
|
154
|
+
⚠️ Found: stripe-webhook-replay-attack-2025-10
|
|
155
|
+
- Symptom: Duplicate payments processed
|
|
156
|
+
- Cause: Missing idempotency check
|
|
157
|
+
|
|
158
|
+
✅ Found: react-state-stale-closure-2025-09
|
|
159
|
+
- Symptom: UI not updating after state change
|
|
160
|
+
- Cause: Stale closure in useEffect
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Step 1.4: Gather Bug Context
|
|
164
|
+
|
|
165
|
+
Collect comprehensive information about the bug:
|
|
166
|
+
|
|
167
|
+
**User-Provided Information**:
|
|
168
|
+
|
|
169
|
+
- Bug description
|
|
170
|
+
- Steps to reproduce
|
|
171
|
+
- Expected behavior
|
|
172
|
+
- Actual behavior
|
|
173
|
+
- Error messages/stack traces
|
|
174
|
+
- Environment (dev/staging/prod)
|
|
175
|
+
|
|
176
|
+
**System Context** (auto-detected):
|
|
177
|
+
|
|
178
|
+
- Technology stack
|
|
179
|
+
- Affected components (from architecture analysis)
|
|
180
|
+
- Related entities and data flows
|
|
181
|
+
- Recent code changes (if available via git)
|
|
182
|
+
|
|
183
|
+
**Create Bug Context Document following documentation standards**:
|
|
184
|
+
|
|
185
|
+
- **Frontend bugs:** `docs/tasks/frontend/DD-MM-YYYY/<semantic-bug-id>/context.md`
|
|
186
|
+
- **Backend bugs:** `docs/tasks/backend/DD-MM-YYYY/<semantic-bug-id>/context.md`
|
|
187
|
+
|
|
188
|
+
Use semantic bug ID slugs (e.g., `payment-processing-failure`, `ui-state-sync-issue`, `database-connection-timeout`)
|
|
189
|
+
|
|
190
|
+
```markdown
|
|
191
|
+
# Bug Context: [Bug Name]
|
|
192
|
+
|
|
193
|
+
## User Report
|
|
194
|
+
|
|
195
|
+
- **Description**: [User description]
|
|
196
|
+
- **Steps to Reproduce**: [Steps]
|
|
197
|
+
- **Expected**: [Expected behavior]
|
|
198
|
+
- **Actual**: [Actual behavior]
|
|
199
|
+
- **Error**: [Error message/stack trace]
|
|
200
|
+
|
|
201
|
+
## Architecture Context (from data-model.md)
|
|
202
|
+
|
|
203
|
+
- **Affected Entities**: [Database entities involved]
|
|
204
|
+
- **Data Flow**: [UI → API → Service → Database path]
|
|
205
|
+
- **Related Components**: [Services, controllers, components]
|
|
206
|
+
|
|
207
|
+
## Technology Stack
|
|
208
|
+
|
|
209
|
+
- Database: [Detected database]
|
|
210
|
+
- Backend: [Detected backend framework]
|
|
211
|
+
- Frontend: [Detected frontend framework]
|
|
212
|
+
- State Management: [Detected state library]
|
|
213
|
+
|
|
214
|
+
## Recent Changes
|
|
215
|
+
|
|
216
|
+
- [List recent commits affecting this area]
|
|
217
|
+
|
|
218
|
+
## Similar Known Issues
|
|
219
|
+
|
|
220
|
+
- [List from cross-project memory]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Phase 2: Diagnostic Instrumentation (10-15 min)
|
|
224
|
+
|
|
225
|
+
### Step 2.1: Add Targeted Diagnostic Logs
|
|
226
|
+
|
|
227
|
+
**CRITICAL**: Add instrumentation FIRST, before attempting fixes.
|
|
228
|
+
|
|
229
|
+
**Database Layer Diagnostics**:
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
// Add query logging
|
|
233
|
+
console.log("[DEBUG] Query executing:", {
|
|
234
|
+
query: "SELECT * FROM users WHERE id = $1",
|
|
235
|
+
params: [userId],
|
|
236
|
+
timestamp: new Date().toISOString(),
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
// Log query results
|
|
240
|
+
console.log("[DEBUG] Query result:", {
|
|
241
|
+
rowCount: result.rows.length,
|
|
242
|
+
executionTime: `${endTime - startTime}ms`,
|
|
243
|
+
data: result.rows,
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
// Log relationship loading
|
|
247
|
+
console.log("[DEBUG] Loading relationships:", {
|
|
248
|
+
entity: "User",
|
|
249
|
+
relationships: ["orders", "subscriptions"],
|
|
250
|
+
eager: true,
|
|
251
|
+
})
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Service Layer Diagnostics**:
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
// Add service entry/exit logging
|
|
258
|
+
console.log("[DEBUG] Service method called:", {
|
|
259
|
+
service: "UserService",
|
|
260
|
+
method: "updateProfile",
|
|
261
|
+
input: sanitizeForLog(input),
|
|
262
|
+
timestamp: new Date().toISOString(),
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
// Log validation results
|
|
266
|
+
console.log("[DEBUG] Validation result:", {
|
|
267
|
+
isValid: validationResult.isValid,
|
|
268
|
+
errors: validationResult.errors,
|
|
269
|
+
input: sanitizeForLog(input),
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
// Log transformations
|
|
273
|
+
console.log("[DEBUG] Data transformation:", {
|
|
274
|
+
from: "DTO",
|
|
275
|
+
to: "DomainModel",
|
|
276
|
+
before: sanitizeForLog(dto),
|
|
277
|
+
after: sanitizeForLog(domainModel),
|
|
278
|
+
})
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**API Layer Diagnostics**:
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
// Add request/response logging
|
|
285
|
+
console.log("[DEBUG] API request:", {
|
|
286
|
+
method: req.method,
|
|
287
|
+
path: req.path,
|
|
288
|
+
query: req.query,
|
|
289
|
+
body: sanitizeForLog(req.body),
|
|
290
|
+
headers: sanitizeHeaders(req.headers),
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
console.log("[DEBUG] API response:", {
|
|
294
|
+
statusCode: res.statusCode,
|
|
295
|
+
body: sanitizeForLog(responseBody),
|
|
296
|
+
executionTime: `${Date.now() - startTime}ms`,
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
// Log middleware execution
|
|
300
|
+
console.log("[DEBUG] Middleware executed:", {
|
|
301
|
+
name: "authMiddleware",
|
|
302
|
+
user: req.user?.id,
|
|
303
|
+
authorized: true,
|
|
304
|
+
})
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**UI Layer Diagnostics**:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
// Add component state logging
|
|
311
|
+
console.log("[DEBUG] Component state:", {
|
|
312
|
+
component: "UserProfile",
|
|
313
|
+
prevState: prevState,
|
|
314
|
+
nextState: nextState,
|
|
315
|
+
trigger: "useEffect",
|
|
316
|
+
})
|
|
317
|
+
|
|
318
|
+
// Log API calls
|
|
319
|
+
console.log("[DEBUG] API call initiated:", {
|
|
320
|
+
endpoint: "/api/users/123",
|
|
321
|
+
method: "PATCH",
|
|
322
|
+
payload: sanitizeForLog(payload),
|
|
323
|
+
})
|
|
324
|
+
|
|
325
|
+
// Log state management
|
|
326
|
+
console.log("[DEBUG] Store update:", {
|
|
327
|
+
store: "userStore",
|
|
328
|
+
action: "updateProfile",
|
|
329
|
+
prevValue: prevValue,
|
|
330
|
+
nextValue: nextValue,
|
|
331
|
+
})
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**State Flow Diagnostics**:
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
// Log data flow through layers
|
|
338
|
+
console.log("[DEBUG] Data flow checkpoint:", {
|
|
339
|
+
layer: "API → Service",
|
|
340
|
+
data: sanitizeForLog(data),
|
|
341
|
+
checkpoint: "before-validation",
|
|
342
|
+
})
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Step 2.2: Add Error Boundaries and Handlers
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
// Enhanced error logging
|
|
349
|
+
try {
|
|
350
|
+
const result = await processPayment(paymentData)
|
|
351
|
+
} catch (error) {
|
|
352
|
+
console.error("[DEBUG] Error caught:", {
|
|
353
|
+
location: "PaymentService.processPayment",
|
|
354
|
+
error: {
|
|
355
|
+
name: error.name,
|
|
356
|
+
message: error.message,
|
|
357
|
+
stack: error.stack,
|
|
358
|
+
cause: error.cause,
|
|
359
|
+
},
|
|
360
|
+
input: sanitizeForLog(paymentData),
|
|
361
|
+
context: {
|
|
362
|
+
userId: paymentData.userId,
|
|
363
|
+
amount: paymentData.amount,
|
|
364
|
+
currency: paymentData.currency,
|
|
365
|
+
},
|
|
366
|
+
})
|
|
367
|
+
throw error
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Step 2.3: Create Diagnostic Checklist
|
|
372
|
+
|
|
373
|
+
```markdown
|
|
374
|
+
## Diagnostic Instrumentation Added
|
|
375
|
+
|
|
376
|
+
### Database Layer
|
|
377
|
+
|
|
378
|
+
- [ ] Query logging with parameters
|
|
379
|
+
- [ ] Result logging with row counts
|
|
380
|
+
- [ ] Execution time tracking
|
|
381
|
+
- [ ] Relationship loading logs
|
|
382
|
+
|
|
383
|
+
### Service Layer
|
|
384
|
+
|
|
385
|
+
- [ ] Service method entry/exit
|
|
386
|
+
- [ ] Validation result logging
|
|
387
|
+
- [ ] Data transformation logs
|
|
388
|
+
- [ ] Business logic checkpoints
|
|
389
|
+
|
|
390
|
+
### API Layer
|
|
391
|
+
|
|
392
|
+
- [ ] Request/response logging
|
|
393
|
+
- [ ] Middleware execution logs
|
|
394
|
+
- [ ] Error handling logs
|
|
395
|
+
- [ ] Performance timing
|
|
396
|
+
|
|
397
|
+
### UI Layer
|
|
398
|
+
|
|
399
|
+
- [ ] Component state changes
|
|
400
|
+
- [ ] API call tracking
|
|
401
|
+
- [ ] Store updates
|
|
402
|
+
- [ ] Re-render triggers
|
|
403
|
+
|
|
404
|
+
### Cross-Cutting
|
|
405
|
+
|
|
406
|
+
- [ ] Error boundaries
|
|
407
|
+
- [ ] Data flow checkpoints
|
|
408
|
+
- [ ] Security-safe log sanitization
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Phase 3: Reproduce & Analyze (10-15 min)
|
|
412
|
+
|
|
413
|
+
### Step 3.1: Attempt to Reproduce Bug
|
|
414
|
+
|
|
415
|
+
```markdown
|
|
416
|
+
## Reproduction Attempt
|
|
417
|
+
|
|
418
|
+
### Steps Executed
|
|
419
|
+
|
|
420
|
+
1. [Step 1 with exact parameters]
|
|
421
|
+
2. [Step 2 with exact parameters]
|
|
422
|
+
3. [Step 3 with exact parameters]
|
|
423
|
+
|
|
424
|
+
### Environment
|
|
425
|
+
|
|
426
|
+
- Database state: [Initial state]
|
|
427
|
+
- User context: [User ID, permissions]
|
|
428
|
+
- External dependencies: [API status, service availability]
|
|
429
|
+
|
|
430
|
+
### Reproduction Result
|
|
431
|
+
|
|
432
|
+
✅ Bug reproduced successfully
|
|
433
|
+
❌ Unable to reproduce (document why)
|
|
434
|
+
⚠️ Partial reproduction (document differences)
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Step 3.2: Collect Diagnostic Output
|
|
438
|
+
|
|
439
|
+
Save all diagnostic logs following documentation standards:
|
|
440
|
+
|
|
441
|
+
- **Frontend bugs:** `docs/tasks/frontend/DD-MM-YYYY/<semantic-bug-id>/diagnostic-logs.md`
|
|
442
|
+
- **Backend bugs:** `docs/tasks/backend/DD-MM-YYYY/<semantic-bug-id>/diagnostic-logs.md`
|
|
443
|
+
|
|
444
|
+
````markdown
|
|
445
|
+
# Diagnostic Logs
|
|
446
|
+
|
|
447
|
+
## Timeline of Events
|
|
448
|
+
|
|
449
|
+
### T+0ms: API Request Received
|
|
450
|
+
|
|
451
|
+
```json
|
|
452
|
+
{
|
|
453
|
+
"method": "POST",
|
|
454
|
+
"path": "/api/subscriptions",
|
|
455
|
+
"body": {...}
|
|
456
|
+
}
|
|
457
|
+
```
|
|
458
|
+
````
|
|
459
|
+
|
|
460
|
+
### T+15ms: Validation Passed
|
|
461
|
+
|
|
462
|
+
```json
|
|
463
|
+
{
|
|
464
|
+
"isValid": true,
|
|
465
|
+
"dto": {...}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### T+23ms: Database Query Executed
|
|
470
|
+
|
|
471
|
+
```json
|
|
472
|
+
{
|
|
473
|
+
"query": "SELECT * FROM users WHERE id = $1",
|
|
474
|
+
"executionTime": "8ms",
|
|
475
|
+
"rowCount": 1
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### T+45ms: ERROR OCCURRED
|
|
480
|
+
|
|
481
|
+
```json
|
|
482
|
+
{
|
|
483
|
+
"error": "Cannot read property 'subscription_id' of undefined",
|
|
484
|
+
"stack": "...",
|
|
485
|
+
"context": {...}
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
## Key Observations
|
|
490
|
+
|
|
491
|
+
- User record exists in database
|
|
492
|
+
- Subscription relationship NOT loaded
|
|
493
|
+
- No eager loading configured
|
|
494
|
+
- N+1 query pattern detected
|
|
495
|
+
|
|
496
|
+
````
|
|
497
|
+
|
|
498
|
+
### Step 3.3: Analyze Diagnostic Data
|
|
499
|
+
Review logs to identify patterns:
|
|
500
|
+
|
|
501
|
+
**Data Flow Analysis**:
|
|
502
|
+
- Where does data enter the system?
|
|
503
|
+
- How is it transformed at each layer?
|
|
504
|
+
- Where does the error first occur?
|
|
505
|
+
- What data is missing or malformed?
|
|
506
|
+
|
|
507
|
+
**Timing Analysis**:
|
|
508
|
+
- Performance bottlenecks identified?
|
|
509
|
+
- Timeout issues?
|
|
510
|
+
- Race conditions?
|
|
511
|
+
|
|
512
|
+
**State Analysis**:
|
|
513
|
+
- What is the state before error?
|
|
514
|
+
- What state change triggers error?
|
|
515
|
+
- Is state synchronized across layers?
|
|
516
|
+
|
|
517
|
+
## Phase 4: Hypothesis Generation & Distillation (10-15 min)
|
|
518
|
+
|
|
519
|
+
### Step 4.1: Generate 5-7 Hypotheses
|
|
520
|
+
|
|
521
|
+
Based on diagnostic data, architecture analysis, and cross-project memory, generate comprehensive list of possible causes:
|
|
522
|
+
|
|
523
|
+
```markdown
|
|
524
|
+
## Hypothesis Generation
|
|
525
|
+
|
|
526
|
+
### Hypothesis 1: N+1 Query Problem
|
|
527
|
+
**Likelihood**: 🔴 High
|
|
528
|
+
**Evidence**:
|
|
529
|
+
- Diagnostic logs show sequential queries
|
|
530
|
+
- User entity loaded without relationships
|
|
531
|
+
- Performance degrades with more records
|
|
532
|
+
- Pattern matches failure-pattern: n1-query-user-relations-2025-08
|
|
533
|
+
|
|
534
|
+
**Data Flow Point**: Database → Service layer
|
|
535
|
+
**Affected Layer**: Repository/ORM
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
### Hypothesis 2: Missing Validation
|
|
540
|
+
**Likelihood**: 🟡 Medium
|
|
541
|
+
**Evidence**:
|
|
542
|
+
- Error occurs after validation passes
|
|
543
|
+
- Null/undefined error suggests missing check
|
|
544
|
+
- DTO validation doesn't check relationship existence
|
|
545
|
+
|
|
546
|
+
**Data Flow Point**: Service layer validation
|
|
547
|
+
**Affected Layer**: DTO validation
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
### Hypothesis 3: Race Condition
|
|
552
|
+
**Likelihood**: 🟡 Medium
|
|
553
|
+
**Evidence**:
|
|
554
|
+
- Intermittent failure (20% of requests)
|
|
555
|
+
- Timing logs show variable execution order
|
|
556
|
+
- Async operations not properly awaited
|
|
557
|
+
|
|
558
|
+
**Data Flow Point**: Async service calls
|
|
559
|
+
**Affected Layer**: Service orchestration
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
### Hypothesis 4: Stale Cache
|
|
564
|
+
**Likelihood**: 🟢 Low
|
|
565
|
+
**Evidence**:
|
|
566
|
+
- Works after service restart
|
|
567
|
+
- Some users affected, others not
|
|
568
|
+
- Caching layer detected in stack
|
|
569
|
+
|
|
570
|
+
**Data Flow Point**: Cache → Database
|
|
571
|
+
**Affected Layer**: Caching middleware
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
### Hypothesis 5: State Synchronization (UI)
|
|
576
|
+
**Likelihood**: 🟡 Medium (if UI bug)
|
|
577
|
+
**Evidence**:
|
|
578
|
+
- UI shows stale data
|
|
579
|
+
- API returns correct data
|
|
580
|
+
- State update logs show closure issue
|
|
581
|
+
- Pattern matches: react-state-stale-closure-2025-09
|
|
582
|
+
|
|
583
|
+
**Data Flow Point**: API → UI State
|
|
584
|
+
**Affected Layer**: Frontend state management
|
|
585
|
+
|
|
586
|
+
---
|
|
587
|
+
|
|
588
|
+
### Hypothesis 6: Transaction Isolation
|
|
589
|
+
**Likelihood**: 🟢 Low
|
|
590
|
+
**Evidence**:
|
|
591
|
+
- Concurrent requests show different results
|
|
592
|
+
- Database isolation level: READ_COMMITTED
|
|
593
|
+
- Phantom read possible
|
|
594
|
+
|
|
595
|
+
**Data Flow Point**: Database transactions
|
|
596
|
+
**Affected Layer**: Database
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
### Hypothesis 7: Authentication/Authorization Issue
|
|
601
|
+
**Likelihood**: 🟢 Low
|
|
602
|
+
**Evidence**:
|
|
603
|
+
- Works for admin users
|
|
604
|
+
- Fails for regular users
|
|
605
|
+
- Permission check logs unclear
|
|
606
|
+
|
|
607
|
+
**Data Flow Point**: Middleware → Service
|
|
608
|
+
**Affected Layer**: Authorization middleware
|
|
609
|
+
````
|
|
610
|
+
|
|
611
|
+
### Step 4.2: Distill to 1-2 Most Likely Causes
|
|
612
|
+
|
|
613
|
+
Apply systematic analysis to narrow down:
|
|
614
|
+
|
|
615
|
+
**Distillation Criteria**:
|
|
616
|
+
|
|
617
|
+
1. **Evidence Strength**: How much diagnostic data supports this?
|
|
618
|
+
2. **Architecture Alignment**: Does data-model.md confirm this pattern?
|
|
619
|
+
3. **Cross-Project Memory**: Have we seen this exact pattern before?
|
|
620
|
+
4. **Data Flow Analysis**: Does timeline support this hypothesis?
|
|
621
|
+
5. **Probability**: Based on error type and context
|
|
622
|
+
|
|
623
|
+
```markdown
|
|
624
|
+
## Distilled Root Causes
|
|
625
|
+
|
|
626
|
+
### Primary Hypothesis: N+1 Query Problem (90% confidence)
|
|
627
|
+
|
|
628
|
+
**Why this is most likely**:
|
|
629
|
+
✅ Diagnostic logs show sequential queries (User → Subscription → Payment)
|
|
630
|
+
✅ Architecture analysis confirms no eager loading in UserRepository
|
|
631
|
+
✅ Cross-project memory shows identical pattern: n1-query-user-relations-2025-08
|
|
632
|
+
✅ Error occurs exactly at point where subscription relationship accessed
|
|
633
|
+
✅ Performance metrics show query count = number of users + 1
|
|
634
|
+
|
|
635
|
+
**Evidence from data-model.md**:
|
|
636
|
+
|
|
637
|
+
- User entity has `@relation` to Subscription (Prisma)
|
|
638
|
+
- No `include: { subscription: true }` in repository queries
|
|
639
|
+
- Service layer expects subscription to be loaded
|
|
640
|
+
|
|
641
|
+
**Data Flow Breakdown**:
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
1. API receives request (T+0ms)
|
|
645
|
+
2. Service calls UserRepository.findById(userId) (T+15ms)
|
|
646
|
+
→ Query 1: SELECT \* FROM users WHERE id = $1
|
|
647
|
+
3. Service accesses user.subscription (T+23ms)
|
|
648
|
+
→ Query 2: SELECT \* FROM subscriptions WHERE user_id = $1 ❌ NOT EXECUTED
|
|
649
|
+
4. Error: Cannot read property 'subscription_id' of undefined (T+45ms)
|
|
650
|
+
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
**Fix Strategy**:
|
|
654
|
+
- Add eager loading: `include: { subscription: true }` in repository
|
|
655
|
+
- OR: Modify service to handle lazy loading
|
|
656
|
+
- OR: Use explicit join in query
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
### Secondary Hypothesis: Missing Null Check (10% confidence)
|
|
661
|
+
|
|
662
|
+
**Why this is possible (but less likely)**:
|
|
663
|
+
⚠️ Error message suggests undefined access
|
|
664
|
+
⚠️ DTO validation doesn't check subscription existence
|
|
665
|
+
❌ Doesn't explain why it works sometimes
|
|
666
|
+
❌ Doesn't match timing pattern in logs
|
|
667
|
+
|
|
668
|
+
**If Primary Fix Doesn't Work**:
|
|
669
|
+
Add validation: `if (!user.subscription) throw new ValidationError(...)`
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### Step 4.3: Validate Hypotheses with Diagnostic Data
|
|
673
|
+
|
|
674
|
+
Cross-reference distilled hypotheses with diagnostic logs:
|
|
675
|
+
|
|
676
|
+
```markdown
|
|
677
|
+
## Hypothesis Validation
|
|
678
|
+
|
|
679
|
+
### Testing Primary Hypothesis: N+1 Query
|
|
680
|
+
|
|
681
|
+
**Diagnostic Evidence Check**:
|
|
682
|
+
✅ Log line 45: "Query executing: SELECT _ FROM users WHERE id = $1"
|
|
683
|
+
✅ Log line 67: "Accessing user.subscription"
|
|
684
|
+
✅ Log line 68: ERROR - "Cannot read property 'subscription_id' of undefined"
|
|
685
|
+
❌ No log for: "SELECT _ FROM subscriptions WHERE user_id = $1"
|
|
686
|
+
|
|
687
|
+
**Conclusion**: Hypothesis validated - subscription never loaded from database
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
### Testing Secondary Hypothesis: Missing Null Check
|
|
692
|
+
|
|
693
|
+
**Diagnostic Evidence Check**:
|
|
694
|
+
⚠️ Validation passed but didn't check subscription
|
|
695
|
+
⚠️ Could prevent error but doesn't explain root cause
|
|
696
|
+
|
|
697
|
+
**Conclusion**: Valid defensive measure but not root cause
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
## Phase 5: User Confirmation (CRITICAL - MANDATORY)
|
|
701
|
+
|
|
702
|
+
### Step 5.1: Present Diagnosis to User
|
|
703
|
+
|
|
704
|
+
**STOP HERE** - Do NOT implement fix until user confirms
|
|
705
|
+
|
|
706
|
+
````markdown
|
|
707
|
+
## 🔍 Bug Diagnosis Report
|
|
708
|
+
|
|
709
|
+
### Bug Summary
|
|
710
|
+
|
|
711
|
+
**Issue**: Payment processing fails for subscription users
|
|
712
|
+
**Error**: `Cannot read property 'subscription_id' of undefined`
|
|
713
|
+
**Frequency**: 100% reproducible
|
|
714
|
+
**Impact**: Critical - blocking all subscription payments
|
|
715
|
+
|
|
716
|
+
---
|
|
717
|
+
|
|
718
|
+
### 🎯 Root Cause Identified
|
|
719
|
+
|
|
720
|
+
**Primary Cause: N+1 Query Pattern (90% confidence)**
|
|
721
|
+
|
|
722
|
+
**Explanation**:
|
|
723
|
+
The UserRepository loads User entities without their Subscription relationships. When the PaymentService tries to access `user.subscription.subscription_id`, the subscription is `undefined` because it was never loaded from the database.
|
|
724
|
+
|
|
725
|
+
**Evidence**:
|
|
726
|
+
|
|
727
|
+
1. Diagnostic logs show User query executed, but no Subscription query
|
|
728
|
+
2. Architecture analysis (data-model.md) confirms no eager loading configured
|
|
729
|
+
3. Cross-project memory shows identical pattern from previous project (n1-query-user-relations-2025-08)
|
|
730
|
+
4. Error occurs exactly when accessing unloaded relationship
|
|
731
|
+
|
|
732
|
+
**Architecture Context** (from data-model.md):
|
|
733
|
+
|
|
734
|
+
```typescript
|
|
735
|
+
// Current implementation (BROKEN)
|
|
736
|
+
const user = await userRepository.findById(userId)
|
|
737
|
+
// user.subscription is undefined - relationship not loaded!
|
|
738
|
+
const subscriptionId = user.subscription.subscription_id // ❌ ERROR
|
|
739
|
+
|
|
740
|
+
// Expected implementation
|
|
741
|
+
const user = await userRepository.findById(userId, {
|
|
742
|
+
include: { subscription: true },
|
|
743
|
+
})
|
|
744
|
+
const subscriptionId = user.subscription.subscription_id // ✅ WORKS
|
|
745
|
+
```
|
|
746
|
+
````
|
|
747
|
+
|
|
748
|
+
---
|
|
749
|
+
|
|
750
|
+
### 🔧 Proposed Fix
|
|
751
|
+
|
|
752
|
+
**Location**: `src/repositories/user.repository.ts`
|
|
753
|
+
**Change**: Add eager loading for subscription relationship
|
|
754
|
+
|
|
755
|
+
```diff
|
|
756
|
+
async findById(userId: string) {
|
|
757
|
+
return await this.db.user.findUnique({
|
|
758
|
+
where: { id: userId },
|
|
759
|
+
+ include: {
|
|
760
|
+
+ subscription: true
|
|
761
|
+
+ }
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
**Alternative Fix** (if performance concern):
|
|
767
|
+
Add explicit method for payment context:
|
|
768
|
+
|
|
769
|
+
```typescript
|
|
770
|
+
async findByIdWithSubscription(userId: string) {
|
|
771
|
+
return await this.db.user.findUnique({
|
|
772
|
+
where: { id: userId },
|
|
773
|
+
include: { subscription: true }
|
|
774
|
+
});
|
|
775
|
+
}
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
---
|
|
779
|
+
|
|
780
|
+
### ⚠️ Secondary Concern
|
|
781
|
+
|
|
782
|
+
**Missing null check** (defensive measure):
|
|
783
|
+
Even with fix, should handle case where user has no subscription:
|
|
784
|
+
|
|
785
|
+
```typescript
|
|
786
|
+
if (!user.subscription) {
|
|
787
|
+
throw new ValidationError("User does not have an active subscription")
|
|
788
|
+
}
|
|
789
|
+
```
|
|
790
|
+
|
|
791
|
+
---
|
|
792
|
+
|
|
793
|
+
### 📊 Diagnostic Data Location
|
|
794
|
+
|
|
795
|
+
Full diagnostic logs saved to:
|
|
796
|
+
|
|
797
|
+
- `/docs/tasks/fixs/26-10-2025/subscription-payment-failure/diagnostic-logs.md`
|
|
798
|
+
- `/docs/tasks/fixs/26-10-2025/subscription-payment-failure/context.md`
|
|
799
|
+
|
|
800
|
+
---
|
|
801
|
+
|
|
802
|
+
### ❓ Confirmation Required
|
|
803
|
+
|
|
804
|
+
**Does this diagnosis match your understanding of the issue?**
|
|
805
|
+
|
|
806
|
+
Options:
|
|
807
|
+
|
|
808
|
+
1. ✅ **Yes, proceed with fix** - Implement the proposed solution
|
|
809
|
+
2. 🔄 **Need more data** - Add additional diagnostics
|
|
810
|
+
3. ❌ **Diagnosis seems wrong** - Re-analyze with different approach
|
|
811
|
+
4. 💬 **Have additional context** - Share and re-evaluate
|
|
812
|
+
|
|
813
|
+
Please confirm before I proceed with the fix.
|
|
814
|
+
|
|
815
|
+
````
|
|
816
|
+
|
|
817
|
+
### Step 5.2: Wait for User Response
|
|
818
|
+
|
|
819
|
+
**DO NOT PROCEED** until user explicitly confirms:
|
|
820
|
+
- ✅ "Yes, fix it"
|
|
821
|
+
- ✅ "Diagnosis looks correct, proceed"
|
|
822
|
+
- ✅ "Implement the fix"
|
|
823
|
+
|
|
824
|
+
**If user provides additional context**:
|
|
825
|
+
- Update diagnostic logs
|
|
826
|
+
- Re-run hypothesis generation
|
|
827
|
+
- Present updated diagnosis
|
|
828
|
+
|
|
829
|
+
**If user says diagnosis is wrong**:
|
|
830
|
+
- Ask for specific feedback
|
|
831
|
+
- Add more targeted diagnostics
|
|
832
|
+
- Re-analyze with new information
|
|
833
|
+
|
|
834
|
+
## Phase 6: Implement Fix (ONLY AFTER CONFIRMATION)
|
|
835
|
+
|
|
836
|
+
### Step 6.1: Create Fix Implementation Plan
|
|
837
|
+
|
|
838
|
+
```markdown
|
|
839
|
+
# Fix Implementation Plan
|
|
840
|
+
|
|
841
|
+
## Changes Required
|
|
842
|
+
|
|
843
|
+
### 1. Repository Layer
|
|
844
|
+
**File**: `src/repositories/user.repository.ts`
|
|
845
|
+
**Lines**: 25-30
|
|
846
|
+
**Change**: Add eager loading for subscription relationship
|
|
847
|
+
|
|
848
|
+
### 2. Service Layer (Defensive)
|
|
849
|
+
**File**: `src/services/payment.service.ts`
|
|
850
|
+
**Lines**: 45-47
|
|
851
|
+
**Change**: Add null check for subscription
|
|
852
|
+
|
|
853
|
+
### 3. Tests
|
|
854
|
+
**Files**:
|
|
855
|
+
- `src/repositories/user.repository.test.ts` (add eager loading tests)
|
|
856
|
+
- `src/services/payment.service.test.ts` (add null subscription tests)
|
|
857
|
+
|
|
858
|
+
### 4. Documentation
|
|
859
|
+
**File**: `docs/architecture/data-model.md`
|
|
860
|
+
**Change**: Document eager loading pattern for User queries
|
|
861
|
+
|
|
862
|
+
## Risk Assessment
|
|
863
|
+
- **Risk Level**: Low
|
|
864
|
+
- **Affected Users**: All subscription users
|
|
865
|
+
- **Rollback Plan**: Revert single commit
|
|
866
|
+
- **Testing Required**: Unit + Integration tests
|
|
867
|
+
````
|
|
868
|
+
|
|
869
|
+
### Step 6.2: Implement Fix with Tests
|
|
870
|
+
|
|
871
|
+
**Repository Fix**:
|
|
872
|
+
|
|
873
|
+
```typescript
|
|
874
|
+
// src/repositories/user.repository.ts
|
|
875
|
+
async findById(userId: string): Promise<User | null> {
|
|
876
|
+
return await this.db.user.findUnique({
|
|
877
|
+
where: { id: userId },
|
|
878
|
+
include: {
|
|
879
|
+
subscription: true // ✅ FIX: Eager load subscription
|
|
880
|
+
}
|
|
881
|
+
});
|
|
882
|
+
}
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
**Service Defensive Check**:
|
|
886
|
+
|
|
887
|
+
```typescript
|
|
888
|
+
// src/services/payment.service.ts
|
|
889
|
+
async processSubscriptionPayment(userId: string, amount: number) {
|
|
890
|
+
const user = await this.userRepository.findById(userId);
|
|
891
|
+
|
|
892
|
+
if (!user) {
|
|
893
|
+
throw new NotFoundError('User not found');
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
// ✅ FIX: Add defensive null check
|
|
897
|
+
if (!user.subscription) {
|
|
898
|
+
throw new ValidationError('User does not have an active subscription');
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
const subscriptionId = user.subscription.subscription_id;
|
|
902
|
+
// ... process payment
|
|
903
|
+
}
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
**Tests**:
|
|
907
|
+
|
|
908
|
+
```typescript
|
|
909
|
+
// src/repositories/user.repository.test.ts
|
|
910
|
+
describe("UserRepository.findById", () => {
|
|
911
|
+
it("should load subscription relationship", async () => {
|
|
912
|
+
const user = await repository.findById("user-123")
|
|
913
|
+
|
|
914
|
+
expect(user).toBeDefined()
|
|
915
|
+
expect(user.subscription).toBeDefined() // ✅ Verify eager loading
|
|
916
|
+
expect(user.subscription.subscription_id).toBe("sub-456")
|
|
917
|
+
})
|
|
918
|
+
})
|
|
919
|
+
|
|
920
|
+
// src/services/payment.service.test.ts
|
|
921
|
+
describe("PaymentService.processSubscriptionPayment", () => {
|
|
922
|
+
it("should throw error when user has no subscription", async () => {
|
|
923
|
+
// Setup user without subscription
|
|
924
|
+
await expect(service.processSubscriptionPayment("user-no-sub", 100)).rejects.toThrow(
|
|
925
|
+
"User does not have an active subscription",
|
|
926
|
+
)
|
|
927
|
+
})
|
|
928
|
+
})
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
### Step 6.3: Remove Diagnostic Logs
|
|
932
|
+
|
|
933
|
+
**IMPORTANT**: Clean up diagnostic instrumentation added in Phase 2
|
|
934
|
+
|
|
935
|
+
```markdown
|
|
936
|
+
## Diagnostic Cleanup Checklist
|
|
937
|
+
|
|
938
|
+
### Files Modified for Diagnostics
|
|
939
|
+
|
|
940
|
+
- [ ] `src/repositories/user.repository.ts` - Remove debug logs
|
|
941
|
+
- [ ] `src/services/payment.service.ts` - Remove debug logs
|
|
942
|
+
- [ ] `app/api/payments/route.ts` - Remove debug logs
|
|
943
|
+
|
|
944
|
+
### Cleanup Verification
|
|
945
|
+
|
|
946
|
+
- [ ] No `console.log('[DEBUG]` statements remain
|
|
947
|
+
- [ ] No temporary error handlers added
|
|
948
|
+
- [ ] No performance timing code left
|
|
949
|
+
- [ ] Original error handling restored
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
**Keep only**:
|
|
953
|
+
|
|
954
|
+
- Existing production logging
|
|
955
|
+
- New defensive null checks (these are permanent improvements)
|
|
956
|
+
|
|
957
|
+
## Phase 7: Testing & Verification (10-15 min)
|
|
958
|
+
|
|
959
|
+
### Step 7.1: Test Fix Locally
|
|
960
|
+
|
|
961
|
+
```bash
|
|
962
|
+
# Run affected tests
|
|
963
|
+
npm test -- user.repository.test.ts
|
|
964
|
+
npm test -- payment.service.test.ts
|
|
965
|
+
|
|
966
|
+
# Run integration tests
|
|
967
|
+
npm test -- payment.integration.test.ts
|
|
968
|
+
|
|
969
|
+
# Build verification
|
|
970
|
+
npm run build
|
|
971
|
+
|
|
972
|
+
# Type checking
|
|
973
|
+
npm run type-check
|
|
974
|
+
```
|
|
975
|
+
|
|
976
|
+
### Step 7.2: Verify Bug Resolution
|
|
977
|
+
|
|
978
|
+
Reproduce original bug scenario:
|
|
979
|
+
|
|
980
|
+
```markdown
|
|
981
|
+
## Verification Report
|
|
982
|
+
|
|
983
|
+
### Original Bug Scenario
|
|
984
|
+
|
|
985
|
+
1. User with subscription_id: sub-456
|
|
986
|
+
2. Attempt payment processing
|
|
987
|
+
3. Expected: Payment processes successfully
|
|
988
|
+
4. Previous Result: Error "Cannot read property 'subscription_id' of undefined"
|
|
989
|
+
|
|
990
|
+
### After Fix
|
|
991
|
+
|
|
992
|
+
1. User with subscription_id: sub-456
|
|
993
|
+
2. Attempt payment processing
|
|
994
|
+
3. Result: ✅ Payment processed successfully
|
|
995
|
+
4. Subscription loaded: ✅ Yes
|
|
996
|
+
5. Error: ❌ None
|
|
997
|
+
|
|
998
|
+
### Edge Cases Tested
|
|
999
|
+
|
|
1000
|
+
- [ ] User without subscription → Proper validation error
|
|
1001
|
+
- [ ] User with cancelled subscription → Handled correctly
|
|
1002
|
+
- [ ] Multiple concurrent requests → No race condition
|
|
1003
|
+
- [ ] Null/undefined userId → Proper error handling
|
|
1004
|
+
|
|
1005
|
+
### Performance Impact
|
|
1006
|
+
|
|
1007
|
+
- Before: 1 query per user (missing relationship)
|
|
1008
|
+
- After: 1 query per user (with join)
|
|
1009
|
+
- Impact: Minimal (same query count, better result)
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
### Step 7.3: Automated Test Suite
|
|
1013
|
+
|
|
1014
|
+
```bash
|
|
1015
|
+
# Run full test suite
|
|
1016
|
+
npm test
|
|
1017
|
+
|
|
1018
|
+
# Expected results:
|
|
1019
|
+
✅ All existing tests pass
|
|
1020
|
+
✅ New tests for fix pass
|
|
1021
|
+
✅ No regressions detected
|
|
1022
|
+
```
|
|
1023
|
+
|
|
1024
|
+
## Phase 8: Documentation & Memory (10 min)
|
|
1025
|
+
|
|
1026
|
+
### Step 8.1: Update data-model.md
|
|
1027
|
+
|
|
1028
|
+
If pattern or best practice identified, update architecture docs:
|
|
1029
|
+
|
|
1030
|
+
````markdown
|
|
1031
|
+
## User Entity Query Patterns
|
|
1032
|
+
|
|
1033
|
+
### ⚠️ Important: Always Eager Load Relationships
|
|
1034
|
+
|
|
1035
|
+
When querying User entities in payment context, ALWAYS include subscription:
|
|
1036
|
+
|
|
1037
|
+
```typescript
|
|
1038
|
+
// ✅ CORRECT
|
|
1039
|
+
const user = await userRepository.findById(userId, {
|
|
1040
|
+
include: { subscription: true },
|
|
1041
|
+
})
|
|
1042
|
+
|
|
1043
|
+
// ❌ INCORRECT - Will cause errors in payment processing
|
|
1044
|
+
const user = await userRepository.findById(userId)
|
|
1045
|
+
```
|
|
1046
|
+
````
|
|
1047
|
+
|
|
1048
|
+
**Why**: Payment service requires subscription data. Lazy loading causes undefined access errors.
|
|
1049
|
+
|
|
1050
|
+
````
|
|
1051
|
+
|
|
1052
|
+
### Step 8.2: Create Bug Resolution Document
|
|
1053
|
+
|
|
1054
|
+
Create resolution document following documentation standards:
|
|
1055
|
+
- **Frontend bugs:** `docs/tasks/frontend/DD-MM-YYYY/<semantic-bug-id>/resolution.md`
|
|
1056
|
+
- **Backend bugs:** `docs/tasks/backend/DD-MM-YYYY/<semantic-bug-id>/resolution.md`
|
|
1057
|
+
|
|
1058
|
+
```markdown
|
|
1059
|
+
# Bug Resolution: Subscription Payment Failure
|
|
1060
|
+
|
|
1061
|
+
## Summary
|
|
1062
|
+
Fixed N+1 query pattern causing undefined access to subscription relationship in payment processing.
|
|
1063
|
+
|
|
1064
|
+
## Root Cause
|
|
1065
|
+
UserRepository was loading User entities without eager loading the Subscription relationship. When PaymentService accessed `user.subscription.subscription_id`, the subscription was undefined.
|
|
1066
|
+
|
|
1067
|
+
## Fix Implemented
|
|
1068
|
+
1. Added eager loading to UserRepository.findById()
|
|
1069
|
+
2. Added defensive null check in PaymentService
|
|
1070
|
+
3. Updated tests to verify relationship loading
|
|
1071
|
+
4. Documented pattern in data-model.md
|
|
1072
|
+
|
|
1073
|
+
## Files Changed
|
|
1074
|
+
- `src/repositories/user.repository.ts` (lines 25-30) - Added eager loading
|
|
1075
|
+
- `src/services/payment.service.ts` (lines 45-47) - Added null check
|
|
1076
|
+
- `src/repositories/user.repository.test.ts` (new test)
|
|
1077
|
+
- `src/services/payment.service.test.ts` (new test)
|
|
1078
|
+
- `docs/architecture/data-model.md` (lines 156-165) - Documented pattern
|
|
1079
|
+
|
|
1080
|
+
## Testing
|
|
1081
|
+
- ✅ Unit tests passing (47/47)
|
|
1082
|
+
- ✅ Integration tests passing (12/12)
|
|
1083
|
+
- ✅ Manual verification successful
|
|
1084
|
+
- ✅ No regressions detected
|
|
1085
|
+
|
|
1086
|
+
## Performance Impact
|
|
1087
|
+
- Minimal - same query count, better result structure
|
|
1088
|
+
- No additional database round trips
|
|
1089
|
+
|
|
1090
|
+
## Prevention
|
|
1091
|
+
- Updated repository query pattern documentation
|
|
1092
|
+
- Added tests for relationship loading
|
|
1093
|
+
- Documented in data-model.md for future reference
|
|
1094
|
+
````
|
|
1095
|
+
|
|
1096
|
+
### Step 8.3: Write to Cross-Project Memory
|
|
1097
|
+
|
|
1098
|
+
**Evaluate**: Is this bug reusable knowledge for other projects?
|
|
1099
|
+
|
|
1100
|
+
**Write to `/Users/besi/Code/memory/failure_patterns.json`**:
|
|
1101
|
+
|
|
1102
|
+
```json
|
|
1103
|
+
{
|
|
1104
|
+
"id": "orm-missing-eager-loading-2025-10",
|
|
1105
|
+
"date": "2025-10-26",
|
|
1106
|
+
"problem": "ORM relationship access fails with undefined error due to missing eager loading",
|
|
1107
|
+
"symptoms": [
|
|
1108
|
+
"Cannot read property 'X' of undefined when accessing relationships",
|
|
1109
|
+
"Works in some contexts but not others",
|
|
1110
|
+
"Error occurs when accessing nested relationship properties",
|
|
1111
|
+
"Relationship exists in database but not loaded in object"
|
|
1112
|
+
],
|
|
1113
|
+
"root_cause": "ORM lazy loading by default - relationships not loaded unless explicitly included. Accessing relationship without eager loading or explicit load causes undefined access.",
|
|
1114
|
+
"solution": "Add eager loading to repository queries: include/relations/populate depending on ORM. For frequently accessed relationships, add to default query. For context-specific needs, create dedicated repository methods.",
|
|
1115
|
+
"technologies": ["Prisma", "TypeORM", "Sequelize", "Mongoose", "ORM"],
|
|
1116
|
+
"prevention": "1. Document relationship loading patterns in data-model.md. 2. Add tests verifying relationships are loaded. 3. Use TypeScript strict mode to catch undefined access. 4. Add defensive null checks in services.",
|
|
1117
|
+
"detection": "Add diagnostic logs showing query execution and result structure. Check if relationship query executed. Verify object structure matches expectations.",
|
|
1118
|
+
"similar_patterns": ["n1-query-user-relations-2025-08", "lazy-loading-unexpected-behavior"]
|
|
1119
|
+
}
|
|
1120
|
+
```
|
|
1121
|
+
|
|
1122
|
+
**Update files-edited.md**:
|
|
1123
|
+
|
|
1124
|
+
```markdown
|
|
1125
|
+
## Cross-Project Memory Updates
|
|
1126
|
+
|
|
1127
|
+
### Failure Patterns
|
|
1128
|
+
|
|
1129
|
+
- Added: orm-missing-eager-loading-2025-10
|
|
1130
|
+
- ORM relationship access pattern and fix
|
|
1131
|
+
- Diagnostic approach for lazy loading issues
|
|
1132
|
+
- Prevention strategies for future projects
|
|
1133
|
+
```
|
|
1134
|
+
|
|
1135
|
+
## Phase 9: Final Verification & Cleanup
|
|
1136
|
+
|
|
1137
|
+
### Step 9.1: Create TodoWrite Summary
|
|
1138
|
+
|
|
1139
|
+
```typescript
|
|
1140
|
+
await todoWrite([
|
|
1141
|
+
{
|
|
1142
|
+
id: "gather-context",
|
|
1143
|
+
content: "Gather bug context and read data-model.md",
|
|
1144
|
+
status: "completed",
|
|
1145
|
+
priority: "high",
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
id: "add-diagnostics",
|
|
1149
|
+
content: "Add diagnostic logs and instrumentation",
|
|
1150
|
+
status: "completed",
|
|
1151
|
+
priority: "high",
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
id: "reproduce-bug",
|
|
1155
|
+
content: "Reproduce bug and collect diagnostic data",
|
|
1156
|
+
status: "completed",
|
|
1157
|
+
priority: "high",
|
|
1158
|
+
},
|
|
1159
|
+
{
|
|
1160
|
+
id: "generate-hypotheses",
|
|
1161
|
+
content: "Generate 5-7 hypotheses for root cause",
|
|
1162
|
+
status: "completed",
|
|
1163
|
+
priority: "high",
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
id: "distill-causes",
|
|
1167
|
+
content: "Distill to 1-2 most likely causes",
|
|
1168
|
+
status: "completed",
|
|
1169
|
+
priority: "high",
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
id: "user-confirmation",
|
|
1173
|
+
content: "Present diagnosis and get user confirmation",
|
|
1174
|
+
status: "completed",
|
|
1175
|
+
priority: "high",
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
id: "implement-fix",
|
|
1179
|
+
content: "Implement fix with tests",
|
|
1180
|
+
status: "completed",
|
|
1181
|
+
priority: "high",
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
id: "verify-fix",
|
|
1185
|
+
content: "Test and verify bug resolution",
|
|
1186
|
+
status: "completed",
|
|
1187
|
+
priority: "high",
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
id: "cleanup-diagnostics",
|
|
1191
|
+
content: "Remove diagnostic instrumentation",
|
|
1192
|
+
status: "completed",
|
|
1193
|
+
priority: "medium",
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
id: "update-docs",
|
|
1197
|
+
content: "Update data-model.md and create resolution doc",
|
|
1198
|
+
status: "completed",
|
|
1199
|
+
priority: "high",
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
id: "update-memory",
|
|
1203
|
+
content: "Write learnings to cross-project memory",
|
|
1204
|
+
status: "completed",
|
|
1205
|
+
priority: "medium",
|
|
1206
|
+
},
|
|
1207
|
+
])
|
|
1208
|
+
```
|
|
1209
|
+
|
|
1210
|
+
### Step 9.2: Final Checklist
|
|
1211
|
+
|
|
1212
|
+
```markdown
|
|
1213
|
+
## Bug Fix Completion Checklist
|
|
1214
|
+
|
|
1215
|
+
### Diagnosis Phase
|
|
1216
|
+
|
|
1217
|
+
- [x] Architecture documentation read (data-model.md)
|
|
1218
|
+
- [x] Cross-project memory checked for similar bugs
|
|
1219
|
+
- [x] Bug context gathered and documented
|
|
1220
|
+
- [x] Diagnostic instrumentation added
|
|
1221
|
+
- [x] Bug reproduced successfully
|
|
1222
|
+
- [x] Diagnostic data collected
|
|
1223
|
+
|
|
1224
|
+
### Hypothesis Phase
|
|
1225
|
+
|
|
1226
|
+
- [x] 5-7 hypotheses generated
|
|
1227
|
+
- [x] Hypotheses distilled to 1-2 most likely
|
|
1228
|
+
- [x] Validation with diagnostic data completed
|
|
1229
|
+
- [x] Diagnosis presented to user
|
|
1230
|
+
- [x] User confirmed diagnosis
|
|
1231
|
+
|
|
1232
|
+
### Fix Phase
|
|
1233
|
+
|
|
1234
|
+
- [x] Fix implemented with tests
|
|
1235
|
+
- [x] All tests passing
|
|
1236
|
+
- [x] No regressions detected
|
|
1237
|
+
- [x] Diagnostic logs removed
|
|
1238
|
+
- [x] Bug verified as resolved
|
|
1239
|
+
|
|
1240
|
+
### Documentation Phase
|
|
1241
|
+
|
|
1242
|
+
- [x] data-model.md updated with pattern
|
|
1243
|
+
- [x] Resolution document created
|
|
1244
|
+
- [x] files-edited.md created
|
|
1245
|
+
- [x] Cross-project memory updated
|
|
1246
|
+
|
|
1247
|
+
### Quality Gates
|
|
1248
|
+
|
|
1249
|
+
- [x] Fix follows existing patterns
|
|
1250
|
+
- [x] Tests cover edge cases
|
|
1251
|
+
- [x] Documentation is complete
|
|
1252
|
+
- [x] No performance degradation
|
|
1253
|
+
```
|
|
1254
|
+
|
|
1255
|
+
## Success Criteria
|
|
1256
|
+
|
|
1257
|
+
- [x] **Diagnostic-First Approach**: Instrumentation added BEFORE fix
|
|
1258
|
+
- [x] **Hypothesis Generation**: 5-7 hypotheses documented
|
|
1259
|
+
- [x] **Distillation**: Narrowed to 1-2 most likely causes
|
|
1260
|
+
- [x] **User Confirmation**: Explicit approval before fix
|
|
1261
|
+
- [x] **Architecture-Aware**: Used data-model.md for context
|
|
1262
|
+
- [x] **Memory Integration**: Checked and updated cross-project memory
|
|
1263
|
+
- [x] **Testing**: Comprehensive tests added
|
|
1264
|
+
- [x] **Documentation**: Complete resolution documentation
|
|
1265
|
+
- [x] **Cleanup**: All diagnostic code removed
|
|
1266
|
+
|
|
1267
|
+
## Output Example
|
|
1268
|
+
|
|
1269
|
+
### Simple Bug
|
|
1270
|
+
|
|
1271
|
+
```
|
|
1272
|
+
🐛 Bug Diagnosis: Null Pointer in User Service
|
|
1273
|
+
|
|
1274
|
+
📋 Architecture Check:
|
|
1275
|
+
✅ Read /docs/architecture/data-model.md
|
|
1276
|
+
✅ Identified User entity and relationships
|
|
1277
|
+
✅ Found service layer patterns
|
|
1278
|
+
|
|
1279
|
+
🧠 Cross-Project Memory:
|
|
1280
|
+
⚠️ Similar bug: react-state-stale-closure-2025-09
|
|
1281
|
+
|
|
1282
|
+
🔍 Phase 1: Adding Diagnostics
|
|
1283
|
+
✅ Added 8 diagnostic log points
|
|
1284
|
+
✅ Added error boundaries
|
|
1285
|
+
✅ Added state tracking
|
|
1286
|
+
|
|
1287
|
+
📊 Phase 2: Reproduction
|
|
1288
|
+
✅ Bug reproduced (100% success rate)
|
|
1289
|
+
✅ Diagnostic data collected
|
|
1290
|
+
✅ Timeline: Error at T+45ms
|
|
1291
|
+
|
|
1292
|
+
🎯 Phase 3: Hypothesis Generation
|
|
1293
|
+
|
|
1294
|
+
Generated 5 hypotheses:
|
|
1295
|
+
1. 🔴 Missing eager loading (HIGH)
|
|
1296
|
+
2. 🟡 Null validation missing (MEDIUM)
|
|
1297
|
+
3. 🟡 Race condition (MEDIUM)
|
|
1298
|
+
4. 🟢 Cache issue (LOW)
|
|
1299
|
+
5. 🟢 Permission issue (LOW)
|
|
1300
|
+
|
|
1301
|
+
Distilled to:
|
|
1302
|
+
PRIMARY: Missing eager loading (90% confidence)
|
|
1303
|
+
SECONDARY: Null validation (10% confidence)
|
|
1304
|
+
|
|
1305
|
+
📝 Diagnosis Report:
|
|
1306
|
+
┌─────────────────────────────────────────┐
|
|
1307
|
+
│ Root Cause: Missing Eager Loading │
|
|
1308
|
+
│ │
|
|
1309
|
+
│ User.subscription relationship not │
|
|
1310
|
+
│ loaded by default. Service expects │
|
|
1311
|
+
│ it to exist, causing undefined error. │
|
|
1312
|
+
│ │
|
|
1313
|
+
│ Fix: Add include: { subscription: true}│
|
|
1314
|
+
│ to UserRepository.findById() │
|
|
1315
|
+
└─────────────────────────────────────────┘
|
|
1316
|
+
|
|
1317
|
+
❓ Does this diagnosis match your understanding?
|
|
1318
|
+
[Waiting for user confirmation...]
|
|
1319
|
+
|
|
1320
|
+
✅ User confirmed diagnosis
|
|
1321
|
+
|
|
1322
|
+
🔧 Implementing Fix:
|
|
1323
|
+
✅ Updated UserRepository.findById()
|
|
1324
|
+
✅ Added defensive null check
|
|
1325
|
+
✅ Added relationship loading tests
|
|
1326
|
+
✅ All tests passing (47/47)
|
|
1327
|
+
|
|
1328
|
+
🧹 Cleanup:
|
|
1329
|
+
✅ Removed 8 diagnostic log points
|
|
1330
|
+
✅ Restored original error handling
|
|
1331
|
+
|
|
1332
|
+
📝 Documentation:
|
|
1333
|
+
✅ Updated data-model.md with pattern
|
|
1334
|
+
✅ Created resolution document
|
|
1335
|
+
✅ Documented in files-edited.md
|
|
1336
|
+
|
|
1337
|
+
🧠 Memory Updated:
|
|
1338
|
+
✅ Added: orm-missing-eager-loading-2025-10
|
|
1339
|
+
|
|
1340
|
+
🎯 Bug Fixed!
|
|
1341
|
+
```
|
|
1342
|
+
|
|
1343
|
+
### Complex Bug
|
|
1344
|
+
|
|
1345
|
+
```
|
|
1346
|
+
🐛 Bug Diagnosis: Payment Processing Intermittent Failures
|
|
1347
|
+
|
|
1348
|
+
📋 Architecture Check:
|
|
1349
|
+
✅ Read /docs/architecture/data-model.md
|
|
1350
|
+
✅ Analyzed Payment → Subscription → User flow
|
|
1351
|
+
✅ Identified 3 affected services
|
|
1352
|
+
|
|
1353
|
+
🧠 Cross-Project Memory:
|
|
1354
|
+
⚠️ Similar: stripe-webhook-replay-attack-2025-10
|
|
1355
|
+
⚠️ Similar: race-condition-async-payment-2025-07
|
|
1356
|
+
✅ Applied: idempotency-pattern-2025-09
|
|
1357
|
+
|
|
1358
|
+
🔍 Phase 1: Adding Diagnostics (15 min)
|
|
1359
|
+
✅ Added 23 diagnostic log points across 3 layers
|
|
1360
|
+
✅ Added transaction tracking
|
|
1361
|
+
✅ Added timing instrumentation
|
|
1362
|
+
✅ Added state snapshots
|
|
1363
|
+
|
|
1364
|
+
📊 Phase 2: Reproduction (20 min)
|
|
1365
|
+
⚠️ Intermittent: 3 successes, 2 failures in 5 attempts
|
|
1366
|
+
✅ Diagnostic data collected for both scenarios
|
|
1367
|
+
✅ Pattern identified: Fails under concurrent load
|
|
1368
|
+
|
|
1369
|
+
🎯 Phase 3: Hypothesis Generation
|
|
1370
|
+
|
|
1371
|
+
Generated 7 hypotheses:
|
|
1372
|
+
1. 🔴 Race condition in payment status update (HIGH)
|
|
1373
|
+
2. 🔴 Missing database transaction isolation (HIGH)
|
|
1374
|
+
3. 🟡 Webhook replay without idempotency (MEDIUM)
|
|
1375
|
+
4. 🟡 Cache inconsistency (MEDIUM)
|
|
1376
|
+
5. 🟢 Network timeout (LOW)
|
|
1377
|
+
6. 🟢 External API rate limiting (LOW)
|
|
1378
|
+
7. 🟢 Insufficient error handling (LOW)
|
|
1379
|
+
|
|
1380
|
+
Distilled to:
|
|
1381
|
+
PRIMARY: Race condition (85% confidence)
|
|
1382
|
+
- Two concurrent requests update same subscription
|
|
1383
|
+
- Second request reads stale data
|
|
1384
|
+
- Database lacks proper isolation level
|
|
1385
|
+
|
|
1386
|
+
SECONDARY: Missing idempotency (15% confidence)
|
|
1387
|
+
- Could compound race condition
|
|
1388
|
+
- Webhooks might replay
|
|
1389
|
+
|
|
1390
|
+
📝 Diagnosis Report:
|
|
1391
|
+
┌──────────────────────────────────────────┐
|
|
1392
|
+
│ Root Cause: Race Condition │
|
|
1393
|
+
│ │
|
|
1394
|
+
│ Timeline Analysis: │
|
|
1395
|
+
│ Request A (T+0): Read subscription status │
|
|
1396
|
+
│ Request B (T+5): Read subscription status │
|
|
1397
|
+
│ Request A (T+15): Update to 'processing' │
|
|
1398
|
+
│ Request B (T+18): Update to 'processing' │
|
|
1399
|
+
│ Request A (T+25): Update to 'completed' │
|
|
1400
|
+
│ Request B (T+30): Update to 'completed' │
|
|
1401
|
+
│ Result: Duplicate payment processed │
|
|
1402
|
+
│ │
|
|
1403
|
+
│ Fix: Add optimistic locking + transaction│
|
|
1404
|
+
│ isolation level SERIALIZABLE │
|
|
1405
|
+
└──────────────────────────────────────────┘
|
|
1406
|
+
|
|
1407
|
+
Evidence from data-model.md:
|
|
1408
|
+
- Subscription entity has 'status' field
|
|
1409
|
+
- No version field for optimistic locking
|
|
1410
|
+
- No transaction isolation documented
|
|
1411
|
+
- Concurrent access pattern not handled
|
|
1412
|
+
|
|
1413
|
+
❓ Does this diagnosis match your understanding?
|
|
1414
|
+
[Waiting for user confirmation...]
|
|
1415
|
+
|
|
1416
|
+
✅ User confirmed diagnosis
|
|
1417
|
+
|
|
1418
|
+
🔧 Implementing Fix (30 min):
|
|
1419
|
+
✅ Added version field to Subscription entity
|
|
1420
|
+
✅ Implemented optimistic locking
|
|
1421
|
+
✅ Set transaction isolation to SERIALIZABLE
|
|
1422
|
+
✅ Added idempotency key check
|
|
1423
|
+
✅ Added concurrent request tests
|
|
1424
|
+
✅ All tests passing (73/73)
|
|
1425
|
+
|
|
1426
|
+
🧹 Cleanup:
|
|
1427
|
+
✅ Removed 23 diagnostic log points
|
|
1428
|
+
✅ Kept production-level logging
|
|
1429
|
+
✅ Restored normal error handling
|
|
1430
|
+
|
|
1431
|
+
📝 Documentation:
|
|
1432
|
+
✅ Updated data-model.md:
|
|
1433
|
+
- Added version field to ERD
|
|
1434
|
+
- Documented optimistic locking pattern
|
|
1435
|
+
- Added concurrency handling notes
|
|
1436
|
+
✅ Created comprehensive resolution doc
|
|
1437
|
+
✅ Documented all 5 files changed
|
|
1438
|
+
|
|
1439
|
+
🧠 Memory Updated:
|
|
1440
|
+
✅ Added: race-condition-optimistic-locking-fix-2025-10
|
|
1441
|
+
✅ Added: payment-concurrency-pattern-2025-10
|
|
1442
|
+
|
|
1443
|
+
📊 Verification:
|
|
1444
|
+
✅ 100 concurrent requests: 0 failures
|
|
1445
|
+
✅ Load test: 1000 requests, 0 race conditions
|
|
1446
|
+
✅ Performance impact: <5ms overhead
|
|
1447
|
+
|
|
1448
|
+
🎯 Bug Fixed! System now handles concurrency correctly.
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
## Key Principles
|
|
1452
|
+
|
|
1453
|
+
1. **Diagnostic-First**: ALWAYS add instrumentation before fixing
|
|
1454
|
+
2. **Hypothesis-Driven**: Generate multiple theories, validate with data
|
|
1455
|
+
3. **User Confirmation**: NEVER fix without explicit approval
|
|
1456
|
+
4. **Architecture-Aware**: Use data-model.md for deep context
|
|
1457
|
+
5. **Memory-Driven**: Learn from and contribute to cross-project knowledge
|
|
1458
|
+
6. **Evidence-Based**: All conclusions backed by diagnostic data
|
|
1459
|
+
7. **Thorough Testing**: Comprehensive tests for fix and edge cases
|
|
1460
|
+
8. **Clean Cleanup**: Remove all temporary diagnostic code
|
|
1461
|
+
|
|
1462
|
+
## Integration with Existing System
|
|
1463
|
+
|
|
1464
|
+
This command integrates with:
|
|
1465
|
+
|
|
1466
|
+
- **data-model command**: Uses architecture docs for deep context
|
|
1467
|
+
- **add command**: Similar workflow structure and memory integration
|
|
1468
|
+
- **Cross-project memory**: Reads failure patterns, writes bug solutions
|
|
1469
|
+
- **Todo system**: Comprehensive task tracking for diagnosis workflow
|
|
1470
|
+
- **Task documentation**: Follows AGENTS.md bug diagnosis guidelines
|
|
1471
|
+
|
|
1472
|
+
---
|
|
1473
|
+
|
|
1474
|
+
**Ready to diagnose and fix bugs with systematic, evidence-based approach!** 🔍
|