@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,179 @@
|
|
|
1
|
+
# Fraud Detection & Prevention Patterns
|
|
2
|
+
|
|
3
|
+
> Velocity checks, geographic anomaly detection, 3D Secure enforcement, and chargeback prevention for AI-generated e-commerce code.
|
|
4
|
+
|
|
5
|
+
**When to use:** Building any payment system that processes real transactions. Apply as a verification layer alongside PCI compliance.
|
|
6
|
+
**Stack:** Node.js/Express, PostgreSQL/MySQL, Stripe Radar (or manual rules)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Stripe Radar (Recommended First Line)
|
|
11
|
+
|
|
12
|
+
Stripe Radar is built-in and handles most fraud automatically. Enable it:
|
|
13
|
+
|
|
14
|
+
```javascript
|
|
15
|
+
// Radar is enabled by default on Stripe accounts
|
|
16
|
+
// Add rules for your specific business:
|
|
17
|
+
|
|
18
|
+
const paymentIntent = await stripe.paymentIntents.create({
|
|
19
|
+
amount: 5000,
|
|
20
|
+
currency: 'usd',
|
|
21
|
+
payment_method: paymentMethodId,
|
|
22
|
+
confirm: true,
|
|
23
|
+
// Radar evaluates every payment automatically
|
|
24
|
+
// High-risk payments are blocked or flagged for review
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Check Radar's risk assessment
|
|
28
|
+
if (paymentIntent.charges?.data[0]?.outcome?.risk_level === 'elevated') {
|
|
29
|
+
// Flag for manual review
|
|
30
|
+
await flagForReview(paymentIntent.id, 'elevated_risk');
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Custom Velocity Checks
|
|
37
|
+
|
|
38
|
+
For risks Radar doesn't catch or for non-Stripe systems:
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
async function checkVelocity(userId, ipAddress, paymentMethodFingerprint) {
|
|
42
|
+
const checks = [];
|
|
43
|
+
|
|
44
|
+
// Check 1: Transaction count per card in time window
|
|
45
|
+
const cardCount = await db.query(
|
|
46
|
+
`SELECT COUNT(*) as count FROM orders
|
|
47
|
+
WHERE payment_fingerprint = $1 AND created_at > NOW() - INTERVAL '1 hour'`,
|
|
48
|
+
[paymentMethodFingerprint]
|
|
49
|
+
);
|
|
50
|
+
if (cardCount.rows[0].count >= 5) {
|
|
51
|
+
checks.push({ rule: 'card_velocity', risk: 'high',
|
|
52
|
+
detail: `${cardCount.rows[0].count} transactions in 1 hour` });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check 2: Transaction count per IP
|
|
56
|
+
const ipCount = await db.query(
|
|
57
|
+
`SELECT COUNT(*) as count FROM orders
|
|
58
|
+
WHERE ip_address = $1 AND created_at > NOW() - INTERVAL '1 hour'`,
|
|
59
|
+
[ipAddress]
|
|
60
|
+
);
|
|
61
|
+
if (ipCount.rows[0].count >= 10) {
|
|
62
|
+
checks.push({ rule: 'ip_velocity', risk: 'high',
|
|
63
|
+
detail: `${ipCount.rows[0].count} transactions from same IP` });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check 3: Unusual amount patterns
|
|
67
|
+
const avgAmount = await db.query(
|
|
68
|
+
`SELECT AVG(total) as avg_total FROM orders WHERE user_id = $1`,
|
|
69
|
+
[userId]
|
|
70
|
+
);
|
|
71
|
+
// Flag if order is 5x the user's average
|
|
72
|
+
if (avgAmount.rows[0].avg_total && currentAmount > avgAmount.rows[0].avg_total * 5) {
|
|
73
|
+
checks.push({ rule: 'amount_anomaly', risk: 'medium',
|
|
74
|
+
detail: `Order is ${(currentAmount / avgAmount.rows[0].avg_total).toFixed(1)}x user average` });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
passed: checks.filter(c => c.risk === 'high').length === 0,
|
|
79
|
+
checks,
|
|
80
|
+
riskLevel: checks.some(c => c.risk === 'high') ? 'high'
|
|
81
|
+
: checks.some(c => c.risk === 'medium') ? 'medium' : 'low',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 3D Secure / Strong Customer Authentication (SCA)
|
|
89
|
+
|
|
90
|
+
Required in the EU (PSD2) and recommended everywhere:
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
// Stripe handles 3DS automatically with PaymentIntents
|
|
94
|
+
const paymentIntent = await stripe.paymentIntents.create({
|
|
95
|
+
amount: 5000,
|
|
96
|
+
currency: 'eur',
|
|
97
|
+
payment_method: paymentMethodId,
|
|
98
|
+
confirmation_method: 'manual',
|
|
99
|
+
// Stripe automatically triggers 3DS when required
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Client-side: handle 3DS authentication
|
|
103
|
+
const { error, paymentIntent: confirmed } = await stripe.confirmCardPayment(
|
|
104
|
+
clientSecret
|
|
105
|
+
);
|
|
106
|
+
// If 3DS is needed, Stripe shows the authentication modal automatically
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Address Verification (AVS)
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
// Stripe returns AVS results in the charge outcome
|
|
115
|
+
const charge = paymentIntent.charges?.data[0];
|
|
116
|
+
const avsResult = charge?.payment_method_details?.card?.checks;
|
|
117
|
+
|
|
118
|
+
if (avsResult?.address_line1_check === 'fail' ||
|
|
119
|
+
avsResult?.address_postal_code_check === 'fail') {
|
|
120
|
+
// Address doesn't match — higher fraud risk
|
|
121
|
+
await flagForReview(paymentIntent.id, 'avs_mismatch');
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Chargeback Prevention
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
// 1. Send email receipts immediately (proves customer was notified)
|
|
131
|
+
await sendReceiptEmail(order.email, order);
|
|
132
|
+
|
|
133
|
+
// 2. Use clear billing descriptor
|
|
134
|
+
const paymentIntent = await stripe.paymentIntents.create({
|
|
135
|
+
amount: 5000,
|
|
136
|
+
currency: 'usd',
|
|
137
|
+
statement_descriptor: 'MYSTORE ORDER', // Max 22 chars
|
|
138
|
+
statement_descriptor_suffix: order.number, // Appears on statement
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
// 3. Require CVV (Stripe Elements does this by default)
|
|
142
|
+
// 4. Log IP address and device info for dispute evidence
|
|
143
|
+
await db.query(
|
|
144
|
+
`INSERT INTO order_fraud_metadata (order_id, ip_address, user_agent, fingerprint)
|
|
145
|
+
VALUES ($1, $2, $3, $4)`,
|
|
146
|
+
[orderId, req.ip, req.headers['user-agent'], req.body.deviceFingerprint]
|
|
147
|
+
);
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Safety Gates for AI-Generated Code
|
|
153
|
+
|
|
154
|
+
Operations an AI agent must NEVER perform without user confirmation:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
HARD GATES (always require human confirmation):
|
|
158
|
+
□ Processing a payment > $500
|
|
159
|
+
□ Issuing a refund
|
|
160
|
+
□ Changing account email or password
|
|
161
|
+
□ Deleting an account
|
|
162
|
+
□ Modifying pricing or discounts
|
|
163
|
+
□ Bulk operations on orders
|
|
164
|
+
|
|
165
|
+
SOFT GATES (log but allow in automation):
|
|
166
|
+
□ Adding items to cart
|
|
167
|
+
□ Viewing order history
|
|
168
|
+
□ Updating shipping address
|
|
169
|
+
□ Applying a coupon code
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Sources
|
|
175
|
+
|
|
176
|
+
- Internal gap analysis: GAP-ECOM-10 (Fraud Detection)
|
|
177
|
+
- Amazon-Bench (arXiv:2508.15832) — E-Commerce Agent Safety (Aug 2025)
|
|
178
|
+
- PCI DSS 4.0: Requirement 10 (monitoring/logging)
|
|
179
|
+
- Stripe Radar documentation (2025)
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Inventory & Stock Management Patterns
|
|
2
|
+
|
|
3
|
+
> Race condition prevention, stock reservation, multi-channel sync, and variant tracking for e-commerce systems.
|
|
4
|
+
|
|
5
|
+
**When to use:** Building any e-commerce system that tracks product quantities — especially when multiple users can purchase simultaneously or products sell across multiple channels.
|
|
6
|
+
**Stack:** Node.js/Express, PostgreSQL (row-level locking), Redis (optional for caching)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## The Core Problem: Race Conditions
|
|
11
|
+
|
|
12
|
+
Two customers see "1 left in stock" → both click "Buy" → both get confirmation → one order can't be fulfilled.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Pattern 1: Pessimistic Locking (PostgreSQL FOR UPDATE)
|
|
17
|
+
|
|
18
|
+
Lock the row while checking and decrementing stock:
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
async function reserveStock(productId, variantId, quantity, orderId) {
|
|
22
|
+
const client = await pool.connect();
|
|
23
|
+
try {
|
|
24
|
+
await client.query('BEGIN');
|
|
25
|
+
|
|
26
|
+
// Lock the row — other transactions wait
|
|
27
|
+
const result = await client.query(
|
|
28
|
+
`SELECT stock_quantity FROM product_variants
|
|
29
|
+
WHERE product_id = $1 AND id = $2
|
|
30
|
+
FOR UPDATE`,
|
|
31
|
+
[productId, variantId]
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
if (!result.rows[0]) throw new Error('Variant not found');
|
|
35
|
+
|
|
36
|
+
const available = result.rows[0].stock_quantity;
|
|
37
|
+
if (available < quantity) {
|
|
38
|
+
await client.query('ROLLBACK');
|
|
39
|
+
return { success: false, available, requested: quantity };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Decrement stock
|
|
43
|
+
await client.query(
|
|
44
|
+
`UPDATE product_variants
|
|
45
|
+
SET stock_quantity = stock_quantity - $1, updated_at = NOW()
|
|
46
|
+
WHERE product_id = $2 AND id = $3`,
|
|
47
|
+
[quantity, productId, variantId]
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Record reservation
|
|
51
|
+
await client.query(
|
|
52
|
+
`INSERT INTO inventory_reservations (product_id, variant_id, quantity, order_id, status)
|
|
53
|
+
VALUES ($1, $2, $3, $4, 'reserved')`,
|
|
54
|
+
[productId, variantId, quantity, orderId]
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
await client.query('COMMIT');
|
|
58
|
+
return { success: true, remaining: available - quantity };
|
|
59
|
+
} catch (err) {
|
|
60
|
+
await client.query('ROLLBACK');
|
|
61
|
+
throw err;
|
|
62
|
+
} finally {
|
|
63
|
+
client.release();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### When to use: High-value items, limited stock (concert tickets, flash sales)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Pattern 2: Optimistic Locking (Version Column)
|
|
73
|
+
|
|
74
|
+
Check-and-set without holding locks:
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
async function reserveStockOptimistic(productId, variantId, quantity) {
|
|
78
|
+
const maxRetries = 3;
|
|
79
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
80
|
+
const current = await db.query(
|
|
81
|
+
`SELECT stock_quantity, version FROM product_variants
|
|
82
|
+
WHERE product_id = $1 AND id = $2`,
|
|
83
|
+
[productId, variantId]
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
if (current.rows[0].stock_quantity < quantity) {
|
|
87
|
+
return { success: false, available: current.rows[0].stock_quantity };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Update only if version matches (no one else changed it)
|
|
91
|
+
const result = await db.query(
|
|
92
|
+
`UPDATE product_variants
|
|
93
|
+
SET stock_quantity = stock_quantity - $1, version = version + 1, updated_at = NOW()
|
|
94
|
+
WHERE product_id = $2 AND id = $3 AND version = $4
|
|
95
|
+
RETURNING stock_quantity`,
|
|
96
|
+
[quantity, productId, variantId, current.rows[0].version]
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
if (result.rowCount > 0) {
|
|
100
|
+
return { success: true, remaining: result.rows[0].stock_quantity };
|
|
101
|
+
}
|
|
102
|
+
// Version mismatch — someone else updated, retry
|
|
103
|
+
}
|
|
104
|
+
return { success: false, reason: 'concurrent_modification' };
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### When to use: General e-commerce, moderate traffic
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Pattern 3: Atomic Decrement (Simplest)
|
|
113
|
+
|
|
114
|
+
Single atomic UPDATE — no locks, no versions:
|
|
115
|
+
|
|
116
|
+
```sql
|
|
117
|
+
UPDATE product_variants
|
|
118
|
+
SET stock_quantity = stock_quantity - $1
|
|
119
|
+
WHERE product_id = $2 AND id = $3
|
|
120
|
+
AND stock_quantity >= $1
|
|
121
|
+
RETURNING stock_quantity;
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```javascript
|
|
125
|
+
async function reserveStockAtomic(productId, variantId, quantity) {
|
|
126
|
+
const result = await db.query(
|
|
127
|
+
`UPDATE product_variants
|
|
128
|
+
SET stock_quantity = stock_quantity - $1, updated_at = NOW()
|
|
129
|
+
WHERE product_id = $2 AND id = $3 AND stock_quantity >= $1
|
|
130
|
+
RETURNING stock_quantity`,
|
|
131
|
+
[quantity, productId, variantId]
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
if (result.rowCount === 0) {
|
|
135
|
+
const current = await db.query(
|
|
136
|
+
'SELECT stock_quantity FROM product_variants WHERE product_id = $1 AND id = $2',
|
|
137
|
+
[productId, variantId]
|
|
138
|
+
);
|
|
139
|
+
return { success: false, available: current.rows[0]?.stock_quantity || 0 };
|
|
140
|
+
}
|
|
141
|
+
return { success: true, remaining: result.rows[0].stock_quantity };
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### When to use: Most cases. Simple, fast, race-condition-safe.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Database Schema
|
|
150
|
+
|
|
151
|
+
```sql
|
|
152
|
+
CREATE TABLE product_variants (
|
|
153
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
154
|
+
product_id UUID NOT NULL REFERENCES products(id),
|
|
155
|
+
sku VARCHAR(100) UNIQUE,
|
|
156
|
+
name VARCHAR(255), -- "Large / Blue"
|
|
157
|
+
attributes JSONB DEFAULT '{}', -- {"size": "L", "color": "Blue"}
|
|
158
|
+
price DECIMAL(10,2) NOT NULL,
|
|
159
|
+
stock_quantity INTEGER NOT NULL DEFAULT 0,
|
|
160
|
+
low_stock_threshold INTEGER DEFAULT 5,
|
|
161
|
+
track_inventory BOOLEAN DEFAULT true,
|
|
162
|
+
allow_backorder BOOLEAN DEFAULT false,
|
|
163
|
+
version INTEGER DEFAULT 1, -- For optimistic locking
|
|
164
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
165
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
CREATE TABLE inventory_reservations (
|
|
169
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
170
|
+
product_id UUID NOT NULL,
|
|
171
|
+
variant_id UUID,
|
|
172
|
+
quantity INTEGER NOT NULL,
|
|
173
|
+
order_id UUID NOT NULL,
|
|
174
|
+
status VARCHAR(20) DEFAULT 'reserved', -- reserved | committed | released | expired
|
|
175
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
176
|
+
expires_at TIMESTAMP DEFAULT NOW() + INTERVAL '30 minutes'
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
CREATE TABLE inventory_movements (
|
|
180
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
181
|
+
product_id UUID NOT NULL,
|
|
182
|
+
variant_id UUID,
|
|
183
|
+
quantity INTEGER NOT NULL, -- Positive = stock in, negative = stock out
|
|
184
|
+
movement_type VARCHAR(30), -- purchase | return | adjustment | restock | damage
|
|
185
|
+
reference_id UUID, -- Order ID or adjustment ID
|
|
186
|
+
notes TEXT,
|
|
187
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
-- Indexes
|
|
191
|
+
CREATE INDEX idx_variants_product ON product_variants(product_id);
|
|
192
|
+
CREATE INDEX idx_variants_sku ON product_variants(sku);
|
|
193
|
+
CREATE INDEX idx_variants_low_stock ON product_variants(stock_quantity)
|
|
194
|
+
WHERE track_inventory = true;
|
|
195
|
+
CREATE INDEX idx_reservations_expiry ON inventory_reservations(expires_at)
|
|
196
|
+
WHERE status = 'reserved';
|
|
197
|
+
CREATE INDEX idx_movements_product ON inventory_movements(product_id, created_at);
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Low Stock Alerts
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
async function checkLowStock() {
|
|
206
|
+
const lowItems = await db.query(
|
|
207
|
+
`SELECT pv.*, p.name as product_name
|
|
208
|
+
FROM product_variants pv
|
|
209
|
+
JOIN products p ON p.id = pv.product_id
|
|
210
|
+
WHERE pv.track_inventory = true
|
|
211
|
+
AND pv.stock_quantity <= pv.low_stock_threshold
|
|
212
|
+
AND pv.stock_quantity > 0
|
|
213
|
+
ORDER BY pv.stock_quantity ASC`
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
if (lowItems.rows.length > 0) {
|
|
217
|
+
await sendAdminAlert({
|
|
218
|
+
type: 'LOW_STOCK',
|
|
219
|
+
items: lowItems.rows.map(i => ({
|
|
220
|
+
product: i.product_name,
|
|
221
|
+
variant: i.name,
|
|
222
|
+
sku: i.sku,
|
|
223
|
+
remaining: i.stock_quantity,
|
|
224
|
+
threshold: i.low_stock_threshold,
|
|
225
|
+
})),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Run hourly via cron
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Reservation Expiry
|
|
236
|
+
|
|
237
|
+
Clean up abandoned reservations (cart timeout):
|
|
238
|
+
|
|
239
|
+
```javascript
|
|
240
|
+
async function expireReservations() {
|
|
241
|
+
const expired = await db.query(
|
|
242
|
+
`UPDATE inventory_reservations
|
|
243
|
+
SET status = 'expired'
|
|
244
|
+
WHERE status = 'reserved' AND expires_at < NOW()
|
|
245
|
+
RETURNING product_id, variant_id, quantity`
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
// Restore stock for expired reservations
|
|
249
|
+
for (const row of expired.rows) {
|
|
250
|
+
await db.query(
|
|
251
|
+
`UPDATE product_variants
|
|
252
|
+
SET stock_quantity = stock_quantity + $1
|
|
253
|
+
WHERE product_id = $2 AND id = $3`,
|
|
254
|
+
[row.quantity, row.product_id, row.variant_id]
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return { expired: expired.rowCount };
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Run every 5 minutes via cron
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Sources
|
|
267
|
+
|
|
268
|
+
- Internal gap analysis: GAP-ECOM-7 (Inventory & Stock Management)
|
|
269
|
+
- PostgreSQL: Row-level locking (SELECT FOR UPDATE) documentation
|
|
270
|
+
- Medusa.js: Inventory Module architecture (2025)
|