@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,192 @@
|
|
|
1
|
+
# PCI DSS 4.0 Compliance Checklist for AI-Generated Code
|
|
2
|
+
|
|
3
|
+
> Mandatory compliance gate for any payment-handling code. Non-compliance fines: $5,000–$100,000/month.
|
|
4
|
+
|
|
5
|
+
**When to use:** Before deploying any code that processes, stores, or transmits payment data. This is a HARD GATE — payment features cannot ship without passing this checklist.
|
|
6
|
+
**Stack:** Any web application handling payments (Node.js, Python, etc.)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## The Rule
|
|
11
|
+
|
|
12
|
+
**AI-generated code must NEVER handle raw card data.** Period.
|
|
13
|
+
|
|
14
|
+
The entire purpose of Stripe Elements, Stripe Checkout, and similar tokenization services is to keep card numbers off your servers. If your server never sees a card number, you're in the simplest PCI compliance tier (SAQ A or SAQ A-EP).
|
|
15
|
+
|
|
16
|
+
The moment raw card data touches your server, you jump to SAQ D — the hardest compliance level, requiring quarterly scans, penetration testing, and extensive documentation.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Scope Minimization Checklist
|
|
21
|
+
|
|
22
|
+
### Tier 1: MUST Pass (Blockers)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
□ NO raw card numbers in server code, logs, or database
|
|
26
|
+
□ NO card data in URL parameters (GET requests)
|
|
27
|
+
□ NO card data in error messages or stack traces
|
|
28
|
+
□ NO card data in application logs (including debug mode)
|
|
29
|
+
□ NO custom card input fields (use Stripe Elements iframe)
|
|
30
|
+
□ NO card data stored in session/cookies
|
|
31
|
+
□ Stripe.js loaded from js.stripe.com (not self-hosted)
|
|
32
|
+
□ All payment pages served over HTTPS (no mixed content)
|
|
33
|
+
□ API keys stored in environment variables (never in code)
|
|
34
|
+
□ Secret keys never exposed to client-side code
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Tier 2: MUST Pass (Security)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
□ Restricted API keys with minimal required permissions
|
|
41
|
+
□ Webhook signature verification on all webhook endpoints
|
|
42
|
+
□ CSRF protection on payment-related forms
|
|
43
|
+
□ Rate limiting on payment API endpoints
|
|
44
|
+
□ Input validation on all payment-related parameters
|
|
45
|
+
□ Amount validation server-side (never trust client amounts)
|
|
46
|
+
□ Currency validation (prevent currency confusion attacks)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Tier 3: SHOULD Pass (Best Practices)
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
□ Logging of payment events (event ID and type only, no PCI data)
|
|
53
|
+
□ Monitoring/alerting for failed payment attempts
|
|
54
|
+
□ Idempotency keys on all payment mutations
|
|
55
|
+
□ Graceful error handling (no raw Stripe errors to users)
|
|
56
|
+
□ Content Security Policy headers allowing Stripe domains
|
|
57
|
+
□ Subresource Integrity (SRI) on Stripe.js if applicable
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Code Scanning Rules
|
|
63
|
+
|
|
64
|
+
Run these checks against any AI-generated payment code:
|
|
65
|
+
|
|
66
|
+
### Pattern 1: Card Number Detection
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
SCAN for: /\b\d{13,19}\b/ in any .js, .ts, .py, .env file
|
|
70
|
+
SCAN for: card_number, cardNumber, cc_number, ccNumber in variable names
|
|
71
|
+
SCAN for: "4242424242424242" in test files (acceptable ONLY in test config)
|
|
72
|
+
ALERT if: Found in server-side code, logs, or database queries
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Pattern 2: Secret Key Exposure
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
SCAN for: sk_live_, sk_test_ in source code files (not .env)
|
|
79
|
+
SCAN for: STRIPE_SECRET_KEY in client-side bundles
|
|
80
|
+
SCAN for: API keys in git history (git log -p | grep sk_)
|
|
81
|
+
ALERT if: Secret key found anywhere except .env or secrets manager
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Pattern 3: Raw Body Middleware
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
SCAN for: Webhook route handler
|
|
88
|
+
CHECK: express.raw() or equivalent used on webhook route
|
|
89
|
+
ALERT if: express.json() applied globally before webhook route
|
|
90
|
+
REASON: JSON parsing destroys the raw body needed for signature verification
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Pattern 4: PCI Data in Logs
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
SCAN for: console.log, logger.info, logger.debug near payment code
|
|
97
|
+
CHECK: No card data, CVV, expiry in logged objects
|
|
98
|
+
SCAN for: JSON.stringify(req.body) in payment routes
|
|
99
|
+
ALERT if: Full request body logged on payment endpoints
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Compliant Architecture Pattern
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
┌─────────────────────────────────────────────┐
|
|
108
|
+
│ CLIENT │
|
|
109
|
+
│ │
|
|
110
|
+
│ ┌─────────────────────────────────────────┐ │
|
|
111
|
+
│ │ Stripe Elements (iframe) │ │
|
|
112
|
+
│ │ Card data NEVER leaves this iframe │ │
|
|
113
|
+
│ │ → Tokenizes card → returns PaymentMethod│ │
|
|
114
|
+
│ └─────────────────────────────────────────┘ │
|
|
115
|
+
│ │ PaymentMethod ID (pm_xxx) │
|
|
116
|
+
│ ▼ │
|
|
117
|
+
│ Your JavaScript (no card data here) │
|
|
118
|
+
│ │ pm_xxx + order details │
|
|
119
|
+
└───────────┼───────────────────────────────────┘
|
|
120
|
+
│ HTTPS POST
|
|
121
|
+
┌───────────▼───────────────────────────────────┐
|
|
122
|
+
│ SERVER │
|
|
123
|
+
│ │
|
|
124
|
+
│ Receives: pm_xxx (token), amount, currency │
|
|
125
|
+
│ NEVER receives: card number, CVV, expiry │
|
|
126
|
+
│ │
|
|
127
|
+
│ → Validates amount against database prices │
|
|
128
|
+
│ → Creates PaymentIntent with pm_xxx │
|
|
129
|
+
│ → Returns client_secret for confirmation │
|
|
130
|
+
│ │
|
|
131
|
+
│ Webhook endpoint: │
|
|
132
|
+
│ → Verifies signature (express.raw body) │
|
|
133
|
+
│ → Processes payment confirmation │
|
|
134
|
+
│ → Updates order status │
|
|
135
|
+
└────────────────────────────────────────────────┘
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Content Security Policy for Stripe
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
// Required CSP headers for Stripe Elements
|
|
144
|
+
const cspHeaders = {
|
|
145
|
+
'Content-Security-Policy': [
|
|
146
|
+
"default-src 'self'",
|
|
147
|
+
"script-src 'self' https://js.stripe.com",
|
|
148
|
+
"frame-src https://js.stripe.com https://hooks.stripe.com",
|
|
149
|
+
"connect-src 'self' https://api.stripe.com",
|
|
150
|
+
"img-src 'self' https://*.stripe.com",
|
|
151
|
+
].join('; ')
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Common AI-Generated Violations
|
|
158
|
+
|
|
159
|
+
| Violation | Why AI Does This | Fix |
|
|
160
|
+
|-----------|-----------------|-----|
|
|
161
|
+
| Custom `<input>` for card number | Seems simpler than Stripe Elements | Always use `CardElement` from @stripe/react-stripe-js |
|
|
162
|
+
| Logging `req.body` on payment routes | Standard debugging pattern | Log only event ID and type |
|
|
163
|
+
| `sk_test_*` in source code | Faster than env setup during prototyping | Set up .env from the start |
|
|
164
|
+
| Storing card last-4 in user table | Seems useful for display | Retrieve from Stripe API on demand |
|
|
165
|
+
| Amount from client `req.body.amount` | Trust client data pattern | Calculate from server-side price lookup |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Compliance Declaration
|
|
170
|
+
|
|
171
|
+
After verification, the responsible developer signs off:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
I verify that this payment integration:
|
|
175
|
+
- Never handles raw card data on our servers
|
|
176
|
+
- Uses Stripe's hosted tokenization (Elements/Checkout)
|
|
177
|
+
- Stores API keys only in environment variables
|
|
178
|
+
- Validates all amounts server-side
|
|
179
|
+
- Verifies webhook signatures
|
|
180
|
+
- Logs no PCI-scoped data
|
|
181
|
+
|
|
182
|
+
Signed: ________________ Date: ________
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Sources
|
|
188
|
+
|
|
189
|
+
- PCI Security Standards Council: "AI Principles — Securing the Use of AI in Payment Environments" (Spring 2025)
|
|
190
|
+
- PCI SSC: "New Guidance — Integrating AI into PCI Assessments" (2025)
|
|
191
|
+
- Stripe Documentation: Elements, Checkout, Webhooks
|
|
192
|
+
- PCI DSS 4.0 Requirements (mandatory March 31, 2025)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Refund & Chargeback Handling
|
|
2
|
+
|
|
3
|
+
> Partial refunds, refund authorization flows, chargeback dispute handling, and tax recalculation patterns.
|
|
4
|
+
|
|
5
|
+
**When to use:** Implementing any refund capability in an e-commerce system. Critical for production systems processing real payments.
|
|
6
|
+
**Stack:** Node.js/Express, Stripe, PostgreSQL/MySQL
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Refund Types
|
|
11
|
+
|
|
12
|
+
| Type | Description | Use Case |
|
|
13
|
+
|------|-------------|----------|
|
|
14
|
+
| **Full refund** | Return entire payment amount | Order cancelled, wrong item shipped |
|
|
15
|
+
| **Partial refund** | Return portion of payment | One item from multi-item order, damaged item |
|
|
16
|
+
| **Store credit** | Issue credit instead of cash refund | Customer retention, faster processing |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Refund API
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
// Full refund
|
|
24
|
+
router.post('/api/orders/:orderId/refund', requireAdmin, async (req, res) => {
|
|
25
|
+
const { reason, items, amount } = req.body;
|
|
26
|
+
const order = await getOrder(req.params.orderId);
|
|
27
|
+
|
|
28
|
+
if (!order) return res.status(404).json({ error: 'Order not found' });
|
|
29
|
+
if (!['confirmed', 'processing', 'shipped', 'delivered'].includes(order.status)) {
|
|
30
|
+
return res.status(400).json({ error: `Cannot refund order in ${order.status} status` });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Calculate refund amount
|
|
34
|
+
let refundAmount;
|
|
35
|
+
if (amount) {
|
|
36
|
+
// Explicit amount (admin override)
|
|
37
|
+
refundAmount = Math.round(amount * 100); // cents
|
|
38
|
+
} else if (items && items.length > 0) {
|
|
39
|
+
// Partial refund: sum of selected items
|
|
40
|
+
refundAmount = items.reduce((sum, item) => {
|
|
41
|
+
const orderItem = order.items.find(i => i.id === item.id);
|
|
42
|
+
return sum + (orderItem.unit_price * item.quantity * 100);
|
|
43
|
+
}, 0);
|
|
44
|
+
} else {
|
|
45
|
+
// Full refund
|
|
46
|
+
refundAmount = Math.round(order.total * 100);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Create Stripe refund
|
|
50
|
+
const refund = await stripe.refunds.create({
|
|
51
|
+
payment_intent: order.payment_intent_id,
|
|
52
|
+
amount: refundAmount,
|
|
53
|
+
reason: reason === 'duplicate' ? 'duplicate'
|
|
54
|
+
: reason === 'fraud' ? 'fraudulent'
|
|
55
|
+
: 'requested_by_customer',
|
|
56
|
+
metadata: { order_id: order.id, admin_id: req.user.id },
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Record refund
|
|
60
|
+
await db.query(
|
|
61
|
+
`INSERT INTO refunds (order_id, stripe_refund_id, amount, reason, status, created_by)
|
|
62
|
+
VALUES ($1, $2, $3, $4, $5, $6)`,
|
|
63
|
+
[order.id, refund.id, refundAmount / 100, reason, refund.status, req.user.id]
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
// Update order status if fully refunded
|
|
67
|
+
const totalRefunded = await getTotalRefunded(order.id);
|
|
68
|
+
if (totalRefunded >= order.total) {
|
|
69
|
+
await transitionOrder(order.id, 'refunded', { refund_id: refund.id });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Restore inventory if items returned
|
|
73
|
+
if (items) {
|
|
74
|
+
for (const item of items) {
|
|
75
|
+
await restoreStock(item.product_id, item.variant_id, item.quantity);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
res.json({
|
|
80
|
+
refund_id: refund.id,
|
|
81
|
+
amount: refundAmount / 100,
|
|
82
|
+
status: refund.status,
|
|
83
|
+
total_refunded: totalRefunded + refundAmount / 100,
|
|
84
|
+
order_total: order.total,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Chargeback/Dispute Handling
|
|
92
|
+
|
|
93
|
+
When a customer disputes a charge with their bank:
|
|
94
|
+
|
|
95
|
+
```javascript
|
|
96
|
+
// Webhook handler for disputes
|
|
97
|
+
async function handleDisputeCreated(event) {
|
|
98
|
+
const dispute = event.data.object;
|
|
99
|
+
|
|
100
|
+
// Record dispute
|
|
101
|
+
await db.query(
|
|
102
|
+
`INSERT INTO disputes (stripe_dispute_id, payment_intent_id, amount, reason, status, evidence_due_by)
|
|
103
|
+
VALUES ($1, $2, $3, $4, $5, $6)`,
|
|
104
|
+
[dispute.id, dispute.payment_intent, dispute.amount / 100,
|
|
105
|
+
dispute.reason, dispute.status,
|
|
106
|
+
new Date(dispute.evidence_details.due_by * 1000)]
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
// Alert admin immediately
|
|
110
|
+
await sendAdminAlert({
|
|
111
|
+
type: 'DISPUTE_CREATED',
|
|
112
|
+
amount: dispute.amount / 100,
|
|
113
|
+
reason: dispute.reason,
|
|
114
|
+
due_by: new Date(dispute.evidence_details.due_by * 1000),
|
|
115
|
+
order: await getOrderByPaymentIntent(dispute.payment_intent),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Submit evidence
|
|
120
|
+
async function submitDisputeEvidence(disputeId) {
|
|
121
|
+
const dispute = await getDispute(disputeId);
|
|
122
|
+
const order = await getOrderByPaymentIntent(dispute.payment_intent_id);
|
|
123
|
+
const metadata = await getOrderFraudMetadata(order.id);
|
|
124
|
+
|
|
125
|
+
await stripe.disputes.update(dispute.stripe_dispute_id, {
|
|
126
|
+
evidence: {
|
|
127
|
+
customer_name: order.customer_name,
|
|
128
|
+
customer_email_address: order.customer_email,
|
|
129
|
+
product_description: order.items.map(i => i.name).join(', '),
|
|
130
|
+
billing_address: order.billing_address,
|
|
131
|
+
shipping_address: order.shipping_address,
|
|
132
|
+
shipping_tracking_number: order.tracking_number,
|
|
133
|
+
customer_purchase_ip: metadata.ip_address,
|
|
134
|
+
receipt: order.receipt_url, // Stripe receipt URL
|
|
135
|
+
// Upload additional evidence files via Stripe File API
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Database Schema
|
|
144
|
+
|
|
145
|
+
```sql
|
|
146
|
+
CREATE TABLE refunds (
|
|
147
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
148
|
+
order_id UUID NOT NULL REFERENCES orders(id),
|
|
149
|
+
stripe_refund_id VARCHAR(255),
|
|
150
|
+
amount DECIMAL(10,2) NOT NULL,
|
|
151
|
+
reason VARCHAR(100),
|
|
152
|
+
status VARCHAR(20) DEFAULT 'pending',
|
|
153
|
+
created_by UUID REFERENCES users(id),
|
|
154
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
CREATE TABLE disputes (
|
|
158
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
159
|
+
stripe_dispute_id VARCHAR(255) UNIQUE,
|
|
160
|
+
payment_intent_id VARCHAR(255),
|
|
161
|
+
amount DECIMAL(10,2) NOT NULL,
|
|
162
|
+
reason VARCHAR(100),
|
|
163
|
+
status VARCHAR(30) DEFAULT 'needs_response',
|
|
164
|
+
evidence_due_by TIMESTAMP,
|
|
165
|
+
evidence_submitted_at TIMESTAMP,
|
|
166
|
+
outcome VARCHAR(20), -- won | lost
|
|
167
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
168
|
+
);
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Sources
|
|
174
|
+
|
|
175
|
+
- Internal gap analysis: GAP-ECOM-3 (Refund & Chargeback Handling)
|
|
176
|
+
- Stripe API: Refunds and Disputes documentation (2025)
|
|
177
|
+
- Stigg Engineering: Webhook best practices (2025)
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Shipping & Carrier Integration Patterns
|
|
2
|
+
|
|
3
|
+
> Rate lookups, label generation, tracking sync, and returns handling for e-commerce fulfillment.
|
|
4
|
+
|
|
5
|
+
**When to use:** Building any e-commerce system that ships physical products. Applies during the fulfillment phase of order processing.
|
|
6
|
+
**Stack:** Node.js/Express, EasyPost or ShipStation API (recommended), or direct carrier APIs
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Architecture Decision: Direct vs Aggregator
|
|
11
|
+
|
|
12
|
+
| Approach | Pros | Cons | Best For |
|
|
13
|
+
|----------|------|------|----------|
|
|
14
|
+
| **Direct carrier APIs** (FedEx, UPS, USPS) | Full control, no middleman fees | Each carrier = separate integration, different APIs | High volume, single carrier |
|
|
15
|
+
| **Aggregator** (EasyPost, ShipStation, Shippo) | One API for all carriers, label generation, tracking | Monthly cost, slight markup on rates | Most e-commerce projects |
|
|
16
|
+
|
|
17
|
+
**Recommendation:** Use an aggregator unless you have a specific reason not to. EasyPost is developer-friendly with a good free tier.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## EasyPost Integration (Recommended)
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @easypost/api
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Rate Shopping
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
import EasyPost from '@easypost/api';
|
|
31
|
+
const client = new EasyPost(process.env.EASYPOST_API_KEY);
|
|
32
|
+
|
|
33
|
+
async function getRates(fromAddress, toAddress, parcel) {
|
|
34
|
+
const shipment = await client.Shipment.create({
|
|
35
|
+
from_address: {
|
|
36
|
+
street1: fromAddress.street,
|
|
37
|
+
city: fromAddress.city,
|
|
38
|
+
state: fromAddress.state,
|
|
39
|
+
zip: fromAddress.zip,
|
|
40
|
+
country: fromAddress.country || 'US',
|
|
41
|
+
},
|
|
42
|
+
to_address: {
|
|
43
|
+
street1: toAddress.street,
|
|
44
|
+
city: toAddress.city,
|
|
45
|
+
state: toAddress.state,
|
|
46
|
+
zip: toAddress.zip,
|
|
47
|
+
country: toAddress.country || 'US',
|
|
48
|
+
},
|
|
49
|
+
parcel: {
|
|
50
|
+
length: parcel.length, // inches
|
|
51
|
+
width: parcel.width,
|
|
52
|
+
height: parcel.height,
|
|
53
|
+
weight: parcel.weight, // ounces
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Return sorted rates
|
|
58
|
+
return shipment.rates
|
|
59
|
+
.map(rate => ({
|
|
60
|
+
id: rate.id,
|
|
61
|
+
carrier: rate.carrier, // 'USPS', 'FedEx', 'UPS'
|
|
62
|
+
service: rate.service, // 'Priority', 'Ground', 'Express'
|
|
63
|
+
rate: parseFloat(rate.rate), // Dollar amount
|
|
64
|
+
est_delivery_days: rate.est_delivery_days,
|
|
65
|
+
delivery_date: rate.delivery_date,
|
|
66
|
+
}))
|
|
67
|
+
.sort((a, b) => a.rate - b.rate);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Buy Label
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
async function buyShippingLabel(shipmentId, rateId) {
|
|
75
|
+
const shipment = await client.Shipment.retrieve(shipmentId);
|
|
76
|
+
const purchased = await shipment.buy(rateId);
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
tracking_number: purchased.tracking_code,
|
|
80
|
+
tracking_url: purchased.tracker?.public_url,
|
|
81
|
+
label_url: purchased.postage_label.label_url,
|
|
82
|
+
label_format: purchased.postage_label.label_file_type, // 'PDF' or 'PNG'
|
|
83
|
+
carrier: purchased.selected_rate.carrier,
|
|
84
|
+
service: purchased.selected_rate.service,
|
|
85
|
+
cost: parseFloat(purchased.selected_rate.rate),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Track Package
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
async function trackPackage(trackingNumber, carrier) {
|
|
94
|
+
const tracker = await client.Tracker.create({
|
|
95
|
+
tracking_code: trackingNumber,
|
|
96
|
+
carrier: carrier,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
status: tracker.status, // 'in_transit', 'delivered', etc.
|
|
101
|
+
est_delivery: tracker.est_delivery_date,
|
|
102
|
+
tracking_details: tracker.tracking_details.map(d => ({
|
|
103
|
+
status: d.status,
|
|
104
|
+
message: d.message,
|
|
105
|
+
datetime: d.datetime,
|
|
106
|
+
city: d.tracking_location?.city,
|
|
107
|
+
state: d.tracking_location?.state,
|
|
108
|
+
})),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Shipping API Endpoints
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
// POST /api/orders/:id/shipping/rates — Get available rates
|
|
119
|
+
router.post('/orders/:id/shipping/rates', requireAuth, async (req, res) => {
|
|
120
|
+
const order = await getOrder(req.params.id);
|
|
121
|
+
const warehouse = await getWarehouseAddress();
|
|
122
|
+
|
|
123
|
+
const rates = await getRates(warehouse, order.shipping_address, {
|
|
124
|
+
length: 12, width: 8, height: 6,
|
|
125
|
+
weight: calculateOrderWeight(order.items),
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
res.json({ rates });
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// POST /api/orders/:id/shipping/purchase — Buy label
|
|
132
|
+
router.post('/orders/:id/shipping/purchase', requireAdmin, async (req, res) => {
|
|
133
|
+
const { rate_id, shipment_id } = req.body;
|
|
134
|
+
|
|
135
|
+
const label = await buyShippingLabel(shipment_id, rate_id);
|
|
136
|
+
|
|
137
|
+
await db.query(
|
|
138
|
+
`UPDATE orders SET
|
|
139
|
+
tracking_number = $1, tracking_url = $2,
|
|
140
|
+
shipping_label_url = $3, shipping_carrier = $4,
|
|
141
|
+
shipping_cost = $5, status = 'shipped', shipped_at = NOW()
|
|
142
|
+
WHERE id = $6`,
|
|
143
|
+
[label.tracking_number, label.tracking_url, label.label_url,
|
|
144
|
+
label.carrier, label.cost, req.params.id]
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
await sendShippingNotification(req.params.id, label);
|
|
148
|
+
res.json({ label });
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// GET /api/orders/:id/tracking — Get tracking info
|
|
152
|
+
router.get('/orders/:id/tracking', requireAuth, async (req, res) => {
|
|
153
|
+
const order = await getOrder(req.params.id);
|
|
154
|
+
if (!order.tracking_number) {
|
|
155
|
+
return res.json({ status: 'not_shipped' });
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const tracking = await trackPackage(order.tracking_number, order.shipping_carrier);
|
|
159
|
+
res.json(tracking);
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Free Shipping Threshold
|
|
166
|
+
|
|
167
|
+
```javascript
|
|
168
|
+
function calculateShipping(subtotal, shippingRate) {
|
|
169
|
+
const FREE_SHIPPING_THRESHOLD = parseFloat(process.env.FREE_SHIPPING_THRESHOLD || '75');
|
|
170
|
+
|
|
171
|
+
if (subtotal >= FREE_SHIPPING_THRESHOLD) {
|
|
172
|
+
return { cost: 0, reason: 'free_shipping_threshold' };
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
cost: shippingRate,
|
|
177
|
+
free_shipping_at: FREE_SHIPPING_THRESHOLD,
|
|
178
|
+
remaining: FREE_SHIPPING_THRESHOLD - subtotal,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Return Labels
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
async function createReturnLabel(orderId) {
|
|
189
|
+
const order = await getOrder(orderId);
|
|
190
|
+
const warehouse = await getWarehouseAddress();
|
|
191
|
+
|
|
192
|
+
// Reverse: customer → warehouse
|
|
193
|
+
const shipment = await client.Shipment.create({
|
|
194
|
+
from_address: order.shipping_address,
|
|
195
|
+
to_address: warehouse,
|
|
196
|
+
parcel: { length: 12, width: 8, height: 6, weight: 16 },
|
|
197
|
+
is_return: true,
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// Buy cheapest option
|
|
201
|
+
const cheapest = shipment.rates.sort((a, b) => a.rate - b.rate)[0];
|
|
202
|
+
const label = await shipment.buy(cheapest.id);
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
tracking_number: label.tracking_code,
|
|
206
|
+
label_url: label.postage_label.label_url,
|
|
207
|
+
cost: parseFloat(cheapest.rate),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Sources
|
|
215
|
+
|
|
216
|
+
- Internal gap analysis: GAP-ECOM-8 (Shipping & Carrier Integration)
|
|
217
|
+
- EasyPost API Documentation (2025)
|
|
218
|
+
- ShipStation API Documentation (2025)
|