oh-my-customcodex 0.1.0
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/LICENSE +21 -0
- package/README.md +327 -0
- package/dist/cli/index.js +32054 -0
- package/dist/index.js +5469 -0
- package/package.json +89 -0
- package/templates/.claude/agents/arch-documenter.md +38 -0
- package/templates/.claude/agents/arch-speckit-agent.md +66 -0
- package/templates/.claude/agents/be-django-expert.md +47 -0
- package/templates/.claude/agents/be-express-expert.md +31 -0
- package/templates/.claude/agents/be-fastapi-expert.md +45 -0
- package/templates/.claude/agents/be-go-backend-expert.md +45 -0
- package/templates/.claude/agents/be-nestjs-expert.md +29 -0
- package/templates/.claude/agents/be-springboot-expert.md +42 -0
- package/templates/.claude/agents/db-alembic-expert.md +73 -0
- package/templates/.claude/agents/db-postgres-expert.md +38 -0
- package/templates/.claude/agents/db-redis-expert.md +38 -0
- package/templates/.claude/agents/db-supabase-expert.md +37 -0
- package/templates/.claude/agents/de-airflow-expert.md +48 -0
- package/templates/.claude/agents/de-dbt-expert.md +36 -0
- package/templates/.claude/agents/de-kafka-expert.md +83 -0
- package/templates/.claude/agents/de-pipeline-expert.md +34 -0
- package/templates/.claude/agents/de-snowflake-expert.md +38 -0
- package/templates/.claude/agents/de-spark-expert.md +38 -0
- package/templates/.claude/agents/fe-design-expert.md +120 -0
- package/templates/.claude/agents/fe-flutter-agent.md +48 -0
- package/templates/.claude/agents/fe-svelte-agent.md +33 -0
- package/templates/.claude/agents/fe-vercel-agent.md +40 -0
- package/templates/.claude/agents/fe-vuejs-agent.md +34 -0
- package/templates/.claude/agents/infra-aws-expert.md +49 -0
- package/templates/.claude/agents/infra-docker-expert.md +49 -0
- package/templates/.claude/agents/lang-golang-expert.md +46 -0
- package/templates/.claude/agents/lang-java21-expert.md +42 -0
- package/templates/.claude/agents/lang-kotlin-expert.md +45 -0
- package/templates/.claude/agents/lang-python-expert.md +45 -0
- package/templates/.claude/agents/lang-rust-expert.md +45 -0
- package/templates/.claude/agents/lang-typescript-expert.md +45 -0
- package/templates/.claude/agents/mgr-claude-code-bible.md +62 -0
- package/templates/.claude/agents/mgr-creator.md +57 -0
- package/templates/.claude/agents/mgr-gitnerd.md +50 -0
- package/templates/.claude/agents/mgr-sauron.md +163 -0
- package/templates/.claude/agents/mgr-supplier.md +39 -0
- package/templates/.claude/agents/mgr-updater.md +40 -0
- package/templates/.claude/agents/qa-engineer.md +36 -0
- package/templates/.claude/agents/qa-planner.md +78 -0
- package/templates/.claude/agents/qa-writer.md +32 -0
- package/templates/.claude/agents/sec-codeql-expert.md +56 -0
- package/templates/.claude/agents/slack-cli-expert.md +98 -0
- package/templates/.claude/agents/souls/lang-golang-expert.soul.md +21 -0
- package/templates/.claude/agents/sys-memory-keeper.md +123 -0
- package/templates/.claude/agents/sys-naggy.md +76 -0
- package/templates/.claude/agents/tool-bun-expert.md +26 -0
- package/templates/.claude/agents/tool-npm-expert.md +31 -0
- package/templates/.claude/agents/tool-optimizer.md +37 -0
- package/templates/.claude/agents/wiki-curator.md +72 -0
- package/templates/.claude/config/required-plugins.json +30 -0
- package/templates/.claude/contexts/dev.md +20 -0
- package/templates/.claude/contexts/ecomode.md +110 -0
- package/templates/.claude/contexts/index.yaml +41 -0
- package/templates/.claude/contexts/research.md +28 -0
- package/templates/.claude/contexts/review.md +23 -0
- package/templates/.claude/hooks/hooks.json +533 -0
- package/templates/.claude/hooks/scripts/adaptive-harness-scan.sh +45 -0
- package/templates/.claude/hooks/scripts/agent-start-recorder.sh +40 -0
- package/templates/.claude/hooks/scripts/agent-teams-advisor.sh +76 -0
- package/templates/.claude/hooks/scripts/audit-log.sh +64 -0
- package/templates/.claude/hooks/scripts/auto-continue-guard.sh +33 -0
- package/templates/.claude/hooks/scripts/content-hash-validator.sh +75 -0
- package/templates/.claude/hooks/scripts/context-budget-advisor.sh +107 -0
- package/templates/.claude/hooks/scripts/cost-cap-advisor.sh +71 -0
- package/templates/.claude/hooks/scripts/cwd-change-detector.sh +36 -0
- package/templates/.claude/hooks/scripts/eval-core-batch-save.sh +46 -0
- package/templates/.claude/hooks/scripts/feedback-collector.sh +92 -0
- package/templates/.claude/hooks/scripts/file-change-validator.sh +26 -0
- package/templates/.claude/hooks/scripts/git-delegation-guard.sh +57 -0
- package/templates/.claude/hooks/scripts/model-escalation-advisor.sh +106 -0
- package/templates/.claude/hooks/scripts/omcodex-auto-update.sh +4 -0
- package/templates/.claude/hooks/scripts/omcustom-auto-update.sh +177 -0
- package/templates/.claude/hooks/scripts/rtk-intercept.sh +77 -0
- package/templates/.claude/hooks/scripts/rule-deletion-guard.sh +60 -0
- package/templates/.claude/hooks/scripts/schema-validator.sh +106 -0
- package/templates/.claude/hooks/scripts/secret-filter.sh +100 -0
- package/templates/.claude/hooks/scripts/session-autofix-prompt.sh +34 -0
- package/templates/.claude/hooks/scripts/session-autofix.sh +146 -0
- package/templates/.claude/hooks/scripts/session-env-check.sh +254 -0
- package/templates/.claude/hooks/scripts/skill-extractor-analyzer.sh +49 -0
- package/templates/.claude/hooks/scripts/stage-blocker.sh +16 -0
- package/templates/.claude/hooks/scripts/stale-todo-scanner.sh +91 -0
- package/templates/.claude/hooks/scripts/stall-detection-advisor.sh +112 -0
- package/templates/.claude/hooks/scripts/stop-console-audit.sh +46 -0
- package/templates/.claude/hooks/scripts/stuck-detector.sh +199 -0
- package/templates/.claude/hooks/scripts/task-outcome-recorder.sh +119 -0
- package/templates/.claude/hooks/scripts/task-state-precompact.sh +58 -0
- package/templates/.claude/hooks/scripts/user-prompt-preprocessor.sh +32 -0
- package/templates/.claude/hooks/skill-count-reminder.sh +34 -0
- package/templates/.claude/install-hooks.sh +100 -0
- package/templates/.claude/ontology/agents.yaml +546 -0
- package/templates/.claude/ontology/graphs/agent-skill.json +102 -0
- package/templates/.claude/ontology/graphs/full-graph.json +629 -0
- package/templates/.claude/ontology/graphs/routing.json +112 -0
- package/templates/.claude/ontology/graphs/skill-rule.json +78 -0
- package/templates/.claude/ontology/rules.yaml +251 -0
- package/templates/.claude/ontology/schema.yaml +144 -0
- package/templates/.claude/ontology/skills.yaml +575 -0
- package/templates/.claude/rules/MAY-optimization.md +42 -0
- package/templates/.claude/rules/MUST-agent-design.md +340 -0
- package/templates/.claude/rules/MUST-agent-identification.md +77 -0
- package/templates/.claude/rules/MUST-agent-teams.md +293 -0
- package/templates/.claude/rules/MUST-completion-verification.md +112 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +69 -0
- package/templates/.claude/rules/MUST-enforcement-policy.md +50 -0
- package/templates/.claude/rules/MUST-intent-transparency.md +74 -0
- package/templates/.claude/rules/MUST-language-policy.md +28 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +399 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +184 -0
- package/templates/.claude/rules/MUST-permissions.md +32 -0
- package/templates/.claude/rules/MUST-safety.md +23 -0
- package/templates/.claude/rules/MUST-sync-verification.md +145 -0
- package/templates/.claude/rules/MUST-tool-identification.md +97 -0
- package/templates/.claude/rules/SHOULD-ecomode.md +123 -0
- package/templates/.claude/rules/SHOULD-error-handling.md +33 -0
- package/templates/.claude/rules/SHOULD-hud-statusline.md +51 -0
- package/templates/.claude/rules/SHOULD-interaction.md +77 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +371 -0
- package/templates/.claude/rules/SHOULD-ontology-rag-routing.md +49 -0
- package/templates/.claude/rules/SHOULD-wiki-sync.md +73 -0
- package/templates/.claude/rules/index.yaml +141 -0
- package/templates/.claude/schemas/tool-inputs.json +62 -0
- package/templates/.claude/skills/action-validator/SKILL.md +89 -0
- package/templates/.claude/skills/adaptive-harness/SKILL.md +335 -0
- package/templates/.claude/skills/adversarial-review/SKILL.md +80 -0
- package/templates/.claude/skills/agora/SKILL.md +194 -0
- package/templates/.claude/skills/airflow-best-practices/SKILL.md +94 -0
- package/templates/.claude/skills/alembic-best-practices/SKILL.md +295 -0
- package/templates/.claude/skills/ambiguity-gate/SKILL.md +94 -0
- package/templates/.claude/skills/analysis/SKILL.md +223 -0
- package/templates/.claude/skills/audit-agents/SKILL.md +118 -0
- package/templates/.claude/skills/aws-best-practices/SKILL.md +281 -0
- package/templates/.claude/skills/claude-code-bible/SKILL.md +93 -0
- package/templates/.claude/skills/claude-code-bible/scripts/fetch-docs.js +244 -0
- package/templates/.claude/skills/claude-native/SKILL.md +215 -0
- package/templates/.claude/skills/codex-exec/SKILL.md +206 -0
- package/templates/.claude/skills/codex-exec/scripts/codex-wrapper.cjs +430 -0
- package/templates/.claude/skills/create-agent/SKILL.md +94 -0
- package/templates/.claude/skills/cve-triage/SKILL.md +91 -0
- package/templates/.claude/skills/dag-orchestration/SKILL.md +201 -0
- package/templates/.claude/skills/dbt-best-practices/SKILL.md +55 -0
- package/templates/.claude/skills/de-lead-routing/SKILL.md +230 -0
- package/templates/.claude/skills/deep-plan/SKILL.md +344 -0
- package/templates/.claude/skills/deep-verify/SKILL.md +111 -0
- package/templates/.claude/skills/dev-lead-routing/SKILL.md +161 -0
- package/templates/.claude/skills/dev-refactor/SKILL.md +234 -0
- package/templates/.claude/skills/dev-review/SKILL.md +172 -0
- package/templates/.claude/skills/django-best-practices/SKILL.md +334 -0
- package/templates/.claude/skills/docker-best-practices/SKILL.md +276 -0
- package/templates/.claude/skills/evaluator-optimizer/SKILL.md +421 -0
- package/templates/.claude/skills/fastapi-best-practices/SKILL.md +271 -0
- package/templates/.claude/skills/fix-refs/SKILL.md +109 -0
- package/templates/.claude/skills/flutter-best-practices/SKILL.md +325 -0
- package/templates/.claude/skills/gemini-exec/SKILL.md +215 -0
- package/templates/.claude/skills/gemini-exec/scripts/gemini-wrapper.cjs +485 -0
- package/templates/.claude/skills/go-backend-best-practices/SKILL.md +135 -0
- package/templates/.claude/skills/go-best-practices/SKILL.md +204 -0
- package/templates/.claude/skills/hada-scout/SKILL.md +92 -0
- package/templates/.claude/skills/harness-eval/SKILL.md +95 -0
- package/templates/.claude/skills/harness-synthesizer/SKILL.md +145 -0
- package/templates/.claude/skills/help/SKILL.md +127 -0
- package/templates/.claude/skills/idea/SKILL.md +88 -0
- package/templates/.claude/skills/impeccable-design/SKILL.md +173 -0
- package/templates/.claude/skills/intent-detection/SKILL.md +293 -0
- package/templates/.claude/skills/intent-detection/patterns/agent-triggers.yaml +438 -0
- package/templates/.claude/skills/java21-best-practices/SKILL.md +190 -0
- package/templates/.claude/skills/jinja2-prompts/SKILL.md +86 -0
- package/templates/.claude/skills/kafka-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/kotlin-best-practices/SKILL.md +257 -0
- package/templates/.claude/skills/lists/SKILL.md +80 -0
- package/templates/.claude/skills/memory-management/SKILL.md +196 -0
- package/templates/.claude/skills/memory-recall/SKILL.md +172 -0
- package/templates/.claude/skills/memory-save/SKILL.md +128 -0
- package/templates/.claude/skills/model-escalation/SKILL.md +62 -0
- package/templates/.claude/skills/monitoring-setup/SKILL.md +215 -0
- package/templates/.claude/skills/multi-model-verification/SKILL.md +130 -0
- package/templates/.claude/skills/npm-audit/SKILL.md +74 -0
- package/templates/.claude/skills/npm-publish/SKILL.md +65 -0
- package/templates/.claude/skills/npm-version/SKILL.md +104 -0
- package/templates/.claude/skills/omcodex-auto-improve/SKILL.md +136 -0
- package/templates/.claude/skills/omcodex-feedback/SKILL.md +205 -0
- package/templates/.claude/skills/omcodex-improve-report/SKILL.md +65 -0
- package/templates/.claude/skills/omcodex-loop/SKILL.md +45 -0
- package/templates/.claude/skills/omcodex-release-notes/SKILL.md +117 -0
- package/templates/.claude/skills/omcodex-takeover/SKILL.md +115 -0
- package/templates/.claude/skills/omcodex-web/SKILL.md +95 -0
- package/templates/.claude/skills/optimize-analyze/SKILL.md +57 -0
- package/templates/.claude/skills/optimize-bundle/SKILL.md +69 -0
- package/templates/.claude/skills/optimize-report/SKILL.md +76 -0
- package/templates/.claude/skills/peer-messaging/SKILL.md +59 -0
- package/templates/.claude/skills/pipeline/SKILL.md +103 -0
- package/templates/.claude/skills/pipeline-architecture-patterns/SKILL.md +84 -0
- package/templates/.claude/skills/pipeline-guards/SKILL.md +173 -0
- package/templates/.claude/skills/post-release-followup/SKILL.md +134 -0
- package/templates/.claude/skills/postgres-best-practices/SKILL.md +67 -0
- package/templates/.claude/skills/pr-auto-improve/SKILL.md +129 -0
- package/templates/.claude/skills/professor-triage/SKILL.md +321 -0
- package/templates/.claude/skills/python-best-practices/SKILL.md +223 -0
- package/templates/.claude/skills/qa-lead-routing/SKILL.md +104 -0
- package/templates/.claude/skills/react-best-practices/SKILL.md +102 -0
- package/templates/.claude/skills/reasoning-sandwich/SKILL.md +64 -0
- package/templates/.claude/skills/redis-best-practices/SKILL.md +84 -0
- package/templates/.claude/skills/release-plan/SKILL.md +207 -0
- package/templates/.claude/skills/research/SKILL.md +493 -0
- package/templates/.claude/skills/result-aggregation/SKILL.md +165 -0
- package/templates/.claude/skills/rtk-exec/SKILL.md +199 -0
- package/templates/.claude/skills/rtk-exec/scripts/rtk-wrapper.cjs +377 -0
- package/templates/.claude/skills/rust-best-practices/SKILL.md +268 -0
- package/templates/.claude/skills/sauron-watch/SKILL.md +239 -0
- package/templates/.claude/skills/scout/SKILL.md +250 -0
- package/templates/.claude/skills/sdd/SKILL.md +24 -0
- package/templates/.claude/skills/sdd-dev/SKILL.md +257 -0
- package/templates/.claude/skills/sdd-development/SKILL.md +24 -0
- package/templates/.claude/skills/secretary-routing/SKILL.md +132 -0
- package/templates/.claude/skills/skill-extractor/SKILL.md +155 -0
- package/templates/.claude/skills/skills-sh-search/SKILL.md +210 -0
- package/templates/.claude/skills/snowflake-best-practices/SKILL.md +66 -0
- package/templates/.claude/skills/spark-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/springboot-best-practices/SKILL.md +74 -0
- package/templates/.claude/skills/springboot-best-practices/examples/config-properties-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-example.java +28 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-test-example.java +33 -0
- package/templates/.claude/skills/springboot-best-practices/examples/entity-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/exception-handler-example.java +30 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-example.java +17 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-test-example.java +23 -0
- package/templates/.claude/skills/springboot-best-practices/examples/security-config-example.java +27 -0
- package/templates/.claude/skills/springboot-best-practices/examples/service-example.java +33 -0
- package/templates/.claude/skills/status/SKILL.md +155 -0
- package/templates/.claude/skills/structured-dev-cycle/SKILL.md +200 -0
- package/templates/.claude/skills/stuck-recovery/SKILL.md +80 -0
- package/templates/.claude/skills/supabase-postgres-best-practices/SKILL.md +100 -0
- package/templates/.claude/skills/systematic-debugging/SKILL.md +288 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting-example.ts +278 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting.md +240 -0
- package/templates/.claude/skills/systematic-debugging/defense-in-depth.md +252 -0
- package/templates/.claude/skills/systematic-debugging/find-polluter.sh +147 -0
- package/templates/.claude/skills/systematic-debugging/root-cause-tracing.md +87 -0
- package/templates/.claude/skills/task-decomposition/SKILL.md +197 -0
- package/templates/.claude/skills/typescript-best-practices/SKILL.md +322 -0
- package/templates/.claude/skills/update-docs/SKILL.md +142 -0
- package/templates/.claude/skills/update-external/SKILL.md +169 -0
- package/templates/.claude/skills/vercel-deploy/SKILL.md +75 -0
- package/templates/.claude/skills/web-design-guidelines/SKILL.md +119 -0
- package/templates/.claude/skills/wiki/SKILL.md +426 -0
- package/templates/.claude/skills/wiki-rag/SKILL.md +154 -0
- package/templates/.claude/skills/worker-reviewer-pipeline/SKILL.md +165 -0
- package/templates/.claude/skills/writing-clearly-and-concisely/SKILL.md +66 -0
- package/templates/.claude/statusline.sh +380 -0
- package/templates/.claude/uninstall-hooks.sh +52 -0
- package/templates/.github/workflows/wiki-sync.yml +132 -0
- package/templates/AGENTS.md.en +255 -0
- package/templates/AGENTS.md.ko +255 -0
- package/templates/CLAUDE.md +263 -0
- package/templates/CLAUDE.md.en +256 -0
- package/templates/CLAUDE.md.ko +256 -0
- package/templates/deprecated-files.json +10 -0
- package/templates/guides/agents-md-quality/README.md +110 -0
- package/templates/guides/airflow/README.md +47 -0
- package/templates/guides/alembic/README.md +438 -0
- package/templates/guides/aws/common-patterns.md +169 -0
- package/templates/guides/aws/index.yaml +26 -0
- package/templates/guides/aws/well-architected.md +143 -0
- package/templates/guides/cc-token-saver/README.md +97 -0
- package/templates/guides/claude-code/01-overview.md +42 -0
- package/templates/guides/claude-code/03-tools.md +107 -0
- package/templates/guides/claude-code/04-agent-skills.md +90 -0
- package/templates/guides/claude-code/05-agent-sdk.md +129 -0
- package/templates/guides/claude-code/06-mcp.md +165 -0
- package/templates/guides/claude-code/07-prompt-engineering.md +100 -0
- package/templates/guides/claude-code/08-testing.md +56 -0
- package/templates/guides/claude-code/09-guardrails.md +78 -0
- package/templates/guides/claude-code/10-monitoring.md +87 -0
- package/templates/guides/claude-code/11-sub-agents.md +159 -0
- package/templates/guides/claude-code/12-workflow-patterns.md +182 -0
- package/templates/guides/claude-code/13-cli-flags.md +151 -0
- package/templates/guides/claude-code/index.yaml +61 -0
- package/templates/guides/dbt/README.md +32 -0
- package/templates/guides/django-best-practices/README.md +476 -0
- package/templates/guides/docker/compose-best-practices.md +284 -0
- package/templates/guides/docker/dockerfile-best-practices.md +262 -0
- package/templates/guides/docker/index.yaml +26 -0
- package/templates/guides/drizzle-orm/README.md +69 -0
- package/templates/guides/elements-of-style/elements-of-style.html +2609 -0
- package/templates/guides/fastapi/best-practices.md +232 -0
- package/templates/guides/fastapi/index.yaml +21 -0
- package/templates/guides/flutter/architecture.md +141 -0
- package/templates/guides/flutter/fundamentals.md +119 -0
- package/templates/guides/flutter/index.yaml +44 -0
- package/templates/guides/flutter/performance.md +119 -0
- package/templates/guides/flutter/security.md +120 -0
- package/templates/guides/flutter/state-management.md +144 -0
- package/templates/guides/flutter/testing.md +155 -0
- package/templates/guides/git-worktree-workflow/README.md +138 -0
- package/templates/guides/go-backend/index.yaml +26 -0
- package/templates/guides/go-backend/project-layout.md +243 -0
- package/templates/guides/go-backend/uber-style.md +212 -0
- package/templates/guides/golang/concurrency.md +282 -0
- package/templates/guides/golang/effective-go.md +309 -0
- package/templates/guides/golang/error-handling.md +250 -0
- package/templates/guides/golang/index.yaml +27 -0
- package/templates/guides/hook-data-flow/README.md +135 -0
- package/templates/guides/iceberg/README.md +49 -0
- package/templates/guides/impeccable-design/color-and-contrast.md +278 -0
- package/templates/guides/impeccable-design/index.yaml +12 -0
- package/templates/guides/impeccable-design/motion-design.md +390 -0
- package/templates/guides/impeccable-design/typography.md +386 -0
- package/templates/guides/impeccable-design/ux-writing.md +400 -0
- package/templates/guides/index.yaml +265 -0
- package/templates/guides/java21/index.yaml +29 -0
- package/templates/guides/java21/java-style-guide.md +248 -0
- package/templates/guides/java21/modern-java21.md +303 -0
- package/templates/guides/kafka/README.md +32 -0
- package/templates/guides/kotlin/coding-conventions.md +247 -0
- package/templates/guides/kotlin/idioms.md +234 -0
- package/templates/guides/kotlin/index.yaml +26 -0
- package/templates/guides/multi-model-routing/README.md +101 -0
- package/templates/guides/multi-provider-exec/README.md +83 -0
- package/templates/guides/postgres/README.md +58 -0
- package/templates/guides/python/index.yaml +26 -0
- package/templates/guides/python/pep8-style-guide.md +202 -0
- package/templates/guides/python/zen-of-python.md +79 -0
- package/templates/guides/redis/README.md +50 -0
- package/templates/guides/rust/error-handling.md +262 -0
- package/templates/guides/rust/index.yaml +26 -0
- package/templates/guides/rust/ownership.md +180 -0
- package/templates/guides/skill-bundle-design/README.md +106 -0
- package/templates/guides/slack-cli/README.md +145 -0
- package/templates/guides/snowflake/README.md +32 -0
- package/templates/guides/spark/README.md +32 -0
- package/templates/guides/springboot/best-practices.md +361 -0
- package/templates/guides/springboot/index.yaml +22 -0
- package/templates/guides/supabase-postgres/README.md +32 -0
- package/templates/guides/supabase-postgres/index.yaml +19 -0
- package/templates/guides/typescript/advanced-types.md +225 -0
- package/templates/guides/typescript/index.yaml +26 -0
- package/templates/guides/typescript/type-system.md +219 -0
- package/templates/guides/web-design/accessibility.md +66 -0
- package/templates/guides/web-design/index.yaml +20 -0
- package/templates/guides/web-design/performance.md +102 -0
- package/templates/guides/web-scraping/README.md +926 -0
- package/templates/guides/web-scraping/index.yaml +19 -0
- package/templates/guides/worktree-lifecycle/README.md +104 -0
- package/templates/index.yaml +18 -0
- package/templates/manifest.json +49 -0
- package/templates/workflows/auto-dev.yaml +46 -0
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
# Alembic Guide
|
|
2
|
+
|
|
3
|
+
Database migration framework for SQLAlchemy. Current stable: **1.18.x** (2025).
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Alembic is the de-facto migration tool for SQLAlchemy projects. It manages the evolution of a relational database schema over time through versioned migration scripts organized as a directed acyclic graph (DAG). Each migration is a Python file with `upgrade()` and `downgrade()` functions that emit SQLAlchemy Core operations or raw SQL.
|
|
8
|
+
|
|
9
|
+
**Relationship to SQLAlchemy**: Alembic depends on SQLAlchemy but operates at the DDL (schema) level, not the DML (data query) level. It uses SQLAlchemy's introspection API to compare the current database state against declared models, then generates the difference as migration ops.
|
|
10
|
+
|
|
11
|
+
**Philosophy**: Unlike Rails migrations or Django migrations, Alembic generates migration code that developers are expected to review and edit. Autogenerate is a starting point, not a final answer.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Core Concepts
|
|
16
|
+
|
|
17
|
+
### Revision Chain (DAG)
|
|
18
|
+
|
|
19
|
+
Each migration file has:
|
|
20
|
+
- `revision`: unique identifier (e.g., `a1b2c3d4e5f6`)
|
|
21
|
+
- `down_revision`: parent revision(s) β `None` for the first migration, a tuple for merge points
|
|
22
|
+
|
|
23
|
+
The chain forms a DAG. `alembic upgrade head` walks the graph from the current DB revision to the tip(s). Branches can exist and are resolved with merge migrations.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
None β a1b2 β c3d4 β e5f6 (head)
|
|
27
|
+
β g7h8 β merge(e5f6, g7h8) (merged head)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### env.py
|
|
31
|
+
|
|
32
|
+
The bridge between Alembic and the application. Responsibilities:
|
|
33
|
+
1. Configure the SQLAlchemy engine/connection URL
|
|
34
|
+
2. Set `target_metadata` (SQLAlchemy `MetaData` with all models imported)
|
|
35
|
+
3. Define `run_migrations_offline()` and `run_migrations_online()` functions
|
|
36
|
+
4. Optionally override `alembic.ini` settings (e.g., inject `DATABASE_URL` from env vars)
|
|
37
|
+
|
|
38
|
+
### alembic.ini
|
|
39
|
+
|
|
40
|
+
Main configuration file. Key settings:
|
|
41
|
+
- `script_location` β path to `alembic/` directory
|
|
42
|
+
- `sqlalchemy.url` β database URL (should be overridden in `env.py` from env vars)
|
|
43
|
+
- `file_template` β naming pattern for generated migration files
|
|
44
|
+
- `prepend_sys_path` β adds project root to `sys.path` so `env.py` can import models
|
|
45
|
+
|
|
46
|
+
### script.py.mako
|
|
47
|
+
|
|
48
|
+
Mako template used to generate new migration files. Default template includes the `revision`, `down_revision`, `branch_labels`, `depends_on` header and empty `upgrade()`/`downgrade()` stubs.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## CLI Reference
|
|
53
|
+
|
|
54
|
+
| Command | Description |
|
|
55
|
+
|---------|-------------|
|
|
56
|
+
| `alembic init <dir>` | Initialize a new Alembic environment in `<dir>` |
|
|
57
|
+
| `alembic revision -m "message"` | Create a new empty migration |
|
|
58
|
+
| `alembic revision --autogenerate -m "message"` | Generate migration from model diff |
|
|
59
|
+
| `alembic upgrade head` | Apply all pending migrations |
|
|
60
|
+
| `alembic upgrade +1` | Apply the next one migration |
|
|
61
|
+
| `alembic upgrade <rev>` | Apply migrations up to `<rev>` |
|
|
62
|
+
| `alembic downgrade -1` | Revert the most recent migration |
|
|
63
|
+
| `alembic downgrade base` | Revert all migrations |
|
|
64
|
+
| `alembic downgrade <rev>` | Revert to `<rev>` |
|
|
65
|
+
| `alembic current` | Show current revision(s) applied to the DB |
|
|
66
|
+
| `alembic history` | Show full revision history |
|
|
67
|
+
| `alembic heads` | Show all head revisions (should be 1 in linear projects) |
|
|
68
|
+
| `alembic branches` | Show branch points |
|
|
69
|
+
| `alembic merge <rev1> <rev2> -m "merge"` | Create a merge migration |
|
|
70
|
+
| `alembic check` | Exit non-zero if models have changes not yet reflected in migrations |
|
|
71
|
+
| `alembic upgrade head --sql` | Print SQL statements without executing (offline mode) |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Operations Reference
|
|
76
|
+
|
|
77
|
+
### Table Operations
|
|
78
|
+
| Op | Description |
|
|
79
|
+
|----|-------------|
|
|
80
|
+
| `op.create_table(name, *cols)` | Create table |
|
|
81
|
+
| `op.drop_table(name)` | Drop table |
|
|
82
|
+
| `op.rename_table(old, new)` | Rename table |
|
|
83
|
+
|
|
84
|
+
### Column Operations
|
|
85
|
+
| Op | Description |
|
|
86
|
+
|----|-------------|
|
|
87
|
+
| `op.add_column(table, column)` | Add column |
|
|
88
|
+
| `op.drop_column(table, col_name)` | Drop column |
|
|
89
|
+
| `op.alter_column(table, col_name, ...)` | Change type, nullable, default, name |
|
|
90
|
+
|
|
91
|
+
### Index Operations
|
|
92
|
+
| Op | Description |
|
|
93
|
+
|----|-------------|
|
|
94
|
+
| `op.create_index(name, table, cols)` | Create index |
|
|
95
|
+
| `op.drop_index(name, table)` | Drop index |
|
|
96
|
+
| `op.create_index(..., postgresql_concurrently=True)` | Non-locking index (PG only) |
|
|
97
|
+
|
|
98
|
+
### Constraint Operations
|
|
99
|
+
| Op | Description |
|
|
100
|
+
|----|-------------|
|
|
101
|
+
| `op.create_unique_constraint(name, table, cols)` | Unique constraint |
|
|
102
|
+
| `op.drop_constraint(name, table)` | Drop constraint |
|
|
103
|
+
| `op.create_foreign_key(name, src_table, ref_table, lcols, rcols)` | FK constraint |
|
|
104
|
+
| `op.create_check_constraint(name, table, condition)` | Check constraint |
|
|
105
|
+
|
|
106
|
+
### Data & Raw SQL
|
|
107
|
+
| Op | Description |
|
|
108
|
+
|----|-------------|
|
|
109
|
+
| `op.execute(sql)` | Run raw SQL string or `text()` |
|
|
110
|
+
| `op.bulk_insert(table, rows)` | Insert list of dicts |
|
|
111
|
+
| `op.get_bind()` | Get the active connection for custom queries |
|
|
112
|
+
|
|
113
|
+
### Batch (SQLite / locked tables)
|
|
114
|
+
```python
|
|
115
|
+
with op.batch_alter_table("users") as batch_op:
|
|
116
|
+
batch_op.add_column(sa.Column("age", sa.Integer()))
|
|
117
|
+
batch_op.alter_column("name", nullable=False)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Configuration Patterns
|
|
123
|
+
|
|
124
|
+
### Sync (Default)
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
# env.py
|
|
128
|
+
import os
|
|
129
|
+
from sqlalchemy import engine_from_config, pool
|
|
130
|
+
from alembic import context
|
|
131
|
+
from myapp.models import Base
|
|
132
|
+
|
|
133
|
+
config = context.config
|
|
134
|
+
config.set_main_option("sqlalchemy.url", os.environ["DATABASE_URL"])
|
|
135
|
+
target_metadata = Base.metadata
|
|
136
|
+
|
|
137
|
+
def run_migrations_online():
|
|
138
|
+
connectable = engine_from_config(
|
|
139
|
+
config.get_section(config.config_ini_section, {}),
|
|
140
|
+
prefix="sqlalchemy.",
|
|
141
|
+
poolclass=pool.NullPool,
|
|
142
|
+
)
|
|
143
|
+
with connectable.connect() as connection:
|
|
144
|
+
context.configure(connection=connection, target_metadata=target_metadata)
|
|
145
|
+
with context.begin_transaction():
|
|
146
|
+
context.run_migrations()
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Async (asyncpg)
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
# env.py β async pattern
|
|
153
|
+
import asyncio, os
|
|
154
|
+
from sqlalchemy import pool
|
|
155
|
+
from sqlalchemy.ext.asyncio import async_engine_from_config
|
|
156
|
+
from alembic import context
|
|
157
|
+
from myapp.models import Base
|
|
158
|
+
|
|
159
|
+
config = context.config
|
|
160
|
+
config.set_main_option("sqlalchemy.url", os.environ["DATABASE_URL"])
|
|
161
|
+
target_metadata = Base.metadata
|
|
162
|
+
|
|
163
|
+
async def run_migrations_online():
|
|
164
|
+
connectable = async_engine_from_config(
|
|
165
|
+
config.get_section(config.config_ini_section, {}),
|
|
166
|
+
prefix="sqlalchemy.",
|
|
167
|
+
poolclass=pool.NullPool,
|
|
168
|
+
)
|
|
169
|
+
async with connectable.connect() as connection:
|
|
170
|
+
await connection.run_sync(
|
|
171
|
+
lambda conn: context.configure(conn, target_metadata=target_metadata)
|
|
172
|
+
)
|
|
173
|
+
async with connectable.begin() as trans:
|
|
174
|
+
await connection.run_sync(lambda _: context.run_migrations())
|
|
175
|
+
await connectable.dispose()
|
|
176
|
+
|
|
177
|
+
asyncio.run(run_migrations_online())
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Multi-Tenant (Schema Per Tenant)
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
# env.py β schema-per-tenant pattern
|
|
184
|
+
import os
|
|
185
|
+
from alembic import context
|
|
186
|
+
|
|
187
|
+
TENANT_SCHEMAS = os.environ.get("TENANT_SCHEMAS", "public").split(",")
|
|
188
|
+
|
|
189
|
+
def run_migrations_online():
|
|
190
|
+
connectable = engine_from_config(...)
|
|
191
|
+
with connectable.connect() as connection:
|
|
192
|
+
for schema in TENANT_SCHEMAS:
|
|
193
|
+
connection.execute(text(f"SET search_path TO {schema}"))
|
|
194
|
+
context.configure(
|
|
195
|
+
connection=connection,
|
|
196
|
+
target_metadata=target_metadata,
|
|
197
|
+
version_table_schema=schema,
|
|
198
|
+
include_schemas=True,
|
|
199
|
+
)
|
|
200
|
+
with context.begin_transaction():
|
|
201
|
+
context.run_migrations()
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Multi-Database
|
|
205
|
+
|
|
206
|
+
Use separate `alembic/` directories (one per database), each with its own `alembic.ini` and `env.py`. Invoke as:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
alembic -c alembic_orders.ini upgrade head
|
|
210
|
+
alembic -c alembic_users.ini upgrade head
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Integration
|
|
216
|
+
|
|
217
|
+
### FastAPI
|
|
218
|
+
|
|
219
|
+
Use lifespan events to run migrations on startup in development:
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
from contextlib import asynccontextmanager
|
|
223
|
+
from fastapi import FastAPI
|
|
224
|
+
from alembic.config import Config
|
|
225
|
+
from alembic import command
|
|
226
|
+
|
|
227
|
+
@asynccontextmanager
|
|
228
|
+
async def lifespan(app: FastAPI):
|
|
229
|
+
# Run migrations on startup (dev/test only β use CI in production)
|
|
230
|
+
alembic_cfg = Config("alembic.ini")
|
|
231
|
+
command.upgrade(alembic_cfg, "head")
|
|
232
|
+
yield
|
|
233
|
+
|
|
234
|
+
app = FastAPI(lifespan=lifespan)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
For production, run migrations as a separate step before the application starts (init container, pre-deploy hook, or CI step).
|
|
238
|
+
|
|
239
|
+
### Flask-Migrate
|
|
240
|
+
|
|
241
|
+
Flask-Migrate wraps Alembic for Flask applications. It adds `flask db init`, `flask db migrate`, `flask db upgrade` commands. Under the hood it calls the same Alembic Python API. Alembic knowledge transfers directly; only the CLI surface differs.
|
|
242
|
+
|
|
243
|
+
### Docker / Kubernetes
|
|
244
|
+
|
|
245
|
+
Run migrations as a Kubernetes init container or Docker Compose `depends_on` service:
|
|
246
|
+
|
|
247
|
+
```yaml
|
|
248
|
+
# docker-compose.yml
|
|
249
|
+
services:
|
|
250
|
+
migrate:
|
|
251
|
+
image: myapp:latest
|
|
252
|
+
command: alembic upgrade head
|
|
253
|
+
environment:
|
|
254
|
+
DATABASE_URL: postgresql://user:pass@db:5432/mydb
|
|
255
|
+
depends_on:
|
|
256
|
+
db:
|
|
257
|
+
condition: service_healthy
|
|
258
|
+
|
|
259
|
+
app:
|
|
260
|
+
image: myapp:latest
|
|
261
|
+
depends_on:
|
|
262
|
+
migrate:
|
|
263
|
+
condition: service_completed_successfully
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### pytest-alembic
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
pip install pytest-alembic
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Provides fixtures (`alembic_config`, `alembic_engine`, `alembic_runner`) and built-in tests. Add `--test-alembic` flag or run `pytest tests/test_migrations.py`. See `alembic-best-practices` skill for full setup.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Comparison
|
|
277
|
+
|
|
278
|
+
| Feature | Alembic | Atlas (HashiCorp) | Django Migrations | Flyway | Liquibase |
|
|
279
|
+
|---------|---------|-------------------|-------------------|--------|-----------|
|
|
280
|
+
| Language | Python | Go / HCL | Python | Java | Java / XML |
|
|
281
|
+
| Migration format | Python scripts | HCL / SQL | Python auto-generated | SQL files | XML / YAML / SQL |
|
|
282
|
+
| Autogenerate | Yes (SQLAlchemy) | Yes (schema diff) | Yes (ORM diff) | No | No |
|
|
283
|
+
| Downgrade support | Yes | Partial | Yes | Yes (Undo) | Yes (Rollback) |
|
|
284
|
+
| Multi-DB | Manual | Built-in | Manual | Built-in | Built-in |
|
|
285
|
+
| Async support | Yes (v1.11+) | N/A | No | N/A | N/A |
|
|
286
|
+
| PG objects (views, etc.) | Via alembic-utils | Native HCL | No | SQL only | SQL only |
|
|
287
|
+
| Lock analysis | Via Squawk | Built-in lint | None | None | None |
|
|
288
|
+
| Best for | SQLAlchemy / Python projects | Infra-as-code DB schemas | Django projects | JVM projects | Enterprise / multi-engine |
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Security
|
|
293
|
+
|
|
294
|
+
### Credential Management
|
|
295
|
+
|
|
296
|
+
Never embed database credentials in `alembic.ini`. Always source from environment variables in `env.py`:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
import os
|
|
300
|
+
config.set_main_option("sqlalchemy.url", os.environ["DATABASE_URL"])
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Use secret management (AWS Secrets Manager, HashiCorp Vault, Kubernetes Secrets) to inject `DATABASE_URL` at runtime.
|
|
304
|
+
|
|
305
|
+
### Migration Script Integrity
|
|
306
|
+
|
|
307
|
+
- Commit migration files to version control β do not generate them on the fly in CI
|
|
308
|
+
- Use `alembic check` in CI to verify no uncommitted model changes exist
|
|
309
|
+
- Review all autogenerated migrations before merging β they are code, not config
|
|
310
|
+
|
|
311
|
+
### Database Permission Separation
|
|
312
|
+
|
|
313
|
+
| Role | Permissions | Used by |
|
|
314
|
+
|------|------------|---------|
|
|
315
|
+
| Migration role | `CREATE`, `ALTER`, `DROP`, `INSERT`, `UPDATE`, `DELETE` on schema | Alembic only |
|
|
316
|
+
| Application role | `SELECT`, `INSERT`, `UPDATE`, `DELETE` on tables | Application at runtime |
|
|
317
|
+
| Read-only role | `SELECT` only | Reporting, analytics |
|
|
318
|
+
|
|
319
|
+
Run `alembic upgrade head` with the migration role, not the application role. The application should never have `DROP TABLE` or `ALTER TABLE` permissions.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Advanced Topics
|
|
324
|
+
|
|
325
|
+
### Batch Operations (SQLite)
|
|
326
|
+
|
|
327
|
+
SQLite does not support `ALTER TABLE` for most operations. Use `batch_alter_table` which recreates the table:
|
|
328
|
+
|
|
329
|
+
```python
|
|
330
|
+
with op.batch_alter_table("users", schema=None) as batch_op:
|
|
331
|
+
batch_op.alter_column("email", nullable=False)
|
|
332
|
+
batch_op.drop_constraint("uq_users_username", type_="unique")
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Set `render_as_batch=True` in `env.py` to make autogenerate always emit batch operations for SQLite projects.
|
|
336
|
+
|
|
337
|
+
### Offline Mode
|
|
338
|
+
|
|
339
|
+
Generate SQL without a live database:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
alembic upgrade head --sql > migration.sql
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Useful for: production deployments (run SQL through DBA review), Squawk lint analysis, audit trails.
|
|
346
|
+
|
|
347
|
+
### Branching and Merging
|
|
348
|
+
|
|
349
|
+
When two developers create migrations from the same base revision, a branch forms. Resolve with:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
alembic merge <rev1> <rev2> -m "merge parallel migrations"
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
The merge migration has both revisions in `down_revision` as a tuple:
|
|
356
|
+
|
|
357
|
+
```python
|
|
358
|
+
down_revision = ("a1b2c3d4", "e5f6g7h8")
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Custom Operations
|
|
362
|
+
|
|
363
|
+
Extend Alembic with project-specific ops:
|
|
364
|
+
|
|
365
|
+
```python
|
|
366
|
+
# migrations/ops.py
|
|
367
|
+
from alembic.operations import Operations, MigrateOperation
|
|
368
|
+
|
|
369
|
+
@Operations.register_operation("create_sequence")
|
|
370
|
+
class CreateSequenceOp(MigrateOperation):
|
|
371
|
+
def __init__(self, sequence_name, schema=None):
|
|
372
|
+
self.sequence_name = sequence_name
|
|
373
|
+
self.schema = schema
|
|
374
|
+
|
|
375
|
+
@classmethod
|
|
376
|
+
def create_sequence(cls, operations, sequence_name, **kw):
|
|
377
|
+
op = CreateSequenceOp(sequence_name, **kw)
|
|
378
|
+
return operations.invoke(op)
|
|
379
|
+
|
|
380
|
+
@Operations.implementation_for(CreateSequenceOp)
|
|
381
|
+
def create_sequence(operations, operation):
|
|
382
|
+
operations.execute(f"CREATE SEQUENCE {operation.sequence_name}")
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Replaceable Objects (alembic-utils)
|
|
386
|
+
|
|
387
|
+
For PostgreSQL objects that are replaced entirely on change (views, functions, triggers, RLS policies), use `alembic-utils` to manage them as Replaceable Objects. Register with autogenerate so diffs are automatically detected:
|
|
388
|
+
|
|
389
|
+
```python
|
|
390
|
+
# env.py
|
|
391
|
+
from alembic_utils.replaceable_entity import register_entities
|
|
392
|
+
from myapp.db.views import user_summary_view, active_orders_view
|
|
393
|
+
|
|
394
|
+
register_entities([user_summary_view, active_orders_view])
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Ecosystem
|
|
400
|
+
|
|
401
|
+
| Package | Purpose | Maturity |
|
|
402
|
+
|---------|---------|---------|
|
|
403
|
+
| `alembic-utils` | PostgreSQL Replaceable Objects: views, functions, triggers, RLS | Stable |
|
|
404
|
+
| `alembic-postgresql-enum` | Add enum values without full table recreate | Stable |
|
|
405
|
+
| `pytest-alembic` | Migration test fixtures and built-in test cases | Stable |
|
|
406
|
+
| `audit-alembic` | Attach migration context to audit log | Beta |
|
|
407
|
+
| `Squawk` | Static DDL linter for lock-risk patterns | Stable |
|
|
408
|
+
| `pgai Vectorizer` | AI-enabled column vectorization via migrations | Experimental |
|
|
409
|
+
| `Atlas` | Alternative migration engine with HCL-based schema | Stable (separate tool) |
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Quick Reference
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
# Initial setup
|
|
417
|
+
pip install alembic sqlalchemy
|
|
418
|
+
alembic init alembic
|
|
419
|
+
|
|
420
|
+
# Daily workflow
|
|
421
|
+
alembic revision --autogenerate -m "add user preferences table"
|
|
422
|
+
# β Review generated file in alembic/versions/
|
|
423
|
+
alembic upgrade head
|
|
424
|
+
|
|
425
|
+
# Check / verify
|
|
426
|
+
alembic current
|
|
427
|
+
alembic history --verbose
|
|
428
|
+
alembic check # fails if models have unmigrated changes
|
|
429
|
+
|
|
430
|
+
# Rollback
|
|
431
|
+
alembic downgrade -1
|
|
432
|
+
|
|
433
|
+
# Branching
|
|
434
|
+
alembic merge rev1 rev2 -m "merge branches"
|
|
435
|
+
|
|
436
|
+
# Offline SQL
|
|
437
|
+
alembic upgrade head --sql | squawk # lint before applying
|
|
438
|
+
```
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# AWS Common Architecture Patterns
|
|
2
|
+
|
|
3
|
+
> Source: https://aws.amazon.com/architecture/
|
|
4
|
+
|
|
5
|
+
## Web Application (Three-Tier)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
9
|
+
β Internet β
|
|
10
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
11
|
+
β
|
|
12
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
13
|
+
β CloudFront (CDN) β
|
|
14
|
+
β + WAF β
|
|
15
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
16
|
+
β
|
|
17
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
18
|
+
β Application Load Balancer β
|
|
19
|
+
β (Public Subnets) β
|
|
20
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
21
|
+
β
|
|
22
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
23
|
+
β ECS Fargate / EC2 Auto Scaling β
|
|
24
|
+
β (Private Subnets) β
|
|
25
|
+
β + ElastiCache (Redis) β
|
|
26
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
27
|
+
β
|
|
28
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
29
|
+
β RDS Aurora (Multi-AZ) β
|
|
30
|
+
β (Private Subnets) β
|
|
31
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Serverless API
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
38
|
+
β Client β
|
|
39
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
40
|
+
β
|
|
41
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
42
|
+
β API Gateway β
|
|
43
|
+
β (REST/HTTP API) β
|
|
44
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
45
|
+
β
|
|
46
|
+
βββββββββββββββββββββΌββββββββββββββββββββ
|
|
47
|
+
β β β
|
|
48
|
+
ββββββββββ΄βββββββββ βββββββββ΄βββββββββ βββββββββ΄βββββββββ
|
|
49
|
+
β Lambda β β Lambda β β Lambda β
|
|
50
|
+
β (Get User) β β (Create User) β β (List Users) β
|
|
51
|
+
ββββββββββ¬βββββββββ βββββββββ¬βββββββββ βββββββββ¬βββββββββ
|
|
52
|
+
β β β
|
|
53
|
+
βββββββββββββββββββββΌββββββββββββββββββββ
|
|
54
|
+
β
|
|
55
|
+
ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
|
|
56
|
+
β DynamoDB β
|
|
57
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Event-Driven Architecture
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
|
|
64
|
+
β Producer βββββΆβ EventBridgeβββββΆβ Consumer β
|
|
65
|
+
β (Lambda) β β (Events) β β (Lambda) β
|
|
66
|
+
ββββββββββββββββ ββββββββ¬ββββββββ ββββββββββββββββ
|
|
67
|
+
β
|
|
68
|
+
βββββββββββββββββββΌββββββββββββββββββ
|
|
69
|
+
β β β
|
|
70
|
+
βΌ βΌ βΌ
|
|
71
|
+
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
|
|
72
|
+
β SQS Queue β β SNS Topic β β Step Functionβ
|
|
73
|
+
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Microservices
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
80
|
+
β API Gateway / ALB β
|
|
81
|
+
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
|
|
82
|
+
β
|
|
83
|
+
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
|
|
84
|
+
β β β
|
|
85
|
+
βββββ΄ββββ ββββββ΄βββββ ββββββ΄βββββ
|
|
86
|
+
βServiceβ β Service β β Service β
|
|
87
|
+
β A β β B β β C β
|
|
88
|
+
β(ECS) β β (Lambda)β β (EKS) β
|
|
89
|
+
βββββ¬ββββ ββββββ¬βββββ ββββββ¬βββββ
|
|
90
|
+
β β β
|
|
91
|
+
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
|
|
92
|
+
β
|
|
93
|
+
ββββββββββ΄βββββββββ
|
|
94
|
+
β Service Mesh β
|
|
95
|
+
β (App Mesh) β
|
|
96
|
+
βββββββββββββββββββ
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Data Lake
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
103
|
+
β Data Sources β
|
|
104
|
+
β (Databases, APIs, IoT, Logs, Streams) β
|
|
105
|
+
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
|
|
106
|
+
β
|
|
107
|
+
ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ
|
|
108
|
+
β Ingestion Layer β
|
|
109
|
+
β (Kinesis, DMS, AppFlow, Transfer Family) β
|
|
110
|
+
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
|
|
111
|
+
β
|
|
112
|
+
ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ
|
|
113
|
+
β Storage Layer β
|
|
114
|
+
β S3 (Raw β Processed β Curated) β
|
|
115
|
+
β + Lake Formation β
|
|
116
|
+
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
|
|
117
|
+
β
|
|
118
|
+
ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ
|
|
119
|
+
β Processing Layer β
|
|
120
|
+
β (Glue, EMR, Athena, Redshift Spectrum) β
|
|
121
|
+
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
|
|
122
|
+
β
|
|
123
|
+
ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ
|
|
124
|
+
β Consumption Layer β
|
|
125
|
+
β (QuickSight, SageMaker, APIs) β
|
|
126
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## CI/CD Pipeline
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
|
|
133
|
+
β GitHub / βββββΆβ CodePipelineβββββΆβ CodeBuild β
|
|
134
|
+
β CodeCommit β β (Source) β β (Build) β
|
|
135
|
+
ββββββββββββββββ ββββββββββββββββ ββββββββ¬ββββββββ
|
|
136
|
+
β
|
|
137
|
+
βββββββββββββββββββββββ΄ββββββββββββββββββββββ
|
|
138
|
+
β β
|
|
139
|
+
βΌ βΌ
|
|
140
|
+
ββββββββββββββββ ββββββββββββββββ
|
|
141
|
+
β ECR β β S3 β
|
|
142
|
+
β (Container) β β (Artifact) β
|
|
143
|
+
ββββββββ¬ββββββββ ββββββββ¬ββββββββ
|
|
144
|
+
β β
|
|
145
|
+
βββββββββββββββββββ¬ββββββββββββββββββββββββββ
|
|
146
|
+
β
|
|
147
|
+
βΌ
|
|
148
|
+
ββββββββββββββββββββ
|
|
149
|
+
β CodeDeploy β
|
|
150
|
+
β (Blue/Green) β
|
|
151
|
+
ββββββββββ¬ββββββββββ
|
|
152
|
+
β
|
|
153
|
+
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
|
|
154
|
+
β β β
|
|
155
|
+
βΌ βΌ βΌ
|
|
156
|
+
ββββββββββββ ββββββββββββ ββββββββββββ
|
|
157
|
+
β Dev β β Stage β β Prod β
|
|
158
|
+
β ECS β β ECS β β ECS β
|
|
159
|
+
ββββββββββββ ββββββββββββ ββββββββββββ
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Disaster Recovery
|
|
163
|
+
|
|
164
|
+
| Strategy | RTO | RPO | Cost |
|
|
165
|
+
|----------|-----|-----|------|
|
|
166
|
+
| Backup & Restore | Hours | Hours | $ |
|
|
167
|
+
| Pilot Light | Minutes-Hours | Minutes | $$ |
|
|
168
|
+
| Warm Standby | Minutes | Seconds | $$$ |
|
|
169
|
+
| Multi-Site Active | Near Zero | Near Zero | $$$$ |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# AWS Guide
|
|
2
|
+
|
|
3
|
+
metadata:
|
|
4
|
+
name: aws
|
|
5
|
+
description: AWS cloud reference documentation
|
|
6
|
+
|
|
7
|
+
source:
|
|
8
|
+
type: external
|
|
9
|
+
origin: aws.amazon.com
|
|
10
|
+
urls:
|
|
11
|
+
- https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html
|
|
12
|
+
- https://docs.aws.amazon.com/
|
|
13
|
+
- https://aws.amazon.com/architecture/
|
|
14
|
+
last_fetched: "2026-01-22"
|
|
15
|
+
|
|
16
|
+
documents:
|
|
17
|
+
- name: well-architected
|
|
18
|
+
path: ./well-architected.md
|
|
19
|
+
description: AWS Well-Architected Framework summary
|
|
20
|
+
|
|
21
|
+
- name: common-patterns
|
|
22
|
+
path: ./common-patterns.md
|
|
23
|
+
description: Common AWS architecture patterns
|
|
24
|
+
|
|
25
|
+
used_by:
|
|
26
|
+
- infra-aws-expert
|