@thierrynakoa/fire-flow 12.2.2 → 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 -690
- package/TROUBLESHOOTING.md +264 -367
- 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-verify-uat.md +9 -177
- 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 -25
- 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/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/browser-use-expert.md +0 -210
- 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,522 @@
|
|
|
1
|
+
# Database Schema Designer
|
|
2
|
+
|
|
3
|
+
**Tier:** POWERFUL
|
|
4
|
+
**Category:** Engineering
|
|
5
|
+
**Domain:** Data Architecture / Backend
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Design relational database schemas from requirements and generate migrations, TypeScript/Python types, seed data, RLS policies, and indexes. Handles multi-tenancy, soft deletes, audit trails, versioning, and polymorphic associations.
|
|
12
|
+
|
|
13
|
+
## Core Capabilities
|
|
14
|
+
|
|
15
|
+
- **Schema design** — normalize requirements into tables, relationships, constraints
|
|
16
|
+
- **Migration generation** — Drizzle, Prisma, TypeORM, Alembic
|
|
17
|
+
- **Type generation** — TypeScript interfaces, Python dataclasses/Pydantic models
|
|
18
|
+
- **RLS policies** — Row-Level Security for multi-tenant apps
|
|
19
|
+
- **Index strategy** — composite indexes, partial indexes, covering indexes
|
|
20
|
+
- **Seed data** — realistic test data generation
|
|
21
|
+
- **ERD generation** — Mermaid diagram from schema
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## When to Use
|
|
26
|
+
|
|
27
|
+
- Designing a new feature that needs database tables
|
|
28
|
+
- Reviewing a schema for performance or normalization issues
|
|
29
|
+
- Adding multi-tenancy to an existing schema
|
|
30
|
+
- Generating TypeScript types from a Prisma schema
|
|
31
|
+
- Planning a schema migration for a breaking change
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Schema Design Process
|
|
36
|
+
|
|
37
|
+
### Step 1: Requirements → Entities
|
|
38
|
+
|
|
39
|
+
Given requirements:
|
|
40
|
+
> "Users can create projects. Each project has tasks. Tasks can have labels. Tasks can be assigned to users. We need a full audit trail."
|
|
41
|
+
|
|
42
|
+
Extract entities:
|
|
43
|
+
```
|
|
44
|
+
User, Project, Task, Label, TaskLabel (junction), TaskAssignment, AuditLog
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 2: Identify Relationships
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
User 1──* Project (owner)
|
|
51
|
+
Project 1──* Task
|
|
52
|
+
Task *──* Label (via TaskLabel)
|
|
53
|
+
Task *──* User (via TaskAssignment)
|
|
54
|
+
User 1──* AuditLog
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Step 3: Add Cross-cutting Concerns
|
|
58
|
+
|
|
59
|
+
- Multi-tenancy: add `organization_id` to all tenant-scoped tables
|
|
60
|
+
- Soft deletes: add `deleted_at TIMESTAMPTZ` instead of hard deletes
|
|
61
|
+
- Audit trail: add `created_by`, `updated_by`, `created_at`, `updated_at`
|
|
62
|
+
- Versioning: add `version INTEGER` for optimistic locking
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Full Schema Example (Task Management SaaS)
|
|
67
|
+
|
|
68
|
+
### Prisma Schema
|
|
69
|
+
|
|
70
|
+
```prisma
|
|
71
|
+
// schema.prisma
|
|
72
|
+
generator client {
|
|
73
|
+
provider = "prisma-client-js"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
datasource db {
|
|
77
|
+
provider = "postgresql"
|
|
78
|
+
url = env("DATABASE_URL")
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ── Multi-tenancy ─────────────────────────────────────────────────────────────
|
|
82
|
+
|
|
83
|
+
model Organization {
|
|
84
|
+
id String @id @default(cuid())
|
|
85
|
+
name String
|
|
86
|
+
slug String @unique
|
|
87
|
+
plan Plan @default(FREE)
|
|
88
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
89
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
90
|
+
deletedAt DateTime? @map("deleted_at")
|
|
91
|
+
|
|
92
|
+
users OrganizationMember[]
|
|
93
|
+
projects Project[]
|
|
94
|
+
auditLogs AuditLog[]
|
|
95
|
+
|
|
96
|
+
@@map("organizations")
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
model OrganizationMember {
|
|
100
|
+
id String @id @default(cuid())
|
|
101
|
+
organizationId String @map("organization_id")
|
|
102
|
+
userId String @map("user_id")
|
|
103
|
+
role OrgRole @default(MEMBER)
|
|
104
|
+
joinedAt DateTime @default(now()) @map("joined_at")
|
|
105
|
+
|
|
106
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
107
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
108
|
+
|
|
109
|
+
@@unique([organizationId, userId])
|
|
110
|
+
@@index([userId])
|
|
111
|
+
@@map("organization_members")
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
model User {
|
|
115
|
+
id String @id @default(cuid())
|
|
116
|
+
email String @unique
|
|
117
|
+
name String?
|
|
118
|
+
avatarUrl String? @map("avatar_url")
|
|
119
|
+
passwordHash String? @map("password_hash")
|
|
120
|
+
emailVerifiedAt DateTime? @map("email_verified_at")
|
|
121
|
+
lastLoginAt DateTime? @map("last_login_at")
|
|
122
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
123
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
124
|
+
deletedAt DateTime? @map("deleted_at")
|
|
125
|
+
|
|
126
|
+
memberships OrganizationMember[]
|
|
127
|
+
ownedProjects Project[] @relation("ProjectOwner")
|
|
128
|
+
assignedTasks TaskAssignment[]
|
|
129
|
+
comments Comment[]
|
|
130
|
+
auditLogs AuditLog[]
|
|
131
|
+
|
|
132
|
+
@@map("users")
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// ── Core entities ─────────────────────────────────────────────────────────────
|
|
136
|
+
|
|
137
|
+
model Project {
|
|
138
|
+
id String @id @default(cuid())
|
|
139
|
+
organizationId String @map("organization_id")
|
|
140
|
+
ownerId String @map("owner_id")
|
|
141
|
+
name String
|
|
142
|
+
description String?
|
|
143
|
+
status ProjectStatus @default(ACTIVE)
|
|
144
|
+
settings Json @default("{}")
|
|
145
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
146
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
147
|
+
deletedAt DateTime? @map("deleted_at")
|
|
148
|
+
|
|
149
|
+
organization Organization @relation(fields: [organizationId], references: [id])
|
|
150
|
+
owner User @relation("ProjectOwner", fields: [ownerId], references: [id])
|
|
151
|
+
tasks Task[]
|
|
152
|
+
labels Label[]
|
|
153
|
+
|
|
154
|
+
@@index([organizationId])
|
|
155
|
+
@@index([organizationId, status])
|
|
156
|
+
@@index([deletedAt])
|
|
157
|
+
@@map("projects")
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
model Task {
|
|
161
|
+
id String @id @default(cuid())
|
|
162
|
+
projectId String @map("project_id")
|
|
163
|
+
title String
|
|
164
|
+
description String?
|
|
165
|
+
status TaskStatus @default(TODO)
|
|
166
|
+
priority Priority @default(MEDIUM)
|
|
167
|
+
dueDate DateTime? @map("due_date")
|
|
168
|
+
position Float @default(0) // For drag-and-drop ordering
|
|
169
|
+
version Int @default(1) // Optimistic locking
|
|
170
|
+
createdById String @map("created_by_id")
|
|
171
|
+
updatedById String @map("updated_by_id")
|
|
172
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
173
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
174
|
+
deletedAt DateTime? @map("deleted_at")
|
|
175
|
+
|
|
176
|
+
project Project @relation(fields: [projectId], references: [id])
|
|
177
|
+
assignments TaskAssignment[]
|
|
178
|
+
labels TaskLabel[]
|
|
179
|
+
comments Comment[]
|
|
180
|
+
attachments Attachment[]
|
|
181
|
+
|
|
182
|
+
@@index([projectId])
|
|
183
|
+
@@index([projectId, status])
|
|
184
|
+
@@index([projectId, deletedAt])
|
|
185
|
+
@@index([dueDate], where: { deletedAt: null }) // Partial index
|
|
186
|
+
@@map("tasks")
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ── Polymorphic attachments ───────────────────────────────────────────────────
|
|
190
|
+
|
|
191
|
+
model Attachment {
|
|
192
|
+
id String @id @default(cuid())
|
|
193
|
+
// Polymorphic association
|
|
194
|
+
entityType String @map("entity_type") // "task" | "comment"
|
|
195
|
+
entityId String @map("entity_id")
|
|
196
|
+
filename String
|
|
197
|
+
mimeType String @map("mime_type")
|
|
198
|
+
sizeBytes Int @map("size_bytes")
|
|
199
|
+
storageKey String @map("storage_key") // S3 key
|
|
200
|
+
uploadedById String @map("uploaded_by_id")
|
|
201
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
202
|
+
|
|
203
|
+
// Only one concrete relation (task) — polymorphic handled at app level
|
|
204
|
+
task Task? @relation(fields: [entityId], references: [id], map: "attachment_task_fk")
|
|
205
|
+
|
|
206
|
+
@@index([entityType, entityId])
|
|
207
|
+
@@map("attachments")
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// ── Audit trail ───────────────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
model AuditLog {
|
|
213
|
+
id String @id @default(cuid())
|
|
214
|
+
organizationId String @map("organization_id")
|
|
215
|
+
userId String? @map("user_id")
|
|
216
|
+
action String // "task.created", "task.status_changed"
|
|
217
|
+
entityType String @map("entity_type")
|
|
218
|
+
entityId String @map("entity_id")
|
|
219
|
+
before Json? // Previous state
|
|
220
|
+
after Json? // New state
|
|
221
|
+
ipAddress String? @map("ip_address")
|
|
222
|
+
userAgent String? @map("user_agent")
|
|
223
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
224
|
+
|
|
225
|
+
organization Organization @relation(fields: [organizationId], references: [id])
|
|
226
|
+
user User? @relation(fields: [userId], references: [id])
|
|
227
|
+
|
|
228
|
+
@@index([organizationId, createdAt(sort: Desc)])
|
|
229
|
+
@@index([entityType, entityId])
|
|
230
|
+
@@index([userId])
|
|
231
|
+
@@map("audit_logs")
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
enum Plan { FREE STARTER GROWTH ENTERPRISE }
|
|
235
|
+
enum OrgRole { OWNER ADMIN MEMBER VIEWER }
|
|
236
|
+
enum ProjectStatus { ACTIVE ARCHIVED }
|
|
237
|
+
enum TaskStatus { TODO IN_PROGRESS IN_REVIEW DONE CANCELLED }
|
|
238
|
+
enum Priority { LOW MEDIUM HIGH CRITICAL }
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
### Drizzle Schema (TypeScript)
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
// db/schema.ts
|
|
247
|
+
import {
|
|
248
|
+
pgTable, text, timestamp, integer, boolean,
|
|
249
|
+
varchar, jsonb, real, pgEnum, uniqueIndex, index,
|
|
250
|
+
} from 'drizzle-orm/pg-core'
|
|
251
|
+
import { createId } from '@paralleldrive/cuid2'
|
|
252
|
+
|
|
253
|
+
export const taskStatusEnum = pgEnum('task_status', [
|
|
254
|
+
'todo', 'in_progress', 'in_review', 'done', 'cancelled'
|
|
255
|
+
])
|
|
256
|
+
export const priorityEnum = pgEnum('priority', ['low', 'medium', 'high', 'critical'])
|
|
257
|
+
|
|
258
|
+
export const tasks = pgTable('tasks', {
|
|
259
|
+
id: text('id').primaryKey().$defaultFn(() => createId()),
|
|
260
|
+
projectId: text('project_id').notNull().references(() => projects.id),
|
|
261
|
+
title: varchar('title', { length: 500 }).notNull(),
|
|
262
|
+
description: text('description'),
|
|
263
|
+
status: taskStatusEnum('status').notNull().default('todo'),
|
|
264
|
+
priority: priorityEnum('priority').notNull().default('medium'),
|
|
265
|
+
dueDate: timestamp('due_date', { withTimezone: true }),
|
|
266
|
+
position: real('position').notNull().default(0),
|
|
267
|
+
version: integer('version').notNull().default(1),
|
|
268
|
+
createdById: text('created_by_id').notNull().references(() => users.id),
|
|
269
|
+
updatedById: text('updated_by_id').notNull().references(() => users.id),
|
|
270
|
+
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
|
271
|
+
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
|
272
|
+
deletedAt: timestamp('deleted_at', { withTimezone: true }),
|
|
273
|
+
}, (table) => ({
|
|
274
|
+
projectIdx: index('tasks_project_id_idx').on(table.projectId),
|
|
275
|
+
projectStatusIdx: index('tasks_project_status_idx').on(table.projectId, table.status),
|
|
276
|
+
}))
|
|
277
|
+
|
|
278
|
+
// Infer TypeScript types
|
|
279
|
+
export type Task = typeof tasks.$inferSelect
|
|
280
|
+
export type NewTask = typeof tasks.$inferInsert
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### Alembic Migration (Python / SQLAlchemy)
|
|
286
|
+
|
|
287
|
+
```python
|
|
288
|
+
# alembic/versions/20260301_create_tasks.py
|
|
289
|
+
"""Create tasks table
|
|
290
|
+
|
|
291
|
+
Revision ID: a1b2c3d4e5f6
|
|
292
|
+
Revises: previous_revision
|
|
293
|
+
Create Date: 2026-03-01 12:00:00
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
from alembic import op
|
|
297
|
+
import sqlalchemy as sa
|
|
298
|
+
from sqlalchemy.dialects import postgresql
|
|
299
|
+
|
|
300
|
+
revision = 'a1b2c3d4e5f6'
|
|
301
|
+
down_revision = 'previous_revision'
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
def upgrade() -> None:
|
|
305
|
+
# Create enums
|
|
306
|
+
task_status = postgresql.ENUM(
|
|
307
|
+
'todo', 'in_progress', 'in_review', 'done', 'cancelled',
|
|
308
|
+
name='task_status'
|
|
309
|
+
)
|
|
310
|
+
task_status.create(op.get_bind())
|
|
311
|
+
|
|
312
|
+
op.create_table(
|
|
313
|
+
'tasks',
|
|
314
|
+
sa.Column('id', sa.Text(), primary_key=True),
|
|
315
|
+
sa.Column('project_id', sa.Text(), sa.ForeignKey('projects.id'), nullable=False),
|
|
316
|
+
sa.Column('title', sa.VARCHAR(500), nullable=False),
|
|
317
|
+
sa.Column('description', sa.Text()),
|
|
318
|
+
sa.Column('status', postgresql.ENUM('todo', 'in_progress', 'in_review', 'done', 'cancelled', name='task_status', create_type=False), nullable=False, server_default='todo'),
|
|
319
|
+
sa.Column('priority', sa.Text(), nullable=False, server_default='medium'),
|
|
320
|
+
sa.Column('due_date', sa.TIMESTAMP(timezone=True)),
|
|
321
|
+
sa.Column('position', sa.Float(), nullable=False, server_default='0'),
|
|
322
|
+
sa.Column('version', sa.Integer(), nullable=False, server_default='1'),
|
|
323
|
+
sa.Column('created_by_id', sa.Text(), sa.ForeignKey('users.id'), nullable=False),
|
|
324
|
+
sa.Column('updated_by_id', sa.Text(), sa.ForeignKey('users.id'), nullable=False),
|
|
325
|
+
sa.Column('created_at', sa.TIMESTAMP(timezone=True), nullable=False, server_default=sa.text('NOW()')),
|
|
326
|
+
sa.Column('updated_at', sa.TIMESTAMP(timezone=True), nullable=False, server_default=sa.text('NOW()')),
|
|
327
|
+
sa.Column('deleted_at', sa.TIMESTAMP(timezone=True)),
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
# Indexes
|
|
331
|
+
op.create_index('tasks_project_id_idx', 'tasks', ['project_id'])
|
|
332
|
+
op.create_index('tasks_project_status_idx', 'tasks', ['project_id', 'status'])
|
|
333
|
+
# Partial index for active tasks only
|
|
334
|
+
op.create_index(
|
|
335
|
+
'tasks_due_date_active_idx',
|
|
336
|
+
'tasks', ['due_date'],
|
|
337
|
+
postgresql_where=sa.text('deleted_at IS NULL')
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def downgrade() -> None:
|
|
342
|
+
op.drop_table('tasks')
|
|
343
|
+
op.execute("DROP TYPE IF EXISTS task_status")
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Row-Level Security (RLS) Policies
|
|
349
|
+
|
|
350
|
+
```sql
|
|
351
|
+
-- Enable RLS
|
|
352
|
+
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
|
|
353
|
+
ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
|
|
354
|
+
|
|
355
|
+
-- Create app role
|
|
356
|
+
CREATE ROLE app_user;
|
|
357
|
+
|
|
358
|
+
-- Users can only see tasks in their organization's projects
|
|
359
|
+
CREATE POLICY tasks_org_isolation ON tasks
|
|
360
|
+
FOR ALL TO app_user
|
|
361
|
+
USING (
|
|
362
|
+
project_id IN (
|
|
363
|
+
SELECT p.id FROM projects p
|
|
364
|
+
JOIN organization_members om ON om.organization_id = p.organization_id
|
|
365
|
+
WHERE om.user_id = current_setting('app.current_user_id')::text
|
|
366
|
+
)
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
-- Soft delete: never show deleted records
|
|
370
|
+
CREATE POLICY tasks_no_deleted ON tasks
|
|
371
|
+
FOR SELECT TO app_user
|
|
372
|
+
USING (deleted_at IS NULL);
|
|
373
|
+
|
|
374
|
+
-- Only task creator or admin can delete
|
|
375
|
+
CREATE POLICY tasks_delete_policy ON tasks
|
|
376
|
+
FOR DELETE TO app_user
|
|
377
|
+
USING (
|
|
378
|
+
created_by_id = current_setting('app.current_user_id')::text
|
|
379
|
+
OR EXISTS (
|
|
380
|
+
SELECT 1 FROM organization_members om
|
|
381
|
+
JOIN projects p ON p.organization_id = om.organization_id
|
|
382
|
+
WHERE p.id = tasks.project_id
|
|
383
|
+
AND om.user_id = current_setting('app.current_user_id')::text
|
|
384
|
+
AND om.role IN ('owner', 'admin')
|
|
385
|
+
)
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
-- Set user context (call at start of each request)
|
|
389
|
+
SELECT set_config('app.current_user_id', $1, true);
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Seed Data Generation
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// db/seed.ts
|
|
398
|
+
import { faker } from '@faker-js/faker'
|
|
399
|
+
import { db } from './client'
|
|
400
|
+
import { organizations, users, projects, tasks } from './schema'
|
|
401
|
+
import { createId } from '@paralleldrive/cuid2'
|
|
402
|
+
import { hashPassword } from '../src/lib/auth'
|
|
403
|
+
|
|
404
|
+
async function seed() {
|
|
405
|
+
console.log('Seeding database...')
|
|
406
|
+
|
|
407
|
+
// Create org
|
|
408
|
+
const [org] = await db.insert(organizations).values({
|
|
409
|
+
id: createId(),
|
|
410
|
+
name: 'Acme Corp',
|
|
411
|
+
slug: 'acme',
|
|
412
|
+
plan: 'growth',
|
|
413
|
+
}).returning()
|
|
414
|
+
|
|
415
|
+
// Create users
|
|
416
|
+
const adminUser = await db.insert(users).values({
|
|
417
|
+
id: createId(),
|
|
418
|
+
email: 'admin@acme.com',
|
|
419
|
+
name: 'Alice Admin',
|
|
420
|
+
passwordHash: await hashPassword('password123'),
|
|
421
|
+
}).returning().then(r => r[0])
|
|
422
|
+
|
|
423
|
+
// Create projects
|
|
424
|
+
const projectsData = Array.from({ length: 3 }, () => ({
|
|
425
|
+
id: createId(),
|
|
426
|
+
organizationId: org.id,
|
|
427
|
+
ownerId: adminUser.id,
|
|
428
|
+
name: faker.company.catchPhrase(),
|
|
429
|
+
description: faker.lorem.paragraph(),
|
|
430
|
+
status: 'active' as const,
|
|
431
|
+
}))
|
|
432
|
+
|
|
433
|
+
const createdProjects = await db.insert(projects).values(projectsData).returning()
|
|
434
|
+
|
|
435
|
+
// Create tasks for each project
|
|
436
|
+
for (const project of createdProjects) {
|
|
437
|
+
const tasksData = Array.from({ length: faker.number.int({ min: 5, max: 20 }) }, (_, i) => ({
|
|
438
|
+
id: createId(),
|
|
439
|
+
projectId: project.id,
|
|
440
|
+
title: faker.hacker.phrase(),
|
|
441
|
+
description: faker.lorem.sentences(2),
|
|
442
|
+
status: faker.helpers.arrayElement(['todo', 'in_progress', 'done'] as const),
|
|
443
|
+
priority: faker.helpers.arrayElement(['low', 'medium', 'high'] as const),
|
|
444
|
+
position: i * 1000,
|
|
445
|
+
createdById: adminUser.id,
|
|
446
|
+
updatedById: adminUser.id,
|
|
447
|
+
}))
|
|
448
|
+
|
|
449
|
+
await db.insert(tasks).values(tasksData)
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
console.log(`✅ Seeded: 1 org, ${projectsData.length} projects, tasks`)
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
seed().catch(console.error).finally(() => process.exit(0))
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## ERD Generation (Mermaid)
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
erDiagram
|
|
464
|
+
Organization ||--o{ OrganizationMember : has
|
|
465
|
+
Organization ||--o{ Project : owns
|
|
466
|
+
User ||--o{ OrganizationMember : joins
|
|
467
|
+
User ||--o{ Task : "created by"
|
|
468
|
+
Project ||--o{ Task : contains
|
|
469
|
+
Task ||--o{ TaskAssignment : has
|
|
470
|
+
Task ||--o{ TaskLabel : has
|
|
471
|
+
Task ||--o{ Comment : has
|
|
472
|
+
Task ||--o{ Attachment : has
|
|
473
|
+
Label ||--o{ TaskLabel : "applied to"
|
|
474
|
+
User ||--o{ TaskAssignment : assigned
|
|
475
|
+
|
|
476
|
+
Organization {
|
|
477
|
+
string id PK
|
|
478
|
+
string name
|
|
479
|
+
string slug
|
|
480
|
+
string plan
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
Task {
|
|
484
|
+
string id PK
|
|
485
|
+
string project_id FK
|
|
486
|
+
string title
|
|
487
|
+
string status
|
|
488
|
+
string priority
|
|
489
|
+
timestamp due_date
|
|
490
|
+
timestamp deleted_at
|
|
491
|
+
int version
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Generate from Prisma:
|
|
496
|
+
```bash
|
|
497
|
+
npx prisma-erd-generator
|
|
498
|
+
# or: npx @dbml/cli prisma2dbml -i schema.prisma | npx dbml-to-mermaid
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Common Pitfalls
|
|
504
|
+
|
|
505
|
+
- **Soft delete without index** — `WHERE deleted_at IS NULL` without index = full scan
|
|
506
|
+
- **Missing composite indexes** — `WHERE org_id = ? AND status = ?` needs a composite index
|
|
507
|
+
- **Mutable surrogate keys** — never use email or slug as PK; use UUID/CUID
|
|
508
|
+
- **Non-nullable without default** — adding a NOT NULL column to existing table requires default or migration plan
|
|
509
|
+
- **No optimistic locking** — concurrent updates overwrite each other; add `version` column
|
|
510
|
+
- **RLS not tested** — always test RLS with a non-superuser role
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Best Practices
|
|
515
|
+
|
|
516
|
+
1. **Timestamps everywhere** — `created_at`, `updated_at` on every table
|
|
517
|
+
2. **Soft deletes for auditable data** — `deleted_at` instead of DELETE
|
|
518
|
+
3. **Audit log for compliance** — log before/after JSON for regulated domains
|
|
519
|
+
4. **UUIDs or CUIDs as PKs** — avoid sequential integer leakage
|
|
520
|
+
5. **Index foreign keys** — every FK column should have an index
|
|
521
|
+
6. **Partial indexes** — use `WHERE deleted_at IS NULL` for active-only queries
|
|
522
|
+
7. **RLS over application-level filtering** — database enforces tenancy, not just app code
|