@thierrynakoa/fire-flow 12.2.1 → 13.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/CREDITS.md +25 -0
- package/DOMINION-FLOW-OVERVIEW.md +182 -38
- package/README.md +399 -455
- package/TROUBLESHOOTING.md +264 -264
- package/agents/fire-debugger.md +54 -0
- package/agents/fire-executor.md +1610 -1033
- package/agents/fire-fact-checker.md +1 -1
- package/agents/fire-planner.md +85 -17
- package/agents/fire-project-researcher.md +1 -1
- package/agents/fire-researcher.md +4 -22
- package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
- package/agents/fire-reviewer.md +552 -499
- package/agents/fire-verifier.md +114 -19
- package/bin/cli.js +18 -101
- package/commands/fire-0-orient.md +2 -2
- package/commands/fire-1a-new.md +50 -15
- package/commands/fire-1c-setup.md +33 -5
- package/commands/fire-1d-discuss.md +87 -1
- package/commands/fire-2-plan.md +556 -527
- package/commands/fire-3-execute.md +2046 -1356
- package/commands/fire-4-verify.md +975 -906
- package/commands/fire-5-handoff.md +46 -5
- package/commands/fire-6-resume.md +2 -31
- package/commands/fire-add-new-skill.md +138 -19
- package/commands/fire-autonomous.md +14 -2
- package/commands/fire-complete-milestone.md +1 -1
- package/commands/fire-cost.md +179 -183
- package/commands/fire-debug.md +1 -6
- package/commands/fire-loop-resume.md +2 -2
- package/commands/fire-loop-stop.md +1 -1
- package/commands/fire-loop.md +2 -15
- package/commands/fire-map-codebase.md +1 -1
- package/commands/fire-migrate-database.md +548 -0
- package/commands/fire-new-milestone.md +1 -1
- package/commands/fire-reflect.md +1 -2
- package/commands/fire-research.md +142 -21
- package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
- package/commands/fire-scaffold.md +297 -0
- package/commands/fire-search.md +1 -2
- package/commands/fire-security-scan.md +483 -484
- package/commands/fire-setup.md +359 -0
- package/commands/fire-skill.md +770 -0
- package/commands/fire-skills-diff.md +506 -506
- package/commands/fire-skills-history.md +388 -388
- package/commands/fire-skills-rollback.md +7 -7
- package/commands/fire-skills-sync.md +470 -470
- package/commands/fire-test.md +5 -5
- package/commands/fire-todos.md +1 -1
- package/commands/fire-update.md +5 -5
- package/commands/fire-validate-skills.md +282 -0
- package/commands/fire-vuln-scan.md +492 -493
- package/hooks/run-hook.sh +8 -8
- package/hooks/run-session-end.sh +7 -7
- package/hooks/session-end.sh +90 -90
- package/hooks/session-start.sh +1 -1
- package/package.json +4 -24
- package/plugin.json +7 -7
- package/references/autonomy-levels.md +235 -0
- package/references/behavioral-directives.md +95 -3
- package/references/blocker-tracking.md +1 -1
- package/references/circuit-breaker.md +93 -2
- package/references/context-engineering.md +227 -9
- package/references/honesty-protocols.md +70 -1
- package/references/issue-to-pr-pipeline.md +149 -150
- package/references/metrics-and-trends.md +1 -2
- package/references/research-improvements.md +4 -108
- package/references/sdlc-mapping.md +73 -0
- package/references/state-machine.md +151 -0
- package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
- package/skills-library/SKILLS-INDEX.md +57 -558
- package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
- package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
- package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
- package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
- package/skills-library/_general/automation/settings-gui-generator.md +172 -0
- package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
- package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
- package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
- package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
- package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
- package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
- package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
- package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
- package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
- package/skills-library/_general/frontend/color-token-migration.md +112 -0
- package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
- package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
- package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
- package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
- package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
- package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
- package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
- package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
- package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
- package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
- package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
- package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
- package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
- package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
- package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
- package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
- package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
- package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
- package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
- package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
- package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
- package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
- package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
- package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
- package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
- package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
- package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
- package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
- package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
- package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
- package/skills-library/_general/methodology/dead-code-activation.md +123 -0
- package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
- package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
- package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
- package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
- package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
- package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
- package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
- package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
- package/skills-library/_general/performance/liveclock-extraction.md +112 -0
- package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
- package/skills-library/_general/performance/use-visible-interval.md +131 -0
- package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
- package/skills-library/_quarantine/README.md +30 -0
- package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
- package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
- package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
- package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
- package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
- package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
- package/skills-library/api-patterns/graphql-content-queries.md +708 -0
- package/skills-library/appointment-scheduler-design.md +423 -0
- package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
- package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
- package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
- package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
- package/skills-library/automation/scheduled-content-publishing.md +608 -0
- package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
- package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
- package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
- package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
- package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
- package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
- package/skills-library/cms-patterns/content-branch-preview.md +515 -0
- package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
- package/skills-library/cms-patterns/mdx-component-content.md +649 -0
- package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
- package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
- package/skills-library/complexity-metrics/complexity-divider.md +707 -0
- package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
- package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
- package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
- package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
- package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
- package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
- package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
- package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
- package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
- package/skills-library/creative-multimedia/og-image-generator.md +635 -0
- package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
- package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
- package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
- package/skills-library/creative-multimedia/svg-generation.md +750 -0
- package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
- package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
- package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
- package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
- package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
- package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
- package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
- package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
- package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
- package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
- package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
- package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
- package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
- package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
- package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
- package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
- package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
- package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
- package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
- package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
- package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
- package/skills-library/database-solutions/content-publishing-states.md +631 -0
- package/skills-library/database-solutions/database-schema-designer.md +522 -0
- package/skills-library/database-solutions/er-diagram-components.md +569 -0
- package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
- package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
- package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
- package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
- package/skills-library/database-solutions/normalization-validator.md +778 -0
- package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
- package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
- package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
- package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
- package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
- package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
- package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
- package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
- package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
- package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
- package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
- package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
- package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
- package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
- package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
- package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
- package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
- package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
- package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
- package/skills-library/deployment-security/SECURITY.md +41 -0
- package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
- package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
- package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
- package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
- package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
- package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
- package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
- package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
- package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
- package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
- package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
- package/skills-library/deployment-security/vps-deployment.md +135 -0
- package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
- package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
- package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
- package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
- package/skills-library/document-processing/md-to-word-converter.md +318 -0
- package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
- package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
- package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
- package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
- package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
- package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
- package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
- package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
- package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
- package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
- package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
- package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
- package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
- package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
- package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
- package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
- package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
- package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
- package/skills-library/ecommerce/inventory-stock-management.md +270 -0
- package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
- package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
- package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
- package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
- package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
- package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
- package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
- package/skills-library/excalidraw-diagrams/LICENSE +21 -0
- package/skills-library/excalidraw-diagrams/README.md +178 -0
- package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
- package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
- package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
- package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
- package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
- package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
- package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
- package/skills-library/infrastructure/observability-designer.md +264 -0
- package/skills-library/infrastructure/performance-profiler.md +621 -0
- package/skills-library/installer-wizard-patterns.md +249 -0
- package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
- package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
- package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
- package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
- package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
- package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
- package/skills-library/integrations/headless-cms-architecture.md +484 -0
- package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
- package/skills-library/integrations/payload-cms-patterns.md +674 -0
- package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
- package/skills-library/integrations/rss-podcast-integration.md +300 -0
- package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/marketing/campaign-analytics.md +97 -0
- package/skills-library/marketing/content-creator.md +105 -0
- package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
- package/skills-library/marketing/social-media-analyzer.md +81 -0
- package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
- package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
- package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
- package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
- package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
- package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
- package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
- package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
- package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
- package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
- package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
- package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
- package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
- package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
- package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
- package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
- package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
- package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
- package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
- package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
- package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
- package/skills-library/methodology/tech-debt-tracker.md +570 -0
- package/skills-library/parallel-debug/SKILL.md +60 -0
- package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
- package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
- package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
- package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
- package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
- package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
- package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
- package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
- package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
- package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
- package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
- package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
- package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
- package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
- package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
- package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
- package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
- package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
- package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
- package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
- package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
- package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
- package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
- package/skills-library/security/admin-deletion-safety.md +396 -0
- package/skills-library/security/application-vuln-patterns.md +477 -0
- package/skills-library/security/env-secrets-manager.md +686 -0
- package/skills-library/security/secure-ai-application-templates.md +347 -0
- package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
- package/skills-library/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
- package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
- package/skills-library/system-context/SKILL.md +40 -0
- package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
- package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
- package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
- package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
- package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
- package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
- package/skills-library/testing/playwright-api-security-tests.md +202 -0
- package/skills-library/toolbox/SKILL.md +84 -0
- package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
- package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
- package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
- package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
- package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
- package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills-library/wordpress-style-theme-components.md +1526 -0
- package/templates/ASSUMPTIONS.md +1 -1
- package/templates/DECISION_LOG.md +0 -1
- package/templates/phase-prompt.md +1 -1
- package/templates/phoenix-comparison.md +6 -6
- package/templates/skill-api-integration.md +106 -0
- package/templates/skill-architecture-pattern.md +92 -0
- package/templates/skill-debug-pattern.md +98 -0
- package/templates/skill-devops-recipe.md +107 -0
- package/templates/skill-general.md +65 -0
- package/templates/skill-ui-component.md +113 -0
- package/tools/uat-runner.py +179 -0
- package/version.json +7 -3
- package/workflows/handoff-session.md +2 -2
- package/workflows/new-project.md +2 -2
- package/workflows/plan-phase.md +1 -1
- package/.claude-plugin/plugin.json +0 -64
- package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
- package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
- package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
- package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
- package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
- package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
- package/skills-library/specialists/api-architecture/api-designer.md +0 -49
- package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
- package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
- package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
- package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
- package/skills-library/specialists/backend/django-expert.md +0 -52
- package/skills-library/specialists/backend/fastapi-expert.md +0 -52
- package/skills-library/specialists/backend/laravel-specialist.md +0 -52
- package/skills-library/specialists/backend/nestjs-expert.md +0 -51
- package/skills-library/specialists/backend/rails-expert.md +0 -53
- package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
- package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
- package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
- package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
- package/skills-library/specialists/data-ml/rag-architect.md +0 -51
- package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
- package/skills-library/specialists/frontend/angular-architect.md +0 -52
- package/skills-library/specialists/frontend/flutter-expert.md +0 -51
- package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
- package/skills-library/specialists/frontend/react-native-expert.md +0 -50
- package/skills-library/specialists/frontend/vue-expert.md +0 -51
- package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
- package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
- package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
- package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
- package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
- package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
- package/skills-library/specialists/languages/cpp-pro.md +0 -74
- package/skills-library/specialists/languages/csharp-developer.md +0 -69
- package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
- package/skills-library/specialists/languages/golang-pro.md +0 -51
- package/skills-library/specialists/languages/java-architect.md +0 -49
- package/skills-library/specialists/languages/javascript-pro.md +0 -68
- package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
- package/skills-library/specialists/languages/php-pro.md +0 -49
- package/skills-library/specialists/languages/python-pro.md +0 -52
- package/skills-library/specialists/languages/react-expert.md +0 -51
- package/skills-library/specialists/languages/rust-engineer.md +0 -50
- package/skills-library/specialists/languages/sql-pro.md +0 -56
- package/skills-library/specialists/languages/swift-expert.md +0 -69
- package/skills-library/specialists/languages/typescript-pro.md +0 -51
- package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
- package/skills-library/specialists/platform/embedded-systems.md +0 -53
- package/skills-library/specialists/platform/game-developer.md +0 -53
- package/skills-library/specialists/platform/salesforce-developer.md +0 -53
- package/skills-library/specialists/platform/shopify-expert.md +0 -49
- package/skills-library/specialists/platform/wordpress-pro.md +0 -49
- package/skills-library/specialists/quality/code-documenter.md +0 -51
- package/skills-library/specialists/quality/code-reviewer.md +0 -67
- package/skills-library/specialists/quality/debugging-wizard.md +0 -51
- package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
- package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
- package/skills-library/specialists/quality/playwright-expert.md +0 -65
- package/skills-library/specialists/quality/spec-miner.md +0 -56
- package/skills-library/specialists/quality/test-master.md +0 -65
- package/skills-library/specialists/security/secure-code-guardian.md +0 -55
- package/skills-library/specialists/security/security-reviewer.md +0 -53
- package/skills-library/specialists/workflow/architecture-designer.md +0 -53
- package/skills-library/specialists/workflow/cli-developer.md +0 -70
- package/skills-library/specialists/workflow/feature-forge.md +0 -65
- package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
- package/skills-library/specialists/workflow/the-fool.md +0 -62
- /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
# Performance Profiler
|
|
2
|
+
|
|
3
|
+
**Tier:** POWERFUL
|
|
4
|
+
**Category:** Engineering
|
|
5
|
+
**Domain:** Performance Engineering
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Systematic performance profiling for Node.js, Python, and Go applications. Identifies CPU, memory, and I/O bottlenecks; generates flamegraphs; analyzes bundle sizes; optimizes database queries; detects memory leaks; and runs load tests with k6 and Artillery. Always measures before and after.
|
|
12
|
+
|
|
13
|
+
## Core Capabilities
|
|
14
|
+
|
|
15
|
+
- **CPU profiling** — flamegraphs for Node.js, py-spy for Python, pprof for Go
|
|
16
|
+
- **Memory profiling** — heap snapshots, leak detection, GC pressure
|
|
17
|
+
- **Bundle analysis** — webpack-bundle-analyzer, Next.js bundle analyzer
|
|
18
|
+
- **Database optimization** — EXPLAIN ANALYZE, slow query log, N+1 detection
|
|
19
|
+
- **Load testing** — k6 scripts, Artillery scenarios, ramp-up patterns
|
|
20
|
+
- **Before/after measurement** — establish baseline, profile, optimize, verify
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- App is slow and you don't know where the bottleneck is
|
|
27
|
+
- P99 latency exceeds SLA before a release
|
|
28
|
+
- Memory usage grows over time (suspected leak)
|
|
29
|
+
- Bundle size increased after adding dependencies
|
|
30
|
+
- Preparing for a traffic spike (load test before launch)
|
|
31
|
+
- Database queries taking >100ms
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Golden Rule: Measure First
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Establish baseline BEFORE any optimization
|
|
39
|
+
# Record: P50, P95, P99 latency | RPS | error rate | memory usage
|
|
40
|
+
|
|
41
|
+
# Wrong: "I think the N+1 query is slow, let me fix it"
|
|
42
|
+
# Right: Profile → confirm bottleneck → fix → measure again → verify improvement
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Node.js Profiling
|
|
48
|
+
|
|
49
|
+
### CPU Flamegraph
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Method 1: clinic.js (best for development)
|
|
53
|
+
npm install -g clinic
|
|
54
|
+
|
|
55
|
+
# CPU flamegraph
|
|
56
|
+
clinic flame -- node dist/server.js
|
|
57
|
+
|
|
58
|
+
# Heap profiler
|
|
59
|
+
clinic heapprofiler -- node dist/server.js
|
|
60
|
+
|
|
61
|
+
# Bubble chart (event loop blocking)
|
|
62
|
+
clinic bubbles -- node dist/server.js
|
|
63
|
+
|
|
64
|
+
# Load with autocannon while profiling
|
|
65
|
+
autocannon -c 50 -d 30 http://localhost:3000/api/tasks &
|
|
66
|
+
clinic flame -- node dist/server.js
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Method 2: Node.js built-in profiler
|
|
71
|
+
node --prof dist/server.js
|
|
72
|
+
# After running some load:
|
|
73
|
+
node --prof-process isolate-*.log | head -100
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Method 3: V8 CPU profiler via inspector
|
|
78
|
+
node --inspect dist/server.js
|
|
79
|
+
# Open Chrome DevTools → Performance → Record
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Heap Snapshot / Memory Leak Detection
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
// Add to your server for on-demand heap snapshots
|
|
86
|
+
import v8 from 'v8'
|
|
87
|
+
import fs from 'fs'
|
|
88
|
+
|
|
89
|
+
// Endpoint: POST /debug/heap-snapshot (protect with auth!)
|
|
90
|
+
app.post('/debug/heap-snapshot', (req, res) => {
|
|
91
|
+
const filename = `heap-${Date.now()}.heapsnapshot`
|
|
92
|
+
const snapshot = v8.writeHeapSnapshot(filename)
|
|
93
|
+
res.json({ snapshot })
|
|
94
|
+
})
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Take snapshots over time and compare in Chrome DevTools
|
|
99
|
+
curl -X POST http://localhost:3000/debug/heap-snapshot
|
|
100
|
+
# Wait 5 minutes of load
|
|
101
|
+
curl -X POST http://localhost:3000/debug/heap-snapshot
|
|
102
|
+
# Open both snapshots in Chrome → Memory → Compare
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Detect Event Loop Blocking
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
// Add blocked-at to detect synchronous blocking
|
|
109
|
+
import blocked from 'blocked-at'
|
|
110
|
+
|
|
111
|
+
blocked((time, stack) => {
|
|
112
|
+
console.warn(`Event loop blocked for ${time}ms`)
|
|
113
|
+
console.warn(stack.join('\n'))
|
|
114
|
+
}, { threshold: 100 }) // Alert if blocked > 100ms
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Node.js Memory Profiling Script
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// scripts/memory-profile.mjs
|
|
121
|
+
// Run: node --experimental-vm-modules scripts/memory-profile.mjs
|
|
122
|
+
|
|
123
|
+
import { createRequire } from 'module'
|
|
124
|
+
const require = createRequire(import.meta.url)
|
|
125
|
+
|
|
126
|
+
function formatBytes(bytes) {
|
|
127
|
+
return (bytes / 1024 / 1024).toFixed(2) + ' MB'
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function measureMemory(label) {
|
|
131
|
+
const mem = process.memoryUsage()
|
|
132
|
+
console.log(`\n[${label}]`)
|
|
133
|
+
console.log(` RSS: ${formatBytes(mem.rss)}`)
|
|
134
|
+
console.log(` Heap Used: ${formatBytes(mem.heapUsed)}`)
|
|
135
|
+
console.log(` Heap Total:${formatBytes(mem.heapTotal)}`)
|
|
136
|
+
console.log(` External: ${formatBytes(mem.external)}`)
|
|
137
|
+
return mem
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const baseline = measureMemory('Baseline')
|
|
141
|
+
|
|
142
|
+
// Simulate your operation
|
|
143
|
+
for (let i = 0; i < 1000; i++) {
|
|
144
|
+
// Replace with your actual operation
|
|
145
|
+
const result = await someOperation()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const after = measureMemory('After 1000 operations')
|
|
149
|
+
|
|
150
|
+
console.log(`\n[Delta]`)
|
|
151
|
+
console.log(` Heap Used: +${formatBytes(after.heapUsed - baseline.heapUsed)}`)
|
|
152
|
+
|
|
153
|
+
// If heap keeps growing across GC cycles, you have a leak
|
|
154
|
+
global.gc?.() // Run with --expose-gc flag
|
|
155
|
+
const afterGC = measureMemory('After GC')
|
|
156
|
+
if (afterGC.heapUsed > baseline.heapUsed * 1.1) {
|
|
157
|
+
console.warn('⚠️ Possible memory leak detected (>10% growth after GC)')
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Python Profiling
|
|
164
|
+
|
|
165
|
+
### CPU Profiling with py-spy
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Install
|
|
169
|
+
pip install py-spy
|
|
170
|
+
|
|
171
|
+
# Profile a running process (no code changes needed)
|
|
172
|
+
py-spy top --pid $(pgrep -f "uvicorn")
|
|
173
|
+
|
|
174
|
+
# Generate flamegraph SVG
|
|
175
|
+
py-spy record -o flamegraph.svg --pid $(pgrep -f "uvicorn") --duration 30
|
|
176
|
+
|
|
177
|
+
# Profile from the start
|
|
178
|
+
py-spy record -o flamegraph.svg -- python -m uvicorn app.main:app
|
|
179
|
+
|
|
180
|
+
# Open flamegraph.svg in browser — look for wide bars = hot code paths
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### cProfile for function-level profiling
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
# scripts/profile_endpoint.py
|
|
187
|
+
import cProfile
|
|
188
|
+
import pstats
|
|
189
|
+
import io
|
|
190
|
+
from app.services.task_service import TaskService
|
|
191
|
+
|
|
192
|
+
def run():
|
|
193
|
+
service = TaskService()
|
|
194
|
+
for _ in range(100):
|
|
195
|
+
service.list_tasks(user_id="user_1", page=1, limit=20)
|
|
196
|
+
|
|
197
|
+
profiler = cProfile.Profile()
|
|
198
|
+
profiler.enable()
|
|
199
|
+
run()
|
|
200
|
+
profiler.disable()
|
|
201
|
+
|
|
202
|
+
# Print top 20 functions by cumulative time
|
|
203
|
+
stream = io.StringIO()
|
|
204
|
+
stats = pstats.Stats(profiler, stream=stream)
|
|
205
|
+
stats.sort_stats('cumulative')
|
|
206
|
+
stats.print_stats(20)
|
|
207
|
+
print(stream.getvalue())
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Memory profiling with memory_profiler
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
# pip install memory-profiler
|
|
214
|
+
from memory_profiler import profile
|
|
215
|
+
|
|
216
|
+
@profile
|
|
217
|
+
def my_function():
|
|
218
|
+
# Function to profile
|
|
219
|
+
data = load_large_dataset()
|
|
220
|
+
result = process(data)
|
|
221
|
+
return result
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Run with line-by-line memory tracking
|
|
226
|
+
python -m memory_profiler scripts/profile_function.py
|
|
227
|
+
|
|
228
|
+
# Output:
|
|
229
|
+
# Line # Mem usage Increment Line Contents
|
|
230
|
+
# ================================================
|
|
231
|
+
# 10 45.3 MiB 45.3 MiB def my_function():
|
|
232
|
+
# 11 78.1 MiB 32.8 MiB data = load_large_dataset()
|
|
233
|
+
# 12 156.2 MiB 78.1 MiB result = process(data)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Go Profiling with pprof
|
|
239
|
+
|
|
240
|
+
```go
|
|
241
|
+
// main.go — add pprof endpoints
|
|
242
|
+
import _ "net/http/pprof"
|
|
243
|
+
import "net/http"
|
|
244
|
+
|
|
245
|
+
func main() {
|
|
246
|
+
// pprof endpoints at /debug/pprof/
|
|
247
|
+
go func() {
|
|
248
|
+
log.Println(http.ListenAndServe(":6060", nil))
|
|
249
|
+
}()
|
|
250
|
+
// ... rest of your app
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# CPU profile (30s)
|
|
256
|
+
go tool pprof -http=:8080 http://localhost:6060/debug/pprof/profile?seconds=30
|
|
257
|
+
|
|
258
|
+
# Memory profile
|
|
259
|
+
go tool pprof -http=:8080 http://localhost:6060/debug/pprof/heap
|
|
260
|
+
|
|
261
|
+
# Goroutine leak detection
|
|
262
|
+
curl http://localhost:6060/debug/pprof/goroutine?debug=1
|
|
263
|
+
|
|
264
|
+
# In pprof UI: "Flame Graph" view → find the tallest bars
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Bundle Size Analysis
|
|
270
|
+
|
|
271
|
+
### Next.js Bundle Analyzer
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# Install
|
|
275
|
+
pnpm add -D @next/bundle-analyzer
|
|
276
|
+
|
|
277
|
+
# next.config.js
|
|
278
|
+
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
|
279
|
+
enabled: process.env.ANALYZE === 'true',
|
|
280
|
+
})
|
|
281
|
+
module.exports = withBundleAnalyzer({})
|
|
282
|
+
|
|
283
|
+
# Run analyzer
|
|
284
|
+
ANALYZE=true pnpm build
|
|
285
|
+
# Opens browser with treemap of bundle
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### What to look for
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Find the largest chunks
|
|
292
|
+
pnpm build 2>&1 | grep -E "^\s+(λ|○|●)" | sort -k4 -rh | head -20
|
|
293
|
+
|
|
294
|
+
# Check if a specific package is too large
|
|
295
|
+
# Visit: https://bundlephobia.com/package/moment@2.29.4
|
|
296
|
+
# moment: 67.9kB gzipped → replace with date-fns (13.8kB) or dayjs (6.9kB)
|
|
297
|
+
|
|
298
|
+
# Find duplicate packages
|
|
299
|
+
pnpm dedupe --check
|
|
300
|
+
|
|
301
|
+
# Visualize what's in a chunk
|
|
302
|
+
npx source-map-explorer .next/static/chunks/*.js
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Common bundle wins
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
// Before: import entire lodash
|
|
309
|
+
import _ from 'lodash' // 71kB
|
|
310
|
+
|
|
311
|
+
// After: import only what you need
|
|
312
|
+
import debounce from 'lodash/debounce' // 2kB
|
|
313
|
+
|
|
314
|
+
// Before: moment.js
|
|
315
|
+
import moment from 'moment' // 67kB
|
|
316
|
+
|
|
317
|
+
// After: dayjs
|
|
318
|
+
import dayjs from 'dayjs' // 7kB
|
|
319
|
+
|
|
320
|
+
// Before: static import (always in bundle)
|
|
321
|
+
import HeavyChart from '@/components/HeavyChart'
|
|
322
|
+
|
|
323
|
+
// After: dynamic import (loaded on demand)
|
|
324
|
+
const HeavyChart = dynamic(() => import('@/components/HeavyChart'), {
|
|
325
|
+
loading: () => <Skeleton />,
|
|
326
|
+
})
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Database Query Optimization
|
|
332
|
+
|
|
333
|
+
### Find slow queries
|
|
334
|
+
|
|
335
|
+
```sql
|
|
336
|
+
-- PostgreSQL: enable pg_stat_statements
|
|
337
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
338
|
+
|
|
339
|
+
-- Top 20 slowest queries
|
|
340
|
+
SELECT
|
|
341
|
+
round(mean_exec_time::numeric, 2) AS mean_ms,
|
|
342
|
+
calls,
|
|
343
|
+
round(total_exec_time::numeric, 2) AS total_ms,
|
|
344
|
+
round(stddev_exec_time::numeric, 2) AS stddev_ms,
|
|
345
|
+
left(query, 80) AS query
|
|
346
|
+
FROM pg_stat_statements
|
|
347
|
+
WHERE calls > 10
|
|
348
|
+
ORDER BY mean_exec_time DESC
|
|
349
|
+
LIMIT 20;
|
|
350
|
+
|
|
351
|
+
-- Reset stats
|
|
352
|
+
SELECT pg_stat_statements_reset();
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# MySQL slow query log
|
|
357
|
+
mysql -e "SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 0.1;"
|
|
358
|
+
tail -f /var/log/mysql/slow-query.log
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### EXPLAIN ANALYZE
|
|
362
|
+
|
|
363
|
+
```sql
|
|
364
|
+
-- Always use EXPLAIN (ANALYZE, BUFFERS) for real timing
|
|
365
|
+
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
|
|
366
|
+
SELECT t.*, u.name as assignee_name
|
|
367
|
+
FROM tasks t
|
|
368
|
+
LEFT JOIN users u ON u.id = t.assignee_id
|
|
369
|
+
WHERE t.project_id = 'proj_123'
|
|
370
|
+
AND t.deleted_at IS NULL
|
|
371
|
+
ORDER BY t.created_at DESC
|
|
372
|
+
LIMIT 20;
|
|
373
|
+
|
|
374
|
+
-- Look for:
|
|
375
|
+
-- Seq Scan on large table → needs index
|
|
376
|
+
-- Nested Loop with high rows → N+1, consider JOIN or batch
|
|
377
|
+
-- Sort → can index handle the sort?
|
|
378
|
+
-- Hash Join → fine for moderate sizes
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Detect N+1 Queries
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
// Add query logging in dev
|
|
385
|
+
import { db } from './client'
|
|
386
|
+
|
|
387
|
+
// Drizzle: enable logging
|
|
388
|
+
const db = drizzle(pool, { logger: true })
|
|
389
|
+
|
|
390
|
+
// Or use a query counter middleware
|
|
391
|
+
let queryCount = 0
|
|
392
|
+
db.$on('query', () => queryCount++)
|
|
393
|
+
|
|
394
|
+
// In tests:
|
|
395
|
+
queryCount = 0
|
|
396
|
+
const tasks = await getTasksWithAssignees(projectId)
|
|
397
|
+
expect(queryCount).toBe(1) // Fail if it's 21 (1 + 20 N+1s)
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
# Django: detect N+1 with django-silk or nplusone
|
|
402
|
+
from nplusone.ext.django.middleware import NPlusOneMiddleware
|
|
403
|
+
MIDDLEWARE = ['nplusone.ext.django.middleware.NPlusOneMiddleware']
|
|
404
|
+
NPLUSONE_RAISE = True # Raise exception on N+1 in tests
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Fix N+1 — Before/After
|
|
408
|
+
|
|
409
|
+
```typescript
|
|
410
|
+
// Before: N+1 (1 query for tasks + N queries for assignees)
|
|
411
|
+
const tasks = await db.select().from(tasksTable)
|
|
412
|
+
for (const task of tasks) {
|
|
413
|
+
task.assignee = await db.select().from(usersTable)
|
|
414
|
+
.where(eq(usersTable.id, task.assigneeId))
|
|
415
|
+
.then(r => r[0])
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// After: 1 query with JOIN
|
|
419
|
+
const tasks = await db
|
|
420
|
+
.select({
|
|
421
|
+
id: tasksTable.id,
|
|
422
|
+
title: tasksTable.title,
|
|
423
|
+
assigneeName: usersTable.name,
|
|
424
|
+
assigneeEmail: usersTable.email,
|
|
425
|
+
})
|
|
426
|
+
.from(tasksTable)
|
|
427
|
+
.leftJoin(usersTable, eq(usersTable.id, tasksTable.assigneeId))
|
|
428
|
+
.where(eq(tasksTable.projectId, projectId))
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Load Testing with k6
|
|
434
|
+
|
|
435
|
+
```javascript
|
|
436
|
+
// tests/load/api-load-test.js
|
|
437
|
+
import http from 'k6/http'
|
|
438
|
+
import { check, sleep } from 'k6'
|
|
439
|
+
import { Rate, Trend } from 'k6/metrics'
|
|
440
|
+
|
|
441
|
+
const errorRate = new Rate('errors')
|
|
442
|
+
const taskListDuration = new Trend('task_list_duration')
|
|
443
|
+
|
|
444
|
+
export const options = {
|
|
445
|
+
stages: [
|
|
446
|
+
{ duration: '30s', target: 10 }, // Ramp up to 10 VUs
|
|
447
|
+
{ duration: '1m', target: 50 }, // Ramp to 50 VUs
|
|
448
|
+
{ duration: '2m', target: 50 }, // Sustain 50 VUs
|
|
449
|
+
{ duration: '30s', target: 100 }, // Spike to 100 VUs
|
|
450
|
+
{ duration: '1m', target: 50 }, // Back to 50
|
|
451
|
+
{ duration: '30s', target: 0 }, // Ramp down
|
|
452
|
+
],
|
|
453
|
+
thresholds: {
|
|
454
|
+
http_req_duration: ['p(95)<500'], // 95% of requests < 500ms
|
|
455
|
+
http_req_duration: ['p(99)<1000'], // 99% < 1s
|
|
456
|
+
errors: ['rate<0.01'], // Error rate < 1%
|
|
457
|
+
task_list_duration: ['p(95)<200'], // Task list specifically < 200ms
|
|
458
|
+
},
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
const BASE_URL = __ENV.BASE_URL || 'http://localhost:3000'
|
|
462
|
+
|
|
463
|
+
export function setup() {
|
|
464
|
+
// Get auth token once
|
|
465
|
+
const loginRes = http.post(`${BASE_URL}/api/auth/login`, JSON.stringify({
|
|
466
|
+
email: 'loadtest@example.com',
|
|
467
|
+
password: 'loadtest123',
|
|
468
|
+
}), { headers: { 'Content-Type': 'application/json' } })
|
|
469
|
+
|
|
470
|
+
return { token: loginRes.json('token') }
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
export default function(data) {
|
|
474
|
+
const headers = {
|
|
475
|
+
'Authorization': `Bearer ${data.token}`,
|
|
476
|
+
'Content-Type': 'application/json',
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// Scenario 1: List tasks
|
|
480
|
+
const start = Date.now()
|
|
481
|
+
const listRes = http.get(`${BASE_URL}/api/tasks?limit=20`, { headers })
|
|
482
|
+
taskListDuration.add(Date.now() - start)
|
|
483
|
+
|
|
484
|
+
check(listRes, {
|
|
485
|
+
'list tasks: status 200': (r) => r.status === 200,
|
|
486
|
+
'list tasks: has items': (r) => r.json('items') !== undefined,
|
|
487
|
+
}) || errorRate.add(1)
|
|
488
|
+
|
|
489
|
+
sleep(0.5)
|
|
490
|
+
|
|
491
|
+
// Scenario 2: Create task
|
|
492
|
+
const createRes = http.post(
|
|
493
|
+
`${BASE_URL}/api/tasks`,
|
|
494
|
+
JSON.stringify({ title: `Load test task ${Date.now()}`, priority: 'medium' }),
|
|
495
|
+
{ headers }
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
check(createRes, {
|
|
499
|
+
'create task: status 201': (r) => r.status === 201,
|
|
500
|
+
}) || errorRate.add(1)
|
|
501
|
+
|
|
502
|
+
sleep(1)
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
export function teardown(data) {
|
|
506
|
+
// Cleanup: delete load test tasks
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
```bash
|
|
511
|
+
# Run load test
|
|
512
|
+
k6 run tests/load/api-load-test.js \
|
|
513
|
+
--env BASE_URL=https://staging.myapp.com
|
|
514
|
+
|
|
515
|
+
# With Grafana output
|
|
516
|
+
k6 run --out influxdb=http://localhost:8086/k6 tests/load/api-load-test.js
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Before/After Measurement Template
|
|
522
|
+
|
|
523
|
+
```markdown
|
|
524
|
+
## Performance Optimization: [What You Fixed]
|
|
525
|
+
|
|
526
|
+
**Date:** 2026-03-01
|
|
527
|
+
**Engineer:** @username
|
|
528
|
+
**Ticket:** PROJ-123
|
|
529
|
+
|
|
530
|
+
### Problem
|
|
531
|
+
[1-2 sentences: what was slow, how was it observed]
|
|
532
|
+
|
|
533
|
+
### Root Cause
|
|
534
|
+
[What the profiler revealed]
|
|
535
|
+
|
|
536
|
+
### Baseline (Before)
|
|
537
|
+
| Metric | Value |
|
|
538
|
+
|--------|-------|
|
|
539
|
+
| P50 latency | 480ms |
|
|
540
|
+
| P95 latency | 1,240ms |
|
|
541
|
+
| P99 latency | 3,100ms |
|
|
542
|
+
| RPS @ 50 VUs | 42 |
|
|
543
|
+
| Error rate | 0.8% |
|
|
544
|
+
| DB queries/req | 23 (N+1) |
|
|
545
|
+
|
|
546
|
+
Profiler evidence: [link to flamegraph or screenshot]
|
|
547
|
+
|
|
548
|
+
### Fix Applied
|
|
549
|
+
[What changed — code diff or description]
|
|
550
|
+
|
|
551
|
+
### After
|
|
552
|
+
| Metric | Before | After | Delta |
|
|
553
|
+
|--------|--------|-------|-------|
|
|
554
|
+
| P50 latency | 480ms | 48ms | -90% |
|
|
555
|
+
| P95 latency | 1,240ms | 120ms | -90% |
|
|
556
|
+
| P99 latency | 3,100ms | 280ms | -91% |
|
|
557
|
+
| RPS @ 50 VUs | 42 | 380 | +804% |
|
|
558
|
+
| Error rate | 0.8% | 0% | -100% |
|
|
559
|
+
| DB queries/req | 23 | 1 | -96% |
|
|
560
|
+
|
|
561
|
+
### Verification
|
|
562
|
+
Load test run: [link to k6 output]
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## Optimization Checklist
|
|
568
|
+
|
|
569
|
+
### Quick wins (check these first)
|
|
570
|
+
|
|
571
|
+
```
|
|
572
|
+
Database
|
|
573
|
+
□ Missing indexes on WHERE/ORDER BY columns
|
|
574
|
+
□ N+1 queries (check query count per request)
|
|
575
|
+
□ Loading all columns when only 2-3 needed (SELECT *)
|
|
576
|
+
□ No LIMIT on unbounded queries
|
|
577
|
+
□ Missing connection pool (creating new connection per request)
|
|
578
|
+
|
|
579
|
+
Node.js
|
|
580
|
+
□ Sync I/O (fs.readFileSync) in hot path
|
|
581
|
+
□ JSON.parse/stringify of large objects in hot loop
|
|
582
|
+
□ Missing caching for expensive computations
|
|
583
|
+
□ No compression (gzip/brotli) on responses
|
|
584
|
+
□ Dependencies loaded in request handler (move to module level)
|
|
585
|
+
|
|
586
|
+
Bundle
|
|
587
|
+
□ Moment.js → dayjs/date-fns
|
|
588
|
+
□ Lodash (full) → lodash/function imports
|
|
589
|
+
□ Static imports of heavy components → dynamic imports
|
|
590
|
+
□ Images not optimized / not using next/image
|
|
591
|
+
□ No code splitting on routes
|
|
592
|
+
|
|
593
|
+
API
|
|
594
|
+
□ No pagination on list endpoints
|
|
595
|
+
□ No response caching (Cache-Control headers)
|
|
596
|
+
□ Serial awaits that could be parallel (Promise.all)
|
|
597
|
+
□ Fetching related data in a loop instead of JOIN
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
602
|
+
## Common Pitfalls
|
|
603
|
+
|
|
604
|
+
- **Optimizing without measuring** — you'll optimize the wrong thing
|
|
605
|
+
- **Testing in development** — profile against production-like data volumes
|
|
606
|
+
- **Ignoring P99** — P50 can look fine while P99 is catastrophic
|
|
607
|
+
- **Premature optimization** — fix correctness first, then performance
|
|
608
|
+
- **Not re-measuring** — always verify the fix actually improved things
|
|
609
|
+
- **Load testing production** — use staging with production-size data
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## Best Practices
|
|
614
|
+
|
|
615
|
+
1. **Baseline first, always** — record metrics before touching anything
|
|
616
|
+
2. **One change at a time** — isolate the variable to confirm causation
|
|
617
|
+
3. **Profile with realistic data** — 10 rows in dev, millions in prod — different bottlenecks
|
|
618
|
+
4. **Set performance budgets** — `p(95) < 200ms` in CI thresholds with k6
|
|
619
|
+
5. **Monitor continuously** — add Datadog/Prometheus metrics for key paths
|
|
620
|
+
6. **Cache invalidation strategy** — cache aggressively, invalidate precisely
|
|
621
|
+
7. **Document the win** — before/after in the PR description motivates the team
|