@dsalazardev/ai-hub-cli 0.0.0-stage → 0.2.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/NOTICE.md +34 -0
- package/README.md +64 -2
- package/agents/cpp-build-resolver.md +25 -0
- package/agents/cpp-reviewer.md +28 -0
- package/agents/csharp-reviewer.md +28 -0
- package/agents/django-build-resolver.md +25 -0
- package/agents/django-reviewer.md +28 -0
- package/agents/explorer-domain.md +28 -0
- package/agents/fastapi-reviewer.md +28 -0
- package/agents/flutter-build-resolver.md +25 -0
- package/agents/flutter-reviewer.md +28 -0
- package/agents/go-build-resolver.md +25 -0
- package/agents/go-reviewer.md +28 -0
- package/agents/implementer-backend.md +30 -0
- package/agents/implementer-frontend.md +30 -0
- package/agents/java-build-resolver.md +26 -0
- package/agents/java-reviewer.md +29 -0
- package/agents/kotlin-build-resolver.md +25 -0
- package/agents/kotlin-reviewer.md +28 -0
- package/agents/mle-reviewer.md +28 -0
- package/agents/php-reviewer.md +29 -0
- package/agents/postgres-reviewer.md +28 -0
- package/agents/python-reviewer.md +28 -0
- package/agents/pytorch-build-resolver.md +25 -0
- package/agents/rag-reviewer.md +28 -0
- package/agents/react-build-resolver.md +26 -0
- package/agents/react-reviewer.md +29 -0
- package/agents/reviewer-architecture.md +32 -0
- package/agents/reviewer-tests.md +31 -0
- package/agents/rust-build-resolver.md +25 -0
- package/agents/rust-reviewer.md +28 -0
- package/agents/spec-author.md +36 -0
- package/agents/spec-miner.md +14 -0
- package/agents/swift-build-resolver.md +25 -0
- package/agents/swift-reviewer.md +28 -0
- package/agents/typescript-reviewer.md +28 -0
- package/agents/vue-reviewer.md +28 -0
- package/dist/backup/snapshots.d.ts +24 -0
- package/dist/backup/snapshots.js +171 -0
- package/dist/bin/ai-hub.d.ts +2 -0
- package/dist/bin/ai-hub.js +11 -0
- package/dist/catalog.d.ts +76 -0
- package/dist/catalog.js +321 -0
- package/dist/cli/args.d.ts +4 -0
- package/dist/cli/args.js +63 -0
- package/dist/cli/context.d.ts +7 -0
- package/dist/cli/context.js +79 -0
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +282 -0
- package/dist/cli/drift.d.ts +2 -0
- package/dist/cli/drift.js +34 -0
- package/dist/cli/items.d.ts +5 -0
- package/dist/cli/items.js +10 -0
- package/dist/cli/legacy.d.ts +3 -0
- package/dist/cli/legacy.js +18 -0
- package/dist/cli/maintenance.d.ts +8 -0
- package/dist/cli/maintenance.js +334 -0
- package/dist/cli/memory.d.ts +2 -0
- package/dist/cli/memory.js +89 -0
- package/dist/cli/onboarding.d.ts +36 -0
- package/dist/cli/onboarding.js +516 -0
- package/dist/cli/run.d.ts +15 -0
- package/dist/cli/run.js +185 -0
- package/dist/cli/source.d.ts +5 -0
- package/dist/cli/source.js +22 -0
- package/dist/cli/trunk.d.ts +8 -0
- package/dist/cli/trunk.js +54 -0
- package/dist/cli/types.d.ts +17 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/worktrees.d.ts +11 -0
- package/dist/cli/worktrees.js +141 -0
- package/dist/concurrency.d.ts +5 -0
- package/dist/concurrency.js +23 -0
- package/dist/engine/engine.d.ts +48 -0
- package/dist/engine/engine.js +114 -0
- package/dist/engine/gates.d.ts +2 -0
- package/dist/engine/gates.js +131 -0
- package/dist/frontmatter.d.ts +11 -0
- package/dist/frontmatter.js +30 -0
- package/dist/harness/guards/adapters/context.d.ts +19 -0
- package/dist/harness/guards/adapters/context.js +153 -0
- package/dist/harness/guards/adapters/hermes.d.ts +13 -0
- package/dist/harness/guards/adapters/hermes.js +18 -0
- package/dist/harness/guards/adapters/hooks.d.ts +25 -0
- package/dist/harness/guards/adapters/hooks.js +52 -0
- package/dist/harness/guards/branch.d.ts +5 -0
- package/dist/harness/guards/branch.js +43 -0
- package/dist/harness/guards/danger.d.ts +13 -0
- package/dist/harness/guards/danger.js +157 -0
- package/dist/harness/guards/index.d.ts +6 -0
- package/dist/harness/guards/index.js +6 -0
- package/dist/harness/guards/preflight.d.ts +14 -0
- package/dist/harness/guards/preflight.js +37 -0
- package/dist/harness/guards/ship.d.ts +2 -0
- package/dist/harness/guards/ship.js +35 -0
- package/dist/harness/guards/trunk.d.ts +5 -0
- package/dist/harness/guards/trunk.js +41 -0
- package/dist/harness/guards/types.d.ts +50 -0
- package/dist/harness/guards/types.js +1 -0
- package/dist/harness/memory/ledger.d.ts +53 -0
- package/dist/harness/memory/ledger.js +136 -0
- package/dist/harness/memory/state.d.ts +35 -0
- package/dist/harness/memory/state.js +121 -0
- package/dist/harness/worktree/reaper.d.ts +32 -0
- package/dist/harness/worktree/reaper.js +54 -0
- package/dist/manifest/build.d.ts +1 -0
- package/dist/manifest/build.js +1 -0
- package/dist/manifest/cli.d.ts +2 -0
- package/dist/manifest/cli.js +44 -0
- package/dist/manifest/dispatch.d.ts +13 -0
- package/dist/manifest/dispatch.js +36 -0
- package/dist/manifest/labels.d.ts +15 -0
- package/dist/manifest/labels.js +70 -0
- package/dist/manifest/manifest.d.ts +130 -0
- package/dist/manifest/manifest.js +220 -0
- package/dist/package-info.d.ts +4 -0
- package/dist/package-info.js +7 -0
- package/dist/paths.d.ts +33 -0
- package/dist/paths.js +123 -0
- package/dist/presets/detect.d.ts +24 -0
- package/dist/presets/detect.js +116 -0
- package/dist/presets/materialize.d.ts +26 -0
- package/dist/presets/materialize.js +192 -0
- package/dist/presets/resolve.d.ts +37 -0
- package/dist/presets/resolve.js +83 -0
- package/dist/presets/schema.d.ts +57 -0
- package/dist/presets/schema.js +68 -0
- package/dist/source-checkout.d.ts +8 -0
- package/dist/source-checkout.js +19 -0
- package/dist/sync/config.d.ts +47 -0
- package/dist/sync/config.js +85 -0
- package/dist/sync/lock.d.ts +16 -0
- package/dist/sync/lock.js +43 -0
- package/dist/sync/render.d.ts +18 -0
- package/dist/sync/render.js +259 -0
- package/dist/sync/sync.d.ts +38 -0
- package/dist/sync/sync.js +288 -0
- package/dist/sync/targets.d.ts +24 -0
- package/dist/sync/targets.js +78 -0
- package/engine/coupling.json +4 -0
- package/engine/engine.yaml +250 -0
- package/engine/legacy-paths.json +4 -0
- package/engine/preflight.md +11 -0
- package/manifest.json +402 -0
- package/package.json +62 -4
- package/presets/angular-express/harness/rules/01-zero-any.sh +25 -0
- package/presets/angular-express/harness/rules/02-no-ng-module.sh +21 -0
- package/presets/angular-express/harness/rules/03-no-constructor-injection.sh +21 -0
- package/presets/angular-express/harness/rules/04-no-legacy-directives.sh +21 -0
- package/presets/angular-express/harness/rules/05-no-dolibarrdal-inheritance.sh +25 -0
- package/presets/angular-express/harness/rules/06-no-todos.sh +22 -0
- package/presets/angular-express/harness/run-all.sh +13 -0
- package/presets/angular-express/preset.yaml +53 -0
- package/presets/angular-express/references/common-imports-catalog.md +146 -0
- package/presets/angular-express/references/fichajes-migration-notes.md +57 -0
- package/presets/angular-express/references/module-implementation-flow.md +260 -0
- package/presets/angular-express/references/products-coding-standard.md +143 -0
- package/presets/angular-express/references/products-module-blueprint.md +860 -0
- package/presets/angular-express/references/replicate-module-checklist.md +72 -0
- package/presets/angular-express/references/users-migration-notes.md +172 -0
- package/presets/angular-express/rules/architecture.md +8 -0
- package/presets/angular-express/rules/backend.md +4 -0
- package/presets/angular-express/rules/frontend.md +53 -0
- package/presets/angular-express/skills/angular-developer/SKILL.md +130 -0
- package/presets/angular-express/skills/angular-developer/references/angular-animations.md +160 -0
- package/presets/angular-express/skills/angular-developer/references/angular-aria.md +410 -0
- package/presets/angular-express/skills/angular-developer/references/cli.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/component-harnesses.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/component-styling.md +91 -0
- package/presets/angular-express/skills/angular-developer/references/components.md +117 -0
- package/presets/angular-express/skills/angular-developer/references/creating-services.md +97 -0
- package/presets/angular-express/skills/angular-developer/references/data-resolvers.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/define-routes.md +67 -0
- package/presets/angular-express/skills/angular-developer/references/defining-providers.md +72 -0
- package/presets/angular-express/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/presets/angular-express/skills/angular-developer/references/e2e-testing.md +66 -0
- package/presets/angular-express/skills/angular-developer/references/effects.md +83 -0
- package/presets/angular-express/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/presets/angular-express/skills/angular-developer/references/host-elements.md +80 -0
- package/presets/angular-express/skills/angular-developer/references/injection-context.md +63 -0
- package/presets/angular-express/skills/angular-developer/references/inputs.md +101 -0
- package/presets/angular-express/skills/angular-developer/references/linked-signal.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/loading-strategies.md +61 -0
- package/presets/angular-express/skills/angular-developer/references/mcp.md +106 -0
- package/presets/angular-express/skills/angular-developer/references/migrations.md +30 -0
- package/presets/angular-express/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/outputs.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/reactive-forms.md +122 -0
- package/presets/angular-express/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/presets/angular-express/skills/angular-developer/references/resource.md +74 -0
- package/presets/angular-express/skills/angular-developer/references/route-animations.md +56 -0
- package/presets/angular-express/skills/angular-developer/references/route-guards.md +52 -0
- package/presets/angular-express/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/presets/angular-express/skills/angular-developer/references/router-testing.md +87 -0
- package/presets/angular-express/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/presets/angular-express/skills/angular-developer/references/signal-forms.md +897 -0
- package/presets/angular-express/skills/angular-developer/references/signals-overview.md +94 -0
- package/presets/angular-express/skills/angular-developer/references/tailwind-css.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/presets/angular-express/skills/angular-developer/references/testing-fundamentals.md +66 -0
- package/presets/angular-express/skills/angular-new-app/SKILL.md +62 -0
- package/presets/angular-express/skills/frontend-design/LICENSE.txt +177 -0
- package/presets/angular-express/skills/frontend-design/SKILL.md +55 -0
- package/presets/angular-express/skills/onna-architecture-angular/SKILL.md +229 -0
- package/presets/angular-express/skills/onna-architecture-bff/SKILL.md +446 -0
- package/presets/angular-express/skills/onna-architecture-common/SKILL.md +313 -0
- package/presets/angular-express/skills/onna-design-system/SKILL.md +615 -0
- package/presets/base/preset.yaml +25 -0
- package/presets/base/rules/core.md +35 -0
- package/presets/generic-ts/preset.yaml +44 -0
- package/presets/python/preset.yaml +45 -0
- package/presets/python/rules/python.md +10 -0
- package/rules/skill-quality/skill-behavior-rubric.md +63 -0
- package/rules/skill-quality/skill-harden-rubric.md +102 -0
- package/rules/skill-quality/skill-migration-brief.md +200 -0
- package/rules/skill-quality/skill-rubric.md +40 -0
- package/schema/engine.schema.json +73 -0
- package/schema/manifest.schema.json +152 -0
- package/schema/preset.schema.json +98 -0
- package/schema/state.schema.json +27 -0
- package/skills/shared/ab-testing/SKILL.md +159 -0
- package/skills/shared/ab-testing/evals/README.md +8 -0
- package/skills/shared/ab-testing/evals/cases.yaml +49 -0
- package/skills/shared/ab-testing/references/pitfalls.md +74 -0
- package/skills/shared/ab-testing/references/sample-size-and-cuped.md +128 -0
- package/skills/shared/ab-testing/scripts/verify.sh +89 -0
- package/skills/shared/accessibility/SKILL.md +216 -0
- package/skills/shared/accessibility/evals/README.md +3 -0
- package/skills/shared/accessibility/evals/cases.yaml +47 -0
- package/skills/shared/accessibility/references/aria-patterns.md +113 -0
- package/skills/shared/accessibility/references/wcag22-checklist.md +83 -0
- package/skills/shared/accessibility/scripts/verify.sh +103 -0
- package/skills/shared/agent-eval/SKILL.md +187 -0
- package/skills/shared/agent-eval/evals/README.md +12 -0
- package/skills/shared/agent-eval/evals/cases.yaml +45 -0
- package/skills/shared/agent-eval/references/judge-design.md +118 -0
- package/skills/shared/agent-eval/references/runner-and-gate.md +183 -0
- package/skills/shared/agent-eval/scripts/verify.sh +161 -0
- package/skills/shared/agent-safety/SKILL.md +169 -0
- package/skills/shared/agent-safety/evals/README.md +12 -0
- package/skills/shared/agent-safety/evals/cases.yaml +46 -0
- package/skills/shared/agent-safety/references/threat-model.md +51 -0
- package/skills/shared/analyze/SKILL.md +123 -0
- package/skills/shared/analyze/evals/README.md +72 -0
- package/skills/shared/analyze/evals/cases.yaml +74 -0
- package/skills/shared/angular/SKILL.md +275 -0
- package/skills/shared/angular/evals/README.md +3 -0
- package/skills/shared/angular/evals/cases.yaml +38 -0
- package/skills/shared/angular/references/migration.md +81 -0
- package/skills/shared/angular/references/signals-rxjs.md +92 -0
- package/skills/shared/angular/scripts/verify.sh +122 -0
- package/skills/shared/api-connector-builder/SKILL.md +268 -0
- package/skills/shared/api-connector-builder/evals/README.md +11 -0
- package/skills/shared/api-connector-builder/evals/cases.yaml +47 -0
- package/skills/shared/api-connector-builder/references/auth-flows.md +132 -0
- package/skills/shared/api-connector-builder/references/pagination.md +144 -0
- package/skills/shared/api-connector-builder/scripts/verify.sh +172 -0
- package/skills/shared/api-design/SKILL.md +182 -0
- package/skills/shared/api-design/evals/README.md +3 -0
- package/skills/shared/api-design/evals/cases.yaml +45 -0
- package/skills/shared/api-design/references/graphql-design.md +70 -0
- package/skills/shared/api-design/references/openapi-contract.md +86 -0
- package/skills/shared/api-design/references/rest-conventions.md +63 -0
- package/skills/shared/api-design/references/versioning-and-evolution.md +49 -0
- package/skills/shared/api-design/scripts/verify.sh +138 -0
- package/skills/shared/astro/SKILL.md +257 -0
- package/skills/shared/astro/evals/README.md +3 -0
- package/skills/shared/astro/evals/cases.yaml +41 -0
- package/skills/shared/astro/references/content-layer.md +118 -0
- package/skills/shared/astro/references/deploy-and-integrations.md +163 -0
- package/skills/shared/astro/scripts/verify.sh +137 -0
- package/skills/shared/author-skill/SKILL.md +194 -0
- package/skills/shared/author-skill/evals/README.md +66 -0
- package/skills/shared/author-skill/evals/cases.yaml +75 -0
- package/skills/shared/author-skill/references/description-recipe.md +85 -0
- package/skills/shared/author-skill/references/eval-authoring.md +108 -0
- package/skills/shared/author-skill/references/skill-conventions.md +95 -0
- package/skills/shared/automation-flows/SKILL.md +122 -0
- package/skills/shared/automation-flows/evals/README.md +5 -0
- package/skills/shared/automation-flows/evals/cases.yaml +44 -0
- package/skills/shared/automation-flows/references/error-handling.md +58 -0
- package/skills/shared/automation-flows/references/n8n-workflow-json.md +63 -0
- package/skills/shared/automation-flows/scripts/verify.sh +78 -0
- package/skills/shared/aws-essentials/SKILL.md +206 -0
- package/skills/shared/aws-essentials/evals/README.md +10 -0
- package/skills/shared/aws-essentials/evals/cases.yaml +44 -0
- package/skills/shared/aws-essentials/references/iam-least-privilege.md +134 -0
- package/skills/shared/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
- package/skills/shared/aws-essentials/scripts/verify.sh +99 -0
- package/skills/shared/backups/SKILL.md +131 -0
- package/skills/shared/backups/evals/README.md +3 -0
- package/skills/shared/backups/evals/cases.yaml +42 -0
- package/skills/shared/backups/references/engine-recipes.md +121 -0
- package/skills/shared/backups/references/restore-runbook.md +65 -0
- package/skills/shared/backups/scripts/verify.sh +80 -0
- package/skills/shared/bash-scripting/SKILL.md +227 -0
- package/skills/shared/bash-scripting/evals/README.md +3 -0
- package/skills/shared/bash-scripting/evals/cases.yaml +45 -0
- package/skills/shared/bash-scripting/references/portability.md +97 -0
- package/skills/shared/bash-scripting/scripts/verify.sh +140 -0
- package/skills/shared/building-agents/SKILL.md +386 -0
- package/skills/shared/building-agents/evals/README.md +68 -0
- package/skills/shared/building-agents/evals/cases.yaml +60 -0
- package/skills/shared/building-agents/references/agent-loops-and-harness.md +371 -0
- package/skills/shared/building-agents/references/evals-and-observability.md +420 -0
- package/skills/shared/building-agents/references/mcp-servers.md +294 -0
- package/skills/shared/building-agents/references/provider-abstraction.md +489 -0
- package/skills/shared/building-agents/references/tools-and-rag.md +417 -0
- package/skills/shared/building-agents/scripts/verify.sh +121 -0
- package/skills/shared/chatbot/SKILL.md +151 -0
- package/skills/shared/chatbot/evals/README.md +13 -0
- package/skills/shared/chatbot/evals/cases.yaml +43 -0
- package/skills/shared/chatbot/references/handoff-and-sales.md +71 -0
- package/skills/shared/chatbot/references/system-prompt-and-guardrails.md +78 -0
- package/skills/shared/chatbot/scripts/verify.sh +162 -0
- package/skills/shared/chrome-extension/SKILL.md +169 -0
- package/skills/shared/chrome-extension/evals/README.md +12 -0
- package/skills/shared/chrome-extension/evals/cases.yaml +40 -0
- package/skills/shared/chrome-extension/references/store-and-migration.md +84 -0
- package/skills/shared/chrome-extension/scripts/verify.sh +62 -0
- package/skills/shared/clarify/SKILL.md +161 -0
- package/skills/shared/clarify/evals/README.md +70 -0
- package/skills/shared/clarify/evals/cases.yaml +71 -0
- package/skills/shared/clickhouse-analytics/SKILL.md +159 -0
- package/skills/shared/clickhouse-analytics/evals/README.md +3 -0
- package/skills/shared/clickhouse-analytics/evals/cases.yaml +45 -0
- package/skills/shared/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
- package/skills/shared/clickhouse-analytics/references/query-optimization.md +76 -0
- package/skills/shared/clickhouse-analytics/references/schema-and-engines.md +63 -0
- package/skills/shared/clickhouse-analytics/scripts/verify.sh +109 -0
- package/skills/shared/cloudflare/SKILL.md +186 -0
- package/skills/shared/cloudflare/evals/README.md +15 -0
- package/skills/shared/cloudflare/evals/cases.yaml +46 -0
- package/skills/shared/cloudflare/references/storage-primitives.md +104 -0
- package/skills/shared/cloudflare/references/wrangler-config.md +91 -0
- package/skills/shared/cloudflare/scripts/verify.sh +133 -0
- package/skills/shared/code-review/SKILL.md +132 -0
- package/skills/shared/code-review/evals/README.md +3 -0
- package/skills/shared/code-review/evals/cases.yaml +55 -0
- package/skills/shared/code-review/references/pr-workflow.md +67 -0
- package/skills/shared/codebase-onboarding/SKILL.md +128 -0
- package/skills/shared/codebase-onboarding/evals/README.md +3 -0
- package/skills/shared/codebase-onboarding/evals/cases.yaml +69 -0
- package/skills/shared/codebase-onboarding/references/recon-playbook.md +57 -0
- package/skills/shared/codebase-onboarding/scripts/verify.sh +54 -0
- package/skills/shared/compose-multiplatform/SKILL.md +198 -0
- package/skills/shared/compose-multiplatform/evals/README.md +3 -0
- package/skills/shared/compose-multiplatform/evals/cases.yaml +40 -0
- package/skills/shared/compose-multiplatform/references/ios-interop.md +91 -0
- package/skills/shared/compose-multiplatform/references/project-setup.md +96 -0
- package/skills/shared/compose-multiplatform/scripts/verify.sh +123 -0
- package/skills/shared/connect-tool/SKILL.md +163 -0
- package/skills/shared/connect-tool/evals/cases.yaml +58 -0
- package/skills/shared/constitution/SKILL.md +158 -0
- package/skills/shared/constitution/evals/README.md +68 -0
- package/skills/shared/constitution/evals/cases.yaml +72 -0
- package/skills/shared/constitution/references/constitution-template.md +100 -0
- package/skills/shared/context-budget/SKILL.md +114 -0
- package/skills/shared/context-budget/evals/README.md +11 -0
- package/skills/shared/context-budget/evals/cases.yaml +40 -0
- package/skills/shared/context-budget/references/handoff-and-compaction.md +96 -0
- package/skills/shared/continuous-learning/SKILL.md +106 -0
- package/skills/shared/continuous-learning/evals/README.md +16 -0
- package/skills/shared/continuous-learning/evals/cases.yaml +39 -0
- package/skills/shared/continuous-learning/references/lesson-routing.md +106 -0
- package/skills/shared/coolify/SKILL.md +194 -0
- package/skills/shared/coolify/evals/README.md +21 -0
- package/skills/shared/coolify/evals/cases.yaml +46 -0
- package/skills/shared/coolify/references/databases-and-backups.md +99 -0
- package/skills/shared/coolify/references/deploy-recipes.md +105 -0
- package/skills/shared/coolify/references/install-and-proxy.md +80 -0
- package/skills/shared/coolify/scripts/verify.sh +123 -0
- package/skills/shared/cost-tracking/SKILL.md +176 -0
- package/skills/shared/cost-tracking/evals/README.md +3 -0
- package/skills/shared/cost-tracking/evals/cases.yaml +45 -0
- package/skills/shared/cost-tracking/references/cloud-caps.md +52 -0
- package/skills/shared/cost-tracking/references/pricing-tables.md +51 -0
- package/skills/shared/cost-tracking/scripts/verify.sh +135 -0
- package/skills/shared/cpp/SKILL.md +302 -0
- package/skills/shared/cpp/evals/README.md +14 -0
- package/skills/shared/cpp/evals/cases.yaml +44 -0
- package/skills/shared/cpp/references/cmake.md +167 -0
- package/skills/shared/cpp/references/move-and-templates.md +130 -0
- package/skills/shared/cpp/references/undefined-behavior.md +86 -0
- package/skills/shared/cpp/scripts/verify.sh +165 -0
- package/skills/shared/csharp-dotnet/SKILL.md +272 -0
- package/skills/shared/csharp-dotnet/evals/README.md +3 -0
- package/skills/shared/csharp-dotnet/evals/cases.yaml +48 -0
- package/skills/shared/csharp-dotnet/references/aspnetcore.md +99 -0
- package/skills/shared/csharp-dotnet/references/async.md +82 -0
- package/skills/shared/csharp-dotnet/references/efcore.md +96 -0
- package/skills/shared/csharp-dotnet/scripts/verify.sh +90 -0
- package/skills/shared/data-cleaning/SKILL.md +259 -0
- package/skills/shared/data-cleaning/evals/README.md +16 -0
- package/skills/shared/data-cleaning/evals/cases.yaml +57 -0
- package/skills/shared/data-cleaning/references/normalization-recipes.md +136 -0
- package/skills/shared/data-cleaning/references/validation-patterns.md +134 -0
- package/skills/shared/data-cleaning/scripts/verify.sh +115 -0
- package/skills/shared/data-scraper/SKILL.md +130 -0
- package/skills/shared/data-scraper/evals/README.md +3 -0
- package/skills/shared/data-scraper/evals/cases.yaml +46 -0
- package/skills/shared/data-scraper/references/anti-bot.md +85 -0
- package/skills/shared/data-scraper/references/frameworks.md +116 -0
- package/skills/shared/data-scraper/references/legal-compliance.md +64 -0
- package/skills/shared/data-scraper/scripts/verify.sh +166 -0
- package/skills/shared/db-migrations/SKILL.md +237 -0
- package/skills/shared/db-migrations/evals/README.md +10 -0
- package/skills/shared/db-migrations/evals/cases.yaml +46 -0
- package/skills/shared/db-migrations/references/backfill-and-batching.md +105 -0
- package/skills/shared/db-migrations/references/expand-contract-playbook.md +152 -0
- package/skills/shared/db-migrations/references/tools-and-runners.md +88 -0
- package/skills/shared/db-migrations/scripts/verify.sh +112 -0
- package/skills/shared/debug/SKILL.md +188 -0
- package/skills/shared/debug/evals/README.md +88 -0
- package/skills/shared/debug/evals/cases.yaml +74 -0
- package/skills/shared/decision-challenge/SKILL.md +113 -0
- package/skills/shared/decision-challenge/evals/README.md +3 -0
- package/skills/shared/decision-challenge/evals/cases.yaml +42 -0
- package/skills/shared/decision-records/SKILL.md +202 -0
- package/skills/shared/decision-records/evals/README.md +3 -0
- package/skills/shared/decision-records/evals/cases.yaml +43 -0
- package/skills/shared/decision-records/references/templates.md +252 -0
- package/skills/shared/decision-records/scripts/verify.sh +105 -0
- package/skills/shared/deep-learning/SKILL.md +226 -0
- package/skills/shared/deep-learning/evals/README.md +11 -0
- package/skills/shared/deep-learning/evals/cases.yaml +48 -0
- package/skills/shared/deep-learning/references/distributed.md +105 -0
- package/skills/shared/deep-learning/references/training-recipes.md +135 -0
- package/skills/shared/deployment/SKILL.md +374 -0
- package/skills/shared/deployment/evals/README.md +50 -0
- package/skills/shared/deployment/evals/cases.yaml +53 -0
- package/skills/shared/deployment/references/coolify.md +216 -0
- package/skills/shared/deployment/references/dockerfiles-by-stack.md +319 -0
- package/skills/shared/deployment/references/github-actions.md +295 -0
- package/skills/shared/deployment/references/hosting-targets.md +272 -0
- package/skills/shared/deployment/scripts/verify.sh +134 -0
- package/skills/shared/deprecation/SKILL.md +123 -0
- package/skills/shared/deprecation/evals/README.md +3 -0
- package/skills/shared/deprecation/evals/cases.yaml +42 -0
- package/skills/shared/design/IMPECCABLE-LICENSE.txt +191 -0
- package/skills/shared/design/SKILL.md +111 -0
- package/skills/shared/design/THIRD_PARTY.md +26 -0
- package/skills/shared/design/engine/LICENSE +21 -0
- package/skills/shared/design/engine/RUN.md +515 -0
- package/skills/shared/design/engine/UPSTREAM.json +4 -0
- package/skills/shared/design/engine/assets/app.css +216 -0
- package/skills/shared/design/engine/assets/base.css +105 -0
- package/skills/shared/design/engine/assets/base.js +37 -0
- package/skills/shared/design/engine/assets/charts.js +617 -0
- package/skills/shared/design/engine/assets/scenes/stage.css +28 -0
- package/skills/shared/design/engine/assets/scenes/stage.js +133 -0
- package/skills/shared/design/engine/library/app.json +1327 -0
- package/skills/shared/design/engine/library/directions.json +1078 -0
- package/skills/shared/design/engine/library/heroes.json +1086 -0
- package/skills/shared/design/engine/library/motions.json +92 -0
- package/skills/shared/design/engine/library/palettes.json +1485 -0
- package/skills/shared/design/engine/library/photos.json +7240 -0
- package/skills/shared/design/engine/library/sections.json +4429 -0
- package/skills/shared/design/engine/library/sites.json +8350 -0
- package/skills/shared/design/engine/library/type.json +2024 -0
- package/skills/shared/design/engine/references/app-screens.md +1199 -0
- package/skills/shared/design/engine/references/colour.md +141 -0
- package/skills/shared/design/engine/references/copy.md +177 -0
- package/skills/shared/design/engine/references/critique.md +182 -0
- package/skills/shared/design/engine/references/imagery.md +791 -0
- package/skills/shared/design/engine/references/layout.md +292 -0
- package/skills/shared/design/engine/references/motion.md +980 -0
- package/skills/shared/design/engine/references/research.md +356 -0
- package/skills/shared/design/engine/references/scenes.md +174 -0
- package/skills/shared/design/engine/references/tells.md +115 -0
- package/skills/shared/design/engine/references/type.md +170 -0
- package/skills/shared/design/engine/scripts/assets.mjs +865 -0
- package/skills/shared/design/engine/scripts/draw.mjs +584 -0
- package/skills/shared/design/engine/scripts/inspect.mjs +303 -0
- package/skills/shared/design/engine/scripts/lib/app-draw.mjs +203 -0
- package/skills/shared/design/engine/scripts/lib/cdp.mjs +248 -0
- package/skills/shared/design/engine/scripts/lib/probe.mjs +909 -0
- package/skills/shared/design/engine/scripts/lib/rules.mjs +243 -0
- package/skills/shared/design/engine/scripts/lint.mjs +119 -0
- package/skills/shared/design/engine/scripts/scenes.mjs +124 -0
- package/skills/shared/design/evals/cases.yaml +45 -0
- package/skills/shared/design/references/design-md.md +49 -0
- package/skills/shared/design/references/finish-review.md +46 -0
- package/skills/shared/design/references/modes.md +51 -0
- package/skills/shared/digitalocean/SKILL.md +227 -0
- package/skills/shared/digitalocean/evals/README.md +10 -0
- package/skills/shared/digitalocean/evals/cases.yaml +37 -0
- package/skills/shared/digitalocean/references/app-spec.md +126 -0
- package/skills/shared/digitalocean/references/droplet-ops.md +95 -0
- package/skills/shared/digitalocean/scripts/verify.sh +102 -0
- package/skills/shared/django/SKILL.md +263 -0
- package/skills/shared/django/evals/README.md +11 -0
- package/skills/shared/django/evals/cases.yaml +47 -0
- package/skills/shared/django/references/drf.md +109 -0
- package/skills/shared/django/references/orm-performance.md +91 -0
- package/skills/shared/django/references/security.md +81 -0
- package/skills/shared/django/references/testing.md +86 -0
- package/skills/shared/django/scripts/verify.sh +115 -0
- package/skills/shared/docker/SKILL.md +251 -0
- package/skills/shared/docker/evals/README.md +10 -0
- package/skills/shared/docker/evals/cases.yaml +44 -0
- package/skills/shared/docker/references/base-images-and-stages.md +104 -0
- package/skills/shared/docker/references/compose-recipes.md +109 -0
- package/skills/shared/docker/scripts/verify.sh +149 -0
- package/skills/shared/domains-dns/SKILL.md +131 -0
- package/skills/shared/domains-dns/evals/README.md +16 -0
- package/skills/shared/domains-dns/evals/cases.yaml +47 -0
- package/skills/shared/domains-dns/references/record-cookbook.md +94 -0
- package/skills/shared/domains-dns/references/tls-and-acme.md +90 -0
- package/skills/shared/domains-dns/references/verify-and-debug.md +64 -0
- package/skills/shared/domains-dns/scripts/verify.sh +163 -0
- package/skills/shared/drizzle-orm/SKILL.md +231 -0
- package/skills/shared/drizzle-orm/evals/README.md +12 -0
- package/skills/shared/drizzle-orm/evals/cases.yaml +47 -0
- package/skills/shared/drizzle-orm/references/relations-and-drivers.md +118 -0
- package/skills/shared/drizzle-orm/scripts/verify.sh +155 -0
- package/skills/shared/duckdb/SKILL.md +202 -0
- package/skills/shared/duckdb/evals/README.md +31 -0
- package/skills/shared/duckdb/evals/cases.yaml +41 -0
- package/skills/shared/duckdb/references/python-and-interop.md +105 -0
- package/skills/shared/duckdb/references/remote-and-lakehouse.md +101 -0
- package/skills/shared/duckdb/scripts/verify.sh +71 -0
- package/skills/shared/dynamodb/SKILL.md +204 -0
- package/skills/shared/dynamodb/evals/README.md +8 -0
- package/skills/shared/dynamodb/evals/cases.yaml +46 -0
- package/skills/shared/dynamodb/references/access-patterns.md +127 -0
- package/skills/shared/dynamodb/references/capacity-and-limits.md +78 -0
- package/skills/shared/dynamodb/scripts/verify.sh +108 -0
- package/skills/shared/e2e-testing/SKILL.md +233 -0
- package/skills/shared/e2e-testing/evals/README.md +10 -0
- package/skills/shared/e2e-testing/evals/cases.yaml +64 -0
- package/skills/shared/e2e-testing/references/config-and-ci.md +156 -0
- package/skills/shared/e2e-testing/references/flakiness-playbook.md +124 -0
- package/skills/shared/e2e-testing/scripts/verify.sh +117 -0
- package/skills/shared/electron/SKILL.md +209 -0
- package/skills/shared/electron/evals/README.md +13 -0
- package/skills/shared/electron/evals/cases.yaml +38 -0
- package/skills/shared/electron/references/packaging-and-updates.md +122 -0
- package/skills/shared/electron/references/security-and-ipc.md +158 -0
- package/skills/shared/electron/scripts/verify.sh +143 -0
- package/skills/shared/elixir/SKILL.md +209 -0
- package/skills/shared/elixir/evals/README.md +3 -0
- package/skills/shared/elixir/evals/cases.yaml +41 -0
- package/skills/shared/elixir/references/mix-and-releases.md +91 -0
- package/skills/shared/elixir/references/otp-patterns.md +96 -0
- package/skills/shared/elixir/scripts/verify.sh +76 -0
- package/skills/shared/email-deliverability/SKILL.md +148 -0
- package/skills/shared/email-deliverability/evals/README.md +21 -0
- package/skills/shared/email-deliverability/evals/cases.yaml +45 -0
- package/skills/shared/email-deliverability/scripts/verify.sh +98 -0
- package/skills/shared/embeddings-search/SKILL.md +184 -0
- package/skills/shared/embeddings-search/evals/README.md +10 -0
- package/skills/shared/embeddings-search/evals/cases.yaml +44 -0
- package/skills/shared/embeddings-search/references/evaluation.md +86 -0
- package/skills/shared/embeddings-search/references/models.md +73 -0
- package/skills/shared/embeddings-search/scripts/verify.sh +103 -0
- package/skills/shared/error-handling/SKILL.md +273 -0
- package/skills/shared/error-handling/evals/README.md +12 -0
- package/skills/shared/error-handling/evals/cases.yaml +46 -0
- package/skills/shared/error-handling/references/boundaries-and-messaging.md +120 -0
- package/skills/shared/error-handling/references/retry-and-resilience.md +154 -0
- package/skills/shared/error-handling/scripts/verify.sh +110 -0
- package/skills/shared/expo/SKILL.md +243 -0
- package/skills/shared/expo/evals/README.md +13 -0
- package/skills/shared/expo/evals/cases.yaml +44 -0
- package/skills/shared/expo/references/config-plugins.md +117 -0
- package/skills/shared/expo/references/eas-update.md +118 -0
- package/skills/shared/expo/scripts/verify.sh +132 -0
- package/skills/shared/fal/SKILL.md +196 -0
- package/skills/shared/fal/evals/README.md +3 -0
- package/skills/shared/fal/evals/cases.yaml +42 -0
- package/skills/shared/fal/references/models-and-cost.md +53 -0
- package/skills/shared/fal/references/queue-and-webhooks.md +153 -0
- package/skills/shared/fal/scripts/verify.sh +72 -0
- package/skills/shared/fastapi/SKILL.md +469 -0
- package/skills/shared/fastapi/evals/README.md +50 -0
- package/skills/shared/fastapi/evals/cases.yaml +55 -0
- package/skills/shared/fastapi/references/database.md +347 -0
- package/skills/shared/fastapi/references/production.md +338 -0
- package/skills/shared/fastapi/references/security.md +330 -0
- package/skills/shared/fastapi/references/testing.md +349 -0
- package/skills/shared/fastapi/scripts/verify.sh +157 -0
- package/skills/shared/finetuning/SKILL.md +232 -0
- package/skills/shared/finetuning/evals/README.md +13 -0
- package/skills/shared/finetuning/evals/cases.yaml +50 -0
- package/skills/shared/finetuning/references/hyperparameters-and-eval.md +74 -0
- package/skills/shared/finetuning/references/methods.md +189 -0
- package/skills/shared/firebase/SKILL.md +237 -0
- package/skills/shared/firebase/evals/README.md +12 -0
- package/skills/shared/firebase/evals/cases.yaml +45 -0
- package/skills/shared/firebase/references/cloud-functions.md +102 -0
- package/skills/shared/firebase/references/data-modeling.md +108 -0
- package/skills/shared/firebase/references/security-rules.md +137 -0
- package/skills/shared/firebase/scripts/verify.sh +98 -0
- package/skills/shared/flutter/SKILL.md +400 -0
- package/skills/shared/flutter/evals/README.md +54 -0
- package/skills/shared/flutter/evals/cases.yaml +69 -0
- package/skills/shared/flutter/references/architecture-and-state.md +499 -0
- package/skills/shared/flutter/references/i18n-and-dependencies.md +197 -0
- package/skills/shared/flutter/references/performance.md +299 -0
- package/skills/shared/flutter/references/testing.md +385 -0
- package/skills/shared/flutter/references/ui-and-navigation.md +378 -0
- package/skills/shared/flutter/scripts/verify.sh +104 -0
- package/skills/shared/fly-io/SKILL.md +197 -0
- package/skills/shared/fly-io/evals/README.md +3 -0
- package/skills/shared/fly-io/evals/cases.yaml +42 -0
- package/skills/shared/fly-io/references/fly-toml.md +155 -0
- package/skills/shared/fly-io/references/multi-region.md +66 -0
- package/skills/shared/fly-io/scripts/verify.sh +90 -0
- package/skills/shared/ftd/SKILL.md +111 -0
- package/skills/shared/ftd/evals/cases.yaml +66 -0
- package/skills/shared/ftd/evals/routing.json +24 -0
- package/skills/shared/game-design/SKILL.md +146 -0
- package/skills/shared/game-design/evals/README.md +13 -0
- package/skills/shared/game-design/evals/cases.yaml +47 -0
- package/skills/shared/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/shared/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/shared/game-design/references/progression-and-economy.md +70 -0
- package/skills/shared/game-storytelling/SKILL.md +134 -0
- package/skills/shared/game-storytelling/evals/README.md +28 -0
- package/skills/shared/game-storytelling/evals/cases.yaml +51 -0
- package/skills/shared/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/shared/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/shared/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/shared/gamedev-multiplayer/SKILL.md +237 -0
- package/skills/shared/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/shared/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/shared/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/shared/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/shared/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/shared/gamedev-pathing/SKILL.md +233 -0
- package/skills/shared/gamedev-pathing/evals/README.md +14 -0
- package/skills/shared/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/shared/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/shared/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/shared/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/shared/gamedev-physics/SKILL.md +225 -0
- package/skills/shared/gamedev-physics/evals/README.md +12 -0
- package/skills/shared/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/shared/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/shared/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/shared/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/shared/gamedev-shaders/SKILL.md +232 -0
- package/skills/shared/gamedev-shaders/evals/README.md +14 -0
- package/skills/shared/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/shared/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/shared/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/shared/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/shared/gamedev-shipping/SKILL.md +220 -0
- package/skills/shared/gamedev-shipping/evals/README.md +9 -0
- package/skills/shared/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/shared/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/shared/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/shared/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/shared/gcp-essentials/SKILL.md +324 -0
- package/skills/shared/gcp-essentials/evals/README.md +12 -0
- package/skills/shared/gcp-essentials/evals/cases.yaml +38 -0
- package/skills/shared/gcp-essentials/references/deploy-recipes.md +81 -0
- package/skills/shared/gcp-essentials/references/iam-and-auth.md +94 -0
- package/skills/shared/gcp-essentials/references/networking-and-sql.md +74 -0
- package/skills/shared/gcp-essentials/scripts/verify.sh +158 -0
- package/skills/shared/git-workflow/SKILL.md +214 -0
- package/skills/shared/git-workflow/evals/README.md +10 -0
- package/skills/shared/git-workflow/evals/cases.yaml +52 -0
- package/skills/shared/git-workflow/references/gitmoji.md +157 -0
- package/skills/shared/git-workflow/references/interactive-rebase.md +89 -0
- package/skills/shared/github-actions/SKILL.md +244 -0
- package/skills/shared/github-actions/evals/README.md +3 -0
- package/skills/shared/github-actions/evals/cases.yaml +45 -0
- package/skills/shared/github-actions/references/caching-and-matrix.md +92 -0
- package/skills/shared/github-actions/references/oidc-deploys.md +130 -0
- package/skills/shared/github-actions/scripts/verify.sh +105 -0
- package/skills/shared/gitlab-auth/SKILL.md +99 -0
- package/skills/shared/gitlab-workflow/SKILL.md +138 -0
- package/skills/shared/go/SKILL.md +390 -0
- package/skills/shared/go/evals/README.md +56 -0
- package/skills/shared/go/evals/cases.yaml +55 -0
- package/skills/shared/go/references/concurrency.md +557 -0
- package/skills/shared/go/references/http-services.md +529 -0
- package/skills/shared/go/references/testing.md +338 -0
- package/skills/shared/go/scripts/verify.sh +134 -0
- package/skills/shared/godot/SKILL.md +300 -0
- package/skills/shared/godot/evals/README.md +13 -0
- package/skills/shared/godot/evals/cases.yaml +50 -0
- package/skills/shared/godot/references/export-and-testing.md +102 -0
- package/skills/shared/godot/references/gdscript-style.md +84 -0
- package/skills/shared/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/shared/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/shared/harness/SKILL.md +316 -0
- package/skills/shared/harness/assets/_TEMPLATE/.env.example +8 -0
- package/skills/shared/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/README.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/gitignore +10 -0
- package/skills/shared/harness/assets/_TEMPLATE/test_connection.sh +30 -0
- package/skills/shared/harness/evals/README.md +54 -0
- package/skills/shared/harness/evals/cases.yaml +72 -0
- package/skills/shared/harness/examples/audit-example.md +120 -0
- package/skills/shared/harness/references/agents-md-template.md +41 -0
- package/skills/shared/harness/references/audit-report-template.html +140 -0
- package/skills/shared/harness/references/audit-report-template.md +116 -0
- package/skills/shared/harness/references/claude-md-template.md +85 -0
- package/skills/shared/harness/references/daily-curation-automation.md +68 -0
- package/skills/shared/harness/references/inbox-readme-template.md +51 -0
- package/skills/shared/harness/references/ingest-formats.md +185 -0
- package/skills/shared/harness/references/ingest-ignore-defaults.md +48 -0
- package/skills/shared/harness/references/obsidian-scaffolding.md +103 -0
- package/skills/shared/harness/references/providers.yaml +3546 -0
- package/skills/shared/harness/references/tools-readme-template.md +88 -0
- package/skills/shared/harness/references/wiki-archive-template.html +81 -0
- package/skills/shared/harness/references/wiki-article-template.md +60 -0
- package/skills/shared/harness/references/wiki-dashboard-template.html +136 -0
- package/skills/shared/harness/references/wiki-deep-improve-report-template.html +126 -0
- package/skills/shared/harness/references/wiki-gaps-template.md +22 -0
- package/skills/shared/harness/references/wiki-index-template.md +32 -0
- package/skills/shared/harness/references/wiki-protocol.md +926 -0
- package/skills/shared/harness/references/wiki-raw-template.md +7 -0
- package/skills/shared/harness/references/wiki-worklog-template.md +60 -0
- package/skills/shared/hetzner/SKILL.md +203 -0
- package/skills/shared/hetzner/evals/README.md +35 -0
- package/skills/shared/hetzner/evals/cases.yaml +46 -0
- package/skills/shared/hetzner/references/cloud-init.md +120 -0
- package/skills/shared/hetzner/references/plans-and-locations.md +56 -0
- package/skills/shared/hetzner/scripts/verify.sh +122 -0
- package/skills/shared/htmx/SKILL.md +261 -0
- package/skills/shared/htmx/evals/README.md +3 -0
- package/skills/shared/htmx/evals/cases.yaml +38 -0
- package/skills/shared/htmx/references/patterns.md +113 -0
- package/skills/shared/htmx/references/server-contract.md +91 -0
- package/skills/shared/htmx/scripts/verify.sh +93 -0
- package/skills/shared/huggingface/SKILL.md +191 -0
- package/skills/shared/huggingface/evals/README.md +11 -0
- package/skills/shared/huggingface/evals/cases.yaml +41 -0
- package/skills/shared/huggingface/references/endpoints-and-spaces.md +99 -0
- package/skills/shared/huggingface/references/hub-and-cli.md +85 -0
- package/skills/shared/huggingface/references/inference-providers.md +115 -0
- package/skills/shared/huggingface/scripts/verify.sh +123 -0
- package/skills/shared/idea-refinement/SKILL.md +121 -0
- package/skills/shared/idea-refinement/evals/README.md +3 -0
- package/skills/shared/idea-refinement/evals/cases.yaml +42 -0
- package/skills/shared/implement/SKILL.md +383 -0
- package/skills/shared/implement/evals/README.md +56 -0
- package/skills/shared/implement/evals/cases.yaml +43 -0
- package/skills/shared/implement/references/per-task-review.md +46 -0
- package/skills/shared/implement/scripts/review-package +59 -0
- package/skills/shared/implement/scripts/sdd-workspace +47 -0
- package/skills/shared/implement/scripts/task-brief +77 -0
- package/skills/shared/init/SKILL.md +209 -0
- package/skills/shared/init/evals/README.md +49 -0
- package/skills/shared/init/evals/cases.yaml +74 -0
- package/skills/shared/init/references/accompaniment-and-profile.md +122 -0
- package/skills/shared/init/references/discovery.md +90 -0
- package/skills/shared/init/references/recommend-skills.md +115 -0
- package/skills/shared/init/scripts/verify.sh +118 -0
- package/skills/shared/java/SKILL.md +341 -0
- package/skills/shared/java/evals/README.md +23 -0
- package/skills/shared/java/evals/cases.yaml +43 -0
- package/skills/shared/java/references/builds.md +133 -0
- package/skills/shared/java/references/concurrency.md +108 -0
- package/skills/shared/java/references/streams.md +102 -0
- package/skills/shared/java/scripts/verify.sh +107 -0
- package/skills/shared/knowledge-ops/SKILL.md +122 -0
- package/skills/shared/knowledge-ops/evals/README.md +16 -0
- package/skills/shared/knowledge-ops/evals/cases.yaml +50 -0
- package/skills/shared/knowledge-ops/references/gardening-playbook.md +126 -0
- package/skills/shared/kotlin-android/SKILL.md +245 -0
- package/skills/shared/kotlin-android/evals/README.md +13 -0
- package/skills/shared/kotlin-android/evals/cases.yaml +56 -0
- package/skills/shared/kotlin-android/references/architecture.md +200 -0
- package/skills/shared/kotlin-android/references/gradle-setup.md +125 -0
- package/skills/shared/kotlin-android/scripts/verify.sh +109 -0
- package/skills/shared/laravel/SKILL.md +301 -0
- package/skills/shared/laravel/evals/README.md +10 -0
- package/skills/shared/laravel/evals/cases.yaml +45 -0
- package/skills/shared/laravel/references/eloquent-patterns.md +126 -0
- package/skills/shared/laravel/references/queues-and-scheduling.md +153 -0
- package/skills/shared/laravel/scripts/verify.sh +128 -0
- package/skills/shared/level-design/SKILL.md +143 -0
- package/skills/shared/level-design/evals/README.md +35 -0
- package/skills/shared/level-design/evals/cases.yaml +58 -0
- package/skills/shared/level-design/references/blockout-to-art.md +118 -0
- package/skills/shared/level-design/references/guidance-and-readability.md +152 -0
- package/skills/shared/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/shared/llm-pipeline/SKILL.md +150 -0
- package/skills/shared/llm-pipeline/evals/README.md +3 -0
- package/skills/shared/llm-pipeline/evals/cases.yaml +44 -0
- package/skills/shared/llm-pipeline/references/caching-layers.md +60 -0
- package/skills/shared/llm-pipeline/references/litellm-router.md +101 -0
- package/skills/shared/llm-pipeline/scripts/verify.sh +169 -0
- package/skills/shared/machine-learning/SKILL.md +228 -0
- package/skills/shared/machine-learning/evals/README.md +15 -0
- package/skills/shared/machine-learning/evals/cases.yaml +54 -0
- package/skills/shared/machine-learning/references/gbdt-and-tuning.md +83 -0
- package/skills/shared/machine-learning/references/metrics-and-imbalance.md +82 -0
- package/skills/shared/machine-learning/references/pipelines-and-cv.md +135 -0
- package/skills/shared/modal/SKILL.md +290 -0
- package/skills/shared/modal/evals/README.md +29 -0
- package/skills/shared/modal/evals/cases.yaml +50 -0
- package/skills/shared/modal/references/images-gpu-cookbook.md +160 -0
- package/skills/shared/modal/references/web-and-scaling.md +138 -0
- package/skills/shared/modal/scripts/verify.sh +127 -0
- package/skills/shared/mongodb/SKILL.md +342 -0
- package/skills/shared/mongodb/evals/README.md +29 -0
- package/skills/shared/mongodb/evals/cases.yaml +41 -0
- package/skills/shared/mongodb/references/aggregation.md +115 -0
- package/skills/shared/mongodb/references/data-modeling.md +135 -0
- package/skills/shared/mongodb/references/transactions-and-ops.md +128 -0
- package/skills/shared/mongodb/scripts/verify.sh +151 -0
- package/skills/shared/monitoring/SKILL.md +155 -0
- package/skills/shared/monitoring/evals/README.md +3 -0
- package/skills/shared/monitoring/evals/cases.yaml +47 -0
- package/skills/shared/monitoring/references/burn-rate-and-oncall.md +128 -0
- package/skills/shared/monitoring/references/tool-setup.md +154 -0
- package/skills/shared/monitoring/scripts/verify.sh +145 -0
- package/skills/shared/mysql/SKILL.md +249 -0
- package/skills/shared/mysql/evals/README.md +12 -0
- package/skills/shared/mysql/evals/cases.yaml +49 -0
- package/skills/shared/mysql/references/indexing-and-explain.md +161 -0
- package/skills/shared/mysql/references/mysql-vs-mariadb.md +78 -0
- package/skills/shared/mysql/references/online-ddl-and-migrations.md +120 -0
- package/skills/shared/mysql/references/replication-and-ha.md +115 -0
- package/skills/shared/mysql/scripts/verify.sh +141 -0
- package/skills/shared/neon/SKILL.md +218 -0
- package/skills/shared/neon/evals/README.md +11 -0
- package/skills/shared/neon/evals/cases.yaml +45 -0
- package/skills/shared/neon/references/branching-ci.md +86 -0
- package/skills/shared/neon/scripts/verify.sh +78 -0
- package/skills/shared/nestjs/SKILL.md +217 -0
- package/skills/shared/nestjs/evals/README.md +3 -0
- package/skills/shared/nestjs/evals/cases.yaml +38 -0
- package/skills/shared/nestjs/references/cross-cutting.md +135 -0
- package/skills/shared/nestjs/references/testing-recipes.md +105 -0
- package/skills/shared/nestjs/scripts/verify.sh +98 -0
- package/skills/shared/netlify/SKILL.md +208 -0
- package/skills/shared/netlify/evals/README.md +13 -0
- package/skills/shared/netlify/evals/cases.yaml +43 -0
- package/skills/shared/netlify/references/functions.md +97 -0
- package/skills/shared/netlify/references/netlify-toml.md +115 -0
- package/skills/shared/netlify/scripts/verify.sh +95 -0
- package/skills/shared/nextjs/SKILL.md +400 -0
- package/skills/shared/nextjs/evals/README.md +59 -0
- package/skills/shared/nextjs/evals/cases.yaml +56 -0
- package/skills/shared/nextjs/references/data-and-caching.md +309 -0
- package/skills/shared/nextjs/references/metadata.md +208 -0
- package/skills/shared/nextjs/references/performance.md +325 -0
- package/skills/shared/nextjs/references/react.md +383 -0
- package/skills/shared/nextjs/references/security.md +239 -0
- package/skills/shared/nextjs/references/testing.md +290 -0
- package/skills/shared/nextjs/scripts/verify.sh +141 -0
- package/skills/shared/nlp/SKILL.md +225 -0
- package/skills/shared/nlp/evals/README.md +10 -0
- package/skills/shared/nlp/evals/cases.yaml +45 -0
- package/skills/shared/nlp/references/evaluation.md +107 -0
- package/skills/shared/nlp/references/tokenization.md +95 -0
- package/skills/shared/no-code-app/SKILL.md +145 -0
- package/skills/shared/no-code-app/evals/README.md +3 -0
- package/skills/shared/no-code-app/evals/cases.yaml +43 -0
- package/skills/shared/no-code-app/references/platform-limits.md +100 -0
- package/skills/shared/nodejs/SKILL.md +229 -0
- package/skills/shared/nodejs/evals/README.md +3 -0
- package/skills/shared/nodejs/evals/cases.yaml +39 -0
- package/skills/shared/nodejs/references/express5-migration.md +53 -0
- package/skills/shared/nodejs/references/graceful-shutdown.md +73 -0
- package/skills/shared/nodejs/scripts/verify.sh +122 -0
- package/skills/shared/observability/SKILL.md +235 -0
- package/skills/shared/observability/evals/README.md +3 -0
- package/skills/shared/observability/evals/cases.yaml +51 -0
- package/skills/shared/observability/references/collector-config.md +98 -0
- package/skills/shared/observability/references/instrumentation-recipes.md +115 -0
- package/skills/shared/observability/scripts/verify.sh +156 -0
- package/skills/shared/ollama/SKILL.md +213 -0
- package/skills/shared/ollama/evals/README.md +9 -0
- package/skills/shared/ollama/evals/cases.yaml +43 -0
- package/skills/shared/ollama/references/api.md +148 -0
- package/skills/shared/ollama/references/hardware-sizing.md +87 -0
- package/skills/shared/ollama/scripts/verify.sh +116 -0
- package/skills/shared/open-weights/SKILL.md +239 -0
- package/skills/shared/open-weights/evals/README.md +14 -0
- package/skills/shared/open-weights/evals/cases.yaml +42 -0
- package/skills/shared/open-weights/references/licenses.md +123 -0
- package/skills/shared/open-weights/references/model-families.md +83 -0
- package/skills/shared/open-weights/references/sizing-and-quant.md +89 -0
- package/skills/shared/orient/SKILL.md +92 -0
- package/skills/shared/orient/evals/README.md +18 -0
- package/skills/shared/orient/evals/cases.yaml +67 -0
- package/skills/shared/orient/references/explain-ladder.md +93 -0
- package/skills/shared/orient/references/orientation-contract.md +86 -0
- package/skills/shared/parallel/SKILL.md +168 -0
- package/skills/shared/parallel/evals/README.md +62 -0
- package/skills/shared/parallel/evals/cases.yaml +44 -0
- package/skills/shared/performance/SKILL.md +229 -0
- package/skills/shared/performance/evals/README.md +3 -0
- package/skills/shared/performance/evals/cases.yaml +49 -0
- package/skills/shared/performance/references/profiling-playbook.md +54 -0
- package/skills/shared/performance/scripts/verify.sh +94 -0
- package/skills/shared/phoenix/SKILL.md +169 -0
- package/skills/shared/phoenix/evals/README.md +3 -0
- package/skills/shared/phoenix/evals/cases.yaml +40 -0
- package/skills/shared/phoenix/references/auth-and-scopes.md +82 -0
- package/skills/shared/phoenix/references/ecto-patterns.md +93 -0
- package/skills/shared/phoenix/references/liveview.md +134 -0
- package/skills/shared/phoenix/scripts/verify.sh +73 -0
- package/skills/shared/php/SKILL.md +397 -0
- package/skills/shared/php/evals/README.md +12 -0
- package/skills/shared/php/evals/cases.yaml +45 -0
- package/skills/shared/php/references/tooling.md +170 -0
- package/skills/shared/php/references/type-system.md +220 -0
- package/skills/shared/php/scripts/verify.sh +155 -0
- package/skills/shared/plan/SKILL.md +166 -0
- package/skills/shared/plan/evals/README.md +62 -0
- package/skills/shared/plan/evals/cases.yaml +49 -0
- package/skills/shared/plan/references/plan-template.md +153 -0
- package/skills/shared/planetscale/SKILL.md +198 -0
- package/skills/shared/planetscale/evals/README.md +11 -0
- package/skills/shared/planetscale/evals/cases.yaml +46 -0
- package/skills/shared/planetscale/references/deploy-requests.md +75 -0
- package/skills/shared/planetscale/references/no-foreign-keys.md +88 -0
- package/skills/shared/planetscale/scripts/verify.sh +115 -0
- package/skills/shared/planning-with-files/SKILL.md +278 -0
- package/skills/shared/planning-with-files/examples.md +202 -0
- package/skills/shared/planning-with-files/reference.md +218 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.ps1 +118 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.sh +110 -0
- package/skills/shared/planning-with-files/scripts/check-complete.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/check-complete.sh +46 -0
- package/skills/shared/planning-with-files/scripts/init-session.ps1 +166 -0
- package/skills/shared/planning-with-files/scripts/init-session.sh +284 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.sh +76 -0
- package/skills/shared/planning-with-files/scripts/session-catchup.py +438 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.ps1 +50 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.sh +50 -0
- package/skills/shared/planning-with-files/templates/findings.md +95 -0
- package/skills/shared/planning-with-files/templates/progress.md +114 -0
- package/skills/shared/planning-with-files/templates/task_plan.md +132 -0
- package/skills/shared/postgresdb/SKILL.md +354 -0
- package/skills/shared/postgresdb/evals/README.md +55 -0
- package/skills/shared/postgresdb/evals/cases.yaml +57 -0
- package/skills/shared/postgresdb/references/migrations.md +279 -0
- package/skills/shared/postgresdb/references/operations-and-security.md +267 -0
- package/skills/shared/postgresdb/references/query-optimization.md +374 -0
- package/skills/shared/postgresdb/references/schema-and-indexing.md +379 -0
- package/skills/shared/postgresdb/scripts/verify.sh +191 -0
- package/skills/shared/prisma-orm/SKILL.md +313 -0
- package/skills/shared/prisma-orm/evals/README.md +12 -0
- package/skills/shared/prisma-orm/evals/cases.yaml +56 -0
- package/skills/shared/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
- package/skills/shared/prisma-orm/references/queries-and-performance.md +169 -0
- package/skills/shared/prisma-orm/scripts/verify.sh +137 -0
- package/skills/shared/prompt-engineering/SKILL.md +127 -0
- package/skills/shared/prompt-engineering/evals/README.md +11 -0
- package/skills/shared/prompt-engineering/evals/cases.yaml +46 -0
- package/skills/shared/prompt-engineering/references/eval-templates.md +94 -0
- package/skills/shared/prompt-engineering/references/output-contracts.md +120 -0
- package/skills/shared/prompt-engineering/scripts/verify.sh +84 -0
- package/skills/shared/python/SKILL.md +320 -0
- package/skills/shared/python/evals/README.md +19 -0
- package/skills/shared/python/evals/cases.yaml +46 -0
- package/skills/shared/python/references/async.md +136 -0
- package/skills/shared/python/references/stdlib.md +162 -0
- package/skills/shared/python/references/typing.md +160 -0
- package/skills/shared/python/scripts/verify.sh +125 -0
- package/skills/shared/rag/SKILL.md +209 -0
- package/skills/shared/rag/evals/README.md +13 -0
- package/skills/shared/rag/evals/cases.yaml +45 -0
- package/skills/shared/rag/references/evaluation.md +99 -0
- package/skills/shared/rag/references/pipeline.md +151 -0
- package/skills/shared/rag/scripts/verify.sh +99 -0
- package/skills/shared/rails/SKILL.md +264 -0
- package/skills/shared/rails/evals/README.md +12 -0
- package/skills/shared/rails/evals/cases.yaml +47 -0
- package/skills/shared/rails/references/activerecord.md +148 -0
- package/skills/shared/rails/references/hotwire.md +139 -0
- package/skills/shared/rails/references/testing.md +110 -0
- package/skills/shared/rails/scripts/verify.sh +128 -0
- package/skills/shared/railway/SKILL.md +245 -0
- package/skills/shared/railway/evals/README.md +14 -0
- package/skills/shared/railway/evals/cases.yaml +44 -0
- package/skills/shared/railway/references/cli-cookbook.md +137 -0
- package/skills/shared/railway/references/config-as-code.md +120 -0
- package/skills/shared/railway/scripts/verify.sh +162 -0
- package/skills/shared/react/SKILL.md +182 -0
- package/skills/shared/react/evals/README.md +3 -0
- package/skills/shared/react/evals/cases.yaml +43 -0
- package/skills/shared/react/references/data-and-state.md +152 -0
- package/skills/shared/react/references/performance.md +75 -0
- package/skills/shared/react/references/routing.md +99 -0
- package/skills/shared/react/scripts/verify.sh +123 -0
- package/skills/shared/react-native/SKILL.md +215 -0
- package/skills/shared/react-native/evals/README.md +3 -0
- package/skills/shared/react-native/evals/cases.yaml +42 -0
- package/skills/shared/react-native/references/native-modules.md +123 -0
- package/skills/shared/react-native/references/performance-debugging.md +46 -0
- package/skills/shared/react-native/scripts/verify.sh +120 -0
- package/skills/shared/redis/SKILL.md +298 -0
- package/skills/shared/redis/evals/README.md +10 -0
- package/skills/shared/redis/evals/cases.yaml +43 -0
- package/skills/shared/redis/references/caching.md +116 -0
- package/skills/shared/redis/references/locks-and-rate-limiting.md +140 -0
- package/skills/shared/redis/references/queues.md +102 -0
- package/skills/shared/redis/scripts/verify.sh +164 -0
- package/skills/shared/render/SKILL.md +256 -0
- package/skills/shared/render/evals/README.md +12 -0
- package/skills/shared/render/evals/cases.yaml +45 -0
- package/skills/shared/render/references/blueprint-reference.md +203 -0
- package/skills/shared/render/scripts/verify.sh +167 -0
- package/skills/shared/replicate/SKILL.md +210 -0
- package/skills/shared/replicate/evals/README.md +9 -0
- package/skills/shared/replicate/evals/cases.yaml +45 -0
- package/skills/shared/replicate/references/cog-packaging.md +89 -0
- package/skills/shared/replicate/references/deployments-api.md +87 -0
- package/skills/shared/replicate/references/webhooks-and-async.md +110 -0
- package/skills/shared/replicate/scripts/verify.sh +162 -0
- package/skills/shared/research-ops/SKILL.md +200 -0
- package/skills/shared/research-ops/evals/README.md +13 -0
- package/skills/shared/research-ops/evals/cases.yaml +38 -0
- package/skills/shared/research-ops/references/credibility-rubric.md +78 -0
- package/skills/shared/research-ops/references/memo-template.md +63 -0
- package/skills/shared/research-ops/scripts/verify.sh +181 -0
- package/skills/shared/review/SKILL.md +314 -0
- package/skills/shared/review/evals/README.md +84 -0
- package/skills/shared/review/evals/cases.yaml +55 -0
- package/skills/shared/ruby/SKILL.md +295 -0
- package/skills/shared/ruby/evals/README.md +12 -0
- package/skills/shared/ruby/evals/cases.yaml +41 -0
- package/skills/shared/ruby/references/gems-and-testing.md +208 -0
- package/skills/shared/ruby/references/metaprogramming.md +161 -0
- package/skills/shared/ruby/scripts/verify.sh +83 -0
- package/skills/shared/runpod/SKILL.md +238 -0
- package/skills/shared/runpod/evals/README.md +11 -0
- package/skills/shared/runpod/evals/cases.yaml +47 -0
- package/skills/shared/runpod/references/cost-and-scaling.md +85 -0
- package/skills/shared/runpod/references/serverless-workers.md +101 -0
- package/skills/shared/runpod/scripts/verify.sh +126 -0
- package/skills/shared/rust/SKILL.md +320 -0
- package/skills/shared/rust/evals/README.md +12 -0
- package/skills/shared/rust/evals/cases.yaml +42 -0
- package/skills/shared/rust/references/async-tokio.md +141 -0
- package/skills/shared/rust/references/axum-service.md +132 -0
- package/skills/shared/rust/references/ownership.md +86 -0
- package/skills/shared/rust/references/testing.md +108 -0
- package/skills/shared/rust/scripts/verify.sh +91 -0
- package/skills/shared/scaling/SKILL.md +137 -0
- package/skills/shared/scaling/evals/README.md +3 -0
- package/skills/shared/scaling/evals/cases.yaml +42 -0
- package/skills/shared/scaling/references/load-testing-k6.md +127 -0
- package/skills/shared/scaling/scripts/example.load.js +24 -0
- package/skills/shared/scaling/scripts/verify.sh +70 -0
- package/skills/shared/sdd/SKILL.md +250 -0
- package/skills/shared/sdd/evals/README.md +60 -0
- package/skills/shared/sdd/evals/cases.yaml +90 -0
- package/skills/shared/sdd/references/model-routing.md +194 -0
- package/skills/shared/sdd-init/SKILL.md +189 -0
- package/skills/shared/sdd-init/evals/README.md +3 -0
- package/skills/shared/sdd-init/evals/cases.yaml +43 -0
- package/skills/shared/secure-coding/SKILL.md +336 -0
- package/skills/shared/secure-coding/evals/README.md +68 -0
- package/skills/shared/secure-coding/evals/cases.yaml +55 -0
- package/skills/shared/secure-coding/references/authn-authz.md +249 -0
- package/skills/shared/secure-coding/references/owasp-by-stack.md +574 -0
- package/skills/shared/secure-coding/references/secrets-and-supply-chain.md +205 -0
- package/skills/shared/secure-coding/references/threat-modeling.md +213 -0
- package/skills/shared/secure-coding/scripts/verify.sh +208 -0
- package/skills/shared/security-scan/SKILL.md +219 -0
- package/skills/shared/security-scan/evals/README.md +14 -0
- package/skills/shared/security-scan/evals/cases.yaml +50 -0
- package/skills/shared/security-scan/references/tools.md +97 -0
- package/skills/shared/security-scan/references/triage.md +92 -0
- package/skills/shared/security-scan/scripts/verify.sh +108 -0
- package/skills/shared/ship/SKILL.md +272 -0
- package/skills/shared/ship/evals/README.md +89 -0
- package/skills/shared/ship/evals/cases.yaml +44 -0
- package/skills/shared/shopify/SKILL.md +229 -0
- package/skills/shared/shopify/evals/README.md +14 -0
- package/skills/shared/shopify/evals/cases.yaml +41 -0
- package/skills/shared/shopify/references/apps-graphql.md +103 -0
- package/skills/shared/shopify/references/checkout-extensibility.md +71 -0
- package/skills/shared/shopify/references/liquid-themes.md +89 -0
- package/skills/shared/shopify/scripts/verify.sh +120 -0
- package/skills/shared/simplify-code/SKILL.md +101 -0
- package/skills/shared/simplify-code/evals/README.md +3 -0
- package/skills/shared/simplify-code/evals/cases.yaml +42 -0
- package/skills/shared/skill-scout/SKILL.md +169 -0
- package/skills/shared/skill-scout/evals/README.md +12 -0
- package/skills/shared/skill-scout/evals/cases.yaml +56 -0
- package/skills/shared/skill-scout/references/install-commands.md +76 -0
- package/skills/shared/skill-scout/scripts/verify.sh +154 -0
- package/skills/shared/solid-js/SKILL.md +260 -0
- package/skills/shared/solid-js/evals/README.md +3 -0
- package/skills/shared/solid-js/evals/cases.yaml +38 -0
- package/skills/shared/solid-js/references/reactivity-deep-dive.md +89 -0
- package/skills/shared/solid-js/references/router-and-start.md +93 -0
- package/skills/shared/solid-js/scripts/verify.sh +130 -0
- package/skills/shared/source-grounded-development/SKILL.md +108 -0
- package/skills/shared/source-grounded-development/evals/README.md +3 -0
- package/skills/shared/source-grounded-development/evals/cases.yaml +42 -0
- package/skills/shared/specify/SKILL.md +391 -0
- package/skills/shared/specify/evals/README.md +73 -0
- package/skills/shared/specify/evals/cases.yaml +93 -0
- package/skills/shared/specify/references/eliciting-requirements.md +117 -0
- package/skills/shared/specify/references/spec-template.md +101 -0
- package/skills/shared/speckit-analyze/SKILL.md +35 -0
- package/skills/shared/speckit-assess-decide/SKILL.md +36 -0
- package/skills/shared/speckit-assess-define/SKILL.md +36 -0
- package/skills/shared/speckit-assess-intake/SKILL.md +38 -0
- package/skills/shared/speckit-assess-research/SKILL.md +36 -0
- package/skills/shared/speckit-assess-shape/SKILL.md +36 -0
- package/skills/shared/speckit-bug-assess/SKILL.md +38 -0
- package/skills/shared/speckit-bug-fix/SKILL.md +37 -0
- package/skills/shared/speckit-bug-test/SKILL.md +37 -0
- package/skills/shared/speckit-checklist/SKILL.md +35 -0
- package/skills/shared/speckit-clarify/SKILL.md +32 -0
- package/skills/shared/speckit-constitution/SKILL.md +35 -0
- package/skills/shared/speckit-converge/SKILL.md +36 -0
- package/skills/shared/speckit-implement/SKILL.md +32 -0
- package/skills/shared/speckit-plan/SKILL.md +37 -0
- package/skills/shared/speckit-specify/SKILL.md +36 -0
- package/skills/shared/speckit-tasks/SKILL.md +34 -0
- package/skills/shared/spreadsheet-ops/SKILL.md +180 -0
- package/skills/shared/spreadsheet-ops/evals/README.md +33 -0
- package/skills/shared/spreadsheet-ops/evals/cases.yaml +42 -0
- package/skills/shared/spreadsheet-ops/references/formula-cookbook.md +70 -0
- package/skills/shared/spreadsheet-ops/references/python-excel.md +87 -0
- package/skills/shared/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
- package/skills/shared/spreadsheet-ops/scripts/verify.sh +152 -0
- package/skills/shared/spring-boot/SKILL.md +350 -0
- package/skills/shared/spring-boot/evals/README.md +11 -0
- package/skills/shared/spring-boot/evals/cases.yaml +49 -0
- package/skills/shared/spring-boot/references/jpa.md +94 -0
- package/skills/shared/spring-boot/references/security.md +92 -0
- package/skills/shared/spring-boot/references/testing.md +95 -0
- package/skills/shared/spring-boot/scripts/verify.sh +115 -0
- package/skills/shared/sql/SKILL.md +286 -0
- package/skills/shared/sql/evals/README.md +9 -0
- package/skills/shared/sql/evals/cases.yaml +49 -0
- package/skills/shared/sql/references/ctes-and-recursion.md +63 -0
- package/skills/shared/sql/references/joins-and-sets.md +71 -0
- package/skills/shared/sql/references/portability.md +38 -0
- package/skills/shared/sql/references/window-functions.md +72 -0
- package/skills/shared/sql/scripts/verify.sh +139 -0
- package/skills/shared/sqlite-turso/SKILL.md +214 -0
- package/skills/shared/sqlite-turso/evals/README.md +24 -0
- package/skills/shared/sqlite-turso/evals/cases.yaml +45 -0
- package/skills/shared/sqlite-turso/references/embedded-replicas.md +96 -0
- package/skills/shared/sqlite-turso/scripts/verify.sh +95 -0
- package/skills/shared/structured-extraction/SKILL.md +230 -0
- package/skills/shared/structured-extraction/evals/README.md +13 -0
- package/skills/shared/structured-extraction/evals/cases.yaml +70 -0
- package/skills/shared/structured-extraction/references/providers.md +152 -0
- package/skills/shared/structured-extraction/scripts/verify.sh +160 -0
- package/skills/shared/suggest/SKILL.md +123 -0
- package/skills/shared/suggest/evals/README.md +17 -0
- package/skills/shared/suggest/evals/cases.yaml +78 -0
- package/skills/shared/supabase/SKILL.md +268 -0
- package/skills/shared/supabase/evals/README.md +12 -0
- package/skills/shared/supabase/evals/cases.yaml +42 -0
- package/skills/shared/supabase/references/auth-ssr.md +173 -0
- package/skills/shared/supabase/references/rls-cookbook.md +122 -0
- package/skills/shared/supabase/scripts/verify.sh +149 -0
- package/skills/shared/svelte/SKILL.md +238 -0
- package/skills/shared/svelte/evals/README.md +3 -0
- package/skills/shared/svelte/evals/cases.yaml +41 -0
- package/skills/shared/svelte/references/runes.md +97 -0
- package/skills/shared/svelte/references/sveltekit-data.md +156 -0
- package/skills/shared/svelte/scripts/verify.sh +128 -0
- package/skills/shared/swift-ios/SKILL.md +224 -0
- package/skills/shared/swift-ios/evals/README.md +3 -0
- package/skills/shared/swift-ios/evals/cases.yaml +46 -0
- package/skills/shared/swift-ios/references/concurrency.md +132 -0
- package/skills/shared/swift-ios/references/testing.md +112 -0
- package/skills/shared/swift-ios/scripts/verify.sh +98 -0
- package/skills/shared/tasks/SKILL.md +265 -0
- package/skills/shared/tasks/evals/README.md +70 -0
- package/skills/shared/tasks/evals/cases.yaml +75 -0
- package/skills/shared/tauri/SKILL.md +219 -0
- package/skills/shared/tauri/evals/README.md +12 -0
- package/skills/shared/tauri/evals/cases.yaml +46 -0
- package/skills/shared/tauri/references/bundling-distribution.md +129 -0
- package/skills/shared/tauri/references/security.md +143 -0
- package/skills/shared/tauri/scripts/verify.sh +178 -0
- package/skills/shared/technical-writing/SKILL.md +230 -0
- package/skills/shared/technical-writing/evals/README.md +12 -0
- package/skills/shared/technical-writing/evals/cases.yaml +53 -0
- package/skills/shared/technical-writing/references/diataxis-modes.md +131 -0
- package/skills/shared/technical-writing/references/vale-starter.md +90 -0
- package/skills/shared/technical-writing/scripts/verify.sh +83 -0
- package/skills/shared/testing-go/SKILL.md +263 -0
- package/skills/shared/testing-go/evals/README.md +3 -0
- package/skills/shared/testing-go/evals/cases.yaml +46 -0
- package/skills/shared/testing-go/references/coverage-and-benchmarks.md +85 -0
- package/skills/shared/testing-go/references/mocks-and-fakes.md +140 -0
- package/skills/shared/testing-go/references/synctest-and-concurrency.md +82 -0
- package/skills/shared/testing-go/scripts/verify.sh +72 -0
- package/skills/shared/testing-py/SKILL.md +197 -0
- package/skills/shared/testing-py/evals/README.md +5 -0
- package/skills/shared/testing-py/evals/cases.yaml +44 -0
- package/skills/shared/testing-py/references/mocking.md +141 -0
- package/skills/shared/testing-py/references/property-testing.md +99 -0
- package/skills/shared/testing-py/scripts/verify.sh +117 -0
- package/skills/shared/testing-web/SKILL.md +244 -0
- package/skills/shared/testing-web/evals/README.md +11 -0
- package/skills/shared/testing-web/evals/cases.yaml +52 -0
- package/skills/shared/testing-web/references/jest-setup.md +88 -0
- package/skills/shared/testing-web/references/recipes.md +116 -0
- package/skills/shared/testing-web/scripts/verify.sh +111 -0
- package/skills/shared/together-fireworks/SKILL.md +176 -0
- package/skills/shared/together-fireworks/evals/README.md +3 -0
- package/skills/shared/together-fireworks/evals/cases.yaml +50 -0
- package/skills/shared/together-fireworks/references/batch-and-tuning.md +59 -0
- package/skills/shared/together-fireworks/references/models-and-pricing.md +79 -0
- package/skills/shared/together-fireworks/scripts/verify.sh +165 -0
- package/skills/shared/training-data/SKILL.md +226 -0
- package/skills/shared/training-data/evals/README.md +13 -0
- package/skills/shared/training-data/evals/cases.yaml +41 -0
- package/skills/shared/training-data/references/formats.md +118 -0
- package/skills/shared/training-data/references/synthesis-dedup-quality.md +134 -0
- package/skills/shared/translation-l10n/SKILL.md +229 -0
- package/skills/shared/translation-l10n/evals/README.md +3 -0
- package/skills/shared/translation-l10n/evals/cases.yaml +39 -0
- package/skills/shared/translation-l10n/references/icu-cookbook.md +82 -0
- package/skills/shared/translation-l10n/references/rtl-and-bidi.md +60 -0
- package/skills/shared/typescript/SKILL.md +225 -0
- package/skills/shared/typescript/evals/README.md +15 -0
- package/skills/shared/typescript/evals/cases.yaml +46 -0
- package/skills/shared/typescript/references/build-and-monorepo.md +141 -0
- package/skills/shared/typescript/references/type-system.md +162 -0
- package/skills/shared/typescript/scripts/verify.sh +52 -0
- package/skills/shared/ui-engineering/SKILL.md +113 -0
- package/skills/shared/ui-engineering/evals/cases.yaml +38 -0
- package/skills/shared/unity/SKILL.md +282 -0
- package/skills/shared/unity/evals/README.md +8 -0
- package/skills/shared/unity/evals/cases.yaml +43 -0
- package/skills/shared/unity/references/build-and-platforms.md +65 -0
- package/skills/shared/unity/references/input-system.md +102 -0
- package/skills/shared/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/shared/unreal/SKILL.md +270 -0
- package/skills/shared/unreal/evals/README.md +12 -0
- package/skills/shared/unreal/evals/cases.yaml +45 -0
- package/skills/shared/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/shared/unreal/references/gameplay-framework.md +95 -0
- package/skills/shared/unreal/references/packaging.md +83 -0
- package/skills/shared/unslop/SKILL.md +143 -0
- package/skills/shared/unslop/evals/README.md +25 -0
- package/skills/shared/unslop/evals/cases.yaml +61 -0
- package/skills/shared/unsloth/SKILL.md +254 -0
- package/skills/shared/unsloth/evals/README.md +10 -0
- package/skills/shared/unsloth/evals/cases.yaml +42 -0
- package/skills/shared/unsloth/references/export.md +75 -0
- package/skills/shared/unsloth/references/grpo.md +91 -0
- package/skills/shared/unsloth/references/masking-and-templates.md +91 -0
- package/skills/shared/variant-explorer/SKILL.md +93 -0
- package/skills/shared/variant-explorer/evals/cases.yaml +38 -0
- package/skills/shared/vector-db/SKILL.md +189 -0
- package/skills/shared/vector-db/evals/README.md +10 -0
- package/skills/shared/vector-db/evals/cases.yaml +45 -0
- package/skills/shared/vector-db/references/engines.md +175 -0
- package/skills/shared/vector-db/references/tuning.md +62 -0
- package/skills/shared/vector-db/scripts/verify.sh +110 -0
- package/skills/shared/vercel/SKILL.md +242 -0
- package/skills/shared/vercel/evals/README.md +23 -0
- package/skills/shared/vercel/evals/cases.yaml +45 -0
- package/skills/shared/vercel/references/cli-cookbook.md +98 -0
- package/skills/shared/vercel/references/vercel-json.md +120 -0
- package/skills/shared/vercel/scripts/verify.sh +168 -0
- package/skills/shared/verify/SKILL.md +230 -0
- package/skills/shared/verify/evals/README.md +78 -0
- package/skills/shared/verify/evals/cases.yaml +104 -0
- package/skills/shared/vllm/SKILL.md +235 -0
- package/skills/shared/vllm/evals/README.md +9 -0
- package/skills/shared/vllm/evals/cases.yaml +47 -0
- package/skills/shared/vllm/references/flags-and-endpoints.md +105 -0
- package/skills/shared/vllm/references/memory-and-throughput.md +78 -0
- package/skills/shared/vue-nuxt/SKILL.md +323 -0
- package/skills/shared/vue-nuxt/evals/README.md +11 -0
- package/skills/shared/vue-nuxt/evals/cases.yaml +49 -0
- package/skills/shared/vue-nuxt/references/data-and-state.md +127 -0
- package/skills/shared/vue-nuxt/references/migration-nuxt4.md +79 -0
- package/skills/shared/vue-nuxt/references/nitro-and-rendering.md +117 -0
- package/skills/shared/vue-nuxt/references/reactivity.md +135 -0
- package/skills/shared/vue-nuxt/scripts/verify.sh +148 -0
- package/skills/shared/webhooks/SKILL.md +229 -0
- package/skills/shared/webhooks/evals/README.md +15 -0
- package/skills/shared/webhooks/evals/cases.yaml +46 -0
- package/skills/shared/webhooks/references/framework-raw-body.md +97 -0
- package/skills/shared/webhooks/references/signature-schemes.md +66 -0
- package/skills/shared/webhooks/scripts/verify.sh +142 -0
- package/skills/shared/wordpress/SKILL.md +224 -0
- package/skills/shared/wordpress/evals/README.md +3 -0
- package/skills/shared/wordpress/evals/cases.yaml +50 -0
- package/skills/shared/wordpress/references/hardening.md +108 -0
- package/skills/shared/wordpress/references/performance.md +80 -0
- package/skills/shared/wordpress/references/woocommerce.md +65 -0
- package/skills/shared/wordpress/scripts/verify.sh +96 -0
- package/skills/shared/worktrees/SKILL.md +204 -0
- package/skills/shared/worktrees/evals/README.md +78 -0
- package/skills/shared/worktrees/evals/cases.yaml +47 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# DuckDB — remote data & lakehouse
|
|
2
|
+
|
|
3
|
+
Offloaded from the SKILL body. DuckDB v1.5.2 / LTS 1.4.x.
|
|
4
|
+
|
|
5
|
+
## httpfs: read from S3 / GCS / Azure / HTTP in place
|
|
6
|
+
|
|
7
|
+
```sql
|
|
8
|
+
INSTALL httpfs; -- one-time per database/install
|
|
9
|
+
LOAD httpfs; -- per session
|
|
10
|
+
SELECT count(*) FROM read_parquet('https://host/path/data.parquet'); -- plain HTTP works immediately
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`httpfs` streams remote files with HTTP range requests, so Parquet row-group and column pushdown still
|
|
14
|
+
apply — you fetch only the bytes you read, not the whole object.
|
|
15
|
+
|
|
16
|
+
## CREATE SECRET — credentials done right
|
|
17
|
+
|
|
18
|
+
Never inline keys into SQL. Use a secret; prefer the credential chain so creds come from the environment
|
|
19
|
+
or an instance/role rather than being typed.
|
|
20
|
+
|
|
21
|
+
```sql
|
|
22
|
+
-- Pick up env vars / instance role / SSO automatically (recommended):
|
|
23
|
+
CREATE SECRET s3 (TYPE s3, PROVIDER credential_chain);
|
|
24
|
+
|
|
25
|
+
-- Explicit, when you must (e.g. a non-default region / endpoint):
|
|
26
|
+
CREATE SECRET s3 (
|
|
27
|
+
TYPE s3,
|
|
28
|
+
KEY_ID '...', SECRET '...',
|
|
29
|
+
REGION 'eu-west-1'
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
-- GCS (S3-compatible) and Azure have their own TYPEs:
|
|
33
|
+
CREATE SECRET gcs (TYPE gcs, KEY_ID '...', SECRET '...');
|
|
34
|
+
CREATE SECRET az (TYPE azure, CONNECTION_STRING '...');
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```sql
|
|
38
|
+
SELECT region, sum(amount) AS rev
|
|
39
|
+
FROM read_parquet('s3://bkt/sales/year=*/month=*/*.parquet', filename = true)
|
|
40
|
+
GROUP BY ALL;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Hive-partitioned globs
|
|
44
|
+
|
|
45
|
+
A glob over `key=value/` directories auto-derives partition columns; filter on them and DuckDB prunes
|
|
46
|
+
whole directories before reading any data.
|
|
47
|
+
|
|
48
|
+
```sql
|
|
49
|
+
SELECT *
|
|
50
|
+
FROM read_parquet('s3://bkt/events/year=*/month=*/*.parquet', hive_partitioning = true)
|
|
51
|
+
WHERE year = 2025 AND month = 4; -- only the matching partition dirs are scanned
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Iceberg
|
|
55
|
+
|
|
56
|
+
```sql
|
|
57
|
+
INSTALL iceberg; LOAD iceberg;
|
|
58
|
+
SELECT * FROM iceberg_scan('s3://bkt/warehouse/db/table'); -- read a table snapshot
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Delta Lake
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
INSTALL delta; LOAD delta;
|
|
65
|
+
SELECT * FROM delta_scan('s3://bkt/delta/events');
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## DuckLake — DuckDB's own lakehouse catalog
|
|
69
|
+
|
|
70
|
+
DuckLake (ducklake.select) stores table metadata in a SQL catalog with Parquet data files — DuckDB's
|
|
71
|
+
native lakehouse format. Attach it and query like a normal schema.
|
|
72
|
+
|
|
73
|
+
```sql
|
|
74
|
+
INSTALL ducklake; LOAD ducklake;
|
|
75
|
+
ATTACH 'ducklake:metadata.ducklake' AS lake (DATA_PATH 's3://bkt/lake/');
|
|
76
|
+
USE lake;
|
|
77
|
+
CREATE TABLE sales AS FROM read_parquet('s3://bkt/raw/*.parquet');
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Partitioned write (handoff)
|
|
81
|
+
|
|
82
|
+
```sql
|
|
83
|
+
COPY (SELECT * FROM 'raw/*.parquet')
|
|
84
|
+
TO 's3://bkt/curated/' (FORMAT parquet, PARTITION_BY (year, month), OVERWRITE_OR_IGNORE);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Writes a hive-partitioned dataset so any reader (DuckDB, Spark, ClickHouse, pandas) can prune partitions.
|
|
88
|
+
|
|
89
|
+
## MotherDuck — scale-out / share escape hatch
|
|
90
|
+
|
|
91
|
+
MotherDuck is managed DuckDB-as-a-service with hybrid local+cloud execution. Reach for it to share a
|
|
92
|
+
database or push heavy work to the cloud without running a server yourself — not the default.
|
|
93
|
+
|
|
94
|
+
```sql
|
|
95
|
+
ATTACH 'md:'; -- connect to your MotherDuck account (auth via token)
|
|
96
|
+
USE my_cloud_db;
|
|
97
|
+
SELECT * FROM cloud_table LIMIT 10; -- query can run partly local, partly in the cloud
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
When the real need is many concurrent users or always-on production serving, that is
|
|
101
|
+
`clickhouse-analytics`, not MotherDuck.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# verify.sh — duckdb skill smoke test. Run from anywhere.
|
|
5
|
+
#
|
|
6
|
+
# Proves the documented DuckDB commands actually execute on the installed version:
|
|
7
|
+
# 1. Prefer the `duckdb` CLI if on PATH; else `python3 -c "import duckdb"`.
|
|
8
|
+
# 2. If NEITHER is available -> print SKIP and exit 0 (never a false failure).
|
|
9
|
+
# 3. Otherwise: generate a tiny CSV in a temp dir, run an aggregate over a VALUES
|
|
10
|
+
# table AND over read_csv_auto on that file, and assert both equal a known scalar.
|
|
11
|
+
#
|
|
12
|
+
# Read-only with respect to your project: it only writes inside a private mktemp dir,
|
|
13
|
+
# which it removes on exit. No network, no large downloads, deterministic.
|
|
14
|
+
#
|
|
15
|
+
# Exit code: 0 on pass or skip; non-zero ONLY when DuckDB is present but a documented
|
|
16
|
+
# command returns the wrong scalar (a real regression).
|
|
17
|
+
|
|
18
|
+
YELLOW=$'\033[33m'; GREEN=$'\033[32m'; RED=$'\033[31m'; NC=$'\033[0m'
|
|
19
|
+
skip() { printf '%s[skip]%s %s\n' "$YELLOW" "$NC" "$*"; }
|
|
20
|
+
ok() { printf '%s[ok]%s %s\n' "$GREEN" "$NC" "$*"; }
|
|
21
|
+
err() { printf '%s[fail]%s %s\n' "$RED" "$NC" "$*"; }
|
|
22
|
+
|
|
23
|
+
TMP="$(mktemp -d 2>/dev/null || mktemp -d -t duckdb_verify)"
|
|
24
|
+
cleanup() { rm -rf "$TMP"; }
|
|
25
|
+
trap cleanup EXIT
|
|
26
|
+
|
|
27
|
+
CSV="$TMP/sales.csv"
|
|
28
|
+
printf 'region,amount\nEU,10\nEU,20\nUS,30\n' > "$CSV"
|
|
29
|
+
# Known answers: total sum = 60; EU sum = 30.
|
|
30
|
+
|
|
31
|
+
run_cli() {
|
|
32
|
+
# Aggregate over an inline VALUES table (no file): expect 60.
|
|
33
|
+
local a b
|
|
34
|
+
a="$(duckdb -noheader -list -c \
|
|
35
|
+
"SELECT sum(amount) FROM (VALUES (10),(20),(30)) AS t(amount)" 2>/dev/null)"
|
|
36
|
+
# Aggregate over the generated CSV via read_csv_auto, filtered to EU: expect 30.
|
|
37
|
+
b="$(duckdb -noheader -list -c \
|
|
38
|
+
"SELECT sum(amount) FROM read_csv_auto('$CSV') WHERE region = 'EU'" 2>/dev/null)"
|
|
39
|
+
[ "$a" = "60" ] && [ "$b" = "30" ]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
run_py() {
|
|
43
|
+
python3 - "$CSV" <<'PY'
|
|
44
|
+
import sys, duckdb
|
|
45
|
+
csv = sys.argv[1]
|
|
46
|
+
a = duckdb.sql("SELECT sum(amount) FROM (VALUES (10),(20),(30)) AS t(amount)").fetchone()[0]
|
|
47
|
+
b = duckdb.sql(f"SELECT sum(amount) FROM read_csv_auto('{csv}') WHERE region = 'EU'").fetchone()[0]
|
|
48
|
+
sys.exit(0 if (a == 60 and b == 30) else 1)
|
|
49
|
+
PY
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if command -v duckdb >/dev/null 2>&1; then
|
|
53
|
+
if run_cli; then
|
|
54
|
+
ok "duckdb CLI: VALUES aggregate = 60 and read_csv_auto(EU) = 30"
|
|
55
|
+
exit 0
|
|
56
|
+
else
|
|
57
|
+
err "duckdb CLI ran but returned an unexpected scalar"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
elif command -v python3 >/dev/null 2>&1 && python3 -c "import duckdb" >/dev/null 2>&1; then
|
|
61
|
+
if run_py; then
|
|
62
|
+
ok "python duckdb: VALUES aggregate = 60 and read_csv_auto(EU) = 30"
|
|
63
|
+
exit 0
|
|
64
|
+
else
|
|
65
|
+
err "python duckdb ran but returned an unexpected scalar"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
else
|
|
69
|
+
skip "neither the duckdb CLI nor the python duckdb module is installed — nothing to verify"
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dynamodb
|
|
3
|
+
description: "Use when modeling or operating a DynamoDB table: deriving partition/sort keys from access patterns, single-table vs table-per-entity, adding a GSI/LSI, on-demand vs provisioned capacity, or diagnosing hot-partition throttling. NOT relational schema/SQL/EXPLAIN (that is `postgresdb`), NOT aggregation-pipeline document modeling (that is `mongodb`)."
|
|
4
|
+
tags: [dynamodb, nosql, single-table-design, aws, data-modeling]
|
|
5
|
+
recommends: [postgresdb, mongodb, redis, vector-db, aws-essentials, deployment, secure-coding]
|
|
6
|
+
origin: ai-hub
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# DynamoDB — access-pattern-first modeling and capacity
|
|
10
|
+
|
|
11
|
+
DynamoDB is not a relational database with a different syntax. It has no joins, no ad-hoc queries, no
|
|
12
|
+
server-side aggregation, and it punishes schema changes after launch. So the modeling discipline IS the
|
|
13
|
+
work: enumerate every read and write the app must perform, THEN design keys so each one is a single
|
|
14
|
+
`GetItem` or `Query`. Add an index only when the base table physically cannot serve a pattern. Decide
|
|
15
|
+
capacity last.
|
|
16
|
+
|
|
17
|
+
Your job here is to stop the user from treating DynamoDB like SQL.
|
|
18
|
+
|
|
19
|
+
## What you produce / what you refuse
|
|
20
|
+
|
|
21
|
+
You deliver three artifacts, in this order:
|
|
22
|
+
|
|
23
|
+
1. **An access-pattern list** — a table of every query and write, with key condition, read/write,
|
|
24
|
+
frequency, and what serves it. This is the contract the keys must satisfy.
|
|
25
|
+
2. **A key-design document** — entity → PK/SK encoding → which table or named GSI serves each pattern.
|
|
26
|
+
3. **A capacity + cost recommendation** — on-demand vs provisioned vs reserved, and the hot-partition risk.
|
|
27
|
+
|
|
28
|
+
You **refuse** to: click through the AWS console, wire the IaC/CI provisioning pipeline (that is
|
|
29
|
+
`../deployment/SKILL.md`), or model the data as normalized tables you then "join" in application code.
|
|
30
|
+
You emit DDL, IaC snippets, and example SDK calls — you do not provision the infrastructure.
|
|
31
|
+
|
|
32
|
+
The steps below run in sequence — access patterns, then keys, then indexes, then capacity. Reordering
|
|
33
|
+
them is the single most common DynamoDB mistake.
|
|
34
|
+
|
|
35
|
+
## Step 1 — Enumerate access patterns
|
|
36
|
+
|
|
37
|
+
You cannot query what your keys do not express, and there is no `WHERE` over arbitrary columns, so
|
|
38
|
+
produce this table before you name a single attribute. It is also exactly what `scripts/verify.sh`
|
|
39
|
+
checks: run `scripts/verify.sh <path-to-key-design.{md,json}>` and every row must carry a key target
|
|
40
|
+
(`pk`/`sk` or a named `gsi`) and a `query_type`. It FAILS on any pattern served by `Scan`, WARNS on
|
|
41
|
+
`FilterExpression`, and asserts ≤20 GSIs / ≤5 LSIs. Read-only; exits 0 on an empty or clean target.
|
|
42
|
+
|
|
43
|
+
| pattern | entity | key condition | read/write | est. freq | served by |
|
|
44
|
+
|---|---|---|---|---|---|
|
|
45
|
+
| Get a user by id | User | `PK=USER#<id>` | read | high | base table `GetItem` |
|
|
46
|
+
| Get a user's orders, newest first | Order | `PK=USER#<id>`, `SK begins_with ORDER#` | read | high | base table `Query` |
|
|
47
|
+
| Look up a user by email | User | `GSI1PK=EMAIL#<email>` | read | medium | GSI1 `Query` |
|
|
48
|
+
| List open orders across all users | Order | sparse `GSI2PK=OPEN` | read | low | GSI2 (sparse) `Query` |
|
|
49
|
+
|
|
50
|
+
Bad → Good. The whole game is moving from vague to executable:
|
|
51
|
+
|
|
52
|
+
- Bad: "store users and orders." (No key condition is derivable from this.)
|
|
53
|
+
- Good: "get all orders for a user, newest first, page size 25." (PK + SK range + sort direction fall out.)
|
|
54
|
+
|
|
55
|
+
Rule: if a pattern needs a `FilterExpression` over more than ~10% of the items it scans, that is a
|
|
56
|
+
modeling smell — redesign the key, do not patch it with a filter.
|
|
57
|
+
|
|
58
|
+
## Step 2 — Key design + single-table decision
|
|
59
|
+
|
|
60
|
+
Get this wrong and you pay for it forever: changing a table's key schema after launch means a full
|
|
61
|
+
migration (new table + backfill + dual-write).
|
|
62
|
+
|
|
63
|
+
**Composite-key encoding.** Use prefixed, sortable strings so one partition holds an entity and its
|
|
64
|
+
children — items read together are co-located, so one `Query` returns them — and so a sort-key range
|
|
65
|
+
query slices them:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
PK = USER#123
|
|
69
|
+
SK = USER#123 <- the user item itself
|
|
70
|
+
SK = ORDER#2026-06-02T10:15#A91 <- an order, ISO-8601 timestamp sorts lexically = chronologically
|
|
71
|
+
SK = ORDER#2026-06-02T11:40#B07
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{ "PK": "USER#123", "SK": "ORDER#2026-06-02T10:15#A91",
|
|
76
|
+
"Type": "Order", "Total": 4200, "Status": "OPEN" }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
One `Query` with `PK = USER#123 AND SK begins_with("ORDER#")` returns all of that user's orders,
|
|
80
|
+
already sorted. That is a **one-to-many** relationship with no join.
|
|
81
|
+
|
|
82
|
+
**Many-to-many** uses an adjacency list: store the edge twice (or use an inverted GSI, see Step 3) so
|
|
83
|
+
you can traverse it from either side. Worked end-to-end in
|
|
84
|
+
[references/access-patterns.md](references/access-patterns.md) — a multi-tenant SaaS / e-commerce model
|
|
85
|
+
(pattern table → PK/SK map → GSI map → AWS SDK v3 `@aws-sdk/lib-dynamodb` calls), adjacency-list
|
|
86
|
+
many-to-many, time-series and leaderboard patterns.
|
|
87
|
+
|
|
88
|
+
**Single-table vs table-per-entity** — decide honestly, do not cargo-cult:
|
|
89
|
+
|
|
90
|
+
| signal | single-table | table-per-entity |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| Many entities read together in one request | yes | no |
|
|
93
|
+
| Many access patterns over related entities | yes | no |
|
|
94
|
+
| Entities are independent, patterns are few/simple | no | yes (simpler, fine) |
|
|
95
|
+
| Team unfamiliar with overloaded keys | weigh the cost | yes |
|
|
96
|
+
| Need clean per-entity IAM / TTL / capacity isolation | no | yes |
|
|
97
|
+
|
|
98
|
+
Single-table design earns its complexity when many related entities share access patterns. When entities
|
|
99
|
+
are independent and the queries are few, separate tables are simpler and perfectly correct — say so.
|
|
100
|
+
|
|
101
|
+
## Step 3 — GSIs (only when the base table can't serve it)
|
|
102
|
+
|
|
103
|
+
Three named patterns, each with a one-line why:
|
|
104
|
+
|
|
105
|
+
- **Inverted index** — swap PK and SK on the GSI so you can read the relationship from the other side
|
|
106
|
+
(`GSI1PK = SK_value`, `GSI1SK = PK_value`). Serves "given an order, who owns it" / many-to-many reverse.
|
|
107
|
+
- **Sparse index** — only items that carry the GSI's key attribute are indexed. Write the attribute
|
|
108
|
+
only on the few items you want to find ("OPEN" orders, flagged accounts) so the index is tiny and the
|
|
109
|
+
query is "find the few" instead of "scan the many."
|
|
110
|
+
- **Overloaded GSI** — reuse generic `GSI1PK`/`GSI1SK` attributes across multiple entity types so one
|
|
111
|
+
index serves several patterns. Keeps you under the index quota.
|
|
112
|
+
|
|
113
|
+
**Rule: add a GSI only when the base table physically cannot answer the pattern.** Every GSI is a
|
|
114
|
+
standing cost.
|
|
115
|
+
|
|
116
|
+
Warnings that bite people:
|
|
117
|
+
|
|
118
|
+
- GSIs are **always eventually consistent** — you cannot read-your-own-write through a GSI. If a pattern
|
|
119
|
+
needs strong consistency, it must hit the base table.
|
|
120
|
+
- Each write to the base table replicates to **every GSI whose keys changed**, each consuming its own
|
|
121
|
+
write capacity. More indexes = multiplied write cost.
|
|
122
|
+
- **Project only the attributes each pattern needs.** Blanket `ProjectionType: ALL` doubles storage and
|
|
123
|
+
write cost; use `KEYS_ONLY` or `INCLUDE` when you can.
|
|
124
|
+
|
|
125
|
+
Quotas (default, adjustable for GSIs): up to **20 GSIs** and **5 LSIs** per table. LSIs must be defined
|
|
126
|
+
at table creation, share the base partition key, and impose a **10 GB item-collection cap** (all items
|
|
127
|
+
under one partition key). GSI-only tables have no such cap — a real reason to prefer GSIs over LSIs.
|
|
128
|
+
|
|
129
|
+
## Step 4 — Capacity & cost
|
|
130
|
+
|
|
131
|
+
Capacity mode is a billing decision, not a modeling one — it changes nothing about the keys, so pick it
|
|
132
|
+
after the model is stable. Decision table:
|
|
133
|
+
|
|
134
|
+
| traffic shape | recommendation | why |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| Spiky / unpredictable, or < ~10M req/month | **On-demand** (the AWS default) | Nov-2024 ~50% price cut made it cheapest for most workloads; no capacity planning |
|
|
137
|
+
| Sustained utilization > ~40% | Provisioned + auto-scaling | provisioned writes (~$0.047/M) are far cheaper than on-demand at high utilization |
|
|
138
|
+
| Predictable, long-running, > ~70% util | Provisioned + reserved capacity | 3-year reserved (~$0.013/M write) is dramatically cheaper still |
|
|
139
|
+
|
|
140
|
+
On-demand request unit pricing (us-east-1, standard table class): **RRU $0.125 / million**,
|
|
141
|
+
**WRU $0.625 / million**. **Warm throughput** (the instantaneous read/write a table can serve) is shown
|
|
142
|
+
by default at no cost and rises automatically as you scale; you pay only if you **proactively pre-warm**
|
|
143
|
+
ahead of a known spike.
|
|
144
|
+
|
|
145
|
+
**Hot partitions.** Each physical partition has a hard ceiling of **3,000 RCU and 1,000 WCU per second**,
|
|
146
|
+
regardless of the table's total capacity. Drive one partition key past that and you are throttled even
|
|
147
|
+
while well under your table limit — this is why "writes throttled but I'm under capacity" means a hot key.
|
|
148
|
+
Fix with high-cardinality keys or **write-sharding**: append a suffix bucket to the PK.
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
# Hot: every write lands on one partition
|
|
152
|
+
PK = METRIC#daily_total
|
|
153
|
+
|
|
154
|
+
# Sharded: spread writes across N buckets, scatter-gather on read
|
|
155
|
+
PK = METRIC#daily_total#<0..9>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Capacity math, full pricing detail (including the Nov-2024 cut), warm throughput, the full quota table,
|
|
159
|
+
and hot-partition diagnosis + the sharding recipe live in
|
|
160
|
+
[references/capacity-and-limits.md](references/capacity-and-limits.md).
|
|
161
|
+
|
|
162
|
+
## Step 5 — Operational guardrails
|
|
163
|
+
|
|
164
|
+
- **Item size is hard-capped at 400 KB** (attribute names + values). Offload large blobs to S3 and store
|
|
165
|
+
the S3 key in the item.
|
|
166
|
+
- **Query/Scan return at most 1 MB per request.** That is why a `Query` "only returns some rows" — loop on
|
|
167
|
+
`LastEvaluatedKey` until it is absent.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
aws dynamodb query --table-name App \
|
|
171
|
+
--key-condition-expression 'PK = :pk' \
|
|
172
|
+
--expression-attribute-values '{":pk":{"S":"USER#123"}}' \
|
|
173
|
+
--starting-token "$LAST_EVALUATED_KEY" # paginate; absent => done
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- **TransactWriteItems / TransactGetItems** group up to **100 unique items**; a transactional write
|
|
177
|
+
consumes **2× WCU**.
|
|
178
|
+
- **BatchWriteItem** takes up to **25 put/delete requests** per call.
|
|
179
|
+
- **FilterExpression runs AFTER the read consumes capacity** — it saves bandwidth, not RCU. Never use a
|
|
180
|
+
filter as a substitute for a key condition.
|
|
181
|
+
- **TTL** for automatic expiry (set an epoch-seconds attribute); deletion is best-effort, not instant.
|
|
182
|
+
- **DynamoDB Streams** for change capture / building derived & denormalized views.
|
|
183
|
+
|
|
184
|
+
## Anti-patterns
|
|
185
|
+
|
|
186
|
+
| Anti-pattern | Why it fails | Do instead |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| Designing keys before listing access patterns | The keys won't express the queries; post-launch fix is a full migration | List every read/write first; derive keys from them |
|
|
189
|
+
| `Scan` + `FilterExpression` as your "query" | Scan reads (and bills) the whole table; the filter only trims the response | Make the pattern a `Query` on a key or GSI |
|
|
190
|
+
| One GSI per attribute "just in case" | Each GSI multiplies write cost and counts against the 20-GSI quota | Add a GSI only when the base table can't serve a real pattern |
|
|
191
|
+
| Normalizing into separate tables joined in app code | DynamoDB has no joins; app-side joins are N round-trips and races | Co-locate related items under one PK; query once |
|
|
192
|
+
| Low-cardinality PK (e.g. `status`, `tenant`) | All traffic funnels to one partition → throttling at 3000 RCU / 1000 WCU | High-cardinality PK; write-shard hot keys |
|
|
193
|
+
| Expecting strong consistency from a GSI | GSIs are always eventually consistent — stale reads | Read consistency-critical patterns from the base table |
|
|
194
|
+
| `ProjectionType: ALL` on every GSI | Doubles storage and write cost on each indexed write | Project `KEYS_ONLY` / `INCLUDE` only what the pattern needs |
|
|
195
|
+
| Storing > 400 KB inline (images, docs, logs) | Hits the 400 KB item cap; bloats every read | Put the blob in S3, store the pointer in the item |
|
|
196
|
+
| Picking capacity mode before the model is done | Mode is billing, not modeling — premature and often wrong | Stabilize keys/GSIs first, then choose on-demand vs provisioned |
|
|
197
|
+
|
|
198
|
+
## Route elsewhere when the engine is different
|
|
199
|
+
|
|
200
|
+
Relational schema / SQL / EXPLAIN / indexing → `../postgresdb/SKILL.md`; MySQL-engine schema → `mysql`;
|
|
201
|
+
document modeling + aggregation pipeline → `mongodb`; cache / queue / rate-limiter → `redis`; vector
|
|
202
|
+
store / semantic search → `vector-db`; AWS account / IAM / VPC setup → `aws-essentials`; provisioning the
|
|
203
|
+
table in CI/CD → `../deployment/SKILL.md`; API-layer auth/secrets in front of the table →
|
|
204
|
+
`../secure-coding/SKILL.md`.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Evals — dynamodb
|
|
2
|
+
|
|
3
|
+
These cases are graded by judgment, not an automated harness. Feed each `should_trigger` and
|
|
4
|
+
`should_not_trigger` prompt to the skill router and confirm it routes to `dynamodb` (or, for the negatives,
|
|
5
|
+
to the named `route_to` sibling). For the `capability` case, give the scenario to the skill and check the
|
|
6
|
+
answer hits every item in `must_include` — most importantly that it enumerates access patterns before keys,
|
|
7
|
+
serves every lookup with a key or GSI (never a Scan), and never falls back to relational joins. The
|
|
8
|
+
separate `scripts/verify.sh` mechanically checks a key-design artifact; this YAML checks reasoning.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
skill: dynamodb
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Design a DynamoDB table for an e-commerce app — users, orders, and order items."
|
|
5
|
+
why: "Core access-pattern-first NoSQL modeling for the DynamoDB engine."
|
|
6
|
+
- prompt: "I need to look up a user by id AND by email in DynamoDB. How do I support both lookups?"
|
|
7
|
+
why: "Non-obvious — the answer is an inverted/sparse GSI, but the user never says 'GSI' or 'index'."
|
|
8
|
+
- prompt: "My DynamoDB writes are getting throttled even though I'm way under my provisioned capacity. Why?"
|
|
9
|
+
why: "Non-obvious — this is the per-partition 1000 WCU hot-partition ceiling, with no modeling vocabulary in the prompt."
|
|
10
|
+
- prompt: "Should I use on-demand or provisioned capacity for a workload that spikes hard at 9am and is quiet otherwise?"
|
|
11
|
+
why: "Capacity-mode decision the skill owns (on-demand is the post-Nov-2024 default for spiky traffic)."
|
|
12
|
+
- prompt: "Is single-table design actually worth it for my app, or should I use a table per entity?"
|
|
13
|
+
why: "The single-table-vs-table-per-entity call is squarely this skill's territory."
|
|
14
|
+
- prompt: "Diseña el modelo de DynamoDB para un chat: conversaciones y mensajes, con paginación."
|
|
15
|
+
why: "Spanish + access-pattern modeling (one-to-many) + the 1 MB page / LastEvaluatedKey pagination concern."
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Design a normalized Postgres schema with foreign keys for orders and customers, and add the right indexes."
|
|
19
|
+
route_to: postgresdb
|
|
20
|
+
why: "Relational engine — normalization, foreign keys, B-tree indexes are postgresdb's domain."
|
|
21
|
+
- prompt: "Model embedding-vs-referencing for my MongoDB documents and write the aggregation pipeline."
|
|
22
|
+
route_to: mongodb
|
|
23
|
+
why: "Document engine with an aggregation pipeline; not DynamoDB key/GSI modeling."
|
|
24
|
+
- prompt: "I want to store and query vector embeddings for semantic search."
|
|
25
|
+
route_to: vector-db
|
|
26
|
+
why: "Vector / semantic search, not key-value access-pattern modeling."
|
|
27
|
+
- prompt: "Set up my AWS account, IAM roles, and a VPC so I can start using AWS."
|
|
28
|
+
route_to: aws-essentials
|
|
29
|
+
why: "Account and infrastructure setup, not data modeling."
|
|
30
|
+
- prompt: "Cache these hot read results to take load off my database."
|
|
31
|
+
route_to: redis
|
|
32
|
+
why: "Caching layer is out of scope; DynamoDB owns the modeling, not the cache in front of it."
|
|
33
|
+
|
|
34
|
+
capability:
|
|
35
|
+
- scenario: >
|
|
36
|
+
A multi-tenant SaaS has entities Org, User, Project, and Task. It needs to: get all users in an org;
|
|
37
|
+
get a user's tasks newest-first; look up a user by email; and list all overdue tasks across an org.
|
|
38
|
+
Design the DynamoDB model and recommend a capacity mode.
|
|
39
|
+
must_include:
|
|
40
|
+
- "Enumerates the four access patterns BEFORE designing any keys"
|
|
41
|
+
- "Designs composite PK/SK with entity co-location under a single table and shows the encoding (e.g. PK=USER#id, SK=TASK#<iso>#id)"
|
|
42
|
+
- "Serves the email lookup via an inverted/sparse GSI and notes GSIs are eventually consistent (no read-your-own-write)"
|
|
43
|
+
- "Serves 'overdue tasks' via a sparse GSI (attribute written only on overdue items), not a Scan + FilterExpression"
|
|
44
|
+
- "Recommends on-demand as the default capacity mode while naming the ~40%-utilization threshold for switching to provisioned"
|
|
45
|
+
- "Flags the 400 KB item cap and the 1 MB Query page with LastEvaluatedKey pagination"
|
|
46
|
+
- "Does NOT propose normalized separate tables joined in application code"
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Worked model: multi-tenant SaaS / e-commerce
|
|
2
|
+
|
|
3
|
+
A single end-to-end example. The domain has four entities — **Org**, **User**, **Project**, **Task** —
|
|
4
|
+
plus orders to show one-to-many and many-to-many. Follow the order: patterns → keys → GSIs → calls.
|
|
5
|
+
|
|
6
|
+
## 1. Access patterns
|
|
7
|
+
|
|
8
|
+
| # | pattern | key condition | type | served by |
|
|
9
|
+
|---|---|---|---|---|
|
|
10
|
+
| 1 | Get an org by id | `PK=ORG#<id>`, `SK=ORG#<id>` | GetItem | base |
|
|
11
|
+
| 2 | Get all users in an org | `PK=ORG#<id>`, `SK begins_with USER#` | Query | base |
|
|
12
|
+
| 3 | Get a user by id | `PK=USER#<id>`, `SK=USER#<id>` | GetItem | base |
|
|
13
|
+
| 4 | Look up a user by email | `GSI1PK=EMAIL#<email>` | Query | GSI1 (inverted) |
|
|
14
|
+
| 5 | Get a user's tasks, newest first | `PK=USER#<id>`, `SK begins_with TASK#`, ScanIndexForward=false | Query | base |
|
|
15
|
+
| 6 | List all overdue tasks in an org | `GSI2PK=ORG#<id>#OVERDUE` | Query | GSI2 (sparse) |
|
|
16
|
+
| 7 | Get all users on a project (M:N) | `GSI1PK=PROJECT#<id>` | Query | GSI1 (inverted) |
|
|
17
|
+
|
|
18
|
+
Patterns 1–5 are served by the base table. Only 4, 6, 7 force an index — note how few do.
|
|
19
|
+
|
|
20
|
+
## 2. Key design (single table `App`)
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
# Base table key schema
|
|
24
|
+
PK (partition) SK (sort)
|
|
25
|
+
-------------------------------------------------------------
|
|
26
|
+
ORG#o1 ORG#o1 Org item
|
|
27
|
+
ORG#o1 USER#u1 User (co-located under org) -> pattern 2
|
|
28
|
+
USER#u1 USER#u1 User canonical item -> pattern 3
|
|
29
|
+
USER#u1 TASK#2026-06-02T09:00#t1 Task (sorts chronologically) -> pattern 5
|
|
30
|
+
USER#u1 TASK#2026-06-01T14:00#t2
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
User items carry GSI attributes for the inverted/sparse lookups; tasks carry the sparse key only when overdue:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{ "PK": "USER#u1", "SK": "USER#u1", "Type": "User",
|
|
37
|
+
"Email": "ana@acme.com", "OrgId": "o1",
|
|
38
|
+
"GSI1PK": "EMAIL#ana@acme.com", "GSI1SK": "USER#u1" }
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{ "PK": "USER#u1", "SK": "TASK#2026-06-02T09:00#t1", "Type": "Task",
|
|
43
|
+
"DueDate": "2026-05-30", "Status": "OPEN",
|
|
44
|
+
"GSI2PK": "ORG#o1#OVERDUE", "GSI2SK": "2026-05-30#t1" }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
When a task is completed or not yet overdue, **omit `GSI2PK`** — the sparse index then contains only
|
|
48
|
+
overdue tasks, so pattern 6 is a cheap `Query`, never a `Scan`.
|
|
49
|
+
|
|
50
|
+
## 3. GSI map
|
|
51
|
+
|
|
52
|
+
| GSI | partition key | sort key | projection | serves |
|
|
53
|
+
|---|---|---|---|---|
|
|
54
|
+
| GSI1 (inverted/overloaded) | `GSI1PK` | `GSI1SK` | `KEYS_ONLY` + email | patterns 4, 7 |
|
|
55
|
+
| GSI2 (sparse) | `GSI2PK` | `GSI2SK` | `INCLUDE` DueDate,Title | pattern 6 |
|
|
56
|
+
|
|
57
|
+
GSI1 is **overloaded**: an `EMAIL#...` value serves user-by-email; a `PROJECT#...` value (written on a
|
|
58
|
+
membership edge item) serves project members. One index, two patterns, under quota.
|
|
59
|
+
|
|
60
|
+
## 4. Example calls (AWS SDK v3, `@aws-sdk/lib-dynamodb`)
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
64
|
+
import { DynamoDBDocumentClient, QueryCommand, GetCommand } from "@aws-sdk/lib-dynamodb";
|
|
65
|
+
|
|
66
|
+
const ddb = DynamoDBDocumentClient.from(new DynamoDBClient({}));
|
|
67
|
+
|
|
68
|
+
// Pattern 5: a user's tasks, newest first, page of 25
|
|
69
|
+
const tasks = await ddb.send(new QueryCommand({
|
|
70
|
+
TableName: "App",
|
|
71
|
+
KeyConditionExpression: "PK = :pk AND begins_with(SK, :p)",
|
|
72
|
+
ExpressionAttributeValues: { ":pk": "USER#u1", ":p": "TASK#" },
|
|
73
|
+
ScanIndexForward: false, // descending = newest first
|
|
74
|
+
Limit: 25,
|
|
75
|
+
}));
|
|
76
|
+
|
|
77
|
+
// Pattern 4: user by email (inverted GSI — eventually consistent)
|
|
78
|
+
const byEmail = await ddb.send(new QueryCommand({
|
|
79
|
+
TableName: "App",
|
|
80
|
+
IndexName: "GSI1",
|
|
81
|
+
KeyConditionExpression: "GSI1PK = :e",
|
|
82
|
+
ExpressionAttributeValues: { ":e": "EMAIL#ana@acme.com" },
|
|
83
|
+
}));
|
|
84
|
+
|
|
85
|
+
// Pattern 6: overdue tasks across the org (sparse GSI — only overdue items are present)
|
|
86
|
+
const overdue = await ddb.send(new QueryCommand({
|
|
87
|
+
TableName: "App",
|
|
88
|
+
IndexName: "GSI2",
|
|
89
|
+
KeyConditionExpression: "GSI2PK = :o",
|
|
90
|
+
ExpressionAttributeValues: { ":o": "ORG#o1#OVERDUE" },
|
|
91
|
+
}));
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 5. Pagination loop (1 MB page limit)
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
let cursor: Record<string, unknown> | undefined;
|
|
98
|
+
const all = [];
|
|
99
|
+
do {
|
|
100
|
+
const page = await ddb.send(new QueryCommand({
|
|
101
|
+
TableName: "App",
|
|
102
|
+
KeyConditionExpression: "PK = :pk AND begins_with(SK, :p)",
|
|
103
|
+
ExpressionAttributeValues: { ":pk": "USER#u1", ":p": "ORDER#" },
|
|
104
|
+
ExclusiveStartKey: cursor,
|
|
105
|
+
}));
|
|
106
|
+
all.push(...(page.Items ?? []));
|
|
107
|
+
cursor = page.LastEvaluatedKey; // absent => done
|
|
108
|
+
} while (cursor);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## 6. Many-to-many via adjacency list
|
|
112
|
+
|
|
113
|
+
A user belongs to many projects; a project has many users. Store the edge so both directions Query:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
PK = USER#u1 SK = PROJECT#p9 (GSI1PK = PROJECT#p9, GSI1SK = USER#u1)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- "projects for a user" → base `Query PK=USER#u1, SK begins_with PROJECT#`.
|
|
120
|
+
- "users on a project" → GSI1 `Query GSI1PK=PROJECT#p9` (pattern 7).
|
|
121
|
+
|
|
122
|
+
## 7. Time-series & leaderboard
|
|
123
|
+
|
|
124
|
+
- **Time-series**: PK = `SENSOR#<id>#<yyyy-mm>` (bucket by month to bound partition size), SK = ISO
|
|
125
|
+
timestamp. Range queries slice by time; monthly buckets keep any single partition under the heat ceiling.
|
|
126
|
+
- **Leaderboard**: a sparse/overloaded GSI with PK = `BOARD#<id>`, SK = zero-padded score
|
|
127
|
+
(`0000420#user`). `Query` descending = top-N. Pad numerically so lexical sort matches numeric sort.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Capacity, pricing, limits
|
|
2
|
+
|
|
3
|
+
All numbers are us-east-1, standard table class, as of mid-2026. Prices change; treat ratios as durable,
|
|
4
|
+
absolute cents as a snapshot.
|
|
5
|
+
|
|
6
|
+
## Capacity modes
|
|
7
|
+
|
|
8
|
+
| mode | when | mechanics |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| On-demand | Spiky / unpredictable, new tables, < ~10M req/month | Pay per request; no capacity planning. **AWS's recommended default** since the Nov-2024 cut. |
|
|
11
|
+
| Provisioned + auto-scaling | Sustained utilization > ~40% | Reserve RCU/WCU; auto-scaling adjusts within bounds. |
|
|
12
|
+
| Provisioned + reserved capacity | Predictable, long-running, > ~70% util | Commit 1- or 3-year for the steep discount. |
|
|
13
|
+
|
|
14
|
+
**The Nov-2024 change.** AWS cut on-demand throughput price by **~50%**, which made on-demand cheaper than
|
|
15
|
+
provisioned for most workloads and shifted the default recommendation to on-demand. Only commit to
|
|
16
|
+
provisioned/reserved once you can show steady high utilization.
|
|
17
|
+
|
|
18
|
+
## Pricing snapshot (on-demand, us-east-1, standard class)
|
|
19
|
+
|
|
20
|
+
- Read request units (RRU): **$0.125 / million**
|
|
21
|
+
- Write request units (WRU): **$0.625 / million** (writes are 5× reads — write-heavy designs cost more)
|
|
22
|
+
|
|
23
|
+
At **full** utilization, provisioned beats on-demand hard:
|
|
24
|
+
|
|
25
|
+
- Provisioned write ~ **$0.047 / million** WCU → roughly **26×** cheaper than on-demand WRU.
|
|
26
|
+
- 3-year reserved write ~ **$0.013 / million** → roughly **96×** cheaper than on-demand.
|
|
27
|
+
|
|
28
|
+
These ratios only apply if utilization is genuinely high and steady; idle provisioned capacity is pure
|
|
29
|
+
waste. That is the whole point of the >40% / >70% thresholds.
|
|
30
|
+
|
|
31
|
+
## Warm throughput
|
|
32
|
+
|
|
33
|
+
Warm throughput is the **instantaneous** read/write a table or index can already serve. It is exposed by
|
|
34
|
+
default at **no cost** and rises automatically as the table scales. You are charged a one-time fee only if
|
|
35
|
+
you **proactively pre-warm** ahead of a known spike (e.g. a launch or a sale), priced at the per-unit
|
|
36
|
+
RCU/WCU regional rate for the increase you request. Default behavior costs nothing.
|
|
37
|
+
|
|
38
|
+
## Hot partitions and write-sharding
|
|
39
|
+
|
|
40
|
+
Every physical partition has a hard ceiling, independent of table capacity:
|
|
41
|
+
|
|
42
|
+
- **3,000 RCU/sec** and **1,000 WCU/sec** per partition.
|
|
43
|
+
|
|
44
|
+
Concentrate traffic on one partition key and you throttle even while well under the table's provisioned
|
|
45
|
+
or on-demand limit. Symptom: `ProvisionedThroughputExceededException` / throttles "but I'm under capacity."
|
|
46
|
+
|
|
47
|
+
Fix — **write-sharding** spreads a hot key across N buckets:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
# Hot: a single counter, one partition
|
|
51
|
+
PK = COUNTER#global
|
|
52
|
+
|
|
53
|
+
# Sharded across 10 buckets
|
|
54
|
+
PK = COUNTER#global#<0..9> # write: random bucket; read: query all 10 and sum (scatter-gather)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Choose N from peak WCU / 1,000 (round up). Higher N spreads heat but multiplies read fan-out — size it to
|
|
58
|
+
the real peak, not a guess.
|
|
59
|
+
|
|
60
|
+
## Quotas and operation limits
|
|
61
|
+
|
|
62
|
+
| limit | value | note |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Item size | **400 KB** | attribute names + values, binary length; offload big blobs to S3 |
|
|
65
|
+
| GSIs per table | **20** (default, adjustable) | each adds standing write cost |
|
|
66
|
+
| LSIs per table | **5** | must be defined at table creation; share base PK |
|
|
67
|
+
| Item-collection size (with any LSI) | **10 GB** | all items under one PK; GSI-only tables have no cap |
|
|
68
|
+
| Query / Scan response | **1 MB / request** | paginate via `LastEvaluatedKey` |
|
|
69
|
+
| TransactWriteItems / TransactGetItems | **100 unique items** | transactional write = **2× WCU** |
|
|
70
|
+
| BatchWriteItem | **25 put/delete requests** | per call |
|
|
71
|
+
| Table / item count | no practical limit | only the per-item and per-partition caps bind |
|
|
72
|
+
|
|
73
|
+
## FilterExpression vs key condition
|
|
74
|
+
|
|
75
|
+
`FilterExpression` is applied **after** the read has already consumed capacity. It reduces the bytes sent
|
|
76
|
+
over the wire, never the RCU billed. A pattern that filters away most of what it scanned is a key-design
|
|
77
|
+
failure — fix the key or add the right (often sparse) GSI. Filtering ≤10% of a small, key-bounded result
|
|
78
|
+
is fine; filtering a Scan is not.
|