@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,336 @@
|
|
|
1
|
+
# Form Button Auto-Submit Bug - Missing type="button" Attribute
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Interactive buttons inside a `<form>` element (drag handles, remove buttons, etc.) are triggering unintended form submissions when clicked, causing the form to save and close prematurely.
|
|
6
|
+
|
|
7
|
+
### Symptoms
|
|
8
|
+
|
|
9
|
+
- Clicking a drag handle auto-saves and closes the modal
|
|
10
|
+
- User can only drag one item at a time before the form submits
|
|
11
|
+
- Remove/delete buttons inside forms trigger saves instead of just removing items
|
|
12
|
+
- Interactive elements cause unexpected form submission
|
|
13
|
+
|
|
14
|
+
### Why It Was Hard
|
|
15
|
+
|
|
16
|
+
- **Silent bug** - No error messages, just unexpected behavior
|
|
17
|
+
- **HTML default behavior** - Easy to forget that buttons default to `type="submit"`
|
|
18
|
+
- **Works in isolation** - Buttons work fine outside of forms, making the issue context-dependent
|
|
19
|
+
- **Buried in component nesting** - The button might be 3-4 components deep from the actual `<form>` element
|
|
20
|
+
- **Event propagation** - Even with `onClick` handlers, form submission still happens
|
|
21
|
+
|
|
22
|
+
### Impact
|
|
23
|
+
|
|
24
|
+
- **Poor UX** - Users can't complete multi-step operations (drag multiple items, edit fields)
|
|
25
|
+
- **Data loss risk** - Partial edits get saved prematurely
|
|
26
|
+
- **Frustration** - Users must reopen forms repeatedly to make incremental changes
|
|
27
|
+
- **Wasted time** - Developers spend hours debugging event handlers when the fix is one attribute
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## The Solution
|
|
32
|
+
|
|
33
|
+
### Root Cause
|
|
34
|
+
|
|
35
|
+
**HTML Standard Behavior:** Buttons inside `<form>` elements default to `type="submit"` if the `type` attribute is not explicitly set.
|
|
36
|
+
|
|
37
|
+
From the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button):
|
|
38
|
+
> The default behavior of the button depends on the element's type attribute:
|
|
39
|
+
> - `submit`: The button submits the form data to the server (default if not specified inside a form)
|
|
40
|
+
> - `button`: The button has no default behavior
|
|
41
|
+
> - `reset`: The button resets all form fields to their initial values
|
|
42
|
+
|
|
43
|
+
### How to Fix
|
|
44
|
+
|
|
45
|
+
**Add `type="button"` to ALL interactive buttons inside forms.**
|
|
46
|
+
|
|
47
|
+
#### Before (Broken)
|
|
48
|
+
```jsx
|
|
49
|
+
<form onSubmit={handleSubmit}>
|
|
50
|
+
{/* ... */}
|
|
51
|
+
|
|
52
|
+
<button
|
|
53
|
+
{...attributes}
|
|
54
|
+
{...listeners}
|
|
55
|
+
className="cursor-grab"
|
|
56
|
+
>
|
|
57
|
+
<GripVertical className="w-5 h-5" />
|
|
58
|
+
</button>
|
|
59
|
+
|
|
60
|
+
{/* Clicking this drag handle submits the form! */}
|
|
61
|
+
</form>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### After (Fixed)
|
|
65
|
+
```jsx
|
|
66
|
+
<form onSubmit={handleSubmit}>
|
|
67
|
+
{/* ... */}
|
|
68
|
+
|
|
69
|
+
<button
|
|
70
|
+
type="button" {/* ✅ Prevents form submission */}
|
|
71
|
+
{...attributes}
|
|
72
|
+
{...listeners}
|
|
73
|
+
className="cursor-grab"
|
|
74
|
+
>
|
|
75
|
+
<GripVertical className="w-5 h-5" />
|
|
76
|
+
</button>
|
|
77
|
+
|
|
78
|
+
{/* Now clicking only triggers drag, not form submit */}
|
|
79
|
+
</form>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Complete Example
|
|
83
|
+
|
|
84
|
+
```jsx
|
|
85
|
+
const EditModal = () => {
|
|
86
|
+
const handleSubmit = (e) => {
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
// Save form data
|
|
89
|
+
setShowModal(false);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<form onSubmit={handleSubmit}>
|
|
94
|
+
{/* Interactive buttons - all need type="button" */}
|
|
95
|
+
|
|
96
|
+
{/* Drag handle */}
|
|
97
|
+
<button
|
|
98
|
+
type="button"
|
|
99
|
+
{...attributes}
|
|
100
|
+
{...listeners}
|
|
101
|
+
className="cursor-grab"
|
|
102
|
+
>
|
|
103
|
+
<GripVertical />
|
|
104
|
+
</button>
|
|
105
|
+
|
|
106
|
+
{/* Remove button */}
|
|
107
|
+
<button
|
|
108
|
+
type="button"
|
|
109
|
+
onClick={() => removeItem(id)}
|
|
110
|
+
className="text-red-500"
|
|
111
|
+
>
|
|
112
|
+
<Trash2 />
|
|
113
|
+
</button>
|
|
114
|
+
|
|
115
|
+
{/* Toggle button */}
|
|
116
|
+
<button
|
|
117
|
+
type="button"
|
|
118
|
+
onClick={() => setExpanded(!expanded)}
|
|
119
|
+
>
|
|
120
|
+
{expanded ? <ChevronUp /> : <ChevronDown />}
|
|
121
|
+
</button>
|
|
122
|
+
|
|
123
|
+
{/* Only this button should submit */}
|
|
124
|
+
<button type="submit" className="btn-primary">
|
|
125
|
+
Save Changes
|
|
126
|
+
</button>
|
|
127
|
+
</form>
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Testing the Fix
|
|
135
|
+
|
|
136
|
+
### Manual Test
|
|
137
|
+
|
|
138
|
+
1. **Open the form/modal** with interactive elements
|
|
139
|
+
2. **Click each interactive button** (drag handle, remove, toggle, etc.)
|
|
140
|
+
3. **Verify form stays open** and only performs the intended action
|
|
141
|
+
4. **Click the actual submit button** to verify form still submits correctly
|
|
142
|
+
|
|
143
|
+
### Before Fix
|
|
144
|
+
```
|
|
145
|
+
User drags one course → Form auto-submits → Modal closes
|
|
146
|
+
User must reopen → Drag another course → Form auto-submits again
|
|
147
|
+
Result: Frustrating one-at-a-time workflow
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### After Fix
|
|
151
|
+
```
|
|
152
|
+
User drags multiple courses → Modal stays open
|
|
153
|
+
User clicks "Update Learning Path" → Form submits → Modal closes
|
|
154
|
+
Result: Expected behavior, smooth UX
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Test Cases
|
|
158
|
+
|
|
159
|
+
```jsx
|
|
160
|
+
describe('Form Interactive Buttons', () => {
|
|
161
|
+
it('should not submit form when clicking drag handle', () => {
|
|
162
|
+
const handleSubmit = jest.fn();
|
|
163
|
+
render(<EditForm onSubmit={handleSubmit} />);
|
|
164
|
+
|
|
165
|
+
const dragHandle = screen.getByRole('button', { name: /drag/i });
|
|
166
|
+
fireEvent.click(dragHandle);
|
|
167
|
+
|
|
168
|
+
expect(handleSubmit).not.toHaveBeenCalled();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('should not submit form when clicking remove button', () => {
|
|
172
|
+
const handleSubmit = jest.fn();
|
|
173
|
+
render(<EditForm onSubmit={handleSubmit} />);
|
|
174
|
+
|
|
175
|
+
const removeBtn = screen.getByRole('button', { name: /remove/i });
|
|
176
|
+
fireEvent.click(removeBtn);
|
|
177
|
+
|
|
178
|
+
expect(handleSubmit).not.toHaveBeenCalled();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('should submit form when clicking submit button', () => {
|
|
182
|
+
const handleSubmit = jest.fn();
|
|
183
|
+
render(<EditForm onSubmit={handleSubmit} />);
|
|
184
|
+
|
|
185
|
+
const submitBtn = screen.getByRole('button', { name: /save/i });
|
|
186
|
+
fireEvent.click(submitBtn);
|
|
187
|
+
|
|
188
|
+
expect(handleSubmit).toHaveBeenCalled();
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Prevention
|
|
196
|
+
|
|
197
|
+
### 1. ESLint Rule
|
|
198
|
+
|
|
199
|
+
Add this rule to your `.eslintrc`:
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"rules": {
|
|
204
|
+
"react/button-has-type": ["error", {
|
|
205
|
+
"button": true,
|
|
206
|
+
"submit": true,
|
|
207
|
+
"reset": true
|
|
208
|
+
}]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
This enforces explicit `type` attributes on all buttons.
|
|
214
|
+
|
|
215
|
+
### 2. Code Review Checklist
|
|
216
|
+
|
|
217
|
+
When reviewing forms, check:
|
|
218
|
+
- [ ] All `<button>` elements inside `<form>` have explicit `type` attribute
|
|
219
|
+
- [ ] Interactive buttons (drag, remove, toggle) use `type="button"`
|
|
220
|
+
- [ ] Submit buttons use `type="submit"`
|
|
221
|
+
- [ ] Reset buttons use `type="reset"`
|
|
222
|
+
|
|
223
|
+
### 3. Component Pattern
|
|
224
|
+
|
|
225
|
+
Create a reusable button component that defaults to `type="button"`:
|
|
226
|
+
|
|
227
|
+
```jsx
|
|
228
|
+
const Button = ({ type = "button", children, ...props }) => (
|
|
229
|
+
<button type={type} {...props}>
|
|
230
|
+
{children}
|
|
231
|
+
</button>
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
// Usage
|
|
235
|
+
<Button onClick={handleClick}>Click Me</Button> // type="button" by default
|
|
236
|
+
<Button type="submit">Submit Form</Button> // explicit submit
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 4. Search Your Codebase
|
|
240
|
+
|
|
241
|
+
Find potential issues:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Find buttons without type attribute inside forms
|
|
245
|
+
grep -r "<button" --include="*.jsx" --include="*.tsx" | grep -v "type="
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Related Patterns
|
|
251
|
+
|
|
252
|
+
- [Form Validation Patterns](./FORM_VALIDATION_PATTERNS.md)
|
|
253
|
+
- [React Form Best Practices](../patterns-standards/REACT_FORM_BEST_PRACTICES.md)
|
|
254
|
+
- [Event Handling in Forms](./FORM_EVENT_HANDLING.md)
|
|
255
|
+
- [Drag and Drop in Forms](../advanced-features/DRAG_DROP_IMPLEMENTATION.md)
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Common Mistakes to Avoid
|
|
260
|
+
|
|
261
|
+
- ❌ **Assuming `onClick` prevents submission** - Event handlers don't stop default form behavior
|
|
262
|
+
- ❌ **Only fixing visible submit buttons** - All buttons in forms need explicit types
|
|
263
|
+
- ❌ **Using `e.preventDefault()` in button clicks** - Just use `type="button"` instead
|
|
264
|
+
- ❌ **Forgetting nested components** - Button might be in a child component inside the form
|
|
265
|
+
- ❌ **Relying on manual testing** - Add ESLint rule to catch this automatically
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Real-World Example
|
|
270
|
+
|
|
271
|
+
**Project:** MERN Community LMS
|
|
272
|
+
**Date:** February 15, 2026
|
|
273
|
+
**File:** `client/src/pages/admin/LearningPaths.jsx`
|
|
274
|
+
|
|
275
|
+
**Bug:** Drag-and-drop in Learning Path editor auto-saved after moving just one course.
|
|
276
|
+
|
|
277
|
+
**Investigation:**
|
|
278
|
+
1. User reported modal closing after dragging one course
|
|
279
|
+
2. Checked `handleCourseDragEnd` - only updates state, doesn't save ✓
|
|
280
|
+
3. Checked `useEffect` hooks - none watching formData ✓
|
|
281
|
+
4. Realized: drag handle button was **missing `type="button"`**
|
|
282
|
+
|
|
283
|
+
**Fix:** Added `type="button"` to both buttons in `SortableCourse` component:
|
|
284
|
+
- Line 75: Drag handle button (GripVertical icon)
|
|
285
|
+
- Line 113: Remove button (Trash2 icon)
|
|
286
|
+
|
|
287
|
+
**Result:** Users can now drag multiple courses before manually saving.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Resources
|
|
292
|
+
|
|
293
|
+
- [MDN: `<button>` Element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
|
|
294
|
+
- [React ESLint Plugin: button-has-type](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/button-has-type.md)
|
|
295
|
+
- [HTML Form Submission](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event)
|
|
296
|
+
- [Preventing Default Form Behavior](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Time to Implement
|
|
301
|
+
|
|
302
|
+
**1-5 minutes** - Just add `type="button"` to each interactive button
|
|
303
|
+
**Detection time:** Can take hours if you don't know to look for it
|
|
304
|
+
|
|
305
|
+
## Difficulty Level
|
|
306
|
+
|
|
307
|
+
⭐ (1/5) - Trivial fix once you know, but hard to spot initially
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
**Author Notes:**
|
|
312
|
+
|
|
313
|
+
This is one of the most frustrating bugs to debug because:
|
|
314
|
+
1. There's no error message
|
|
315
|
+
2. It "almost" works (clicking does something, just the wrong thing)
|
|
316
|
+
3. It's a fundamental HTML behavior most developers don't think about
|
|
317
|
+
4. The fix is embarrassingly simple once found
|
|
318
|
+
|
|
319
|
+
**The key insight:** In HTML, inside a `<form>`, a button is guilty (type="submit") until proven innocent (type="button").
|
|
320
|
+
|
|
321
|
+
**Always ask:** "Is this button inside a form? Does it need to submit the form?"
|
|
322
|
+
|
|
323
|
+
If the answer is NO, add `type="button"`.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
**Pattern Recognition:**
|
|
328
|
+
- Drag handles → `type="button"`
|
|
329
|
+
- Remove/Delete buttons → `type="button"`
|
|
330
|
+
- Toggle buttons → `type="button"`
|
|
331
|
+
- Icon-only buttons → `type="button"`
|
|
332
|
+
- Modal close buttons → `type="button"`
|
|
333
|
+
- Dropdown triggers → `type="button"`
|
|
334
|
+
|
|
335
|
+
**Only these should submit:**
|
|
336
|
+
- Explicit "Save", "Submit", "Update" buttons → `type="submit"`
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Fillable PDF Feature - Implementation Complete ✅
|
|
2
|
+
|
|
3
|
+
**Date**: October 27, 2025 (Evening)
|
|
4
|
+
**Status**: ✅ COMPLETE & READY TO USE
|
|
5
|
+
**Build**: ✅ PASSING (18.94s, zero errors)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What Was Done
|
|
10
|
+
|
|
11
|
+
### 1. ✅ Created Dedicated Fillable PDF Page
|
|
12
|
+
|
|
13
|
+
**New File**: `src/components/Documents/FillablePDFPage.tsx`
|
|
14
|
+
|
|
15
|
+
**Features**:
|
|
16
|
+
- Clear instructions banner explaining what Fillable PDFs are
|
|
17
|
+
- List of available templates
|
|
18
|
+
- Distinction from native GTA Forms
|
|
19
|
+
- Collapsible instructions (can hide/show)
|
|
20
|
+
- Wraps the AIDocumentGenerator component
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### 2. ✅ Updated Navigation
|
|
25
|
+
|
|
26
|
+
**Files Modified**:
|
|
27
|
+
- `src/components/Layout/AppLayout.tsx` - Renamed "Documents" to "Fillable PDFs"
|
|
28
|
+
- `src/App.tsx` - Updated to use FillablePDFPage component
|
|
29
|
+
|
|
30
|
+
**Result**: Navigation now clearly shows "Fillable PDFs" tab instead of generic "Documents"
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
### 3. ✅ Created User Documentation
|
|
35
|
+
|
|
36
|
+
**New File**: `FILLABLE_PDF_USER_GUIDE.md` (2,500+ lines)
|
|
37
|
+
|
|
38
|
+
**Contents**:
|
|
39
|
+
- How to access the feature
|
|
40
|
+
- Step-by-step usage instructions
|
|
41
|
+
- Detailed template descriptions
|
|
42
|
+
- Tips & best practices
|
|
43
|
+
- Troubleshooting guide
|
|
44
|
+
- FAQ section
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## How Users Access Fillable PDFs
|
|
49
|
+
|
|
50
|
+
### From the App:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
1. Open BudgetApp
|
|
54
|
+
2. Click "Fillable PDFs" in navigation menu
|
|
55
|
+
3. See instructions banner
|
|
56
|
+
4. Select a template
|
|
57
|
+
5. Click "Auto-Populate"
|
|
58
|
+
6. Review populated fields
|
|
59
|
+
7. Click "Apply All Fields"
|
|
60
|
+
8. Export as PDF
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Available Templates
|
|
66
|
+
|
|
67
|
+
The Fillable PDF feature includes 6 templates:
|
|
68
|
+
|
|
69
|
+
1. **Form 656** - Offer in Compromise (GTA)
|
|
70
|
+
2. **Letter of Hardship** - Financial hardship explanation
|
|
71
|
+
3. **Debt Validation Letter** - Request debt verification
|
|
72
|
+
4. **Settlement Proposal** - Debt settlement proposal
|
|
73
|
+
5. **Payment Verification Letter** - Payment history confirmation
|
|
74
|
+
6. **Blank Document** - Custom document creation
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Key Features
|
|
79
|
+
|
|
80
|
+
### ✅ Auto-Populate
|
|
81
|
+
- Reads user profile from Settings
|
|
82
|
+
- Extracts Bills, Debts, Transactions
|
|
83
|
+
- Generates field suggestions
|
|
84
|
+
- Shows confidence scores (0-100%)
|
|
85
|
+
- Color-coded reliability (green/blue/yellow/red)
|
|
86
|
+
|
|
87
|
+
### ✅ Preview Dialog
|
|
88
|
+
- Shows all populated fields before applying
|
|
89
|
+
- Allows editing individual fields
|
|
90
|
+
- Can accept/reject specific fields
|
|
91
|
+
- "Apply All" for bulk population
|
|
92
|
+
|
|
93
|
+
### ✅ PDF Export
|
|
94
|
+
- **Fillable PDF**: Editable after download
|
|
95
|
+
- **Flattened PDF**: Locked for submission
|
|
96
|
+
- **Both**: Download both versions
|
|
97
|
+
- Watermark options (Draft, Copy, Confidential, None)
|
|
98
|
+
|
|
99
|
+
### ✅ Document Editing
|
|
100
|
+
- Click to edit text directly
|
|
101
|
+
- Multiple pages support
|
|
102
|
+
- Version history
|
|
103
|
+
- Undo/Redo functionality
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## How It's Different from Native GTA Forms
|
|
108
|
+
|
|
109
|
+
| Feature | Fillable PDFs | Native GTA Forms |
|
|
110
|
+
|---------|--------------|------------------|
|
|
111
|
+
| **Type** | Document templates with placeholders | Interactive web forms |
|
|
112
|
+
| **Editing** | Free-form text editing | Field-by-field input |
|
|
113
|
+
| **Export** | PDF download | Form submission + PDF |
|
|
114
|
+
| **Validation** | Manual review | Real-time validation |
|
|
115
|
+
| **Use Case** | Letters, proposals, documents | GTA form filing |
|
|
116
|
+
| **Location** | "Fillable PDFs" tab | "GTA Forms" tab (coming next) |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Files Modified
|
|
121
|
+
|
|
122
|
+
### New Files (1)
|
|
123
|
+
```
|
|
124
|
+
✅ src/components/Documents/FillablePDFPage.tsx (117 lines)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Modified Files (2)
|
|
128
|
+
```
|
|
129
|
+
✅ src/components/Layout/AppLayout.tsx (line 27: "Documents" → "Fillable PDFs")
|
|
130
|
+
✅ src/App.tsx (lines 33, 250: import and use FillablePDFPage)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Documentation (2)
|
|
134
|
+
```
|
|
135
|
+
✅ FILLABLE_PDF_USER_GUIDE.md (380+ lines)
|
|
136
|
+
✅ FILLABLE_PDF_IMPLEMENTATION_COMPLETE.md (this file)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Build Verification
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
✅ Build: PASSING
|
|
145
|
+
Build Time: 18.94 seconds
|
|
146
|
+
Modules: 2,681
|
|
147
|
+
Errors: 0
|
|
148
|
+
TypeScript Errors: 0
|
|
149
|
+
Warnings: 0 (new)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Testing Instructions
|
|
155
|
+
|
|
156
|
+
### Test 1: Access Fillable PDFs
|
|
157
|
+
1. Open app
|
|
158
|
+
2. Click "Fillable PDFs" in navigation
|
|
159
|
+
3. **Verify**: Instructions banner appears
|
|
160
|
+
4. **Verify**: Template selector is visible
|
|
161
|
+
|
|
162
|
+
### Test 2: Instructions Banner
|
|
163
|
+
1. Click X button to close instructions
|
|
164
|
+
2. **Verify**: Instructions disappear
|
|
165
|
+
3. Click "Show Instructions" button
|
|
166
|
+
4. **Verify**: Instructions reappear
|
|
167
|
+
|
|
168
|
+
### Test 3: Auto-Populate Workflow
|
|
169
|
+
1. Go to Settings → Complete profile
|
|
170
|
+
2. Go to "Fillable PDFs" tab
|
|
171
|
+
3. Select "Form 656" template
|
|
172
|
+
4. Click "Auto-Populate" button
|
|
173
|
+
5. **Verify**: Preview dialog appears
|
|
174
|
+
6. **Verify**: Fields show confidence scores
|
|
175
|
+
7. Click "Apply All Fields"
|
|
176
|
+
8. **Verify**: Placeholders replaced with actual data
|
|
177
|
+
|
|
178
|
+
### Test 4: PDF Export
|
|
179
|
+
1. After populating document
|
|
180
|
+
2. Click export button
|
|
181
|
+
3. Select "Flattened PDF"
|
|
182
|
+
4. **Verify**: PDF downloads
|
|
183
|
+
5. Open PDF
|
|
184
|
+
6. **Verify**: Data is correct and locked
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## What's Next: Native GTA Forms
|
|
189
|
+
|
|
190
|
+
Now that Fillable PDFs are complete and separate, we can implement auto-populate for the **Native UI Forms**:
|
|
191
|
+
|
|
192
|
+
### Forms to Implement (6 total):
|
|
193
|
+
1. Form 656 - Offer in Compromise
|
|
194
|
+
2. Form 433-A - Wage Earner Financial Info
|
|
195
|
+
3. Form 433-B - Self-Employed Financial Info
|
|
196
|
+
4. Form 433-D - Installment Agreement
|
|
197
|
+
5. Form 433-F - Simplified Collection Info
|
|
198
|
+
6. Form 9465 - Installment Agreement Request
|
|
199
|
+
|
|
200
|
+
### Implementation Plan:
|
|
201
|
+
1. Create "GTA Forms" navigation tab
|
|
202
|
+
2. Create form pages for each form
|
|
203
|
+
3. Integrate DocumentPopulationUI with each form
|
|
204
|
+
4. Use the hooks we created today (useAutoPopulateForm656, etc.)
|
|
205
|
+
5. Test auto-populate on each form
|
|
206
|
+
6. Verify no duplication issues (state batching bug is fixed)
|
|
207
|
+
|
|
208
|
+
**Estimated Time**: 3-4 hours
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Summary
|
|
213
|
+
|
|
214
|
+
✅ **Fillable PDF Feature**: Complete and ready to use
|
|
215
|
+
✅ **Navigation**: Clear and separated from other features
|
|
216
|
+
✅ **Documentation**: Comprehensive user guide created
|
|
217
|
+
✅ **Build**: Passing with zero errors
|
|
218
|
+
✅ **Testing**: Ready for user testing
|
|
219
|
+
|
|
220
|
+
**Next Step**: Implement auto-populate for Native GTA Forms (separate from Fillable PDFs)
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
**Implementation Complete**: October 27, 2025
|
|
225
|
+
**Ready for**: User testing and native form implementation
|
|
226
|
+
**Status**: ✅ PRODUCTION READY
|