@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,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plugin-doc-auto-generation
|
|
3
|
+
category: plugin-development
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-03-06
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
last_updated: 2026-03-06
|
|
8
|
+
contributors:
|
|
9
|
+
- dominion-flow
|
|
10
|
+
tags: [bash, plugin, documentation, automation, cli, devops]
|
|
11
|
+
difficulty: easy
|
|
12
|
+
usage_count: 0
|
|
13
|
+
success_rate: 100
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Plugin Documentation Auto-Generation
|
|
17
|
+
|
|
18
|
+
## Problem
|
|
19
|
+
|
|
20
|
+
Claude Code plugin documentation drifts from reality over time. When you add new commands, agents, or skills, the index files and README stats become stale. Manual counting is error-prone and tedious.
|
|
21
|
+
|
|
22
|
+
Common symptoms:
|
|
23
|
+
- README says "39 commands" but there are actually 42 on disk
|
|
24
|
+
- SKILLS-INDEX.md lists 237 skills but 470+ exist in the filesystem
|
|
25
|
+
- Agent reference table shows 5 agents but 13 `.md` files exist in `agents/`
|
|
26
|
+
- Version numbers are inconsistent across plugin.json, README, and COMMAND-REFERENCE
|
|
27
|
+
|
|
28
|
+
## Solution Pattern
|
|
29
|
+
|
|
30
|
+
Create shell scripts that scan the filesystem (the source of truth) and either generate index files or audit documentation for drift. Use `plugin.json` as the single source of truth for the version number, and propagate it to all other files.
|
|
31
|
+
|
|
32
|
+
Three scripts handle the complete lifecycle:
|
|
33
|
+
|
|
34
|
+
1. **`generate-skills-index.sh`** — Walks the skills directory tree, counts `.md` files per category, and generates a complete `SKILLS-INDEX.md` with category headers and skill listings.
|
|
35
|
+
|
|
36
|
+
2. **`generate-command-reference.sh`** — Counts commands, agents, and skills on disk. Outputs an agent reference table. Runs a sync check against `plugin.json` and `README.md` to flag drift.
|
|
37
|
+
|
|
38
|
+
3. **`sync-version.sh`** — Reads the version from `plugin.json` (or accepts a new version as argument), then `sed`-replaces all version references across documentation files.
|
|
39
|
+
|
|
40
|
+
## Code Example
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Before (manual, error-prone)
|
|
44
|
+
# Developer manually edits SKILLS-INDEX.md
|
|
45
|
+
# Developer manually counts: "ls commands/ | wc -l"
|
|
46
|
+
# Developer manually updates README: "Includes 39 slash commands..."
|
|
47
|
+
# Result: Numbers drift within days
|
|
48
|
+
|
|
49
|
+
# After (automated, always accurate)
|
|
50
|
+
# Generate skills index from filesystem
|
|
51
|
+
bash scripts/generate-skills-index.sh
|
|
52
|
+
# Output: SKILLS-INDEX.md regenerated with accurate count
|
|
53
|
+
|
|
54
|
+
# Audit command/agent counts and check for drift
|
|
55
|
+
bash scripts/generate-command-reference.sh
|
|
56
|
+
# Output: Stats + sync check showing OK or DRIFT
|
|
57
|
+
|
|
58
|
+
# Bump version across all files
|
|
59
|
+
bash scripts/sync-version.sh 10.1.0
|
|
60
|
+
# Output: plugin.json + all docs updated to v10.1.0
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### generate-skills-index.sh (core pattern)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
#!/bin/bash
|
|
67
|
+
set -euo pipefail
|
|
68
|
+
|
|
69
|
+
PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
70
|
+
SKILLS_DIR="$PLUGIN_ROOT/skills-library"
|
|
71
|
+
OUTPUT="$SKILLS_DIR/SKILLS-INDEX.md"
|
|
72
|
+
|
|
73
|
+
# Count total skills (excluding index/meta files)
|
|
74
|
+
TOTAL=$(find "$SKILLS_DIR" -name "*.md" \
|
|
75
|
+
-not -name "SKILLS-INDEX.md" \
|
|
76
|
+
-not -name "README.md" \
|
|
77
|
+
| wc -l | tr -d ' ')
|
|
78
|
+
|
|
79
|
+
# Get version from plugin.json (source of truth)
|
|
80
|
+
VERSION=$(grep '"version"' "$PLUGIN_ROOT/plugin.json" \
|
|
81
|
+
| head -1 \
|
|
82
|
+
| sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
|
83
|
+
|
|
84
|
+
# Generate header
|
|
85
|
+
cat > "$OUTPUT" << HEADER
|
|
86
|
+
# Skills Library Index
|
|
87
|
+
> Auto-generated — $(date +%Y-%m-%d) — v${VERSION}
|
|
88
|
+
> **Total skills: ${TOTAL}**
|
|
89
|
+
---
|
|
90
|
+
HEADER
|
|
91
|
+
|
|
92
|
+
# Walk each category directory
|
|
93
|
+
find "$SKILLS_DIR" -mindepth 1 -maxdepth 1 -type d | sort | while read -r dir; do
|
|
94
|
+
DIRNAME=$(basename "$dir")
|
|
95
|
+
[[ "$DIRNAME" == .* ]] && continue
|
|
96
|
+
COUNT=$(find "$dir" -name "*.md" -not -name "README.md" | wc -l | tr -d ' ')
|
|
97
|
+
[ "$COUNT" -eq 0 ] && continue
|
|
98
|
+
|
|
99
|
+
TITLE=$(echo "$DIRNAME" | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
100
|
+
echo "### $TITLE ($COUNT skills)" >> "$OUTPUT"
|
|
101
|
+
echo "" >> "$OUTPUT"
|
|
102
|
+
|
|
103
|
+
find "$dir" -name "*.md" -not -name "README.md" | sort | while read -r file; do
|
|
104
|
+
NAME=$(basename "$file" .md)
|
|
105
|
+
DESC=$(grep -m 1 "^# " "$file" 2>/dev/null | sed 's/^# //' || echo "$NAME")
|
|
106
|
+
echo "- \`$NAME\` — $DESC" >> "$OUTPUT"
|
|
107
|
+
done
|
|
108
|
+
echo "" >> "$OUTPUT"
|
|
109
|
+
done
|
|
110
|
+
|
|
111
|
+
echo "Generated: $TOTAL skills indexed"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### sync-version.sh (core pattern)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
#!/bin/bash
|
|
118
|
+
set -euo pipefail
|
|
119
|
+
|
|
120
|
+
PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
121
|
+
NEW_VERSION="${1:-$(grep '"version"' "$PLUGIN_ROOT/plugin.json" \
|
|
122
|
+
| head -1 | sed 's/.*"\([^"]*\)".*/\1/')}"
|
|
123
|
+
|
|
124
|
+
# Update plugin.json if version was passed as argument
|
|
125
|
+
[ $# -ge 1 ] && sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$NEW_VERSION\"/" \
|
|
126
|
+
"$PLUGIN_ROOT/plugin.json"
|
|
127
|
+
|
|
128
|
+
# Propagate to all documentation files
|
|
129
|
+
for file in README.md COMMAND-REFERENCE.md DOMINION-FLOW-OVERVIEW.md; do
|
|
130
|
+
[ -f "$PLUGIN_ROOT/$file" ] || continue
|
|
131
|
+
sed -i "s/v[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?/v$NEW_VERSION/g" "$PLUGIN_ROOT/$file"
|
|
132
|
+
done
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Implementation Steps
|
|
136
|
+
|
|
137
|
+
1. Create a `scripts/` directory in your plugin root
|
|
138
|
+
2. Add `generate-skills-index.sh` — scans skills and generates index
|
|
139
|
+
3. Add `generate-command-reference.sh` — audits counts and flags drift
|
|
140
|
+
4. Add `sync-version.sh` — propagates version from plugin.json
|
|
141
|
+
5. Run after any structural change (new commands, agents, or skills)
|
|
142
|
+
6. Optionally add to a pre-commit hook or CI pipeline
|
|
143
|
+
|
|
144
|
+
## When to Use
|
|
145
|
+
|
|
146
|
+
- After adding new commands, agents, or skills to a plugin
|
|
147
|
+
- Before tagging a release (ensures docs match reality)
|
|
148
|
+
- When preparing a README for public visibility (accuracy matters)
|
|
149
|
+
- As part of a CI pipeline to catch documentation drift
|
|
150
|
+
|
|
151
|
+
## When NOT to Use
|
|
152
|
+
|
|
153
|
+
- For plugins with fewer than 10 files (manual is fine)
|
|
154
|
+
- When documentation intentionally differs from disk (e.g., hiding internal/experimental commands)
|
|
155
|
+
- In non-plugin projects where docs aren't filesystem-derived
|
|
156
|
+
|
|
157
|
+
## Common Mistakes
|
|
158
|
+
|
|
159
|
+
- Forgetting to exclude meta files (SKILLS-INDEX.md, README.md) from the count
|
|
160
|
+
- Using `wc -l` without `tr -d ' '` — macOS `wc` adds leading spaces
|
|
161
|
+
- Not using `set -euo pipefail` — silent failures cause stale output
|
|
162
|
+
- Hardcoding version numbers instead of reading from plugin.json
|
|
163
|
+
|
|
164
|
+
## Related Skills
|
|
165
|
+
|
|
166
|
+
- [claude-md-archival](../_general/methodology/claude-md-archival.md) — CLAUDE.md management patterns
|
|
167
|
+
- [git-worktrees-parallel](../_general/methodology/git-worktrees-parallel.md) — Parallel development workflows
|
|
168
|
+
|
|
169
|
+
## References
|
|
170
|
+
|
|
171
|
+
- Contributed from: dominion-flow competitive analysis session (2026-03-06)
|
|
172
|
+
- Pattern discovered when audit revealed 39-vs-42 command count drift
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-repo-security-audit
|
|
3
|
+
category: security
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
last_updated: 2026-02-24
|
|
8
|
+
tags: [security, github, audit, skills, plugins, supply-chain]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# GitHub Repo Security Audit
|
|
13
|
+
|
|
14
|
+
## Problem
|
|
15
|
+
|
|
16
|
+
Installing skills, plugins, or tools from GitHub repos introduces supply chain risk. Repos may contain prompt injection, credential harvesting, exfiltration URLs, tool poisoning, or hidden malicious content. Without systematic auditing, compromised skills enter the agent's trusted execution environment.
|
|
17
|
+
|
|
18
|
+
## Solution Pattern
|
|
19
|
+
|
|
20
|
+
6-layer security audit performed BEFORE installation. The audit runs in an isolated temp directory, never in the target skill path. Only after passing all layers does the repo get copied to the install location.
|
|
21
|
+
|
|
22
|
+
## Pre-Download Checklist
|
|
23
|
+
|
|
24
|
+
Before even cloning, evaluate:
|
|
25
|
+
|
|
26
|
+
| Check | How | Red Flag |
|
|
27
|
+
|-------|-----|----------|
|
|
28
|
+
| Repo age | `gh repo view --json createdAt` | Created < 7 days ago |
|
|
29
|
+
| Stars/forks | `gh repo view --json stargazersCount,forkCount` | Stars < 10, looks artificial |
|
|
30
|
+
| Recent commits | `gh api repos/{owner}/{repo}/commits?per_page=5` | All commits in last 24h (rush job) |
|
|
31
|
+
| Open issues | `gh repo view --json issues` | Many unresolved security issues |
|
|
32
|
+
| License | `gh repo view --json licenseInfo` | No license or unusual license |
|
|
33
|
+
| Owner reputation | `gh api users/{owner}` | New account, no other repos |
|
|
34
|
+
|
|
35
|
+
## 6-Layer Post-Clone Audit
|
|
36
|
+
|
|
37
|
+
### Layer 1: Credential Scan
|
|
38
|
+
```bash
|
|
39
|
+
bash ~/.claude/hooks/credential-filter.sh --dir /tmp/{repo}-review/
|
|
40
|
+
```
|
|
41
|
+
Catches real API keys, passwords, connection strings in the repo.
|
|
42
|
+
|
|
43
|
+
### Layer 2: Prompt Injection Scan
|
|
44
|
+
Search all `.md`, `.txt`, `.json`, `.yaml` files for:
|
|
45
|
+
- `ignore previous instructions`
|
|
46
|
+
- `you are now` / `act as` (role manipulation)
|
|
47
|
+
- `system prompt` extraction attempts
|
|
48
|
+
- `<|im_start|>` or other special tokens
|
|
49
|
+
- Hidden Unicode characters (zero-width spaces, directional overrides)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
grep -rnE 'ignore.*(previous|above|prior).*(instruction|prompt|rule)' /tmp/{repo}-review/
|
|
53
|
+
grep -rnE '(you are now|act as|new role|forget|override|bypass)' /tmp/{repo}-review/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Layer 3: Exfiltration Detection
|
|
57
|
+
Search for outbound data transmission:
|
|
58
|
+
- `fetch(` / `XMLHttpRequest` / `WebSocket` / `navigator.sendBeacon`
|
|
59
|
+
- `curl` / `wget` with external URLs
|
|
60
|
+
- `document.cookie` / `localStorage` / `sessionStorage` reads
|
|
61
|
+
- Image/script `src` pointing to non-CDN domains
|
|
62
|
+
- Any URL that isn't a well-known CDN (jsdelivr, cdnjs, unpkg, googleapis)
|
|
63
|
+
|
|
64
|
+
### Layer 4: Tool Poisoning
|
|
65
|
+
Search for destructive or privileged operations:
|
|
66
|
+
- `rm -rf` / `sudo` / `chmod 777` / `eval` / `exec`
|
|
67
|
+
- File writes to `~/.claude/`, `~/.ssh/`, `~/.env`, `~/.aws/`
|
|
68
|
+
- Attempts to read credential files
|
|
69
|
+
- `child_process` / `os.system` / `subprocess` calls
|
|
70
|
+
|
|
71
|
+
### Layer 5: Hidden Content
|
|
72
|
+
- Run NFKC normalization on all text files
|
|
73
|
+
- Search for zero-width Unicode characters (`\u200B`, `\u200C`, `\u200D`, `\uFEFF`)
|
|
74
|
+
- Check for base64 payloads longer than 100 chars (exclude images)
|
|
75
|
+
- Look for `atob`, `btoa`, `String.fromCharCode`, `unescape`
|
|
76
|
+
|
|
77
|
+
### Layer 6: CDN Dependency Pinning
|
|
78
|
+
For all external script/CSS references in HTML files:
|
|
79
|
+
- Check if version is pinned to exact version (e.g., `@3.2.2`) — GOOD
|
|
80
|
+
- Major-only pinning (e.g., `@11`) — ADVISORY
|
|
81
|
+
- No version at all — WARNING
|
|
82
|
+
- Non-standard CDN domain — RED FLAG
|
|
83
|
+
|
|
84
|
+
## Verdict Matrix
|
|
85
|
+
|
|
86
|
+
| Result | Action |
|
|
87
|
+
|--------|--------|
|
|
88
|
+
| All 6 layers CLEAN | Install to `~/.claude/skills/{name}/` |
|
|
89
|
+
| 1-2 ADVISORY items | Install with warnings documented |
|
|
90
|
+
| Any SUSPICIOUS finding | Show to user, require explicit approval |
|
|
91
|
+
| Any BLOCKED finding | Do NOT install. Show findings. |
|
|
92
|
+
|
|
93
|
+
## Post-Install Verification
|
|
94
|
+
|
|
95
|
+
After installing a clean repo:
|
|
96
|
+
1. Remove `.git/` directory (no need for git history in skills)
|
|
97
|
+
2. Run credential filter one more time on installed location
|
|
98
|
+
3. Log the audit result: `~/.claude/audit-log/{repo}-{date}.md`
|
|
99
|
+
|
|
100
|
+
## When to Use
|
|
101
|
+
|
|
102
|
+
- ALWAYS when installing skills/plugins from GitHub
|
|
103
|
+
- When adding any external repo to the agent's trusted environment
|
|
104
|
+
- When updating an existing skill from a remote source
|
|
105
|
+
- When someone shares a "cool Claude Code skill" link
|
|
106
|
+
|
|
107
|
+
## When NOT to Use
|
|
108
|
+
|
|
109
|
+
- For repos you're building yourself (use credential filter + pre-commit hooks instead)
|
|
110
|
+
- For official Anthropic repos (still advisable but lower risk)
|
|
111
|
+
|
|
112
|
+
## Related Skills
|
|
113
|
+
|
|
114
|
+
- [CREDENTIAL-SECURITY-WORKFLOW.md](../awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md) — Credential leak prevention
|
|
115
|
+
- [deployment-security/](../deployment-security/) — Production security patterns
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: admin-deletion-safety
|
|
3
|
+
category: security
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-01-24
|
|
6
|
+
contributor: my-other-project
|
|
7
|
+
last_updated: 2026-01-24
|
|
8
|
+
tags: [admin, user-management, audit-logging, soft-delete, security-alerts, rbac]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
usage_count: 0
|
|
11
|
+
success_rate: 100
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Admin Deletion Safety - Industry Standard Implementation
|
|
15
|
+
|
|
16
|
+
## Problem
|
|
17
|
+
|
|
18
|
+
Deleting admin users without proper safeguards can lead to:
|
|
19
|
+
- **System lockout**: Last admin deleted → no one can manage the system
|
|
20
|
+
- **Security blind spots**: No audit trail of who deleted whom and why
|
|
21
|
+
- **Lack of accountability**: No notification to other admins about deletions
|
|
22
|
+
- **Accidental self-sabotage**: Admin deletes their own account
|
|
23
|
+
- **Data loss**: Hard delete makes recovery impossible
|
|
24
|
+
|
|
25
|
+
Common symptoms:
|
|
26
|
+
- 403 errors when trying to delete admin users (blanket block)
|
|
27
|
+
- No audit log of admin actions
|
|
28
|
+
- Permanent data loss on deletion
|
|
29
|
+
- Security incidents go unnoticed
|
|
30
|
+
|
|
31
|
+
## Solution Pattern
|
|
32
|
+
|
|
33
|
+
Implement a **multi-layered safety system** for admin user deletion:
|
|
34
|
+
|
|
35
|
+
1. **Self-Deletion Protection** - Prevent admins from deleting their own account
|
|
36
|
+
2. **Minimum Admin Requirement** - Require at least N admins (typically 2)
|
|
37
|
+
3. **Audit Logging** - Complete trail of all deletion attempts (success/blocked/failed)
|
|
38
|
+
4. **Email Notifications** - Security alerts to remaining admins
|
|
39
|
+
5. **Soft Delete** - Mark as deleted instead of hard delete (allows recovery)
|
|
40
|
+
|
|
41
|
+
This creates defense-in-depth: if one check is bypassed, others catch it.
|
|
42
|
+
|
|
43
|
+
## Code Example
|
|
44
|
+
|
|
45
|
+
### Before (Problematic)
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// Simple hard delete with basic admin check
|
|
49
|
+
export const deleteUser = async (req, res) => {
|
|
50
|
+
const user = await getUserById(req.params.id);
|
|
51
|
+
if (user.role === 'admin') {
|
|
52
|
+
return res.status(403).json({ error: 'Cannot delete admin users' });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Hard delete - no recovery
|
|
56
|
+
await sql`DELETE FROM profiles WHERE id = ${req.params.id}`;
|
|
57
|
+
res.status(200).json({ message: 'User deleted' });
|
|
58
|
+
};
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Issues:**
|
|
62
|
+
- Blanket admin deletion block (even with 10 admins)
|
|
63
|
+
- No self-deletion check (can delete own account)
|
|
64
|
+
- No audit trail
|
|
65
|
+
- No notifications
|
|
66
|
+
- Permanent data loss
|
|
67
|
+
- No IP/timestamp tracking
|
|
68
|
+
|
|
69
|
+
### After (Solution)
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
import { logAdminAction, getIpAddress, getUserAgent } from '../utils/auditLogger.js';
|
|
73
|
+
import { sendEmail } from '../config/email.js';
|
|
74
|
+
|
|
75
|
+
export const deleteUser = async (req, res, next) => {
|
|
76
|
+
const user = await getUserById(req.params.id);
|
|
77
|
+
if (!user) return next(new ApiError('User not found', 404));
|
|
78
|
+
|
|
79
|
+
const ipAddress = getIpAddress(req);
|
|
80
|
+
const userAgent = getUserAgent(req);
|
|
81
|
+
|
|
82
|
+
// SAFETY CHECK 1: Prevent self-deletion
|
|
83
|
+
if (req.user.id === req.params.id) {
|
|
84
|
+
await logAdminAction({
|
|
85
|
+
adminId: req.user.id,
|
|
86
|
+
adminEmail: req.user.email,
|
|
87
|
+
action: 'user_delete_attempt',
|
|
88
|
+
targetUserId: user.id,
|
|
89
|
+
targetUserEmail: user.email,
|
|
90
|
+
targetUserRole: user.role,
|
|
91
|
+
status: 'blocked',
|
|
92
|
+
reason: 'Self-deletion not allowed',
|
|
93
|
+
ipAddress,
|
|
94
|
+
userAgent
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return next(new ApiError('Cannot delete your own account. Ask another admin.', 403));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// SAFETY CHECK 2: Minimum admin requirement
|
|
101
|
+
if (user.role === 'admin') {
|
|
102
|
+
const adminCount = await sql`SELECT COUNT(*) as count FROM profiles WHERE role = 'admin'`;
|
|
103
|
+
const totalAdmins = parseInt(adminCount[0].count);
|
|
104
|
+
|
|
105
|
+
if (totalAdmins <= 2) {
|
|
106
|
+
await logAdminAction({
|
|
107
|
+
adminId: req.user.id,
|
|
108
|
+
adminEmail: req.user.email,
|
|
109
|
+
action: 'user_delete_attempt',
|
|
110
|
+
targetUserId: user.id,
|
|
111
|
+
targetUserEmail: user.email,
|
|
112
|
+
targetUserRole: user.role,
|
|
113
|
+
status: 'blocked',
|
|
114
|
+
reason: `Minimum admin requirement not met (${totalAdmins} admins, minimum 2 required)`,
|
|
115
|
+
metadata: { admin_count: totalAdmins, minimum_required: 2 },
|
|
116
|
+
ipAddress,
|
|
117
|
+
userAgent
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
return next(new ApiError(`Cannot delete admin. System requires at least 2 admins. Currently ${totalAdmins} exist.`, 403));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
// SOFT DELETE: Mark as deleted instead of removing
|
|
126
|
+
await sql.begin(async sql => {
|
|
127
|
+
await sql`
|
|
128
|
+
UPDATE profiles
|
|
129
|
+
SET deleted_at = NOW(),
|
|
130
|
+
deleted_by = ${req.user.id}
|
|
131
|
+
WHERE id = ${req.params.id}
|
|
132
|
+
`;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// AUDIT LOG: Successful deletion
|
|
136
|
+
await logAdminAction({
|
|
137
|
+
adminId: req.user.id,
|
|
138
|
+
adminEmail: req.user.email,
|
|
139
|
+
action: 'user_deleted',
|
|
140
|
+
targetUserId: user.id,
|
|
141
|
+
targetUserEmail: user.email,
|
|
142
|
+
targetUserRole: user.role,
|
|
143
|
+
status: 'success',
|
|
144
|
+
ipAddress,
|
|
145
|
+
userAgent
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// EMAIL NOTIFICATION: Alert remaining admins
|
|
149
|
+
if (user.role === 'admin') {
|
|
150
|
+
const remainingAdmins = await sql`SELECT email, first_name FROM profiles WHERE role = 'admin' AND id != ${req.params.id}`;
|
|
151
|
+
|
|
152
|
+
for (const admin of remainingAdmins) {
|
|
153
|
+
await sendEmail({
|
|
154
|
+
to: admin.email,
|
|
155
|
+
subject: '🔒 Security Alert: Admin Account Deleted',
|
|
156
|
+
html: `
|
|
157
|
+
<h2>Security Notification</h2>
|
|
158
|
+
<p>An administrator account has been deleted.</p>
|
|
159
|
+
<p><strong>Deleted:</strong> ${user.email}</p>
|
|
160
|
+
<p><strong>By:</strong> ${req.user.email}</p>
|
|
161
|
+
<p><strong>Time:</strong> ${new Date().toISOString()}</p>
|
|
162
|
+
<p><strong>IP:</strong> ${ipAddress}</p>
|
|
163
|
+
`
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
res.status(200).json({ status: 'success', message: 'User deleted successfully' });
|
|
169
|
+
} catch (error) {
|
|
170
|
+
// AUDIT LOG: Failed deletion
|
|
171
|
+
await logAdminAction({
|
|
172
|
+
adminId: req.user.id,
|
|
173
|
+
adminEmail: req.user.email,
|
|
174
|
+
action: 'user_delete_attempt',
|
|
175
|
+
targetUserId: user.id,
|
|
176
|
+
targetUserEmail: user.email,
|
|
177
|
+
targetUserRole: user.role,
|
|
178
|
+
status: 'failed',
|
|
179
|
+
reason: error.message,
|
|
180
|
+
metadata: { error_code: error.code },
|
|
181
|
+
ipAddress,
|
|
182
|
+
userAgent
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
return next(new ApiError(error.message, 400));
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// RESTORATION: Allow undeleting users
|
|
190
|
+
export const restoreUser = async (req, res, next) => {
|
|
191
|
+
const user = await sql`SELECT id, email, deleted_at FROM profiles WHERE id = ${req.params.id}`;
|
|
192
|
+
|
|
193
|
+
if (!user[0] || !user[0].deleted_at) {
|
|
194
|
+
return next(new ApiError('User not found or not deleted', 404));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
await sql`UPDATE profiles SET deleted_at = NULL, deleted_by = NULL WHERE id = ${req.params.id}`;
|
|
198
|
+
|
|
199
|
+
await logAdminAction({
|
|
200
|
+
adminId: req.user.id,
|
|
201
|
+
adminEmail: req.user.email,
|
|
202
|
+
action: 'user_restored',
|
|
203
|
+
targetUserId: user[0].id,
|
|
204
|
+
targetUserEmail: user[0].email,
|
|
205
|
+
status: 'success',
|
|
206
|
+
ipAddress: getIpAddress(req),
|
|
207
|
+
userAgent: getUserAgent(req)
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
res.status(200).json({ status: 'success', message: 'User restored successfully' });
|
|
211
|
+
};
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Implementation Steps
|
|
215
|
+
|
|
216
|
+
### 1. Create Audit Log Table
|
|
217
|
+
|
|
218
|
+
```sql
|
|
219
|
+
-- Migration: admin_audit_log.sql
|
|
220
|
+
CREATE TABLE IF NOT EXISTS admin_audit_log (
|
|
221
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
222
|
+
admin_id UUID REFERENCES profiles(id) ON DELETE SET NULL,
|
|
223
|
+
admin_email VARCHAR(255) NOT NULL,
|
|
224
|
+
action VARCHAR(100) NOT NULL,
|
|
225
|
+
target_user_id UUID,
|
|
226
|
+
target_user_email VARCHAR(255),
|
|
227
|
+
target_user_role VARCHAR(50),
|
|
228
|
+
status VARCHAR(50) NOT NULL, -- 'success', 'blocked', 'failed'
|
|
229
|
+
reason TEXT,
|
|
230
|
+
metadata JSONB,
|
|
231
|
+
ip_address VARCHAR(45),
|
|
232
|
+
user_agent TEXT,
|
|
233
|
+
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
|
234
|
+
|
|
235
|
+
INDEX idx_admin_audit_admin_id (admin_id),
|
|
236
|
+
INDEX idx_admin_audit_action (action),
|
|
237
|
+
INDEX idx_admin_audit_created_at (created_at DESC)
|
|
238
|
+
);
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 2. Add Soft Delete Columns
|
|
242
|
+
|
|
243
|
+
```sql
|
|
244
|
+
-- Migration: add_soft_delete.sql
|
|
245
|
+
ALTER TABLE profiles
|
|
246
|
+
ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ DEFAULT NULL,
|
|
247
|
+
ADD COLUMN IF NOT EXISTS deleted_by UUID REFERENCES profiles(id) ON DELETE SET NULL;
|
|
248
|
+
|
|
249
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_deleted_at ON profiles(deleted_at);
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 3. Create Audit Logger Utility
|
|
253
|
+
|
|
254
|
+
```javascript
|
|
255
|
+
// server/utils/auditLogger.js
|
|
256
|
+
import sql from '../config/db.js';
|
|
257
|
+
|
|
258
|
+
export const logAdminAction = async ({
|
|
259
|
+
adminId, adminEmail, action, targetUserId,
|
|
260
|
+
targetUserEmail, targetUserRole, status, reason,
|
|
261
|
+
metadata, ipAddress, userAgent
|
|
262
|
+
}) => {
|
|
263
|
+
try {
|
|
264
|
+
await sql`
|
|
265
|
+
INSERT INTO admin_audit_log (
|
|
266
|
+
admin_id, admin_email, action, target_user_id,
|
|
267
|
+
target_user_email, target_user_role, status, reason,
|
|
268
|
+
metadata, ip_address, user_agent
|
|
269
|
+
) VALUES (
|
|
270
|
+
${adminId}, ${adminEmail}, ${action}, ${targetUserId},
|
|
271
|
+
${targetUserEmail}, ${targetUserRole}, ${status}, ${reason},
|
|
272
|
+
${metadata ? JSON.stringify(metadata) : null}, ${ipAddress}, ${userAgent}
|
|
273
|
+
)
|
|
274
|
+
`;
|
|
275
|
+
} catch (error) {
|
|
276
|
+
console.error('[AUDIT LOG ERROR]', error);
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export const getIpAddress = (req) => {
|
|
281
|
+
return req.ip || req.headers['x-forwarded-for'] || req.connection.remoteAddress || null;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
export const getUserAgent = (req) => {
|
|
285
|
+
return req.headers['user-agent'] || null;
|
|
286
|
+
};
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### 4. Update User Model for Soft Delete Filtering
|
|
290
|
+
|
|
291
|
+
```javascript
|
|
292
|
+
// server/models/User.js
|
|
293
|
+
export const getUsers = async (filters = {}, options = {}) => {
|
|
294
|
+
let hasWhere = false;
|
|
295
|
+
const parts = ['SELECT * FROM profiles'];
|
|
296
|
+
const values = [];
|
|
297
|
+
let idx = 1;
|
|
298
|
+
|
|
299
|
+
// Soft delete filtering (default: exclude deleted)
|
|
300
|
+
if (filters.excludeDeleted) {
|
|
301
|
+
parts.push('WHERE deleted_at IS NULL');
|
|
302
|
+
hasWhere = true;
|
|
303
|
+
} else if (filters.deletedOnly) {
|
|
304
|
+
parts.push('WHERE deleted_at IS NOT NULL');
|
|
305
|
+
hasWhere = true;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// ... rest of filters
|
|
309
|
+
};
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### 5. Add Restore Route
|
|
313
|
+
|
|
314
|
+
```javascript
|
|
315
|
+
// server/routes/adminRoutes.js
|
|
316
|
+
router.post('/users/:id/restore', protect, authorize('admin'), adminController.restoreUser);
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## When to Use
|
|
320
|
+
|
|
321
|
+
- **Any system with admin users** - Critical infrastructure requiring admin access
|
|
322
|
+
- **Multi-tenant SaaS platforms** - Multiple admins managing the system
|
|
323
|
+
- **Compliance requirements** - HIPAA, SOC2, ISO27001 requiring audit trails
|
|
324
|
+
- **Financial/payment systems** - High-stakes environments needing accountability
|
|
325
|
+
- **Enterprise applications** - Professional software with security standards
|
|
326
|
+
- **When users complain** - "I can't delete this admin" → proper implementation needed
|
|
327
|
+
|
|
328
|
+
## When NOT to Use
|
|
329
|
+
|
|
330
|
+
- **Single-user systems** - No multi-admin requirement (but audit logging still valuable)
|
|
331
|
+
- **Prototype/demo apps** - Overkill for non-production learning projects
|
|
332
|
+
- **Public-facing user accounts** - Different deletion rules apply (GDPR right to deletion)
|
|
333
|
+
- **When immediate hard delete required** - Rare cases needing instant permanent removal
|
|
334
|
+
- **Simple CRUD apps** - Basic user management without admin hierarchyuse soft delete sparingly
|
|
335
|
+
|
|
336
|
+
## Configuration Options
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
// config/security.js
|
|
340
|
+
export const ADMIN_DELETION_CONFIG = {
|
|
341
|
+
minimumAdmins: 2, // Minimum admins required
|
|
342
|
+
softDeleteEnabled: true, // Use soft delete (vs hard delete)
|
|
343
|
+
emailNotifications: true, // Send email alerts
|
|
344
|
+
auditLogging: true, // Log all actions
|
|
345
|
+
allowSelfDeletion: false, // Prevent self-deletion
|
|
346
|
+
recoveryGracePeriod: 30, // Days before permanent deletion
|
|
347
|
+
notifyAllAdmins: true, // Alert all admins (vs just superadmins)
|
|
348
|
+
};
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Common Mistakes
|
|
352
|
+
|
|
353
|
+
1. **Hardcoded minimum admin count** - Should be configurable
|
|
354
|
+
2. **Forgetting IP/user agent logging** - Critical for security forensics
|
|
355
|
+
3. **No email notification** - Admins unaware of security events
|
|
356
|
+
4. **Hard delete on first call** - No recovery option
|
|
357
|
+
5. **Audit log in same transaction** - If transaction rolls back, no audit entry
|
|
358
|
+
6. **Not excluding soft-deleted users in queries** - Appear in user lists
|
|
359
|
+
7. **Missing restoration endpoint** - Soft delete useless without restore
|
|
360
|
+
8. **Blanket admin block** - "Cannot delete admins" even with 10 admins
|
|
361
|
+
|
|
362
|
+
## Testing Checklist
|
|
363
|
+
|
|
364
|
+
- [ ] Try deleting your own admin account → Should block with clear message
|
|
365
|
+
- [ ] With 2 admins, try deleting one → Should block
|
|
366
|
+
- [ ] With 3+ admins, delete one → Should succeed
|
|
367
|
+
- [ ] Check admin_audit_log table → Entry created
|
|
368
|
+
- [ ] Check email inbox → Security alert received
|
|
369
|
+
- [ ] Verify user marked as deleted (deleted_at set)
|
|
370
|
+
- [ ] Call restore endpoint → User restored
|
|
371
|
+
- [ ] Query users list → Deleted user excluded by default
|
|
372
|
+
- [ ] Try deleting already-deleted user → Appropriate error
|
|
373
|
+
- [ ] Attempt deletion of non-existent user → 404 error
|
|
374
|
+
|
|
375
|
+
## Related Skills
|
|
376
|
+
|
|
377
|
+
- [rbac-permission-system](../security/rbac-permission-system.md) - Role-based access control
|
|
378
|
+
- [audit-logging-patterns](../security/audit-logging-patterns.md) - Comprehensive audit trails
|
|
379
|
+
- [soft-delete-implementation](../database-solutions/soft-delete-implementation.md) - Soft delete strategies
|
|
380
|
+
- [email-notification-system](../integrations/email-notification-system.md) - Email alert patterns
|
|
381
|
+
- [admin-impersonation](../security/admin-impersonation.md) - Admin user impersonation
|
|
382
|
+
|
|
383
|
+
## References
|
|
384
|
+
|
|
385
|
+
- OWASP: [Authorization Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html)
|
|
386
|
+
- NIST: [Digital Identity Guidelines](https://pages.nist.gov/800-63-3/)
|
|
387
|
+
- SOC 2: Access Control Requirements
|
|
388
|
+
- Contributed from: MERN Community LMS (2026-01-24)
|
|
389
|
+
|
|
390
|
+
## Success Metrics
|
|
391
|
+
|
|
392
|
+
- **Zero lockouts** - No incidents of system becoming inaccessible
|
|
393
|
+
- **100% audit coverage** - All admin actions logged
|
|
394
|
+
- **Recovery success rate** - Percentage of soft-deleted users successfully restored
|
|
395
|
+
- **Mean time to recovery** - How fast deleted users can be restored
|
|
396
|
+
- **Security alert response time** - How quickly admins respond to deletion alerts
|