@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,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scholarly-classification-bubble-map
|
|
3
|
+
category: frontend
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-27
|
|
6
|
+
contributor: scribe-bible
|
|
7
|
+
last_updated: 2026-02-27
|
|
8
|
+
contributors:
|
|
9
|
+
- scribe-bible
|
|
10
|
+
tags: [react, framer-motion, data-visualization, bubble-chart, classification, canvas-layout, animation]
|
|
11
|
+
difficulty: medium
|
|
12
|
+
usage_count: 1
|
|
13
|
+
success_rate: 100
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Scholarly Classification Bubble Map
|
|
17
|
+
|
|
18
|
+
## Problem
|
|
19
|
+
|
|
20
|
+
You have a fixed set of items (e.g., 150 psalms, 31 proverbs chapters, 22 revelation chapters) that multiple academic/scholarly systems classify differently. You need a visual explorer that:
|
|
21
|
+
- Shows all items as animated bubbles in a golden-angle spiral ("All" mode)
|
|
22
|
+
- Groups items into rectangular grid clusters by any selected classification system
|
|
23
|
+
- Switches between systems with animated transitions
|
|
24
|
+
- Provides hover tooltips with classification details
|
|
25
|
+
- Adapts canvas height dynamically to content density
|
|
26
|
+
|
|
27
|
+
Static lists and tables don't convey the distribution patterns. Users need to *see* how different scholars divide the same corpus.
|
|
28
|
+
|
|
29
|
+
## Solution Pattern
|
|
30
|
+
|
|
31
|
+
### Architecture (3-file pattern)
|
|
32
|
+
|
|
33
|
+
1. **Classification Data File** (`classification-systems.ts`)
|
|
34
|
+
- Define `ClassificationSystem` interface: id, scholar, title, year, methodology, categories[], classifications{}
|
|
35
|
+
- Each category has: id, name, description, color (hex)
|
|
36
|
+
- Each classification maps item number -> { primary, secondary?, notes? }
|
|
37
|
+
- Export helper functions: `getSystem()`, `getItemsByCategory()`, `getCategoryInfo()`, `getSystemStats()`
|
|
38
|
+
- All data is client-side (no API calls needed)
|
|
39
|
+
|
|
40
|
+
2. **Item Data File** (`item-data.ts`)
|
|
41
|
+
- Item metadata: size values (e.g., verse counts), authors, genres
|
|
42
|
+
- `getBubbleSize(itemNumber)` — maps count to pixel size (32-72px range)
|
|
43
|
+
- Color mappings for non-scholarly groupings
|
|
44
|
+
|
|
45
|
+
3. **Bubble Map Component** (`ScholarlyOverview.tsx`)
|
|
46
|
+
- Mode selector: "All" + one button per classification system
|
|
47
|
+
- Canvas with absolute-positioned bubbles via existing `PsalmBubble` component
|
|
48
|
+
- Two layout algorithms: `packInCircle()` for spiral, `packInRect()` for grid clusters
|
|
49
|
+
- Group labels positioned above each cluster
|
|
50
|
+
- Hover tooltip with item details + classification info
|
|
51
|
+
- "Color by" selector in "All" mode
|
|
52
|
+
- Category legend when a specific system is selected
|
|
53
|
+
- Scholar info card with name, title, year, methodology
|
|
54
|
+
|
|
55
|
+
### Layout Algorithms
|
|
56
|
+
|
|
57
|
+
**Golden-angle spiral** (for "All" mode):
|
|
58
|
+
```typescript
|
|
59
|
+
function packInCircle(count: number, cx: number, cy: number, maxRadius: number) {
|
|
60
|
+
const goldenAngle = Math.PI * (3 - Math.sqrt(5));
|
|
61
|
+
const positions = [];
|
|
62
|
+
for (let i = 0; i < count; i++) {
|
|
63
|
+
const r = maxRadius * Math.sqrt(i / count) * 0.9;
|
|
64
|
+
const theta = i * goldenAngle;
|
|
65
|
+
positions.push({ x: cx + r * Math.cos(theta), y: cy + r * Math.sin(theta) });
|
|
66
|
+
}
|
|
67
|
+
return positions;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Rectangular grid clusters** (for grouped modes):
|
|
72
|
+
```typescript
|
|
73
|
+
function packInRect(count: number, cx: number, cy: number, avgSize: number, gap: number) {
|
|
74
|
+
const step = avgSize + gap;
|
|
75
|
+
const cols = Math.ceil(Math.sqrt(count * 1.3)); // slightly wider than square
|
|
76
|
+
const rows = Math.ceil(count / cols);
|
|
77
|
+
// Position items in grid centered at (cx, cy)
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Dynamic canvas height** — compute total height from group count and grid dimensions:
|
|
82
|
+
- Few groups (Brueggemann: 3) = short canvas
|
|
83
|
+
- Many groups (Gunkel: 16) = tall canvas
|
|
84
|
+
- Use `Math.max(computedHeight, 400)` for minimum
|
|
85
|
+
|
|
86
|
+
### Integration Pattern
|
|
87
|
+
|
|
88
|
+
Add as a toggle button in the parent page, mutually exclusive with other overview panels:
|
|
89
|
+
```tsx
|
|
90
|
+
<button onClick={() => { setShowScholarlyOverview(!show); setShowOther(false); }}>
|
|
91
|
+
<Layers /> Scholarly Overview
|
|
92
|
+
</button>
|
|
93
|
+
{showScholarlyOverview && (
|
|
94
|
+
<ScholarlyOverview onItemSelect={(num) => { setItem(num); setShow(false); }} />
|
|
95
|
+
)}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Implementation Steps
|
|
99
|
+
|
|
100
|
+
1. Research 5-8 scholarly classification systems for your corpus
|
|
101
|
+
2. Create `classification-systems.ts` with all systems, categories, and per-item classifications
|
|
102
|
+
3. Create or extend `item-data.ts` with size data and helper functions
|
|
103
|
+
4. Build the bubble map component following the 3-section pattern:
|
|
104
|
+
- System selector bar (buttons with category counts)
|
|
105
|
+
- Canvas with bubbles + labels + tooltip
|
|
106
|
+
- Legend + info card
|
|
107
|
+
5. Integrate into parent page with toggle button
|
|
108
|
+
6. Verify: TypeScript clean, all items render, system switching animates
|
|
109
|
+
|
|
110
|
+
## When to Use
|
|
111
|
+
|
|
112
|
+
- Visualizing items classified by multiple academic/scholarly frameworks
|
|
113
|
+
- Any corpus where different experts categorize the same items differently
|
|
114
|
+
- Interactive exploration of classification distributions
|
|
115
|
+
- Bible books, literary works, historical artifacts, species taxonomies
|
|
116
|
+
|
|
117
|
+
## When NOT to Use
|
|
118
|
+
|
|
119
|
+
- Items without multiple classification systems (just use a simple grouped list)
|
|
120
|
+
- Very large datasets (1000+ items) — canvas positioning becomes slow
|
|
121
|
+
- When classification data isn't available client-side (would need API)
|
|
122
|
+
- Simple category filters (use dropdown + list instead)
|
|
123
|
+
|
|
124
|
+
## Common Mistakes
|
|
125
|
+
|
|
126
|
+
- Forgetting to handle items not classified in a system (provide fallback position/color)
|
|
127
|
+
- Not making canvas height dynamic — fixed height cuts off groups or wastes space
|
|
128
|
+
- Using D3.js when Framer Motion + absolute positioning suffices (simpler, no extra dep)
|
|
129
|
+
- Not sorting groups by size (largest first) — layout looks unbalanced otherwise
|
|
130
|
+
- Skipping the "Color by" selector in "All" mode — users can't compare systems without it
|
|
131
|
+
|
|
132
|
+
## Key Dependencies
|
|
133
|
+
|
|
134
|
+
- `framer-motion` — AnimatePresence + motion.div for tooltip animations
|
|
135
|
+
- `PsalmBubble` (or equivalent) — reusable bubble component with spring transitions
|
|
136
|
+
- `ResizeObserver` — responsive container sizing
|
|
137
|
+
- CSS custom properties for theming (`var(--bg-primary)`, etc.)
|
|
138
|
+
|
|
139
|
+
## Related Skills
|
|
140
|
+
|
|
141
|
+
- Canvas Bubble Animation patterns
|
|
142
|
+
- React Flow graph visualization
|
|
143
|
+
- Data-driven layout algorithms
|
|
144
|
+
|
|
145
|
+
## References
|
|
146
|
+
|
|
147
|
+
- Implemented in: scribe-bible (Psalms scholarly classification)
|
|
148
|
+
- Files: `ScholarlyOverview.tsx`, `classification-systems.ts`, `psalm-data.ts`
|
|
149
|
+
- Path: `frontend/src/components/Poetry/`
|
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
# CI/CD Pipeline Builder
|
|
2
|
+
|
|
3
|
+
**Tier:** POWERFUL
|
|
4
|
+
**Category:** Engineering
|
|
5
|
+
**Domain:** DevOps / Automation
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Analyzes your project stack and generates production-ready CI/CD pipeline configurations for GitHub Actions, GitLab CI, and Bitbucket Pipelines. Handles matrix testing, caching strategies, deployment stages, environment promotion, and secret management — tailored to your actual tech stack.
|
|
12
|
+
|
|
13
|
+
## Core Capabilities
|
|
14
|
+
|
|
15
|
+
- **Stack detection** — reads `package.json`, `Dockerfile`, `pyproject.toml`, `go.mod`, etc.
|
|
16
|
+
- **Pipeline generation** — GitHub Actions, GitLab CI, Bitbucket Pipelines
|
|
17
|
+
- **Matrix testing** — multi-version, multi-OS, multi-environment
|
|
18
|
+
- **Smart caching** — npm, pip, Docker layer, Gradle, Maven
|
|
19
|
+
- **Deployment stages** — build → test → staging → production with approvals
|
|
20
|
+
- **Environment promotion** — automatic on green tests, manual gate for production
|
|
21
|
+
- **Secret management** — patterns for GitHub Secrets, GitLab CI Variables, Vault, AWS SSM
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## When to Use
|
|
26
|
+
|
|
27
|
+
- Starting a new project and need a CI/CD baseline
|
|
28
|
+
- Migrating from one CI platform to another
|
|
29
|
+
- Adding deployment stages to an existing pipeline
|
|
30
|
+
- Auditing a slow pipeline and optimizing caching
|
|
31
|
+
- Setting up environment promotion with manual approval gates
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Workflow
|
|
36
|
+
|
|
37
|
+
### Step 1 — Stack Detection
|
|
38
|
+
|
|
39
|
+
Ask Claude to analyze your repo:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Analyze my repo and generate a GitHub Actions CI/CD pipeline.
|
|
43
|
+
Check: package.json, Dockerfile, .nvmrc, pyproject.toml, go.mod
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Claude will inspect:
|
|
47
|
+
|
|
48
|
+
| File | Signals |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `package.json` | Node version, test runner, build tool |
|
|
51
|
+
| `.nvmrc` / `.node-version` | Exact Node version |
|
|
52
|
+
| `Dockerfile` | Base image, multi-stage build |
|
|
53
|
+
| `pyproject.toml` | Python version, test runner |
|
|
54
|
+
| `go.mod` | Go version |
|
|
55
|
+
| `vercel.json` | Vercel deployment config |
|
|
56
|
+
| `k8s/` or `helm/` | Kubernetes deployment |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Complete Example: Next.js + Vercel
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
# .github/workflows/ci.yml
|
|
64
|
+
name: CI/CD
|
|
65
|
+
|
|
66
|
+
on:
|
|
67
|
+
push:
|
|
68
|
+
branches: [main, develop]
|
|
69
|
+
pull_request:
|
|
70
|
+
branches: [main, develop]
|
|
71
|
+
|
|
72
|
+
concurrency:
|
|
73
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
74
|
+
cancel-in-progress: true
|
|
75
|
+
|
|
76
|
+
env:
|
|
77
|
+
NODE_VERSION: '20'
|
|
78
|
+
PNPM_VERSION: '8'
|
|
79
|
+
|
|
80
|
+
jobs:
|
|
81
|
+
lint-typecheck:
|
|
82
|
+
name: Lint & Typecheck
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@v4
|
|
86
|
+
- uses: pnpm/action-setup@v3
|
|
87
|
+
with:
|
|
88
|
+
version: ${{ env.PNPM_VERSION }}
|
|
89
|
+
- uses: actions/setup-node@v4
|
|
90
|
+
with:
|
|
91
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
92
|
+
cache: 'pnpm'
|
|
93
|
+
- run: pnpm install --frozen-lockfile
|
|
94
|
+
- run: pnpm lint
|
|
95
|
+
- run: pnpm typecheck
|
|
96
|
+
|
|
97
|
+
test:
|
|
98
|
+
name: Test (Node ${{ matrix.node }})
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
strategy:
|
|
101
|
+
matrix:
|
|
102
|
+
node: ['18', '20', '22']
|
|
103
|
+
fail-fast: false
|
|
104
|
+
steps:
|
|
105
|
+
- uses: actions/checkout@v4
|
|
106
|
+
- uses: pnpm/action-setup@v3
|
|
107
|
+
with:
|
|
108
|
+
version: ${{ env.PNPM_VERSION }}
|
|
109
|
+
- uses: actions/setup-node@v4
|
|
110
|
+
with:
|
|
111
|
+
node-version: ${{ matrix.node }}
|
|
112
|
+
cache: 'pnpm'
|
|
113
|
+
- run: pnpm install --frozen-lockfile
|
|
114
|
+
- name: Run tests with coverage
|
|
115
|
+
run: pnpm test:ci
|
|
116
|
+
env:
|
|
117
|
+
DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
|
|
118
|
+
- name: Upload coverage
|
|
119
|
+
uses: codecov/codecov-action@v4
|
|
120
|
+
with:
|
|
121
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
122
|
+
|
|
123
|
+
build:
|
|
124
|
+
name: Build
|
|
125
|
+
runs-on: ubuntu-latest
|
|
126
|
+
needs: [lint-typecheck, test]
|
|
127
|
+
steps:
|
|
128
|
+
- uses: actions/checkout@v4
|
|
129
|
+
- uses: pnpm/action-setup@v3
|
|
130
|
+
with:
|
|
131
|
+
version: ${{ env.PNPM_VERSION }}
|
|
132
|
+
- uses: actions/setup-node@v4
|
|
133
|
+
with:
|
|
134
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
135
|
+
cache: 'pnpm'
|
|
136
|
+
- run: pnpm install --frozen-lockfile
|
|
137
|
+
- name: Build
|
|
138
|
+
run: pnpm build
|
|
139
|
+
env:
|
|
140
|
+
NEXT_PUBLIC_API_URL: ${{ vars.NEXT_PUBLIC_API_URL }}
|
|
141
|
+
- uses: actions/upload-artifact@v4
|
|
142
|
+
with:
|
|
143
|
+
name: build-${{ github.sha }}
|
|
144
|
+
path: .next/
|
|
145
|
+
retention-days: 7
|
|
146
|
+
|
|
147
|
+
deploy-staging:
|
|
148
|
+
name: Deploy to Staging
|
|
149
|
+
runs-on: ubuntu-latest
|
|
150
|
+
needs: build
|
|
151
|
+
if: github.ref == 'refs/heads/develop'
|
|
152
|
+
environment:
|
|
153
|
+
name: staging
|
|
154
|
+
url: https://staging.myapp.com
|
|
155
|
+
steps:
|
|
156
|
+
- uses: actions/checkout@v4
|
|
157
|
+
- uses: amondnet/vercel-action@v25
|
|
158
|
+
with:
|
|
159
|
+
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
|
160
|
+
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
|
|
161
|
+
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
|
|
162
|
+
|
|
163
|
+
deploy-production:
|
|
164
|
+
name: Deploy to Production
|
|
165
|
+
runs-on: ubuntu-latest
|
|
166
|
+
needs: build
|
|
167
|
+
if: github.ref == 'refs/heads/main'
|
|
168
|
+
environment:
|
|
169
|
+
name: production
|
|
170
|
+
url: https://myapp.com
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
- uses: amondnet/vercel-action@v25
|
|
174
|
+
with:
|
|
175
|
+
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
|
176
|
+
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
|
|
177
|
+
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
|
|
178
|
+
vercel-args: '--prod'
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Complete Example: Python + AWS Lambda
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
# .github/workflows/deploy.yml
|
|
187
|
+
name: Python Lambda CI/CD
|
|
188
|
+
|
|
189
|
+
on:
|
|
190
|
+
push:
|
|
191
|
+
branches: [main]
|
|
192
|
+
pull_request:
|
|
193
|
+
|
|
194
|
+
jobs:
|
|
195
|
+
test:
|
|
196
|
+
runs-on: ubuntu-latest
|
|
197
|
+
strategy:
|
|
198
|
+
matrix:
|
|
199
|
+
python-version: ['3.11', '3.12']
|
|
200
|
+
steps:
|
|
201
|
+
- uses: actions/checkout@v4
|
|
202
|
+
- uses: actions/setup-python@v5
|
|
203
|
+
with:
|
|
204
|
+
python-version: ${{ matrix.python-version }}
|
|
205
|
+
cache: 'pip'
|
|
206
|
+
- run: pip install -r requirements-dev.txt
|
|
207
|
+
- run: pytest tests/ -v --cov=src --cov-report=xml
|
|
208
|
+
- run: mypy src/
|
|
209
|
+
- run: ruff check src/ tests/
|
|
210
|
+
|
|
211
|
+
security:
|
|
212
|
+
runs-on: ubuntu-latest
|
|
213
|
+
steps:
|
|
214
|
+
- uses: actions/checkout@v4
|
|
215
|
+
- uses: actions/setup-python@v5
|
|
216
|
+
with:
|
|
217
|
+
python-version: '3.12'
|
|
218
|
+
cache: 'pip'
|
|
219
|
+
- run: pip install bandit safety
|
|
220
|
+
- run: bandit -r src/ -ll
|
|
221
|
+
- run: safety check
|
|
222
|
+
|
|
223
|
+
package:
|
|
224
|
+
needs: [test, security]
|
|
225
|
+
runs-on: ubuntu-latest
|
|
226
|
+
if: github.ref == 'refs/heads/main'
|
|
227
|
+
steps:
|
|
228
|
+
- uses: actions/checkout@v4
|
|
229
|
+
- uses: actions/setup-python@v5
|
|
230
|
+
with:
|
|
231
|
+
python-version: '3.12'
|
|
232
|
+
- name: Build Lambda zip
|
|
233
|
+
run: |
|
|
234
|
+
pip install -r requirements.txt --target ./package
|
|
235
|
+
cd package && zip -r ../lambda.zip .
|
|
236
|
+
cd .. && zip lambda.zip -r src/
|
|
237
|
+
- uses: actions/upload-artifact@v4
|
|
238
|
+
with:
|
|
239
|
+
name: lambda-${{ github.sha }}
|
|
240
|
+
path: lambda.zip
|
|
241
|
+
|
|
242
|
+
deploy-staging:
|
|
243
|
+
needs: package
|
|
244
|
+
runs-on: ubuntu-latest
|
|
245
|
+
environment: staging
|
|
246
|
+
steps:
|
|
247
|
+
- uses: actions/download-artifact@v4
|
|
248
|
+
with:
|
|
249
|
+
name: lambda-${{ github.sha }}
|
|
250
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
251
|
+
with:
|
|
252
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
253
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
254
|
+
aws-region: eu-west-1
|
|
255
|
+
- run: |
|
|
256
|
+
aws lambda update-function-code \
|
|
257
|
+
--function-name myapp-staging \
|
|
258
|
+
--zip-file fileb://lambda.zip
|
|
259
|
+
|
|
260
|
+
deploy-production:
|
|
261
|
+
needs: deploy-staging
|
|
262
|
+
runs-on: ubuntu-latest
|
|
263
|
+
environment: production
|
|
264
|
+
steps:
|
|
265
|
+
- uses: actions/download-artifact@v4
|
|
266
|
+
with:
|
|
267
|
+
name: lambda-${{ github.sha }}
|
|
268
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
269
|
+
with:
|
|
270
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
271
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
272
|
+
aws-region: eu-west-1
|
|
273
|
+
- run: |
|
|
274
|
+
aws lambda update-function-code \
|
|
275
|
+
--function-name myapp-production \
|
|
276
|
+
--zip-file fileb://lambda.zip
|
|
277
|
+
VERSION=$(aws lambda publish-version \
|
|
278
|
+
--function-name myapp-production \
|
|
279
|
+
--query 'Version' --output text)
|
|
280
|
+
aws lambda update-alias \
|
|
281
|
+
--function-name myapp-production \
|
|
282
|
+
--name live \
|
|
283
|
+
--function-version $VERSION
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Complete Example: Docker + Kubernetes
|
|
289
|
+
|
|
290
|
+
```yaml
|
|
291
|
+
# .github/workflows/k8s-deploy.yml
|
|
292
|
+
name: Docker + Kubernetes
|
|
293
|
+
|
|
294
|
+
on:
|
|
295
|
+
push:
|
|
296
|
+
branches: [main]
|
|
297
|
+
tags: ['v*']
|
|
298
|
+
|
|
299
|
+
env:
|
|
300
|
+
REGISTRY: ghcr.io
|
|
301
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
302
|
+
|
|
303
|
+
jobs:
|
|
304
|
+
build-push:
|
|
305
|
+
runs-on: ubuntu-latest
|
|
306
|
+
permissions:
|
|
307
|
+
contents: read
|
|
308
|
+
packages: write
|
|
309
|
+
outputs:
|
|
310
|
+
image-digest: ${{ steps.push.outputs.digest }}
|
|
311
|
+
|
|
312
|
+
steps:
|
|
313
|
+
- uses: actions/checkout@v4
|
|
314
|
+
|
|
315
|
+
- name: Set up Docker Buildx
|
|
316
|
+
uses: docker/setup-buildx-action@v3
|
|
317
|
+
|
|
318
|
+
- name: Log in to GHCR
|
|
319
|
+
uses: docker/login-action@v3
|
|
320
|
+
with:
|
|
321
|
+
registry: ${{ env.REGISTRY }}
|
|
322
|
+
username: ${{ github.actor }}
|
|
323
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
324
|
+
|
|
325
|
+
- name: Extract metadata
|
|
326
|
+
id: meta
|
|
327
|
+
uses: docker/metadata-action@v5
|
|
328
|
+
with:
|
|
329
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
330
|
+
tags: |
|
|
331
|
+
type=ref,event=branch
|
|
332
|
+
type=semver,pattern={{version}}
|
|
333
|
+
type=sha,prefix=sha-
|
|
334
|
+
|
|
335
|
+
- name: Build and push
|
|
336
|
+
id: push
|
|
337
|
+
uses: docker/build-push-action@v5
|
|
338
|
+
with:
|
|
339
|
+
context: .
|
|
340
|
+
push: true
|
|
341
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
342
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
343
|
+
cache-from: type=gha
|
|
344
|
+
cache-to: type=gha,mode=max
|
|
345
|
+
|
|
346
|
+
deploy-staging:
|
|
347
|
+
needs: build-push
|
|
348
|
+
runs-on: ubuntu-latest
|
|
349
|
+
environment: staging
|
|
350
|
+
steps:
|
|
351
|
+
- uses: actions/checkout@v4
|
|
352
|
+
- uses: azure/setup-kubectl@v3
|
|
353
|
+
- name: Set kubeconfig
|
|
354
|
+
run: |
|
|
355
|
+
echo "${{ secrets.KUBE_CONFIG_STAGING }}" | base64 -d > /tmp/kubeconfig
|
|
356
|
+
echo "KUBECONFIG=/tmp/kubeconfig" >> $GITHUB_ENV
|
|
357
|
+
- name: Deploy
|
|
358
|
+
run: |
|
|
359
|
+
kubectl set image deployment/myapp \
|
|
360
|
+
myapp=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ needs.build-push.outputs.image-digest }} \
|
|
361
|
+
-n staging
|
|
362
|
+
kubectl rollout status deployment/myapp -n staging --timeout=5m
|
|
363
|
+
|
|
364
|
+
deploy-production:
|
|
365
|
+
needs: deploy-staging
|
|
366
|
+
runs-on: ubuntu-latest
|
|
367
|
+
environment: production
|
|
368
|
+
steps:
|
|
369
|
+
- uses: actions/checkout@v4
|
|
370
|
+
- uses: azure/setup-kubectl@v3
|
|
371
|
+
- name: Set kubeconfig
|
|
372
|
+
run: |
|
|
373
|
+
echo "${{ secrets.KUBE_CONFIG_PROD }}" | base64 -d > /tmp/kubeconfig
|
|
374
|
+
echo "KUBECONFIG=/tmp/kubeconfig" >> $GITHUB_ENV
|
|
375
|
+
- name: Canary deploy
|
|
376
|
+
run: |
|
|
377
|
+
kubectl set image deployment/myapp-canary \
|
|
378
|
+
myapp=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ needs.build-push.outputs.image-digest }} \
|
|
379
|
+
-n production
|
|
380
|
+
kubectl rollout status deployment/myapp-canary -n production --timeout=5m
|
|
381
|
+
sleep 120
|
|
382
|
+
kubectl set image deployment/myapp \
|
|
383
|
+
myapp=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ needs.build-push.outputs.image-digest }} \
|
|
384
|
+
-n production
|
|
385
|
+
kubectl rollout status deployment/myapp -n production --timeout=10m
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## GitLab CI Equivalent
|
|
391
|
+
|
|
392
|
+
```yaml
|
|
393
|
+
# .gitlab-ci.yml
|
|
394
|
+
stages: [lint, test, build, deploy-staging, deploy-production]
|
|
395
|
+
|
|
396
|
+
variables:
|
|
397
|
+
NODE_VERSION: "20"
|
|
398
|
+
DOCKER_BUILDKIT: "1"
|
|
399
|
+
|
|
400
|
+
.node-cache: &node-cache
|
|
401
|
+
cache:
|
|
402
|
+
key:
|
|
403
|
+
files: [pnpm-lock.yaml]
|
|
404
|
+
paths:
|
|
405
|
+
- node_modules/
|
|
406
|
+
- .pnpm-store/
|
|
407
|
+
|
|
408
|
+
lint:
|
|
409
|
+
stage: lint
|
|
410
|
+
image: node:${NODE_VERSION}-alpine
|
|
411
|
+
<<: *node-cache
|
|
412
|
+
script:
|
|
413
|
+
- corepack enable && pnpm install --frozen-lockfile
|
|
414
|
+
- pnpm lint && pnpm typecheck
|
|
415
|
+
|
|
416
|
+
test:
|
|
417
|
+
stage: test
|
|
418
|
+
image: node:${NODE_VERSION}-alpine
|
|
419
|
+
<<: *node-cache
|
|
420
|
+
parallel:
|
|
421
|
+
matrix:
|
|
422
|
+
- NODE_VERSION: ["18", "20", "22"]
|
|
423
|
+
script:
|
|
424
|
+
- corepack enable && pnpm install --frozen-lockfile
|
|
425
|
+
- pnpm test:ci
|
|
426
|
+
coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'
|
|
427
|
+
|
|
428
|
+
deploy-staging:
|
|
429
|
+
stage: deploy-staging
|
|
430
|
+
environment:
|
|
431
|
+
name: staging
|
|
432
|
+
url: https://staging.myapp.com
|
|
433
|
+
only: [develop]
|
|
434
|
+
script:
|
|
435
|
+
- npx vercel --token=$VERCEL_TOKEN
|
|
436
|
+
|
|
437
|
+
deploy-production:
|
|
438
|
+
stage: deploy-production
|
|
439
|
+
environment:
|
|
440
|
+
name: production
|
|
441
|
+
url: https://myapp.com
|
|
442
|
+
only: [main]
|
|
443
|
+
when: manual
|
|
444
|
+
script:
|
|
445
|
+
- npx vercel --prod --token=$VERCEL_TOKEN
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## Secret Management Patterns
|
|
451
|
+
|
|
452
|
+
### GitHub Actions — Secret Hierarchy
|
|
453
|
+
```
|
|
454
|
+
Repository secrets → all branches
|
|
455
|
+
Environment secrets → only that environment
|
|
456
|
+
Organization secrets → all repos in org
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Fetching from AWS SSM at runtime
|
|
460
|
+
```yaml
|
|
461
|
+
- name: Load secrets from SSM
|
|
462
|
+
run: |
|
|
463
|
+
DB_URL=$(aws ssm get-parameter \
|
|
464
|
+
--name "/myapp/production/DATABASE_URL" \
|
|
465
|
+
--with-decryption \
|
|
466
|
+
--query 'Parameter.Value' --output text)
|
|
467
|
+
echo "DATABASE_URL=$DB_URL" >> $GITHUB_ENV
|
|
468
|
+
env:
|
|
469
|
+
AWS_REGION: eu-west-1
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### HashiCorp Vault integration
|
|
473
|
+
```yaml
|
|
474
|
+
- uses: hashicorp/vault-action@v2
|
|
475
|
+
with:
|
|
476
|
+
url: ${{ secrets.VAULT_ADDR }}
|
|
477
|
+
token: ${{ secrets.VAULT_TOKEN }}
|
|
478
|
+
secrets: |
|
|
479
|
+
secret/data/myapp/prod DATABASE_URL | DATABASE_URL ;
|
|
480
|
+
secret/data/myapp/prod API_KEY | API_KEY
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
## Caching Cheat Sheet
|
|
486
|
+
|
|
487
|
+
| Stack | Cache key | Cache path |
|
|
488
|
+
|-------|-----------|------------|
|
|
489
|
+
| npm | `package-lock.json` | `~/.npm` |
|
|
490
|
+
| pnpm | `pnpm-lock.yaml` | `~/.pnpm-store` |
|
|
491
|
+
| pip | `requirements.txt` | `~/.cache/pip` |
|
|
492
|
+
| poetry | `poetry.lock` | `~/.cache/pypoetry` |
|
|
493
|
+
| Docker | SHA of Dockerfile | GHA cache (type=gha) |
|
|
494
|
+
| Go | `go.sum` | `~/go/pkg/mod` |
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## Common Pitfalls
|
|
499
|
+
|
|
500
|
+
- **Secrets in logs** — never `echo $SECRET`; use `::add-mask::$SECRET` if needed
|
|
501
|
+
- **No concurrency limits** — add `concurrency:` to cancel stale runs on PR push
|
|
502
|
+
- **Skipping `--frozen-lockfile`** — lockfile drift breaks reproducibility
|
|
503
|
+
- **No rollback plan** — test `kubectl rollout undo` or `vercel rollback` before you need it
|
|
504
|
+
- **Mutable image tags** — never use `latest` in production; tag by git SHA
|
|
505
|
+
- **Missing environment protection rules** — set required reviewers in GitHub Environments
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## Best Practices
|
|
510
|
+
|
|
511
|
+
1. **Fail fast** — lint/typecheck before expensive test jobs
|
|
512
|
+
2. **Artifact immutability** — Docker image tagged by git SHA
|
|
513
|
+
3. **Environment parity** — same image through all envs, config via env vars
|
|
514
|
+
4. **Canary first** — 10% traffic + error rate check before 100%
|
|
515
|
+
5. **Pin action versions** — `@v4` not `@main`
|
|
516
|
+
6. **Least privilege** — each job gets only the IAM scopes it needs
|
|
517
|
+
7. **Notify on failure** — Slack webhook for production deploy failures
|