@dsalazardev/ai-hub-cli 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/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/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 +74 -0
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +200 -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 +262 -0
- package/dist/cli/memory.d.ts +2 -0
- package/dist/cli/memory.js +84 -0
- package/dist/cli/onboarding.d.ts +17 -0
- package/dist/cli/onboarding.js +234 -0
- package/dist/cli/run.d.ts +15 -0
- package/dist/cli/run.js +183 -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/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 +93 -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 +113 -0
- package/dist/manifest/manifest.js +202 -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 +18 -0
- package/dist/presets/materialize.js +101 -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 +255 -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 +393 -0
- package/package.json +61 -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 +55 -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 +27 -0
- package/presets/base/rules/core.md +35 -0
- package/presets/generic-ts/preset.yaml +46 -0
- package/presets/python/preset.yaml +47 -0
- package/presets/python/rules/python.md +10 -0
- package/schema/engine.schema.json +73 -0
- package/schema/manifest.schema.json +140 -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,342 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mongodb
|
|
3
|
+
description: "Use when modeling MongoDB documents (embed versus reference, the 16MB cap, bucket and subset patterns), choosing or fixing indexes (compound order by the ESR rule, partial, TTL, multikey, reading explain), writing aggregation pipelines that stay index-eligible, running multi-document transactions with retry, or operating and securing a deployment (replica set, read/write concern, Atlas tiers, Vector Search, Queryable Encryption). MongoDB 8.2, driver-agnostic. NOT relational schema, SQL or EXPLAIN ANALYZE (that is `postgresdb`)."
|
|
4
|
+
tags: [mongodb, nosql, database, aggregation, indexing]
|
|
5
|
+
recommends: [secure-coding, harness]
|
|
6
|
+
profiles: []
|
|
7
|
+
origin: ai-hub
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MongoDB — modeling, indexing, aggregation, transactions, ops
|
|
11
|
+
|
|
12
|
+
Engine-level MongoDB 8.2 guidance: model documents for the queries you actually run, pick the
|
|
13
|
+
index the planner will use, write aggregation pipelines that stay index-eligible, run
|
|
14
|
+
multi-document transactions with correct retry, and operate/secure a deployment. Driver-agnostic —
|
|
15
|
+
every example is `mongosh` shell syntax that maps 1:1 to the official drivers (Node, Python, Go,
|
|
16
|
+
Java, Rust). This skill owns the **server's query and the index it picks**, not any ODM's API.
|
|
17
|
+
|
|
18
|
+
## When to use / When NOT to use
|
|
19
|
+
|
|
20
|
+
**When to use:**
|
|
21
|
+
|
|
22
|
+
- Document modeling: embed vs reference, the 16 MB cap, one-to-many/many-to-many, the
|
|
23
|
+
subset/extended-reference/bucket/computed/outlier patterns, taming unbounded array growth.
|
|
24
|
+
- Index decisions: single-field, compound (the ESR ordering rule), multikey, partial, TTL, text,
|
|
25
|
+
wildcard, `2dsphere`; and when an index is NOT worth it.
|
|
26
|
+
- Any query that is slow or scans too much; reading `explain("executionStats")`.
|
|
27
|
+
- Aggregation pipelines: stage order so `$match`/`$sort` hit an index, `$lookup` cost, `$unwind`
|
|
28
|
+
explosion, `$group`/`$sort` memory limits and `allowDiskUse`, `$merge`/`$out`, faceting.
|
|
29
|
+
- Multi-document transactions: sessions, `withTransaction` retry semantics, read/write concern.
|
|
30
|
+
- Operating/securing: replica set, read preference, write concern, Atlas tier choice, Atlas Search
|
|
31
|
+
& Vector Search, Queryable Encryption, role-based access, connection-pool knobs.
|
|
32
|
+
|
|
33
|
+
**When NOT to use:**
|
|
34
|
+
|
|
35
|
+
- Relational schema / SQL / `EXPLAIN ANALYZE` → [`postgresdb`](../postgresdb/SKILL.md). Different
|
|
36
|
+
engine, planner, and concurrency model.
|
|
37
|
+
- ODM/driver API ergonomics (Mongoose pre-save hooks, the Node driver's `bulkWrite` return shape,
|
|
38
|
+
`updateMany`'s result object) → that tool's own docs. This skill owns the server query and the
|
|
39
|
+
index the server picks, not the JS object the driver hands back.
|
|
40
|
+
- App-layer caching as a product (Redis-in-front-of-reads).
|
|
41
|
+
- Cloud-console click-paths — we give the shell command / connection string, not the Atlas UI tour.
|
|
42
|
+
- Picking a vector store *across engines* (Pinecone vs Weaviate). Atlas Vector Search *inside* Mongo
|
|
43
|
+
is in scope; cross-engine selection is not.
|
|
44
|
+
|
|
45
|
+
Deep dives: [data-modeling](references/data-modeling.md) (embed/reference tree, all six patterns,
|
|
46
|
+
16 MB math, polymorphic & schema versioning) · [aggregation](references/aggregation.md) (per-stage
|
|
47
|
+
index eligibility, `$lookup` variants, `$facet`, window fns, `$merge`/`$out`, reading pipeline
|
|
48
|
+
`explain`) · [transactions-and-ops](references/transactions-and-ops.md) (retry wrappers, concern
|
|
49
|
+
semantics, Atlas tiers, Vector Search, Queryable Encryption, RBAC, pooling, change streams).
|
|
50
|
+
|
|
51
|
+
## Non-negotiables
|
|
52
|
+
|
|
53
|
+
1. **Design for the queries you run, not the shape of your data.** The schema is the set of
|
|
54
|
+
documents that make your common reads single-document and index-eligible.
|
|
55
|
+
2. **Never let an array grow unbounded inside a document.** It walks toward the 16 MB cap, bloats
|
|
56
|
+
every read of the parent, and kills update performance — reference or bucket it.
|
|
57
|
+
3. **The hard ceiling is 16 MB per document.** If a one-to-many can exceed it, you reference; there
|
|
58
|
+
is no `TOAST`-style overflow here.
|
|
59
|
+
4. **A single-document write is already atomic.** Reach for a multi-document transaction *only* when
|
|
60
|
+
two or more documents must change together — otherwise you are paying for nothing.
|
|
61
|
+
5. **Every transaction retries on the `TransientTransactionError` label** (and commit retries on
|
|
62
|
+
`UnknownTransactionCommitResult`). `withTransaction` does both for you; a hand-rolled loop must.
|
|
63
|
+
6. **Index by ESR: Equality fields, then the Sort field, then Range fields.** This order lets one
|
|
64
|
+
compound index serve the filter, the sort, and the range without an in-memory sort.
|
|
65
|
+
7. **Read `explain("executionStats")` before and after adding an index** — confirm `IXSCAN`, not
|
|
66
|
+
`COLLSCAN`, and `totalKeysExamined ≈ nReturned`. Or it didn't happen.
|
|
67
|
+
8. **`w:"majority"` for money and state transitions**, read concern `"majority"`/`"snapshot"` when a
|
|
68
|
+
read must reflect a durable write. `w:1` can be rolled back on a primary failover.
|
|
69
|
+
9. **Money is `Decimal128` (`NumberDecimal("...")`), never a JS `double`.** Binary floats drift;
|
|
70
|
+
`0.1 + 0.2 !== 0.3` in your ledger.
|
|
71
|
+
10. **Never store a secret in plaintext.** Use Queryable Encryption / client-side field-level
|
|
72
|
+
encryption; never commit a `mongodb://user:pass@` literal.
|
|
73
|
+
|
|
74
|
+
## Decision rules
|
|
75
|
+
|
|
76
|
+
### Embed or reference
|
|
77
|
+
|
|
78
|
+
| Relationship | Choose | Why |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| Read together, small, bounded (address on a user) | embed | one read, no `$lookup`, atomic update |
|
|
81
|
+
| One-to-few, bounded (≤ a few dozen, won't grow) | embed | stays well under 16 MB |
|
|
82
|
+
| One-to-many, growth not bounded (comments on a post) | reference | array would chase the 16 MB cap |
|
|
83
|
+
| Many-to-many (students↔courses) | reference (array of ids on the lighter side) | shared, independently mutated |
|
|
84
|
+
| Child shared across parents | reference | one source of truth, no duplication drift |
|
|
85
|
+
| Child independently and frequently mutated | reference | avoid rewriting a big parent per child edit |
|
|
86
|
+
| High-cardinality / huge child set | reference (+ optional subset embed) | keep the hot read small |
|
|
87
|
+
|
|
88
|
+
### Which schema pattern
|
|
89
|
+
|
|
90
|
+
| Symptom | Pattern | What it does |
|
|
91
|
+
| --- | --- | --- |
|
|
92
|
+
| List view reads 3 fields of a heavy doc | **subset** | embed only the hot fields, reference the rest |
|
|
93
|
+
| `$lookup` on every read just to show a name/price | **extended reference** | copy the few joined fields you display |
|
|
94
|
+
| Unbounded time-ordered events (readings, logs) | **bucket** | group N events per doc by time window |
|
|
95
|
+
| Same `count`/`sum` recomputed on every read | **computed** | store the rollup, update it on write |
|
|
96
|
+
| 1% of docs break the shape (a few mega-children) | **outlier** | flag them, overflow into linked docs |
|
|
97
|
+
| One collection holds several entity shapes | **polymorphic** | a `type` discriminator + shared `_id` space |
|
|
98
|
+
|
|
99
|
+
Full Bad→Good documents for each in [data-modeling](references/data-modeling.md).
|
|
100
|
+
|
|
101
|
+
### Which index type
|
|
102
|
+
|
|
103
|
+
| Access pattern | Index | Note |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| `=` on one field | single-field | also covers the field's sort |
|
|
106
|
+
| filter + sort + range together | compound, ordered **ESR** | one index serves all three |
|
|
107
|
+
| query into an array field | multikey (automatic on an array key) | one multikey field per compound index |
|
|
108
|
+
| query only a subset of docs (`status:"active"`) | partial (`partialFilterExpression`) | smaller, cheaper to maintain |
|
|
109
|
+
| auto-expire docs after a time | TTL (`expireAfterSeconds` on a Date) | single-field only; deletes in background |
|
|
110
|
+
| language-aware text search | text **or** Atlas Search | Atlas Search is far richer; text is legacy |
|
|
111
|
+
| unpredictable / many query shapes on subdocs | wildcard (`"$**"`) | last resort; never beats a targeted index |
|
|
112
|
+
| geospatial proximity / within | `2dsphere` | GeoJSON `Point`/`Polygon` |
|
|
113
|
+
| vector similarity (8.2, Community+) | Atlas/Vector Search index | see transactions-and-ops ref |
|
|
114
|
+
|
|
115
|
+
### When NOT to add an index
|
|
116
|
+
|
|
117
|
+
- Low-cardinality field (a boolean, a 3-value status) — the planner skips it; `COLLSCAN` wins.
|
|
118
|
+
- Tiny collection — a collection scan reads one or two pages; the index is pure write tax.
|
|
119
|
+
- A field already the **left prefix** of an existing compound index — redundant.
|
|
120
|
+
- Write-heavy field rarely filtered — every index is paid on every insert/update.
|
|
121
|
+
- "Just in case" indexes — an unused index costs writes and RAM, returns nothing.
|
|
122
|
+
|
|
123
|
+
## Copy-paste patterns
|
|
124
|
+
|
|
125
|
+
Every fence is `mongosh` syntax.
|
|
126
|
+
|
|
127
|
+
### Model the document for the read (Bad → Good)
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
// BAD: comments embedded in the post — array grows without bound toward 16 MB,
|
|
131
|
+
// every post read drags the entire comment history, money is a float.
|
|
132
|
+
db.posts.insertOne({
|
|
133
|
+
_id: ObjectId(),
|
|
134
|
+
title: "Indexing 101",
|
|
135
|
+
authorId: ObjectId(),
|
|
136
|
+
price: 9.99, // double — drifts in arithmetic
|
|
137
|
+
comments: [ /* ...unbounded... */ ] // chases the 16 MB cap
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
// GOOD: post stays small; comments referenced; money is Decimal128;
|
|
141
|
+
// the few fields the feed needs are duplicated (extended reference).
|
|
142
|
+
db.posts.insertOne({
|
|
143
|
+
_id: ObjectId(),
|
|
144
|
+
title: "Indexing 101",
|
|
145
|
+
author: { _id: ObjectId(), name: "Ada" }, // extended ref: name shown without a $lookup
|
|
146
|
+
price: NumberDecimal("9.99"),
|
|
147
|
+
commentCount: 0, // computed rollup, bumped on write
|
|
148
|
+
createdAt: new Date()
|
|
149
|
+
})
|
|
150
|
+
db.comments.insertOne({ _id: ObjectId(), postId: ObjectId(), body: "…", createdAt: new Date() })
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Compound index in ESR order + the query that uses it
|
|
154
|
+
|
|
155
|
+
```javascript
|
|
156
|
+
// Feed query: filter by author (equality), sort by date (sort), bound by a date (range).
|
|
157
|
+
// ESR => author first, then the sort/range key.
|
|
158
|
+
db.posts.createIndex({ "author._id": 1, createdAt: -1 })
|
|
159
|
+
|
|
160
|
+
db.posts.find({ "author._id": authorId, createdAt: { $gte: since } })
|
|
161
|
+
.sort({ createdAt: -1 })
|
|
162
|
+
.limit(20)
|
|
163
|
+
// Confirm the plan: IXSCAN on the index above, no in-memory SORT stage.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Partial + TTL indexes
|
|
167
|
+
|
|
168
|
+
```javascript
|
|
169
|
+
// Partial: index only the rows you actually query (active orders), not the archive.
|
|
170
|
+
db.orders.createIndex(
|
|
171
|
+
{ customerId: 1, createdAt: -1 },
|
|
172
|
+
{ partialFilterExpression: { status: "active" } }
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
// TTL: expire sessions 30 minutes after lastSeen. Field MUST be a Date.
|
|
176
|
+
db.sessions.createIndex({ lastSeen: 1 }, { expireAfterSeconds: 1800 })
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Aggregation: `$match` first, `$lookup`, `$group` with `allowDiskUse`
|
|
180
|
+
|
|
181
|
+
```javascript
|
|
182
|
+
db.orders.aggregate([
|
|
183
|
+
// $match FIRST so it uses the compound index and shrinks the working set early.
|
|
184
|
+
{ $match: { status: "paid", createdAt: { $gte: since } } },
|
|
185
|
+
{ $sort: { createdAt: -1 } }, // index-eligible here, before any $group/$project
|
|
186
|
+
{ $lookup: {
|
|
187
|
+
from: "customers",
|
|
188
|
+
localField: "customerId",
|
|
189
|
+
foreignField: "_id",
|
|
190
|
+
as: "customer",
|
|
191
|
+
pipeline: [ { $project: { name: 1 } } ] // project inside $lookup: pull only what you need
|
|
192
|
+
}},
|
|
193
|
+
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } }
|
|
194
|
+
], { allowDiskUse: true }) // $group/$sort spill past 100 MB/stage; this lets large groups complete,
|
|
195
|
+
// it is NOT a substitute for a missing $match index — see anti-patterns.
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Read `explain("executionStats")` — the four numbers
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
db.posts.find({ "author._id": authorId }).sort({ createdAt: -1 })
|
|
202
|
+
.explain("executionStats")
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Read these before declaring a fix:
|
|
206
|
+
|
|
207
|
+
1. **`winningPlan.stage`** — must be `IXSCAN` (or `FETCH`→`IXSCAN`), not `COLLSCAN`.
|
|
208
|
+
2. **`totalKeysExamined` vs `nReturned`** — close means the index is selective; a huge ratio means
|
|
209
|
+
the index scans far more than it returns (wrong key order, low selectivity).
|
|
210
|
+
3. **A `SORT` stage** — an in-memory sort the index should have satisfied; reorder by ESR to remove it.
|
|
211
|
+
4. **`rejectedPlans`** — what the planner considered and dropped; a near-miss hints at a better index.
|
|
212
|
+
|
|
213
|
+
### Multi-document transaction with full retry
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
// Use withTransaction — it retries the body on TransientTransactionError and retries the
|
|
217
|
+
// commit on UnknownTransactionCommitResult for you. Requires a replica set / sharded cluster.
|
|
218
|
+
const session = db.getMongo().startSession();
|
|
219
|
+
try {
|
|
220
|
+
session.withTransaction(() => {
|
|
221
|
+
const orders = session.getDatabase("shop").orders;
|
|
222
|
+
const ledger = session.getDatabase("shop").ledger;
|
|
223
|
+
orders.updateOne({ _id: orderId, status: "pending" }, { $set: { status: "paid" } }, { session });
|
|
224
|
+
ledger.insertOne({ orderId, amount: NumberDecimal("9.99"), at: new Date() }, { session });
|
|
225
|
+
}, { readConcern: { level: "snapshot" }, writeConcern: { w: "majority" } });
|
|
226
|
+
} finally {
|
|
227
|
+
session.endSession();
|
|
228
|
+
}
|
|
229
|
+
// If both writes target ONE document, drop the transaction — that write is already atomic.
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### `bulkWrite` upsert
|
|
233
|
+
|
|
234
|
+
```javascript
|
|
235
|
+
db.inventory.bulkWrite([
|
|
236
|
+
{ updateOne: {
|
|
237
|
+
filter: { sku: "ABC-1" },
|
|
238
|
+
update: { $inc: { qty: 5 }, $setOnInsert: { createdAt: new Date() } },
|
|
239
|
+
upsert: true
|
|
240
|
+
}}
|
|
241
|
+
], { ordered: false }) // ordered:false keeps going past one failed op and parallelizes
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Change stream (resumable tail)
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
// Watch only the events you care about; persist resumeToken to restart without gaps.
|
|
248
|
+
const cs = db.orders.watch([{ $match: { operationType: { $in: ["insert", "update"] } } }]);
|
|
249
|
+
while (cs.hasNext()) { const change = cs.next(); /* process; save change._id as resume token */ }
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
More variants (`$facet`, window functions, `$merge`/`$out`, vector search) live in the references.
|
|
253
|
+
|
|
254
|
+
## Anti-patterns / rationalizations → STOP
|
|
255
|
+
|
|
256
|
+
| Rationalization | Reality → STOP |
|
|
257
|
+
| --- | --- |
|
|
258
|
+
| "Embed all the comments, it's one read" | Array grows unbounded toward 16 MB and bloats every post read. Reference or bucket. |
|
|
259
|
+
| "`$lookup` is just a JOIN, use it everywhere" | Mongo is not relational; per-document `$lookup` is expensive. Prefer modeling (extended reference) so the read needs no join. |
|
|
260
|
+
| "Wrap this single-document update in a transaction to be safe" | A single-doc write is already atomic. The transaction adds latency and a replica-set requirement for zero gain. |
|
|
261
|
+
| "`COLLSCAN` is fine, it's fast on my 100 docs" | It is O(n); at 4M docs it is a full table read. Add the index now and prove `IXSCAN`. |
|
|
262
|
+
| "Set `allowDiskUse:true` and the slow pipeline is fixed" | That masks a missing `$match` index by spilling to disk. Fix stage order / add the index first. |
|
|
263
|
+
| "Store the price as a number, round on display" | JS doubles drift across `$sum`/`$inc`. Use `NumberDecimal` (`Decimal128`). |
|
|
264
|
+
| "Group the whole collection, no `$match`" | A blocking `$group` over everything blows the 100 MB/stage limit. `$match` first to shrink it. |
|
|
265
|
+
| "One collection for users, orders, logs — fewer to manage" | Mixed shapes kill index selectivity and balloon working set. Split by access pattern. |
|
|
266
|
+
| "`$where` lets me run a quick JS predicate" | Runs JS per document, no index, a server-side injection surface. Use query operators / `$expr`. |
|
|
267
|
+
| "Index every field just in case" | Each index is a write tax and RAM cost; unused indexes return nothing. Index for real query shapes only. |
|
|
268
|
+
|
|
269
|
+
## Quick reference
|
|
270
|
+
|
|
271
|
+
### Read/write concern matrix
|
|
272
|
+
|
|
273
|
+
| Need | Write concern | Read concern | Note |
|
|
274
|
+
| --- | --- | --- | --- |
|
|
275
|
+
| Money / state transition | `w:"majority"` | `"majority"` | survives a primary failover |
|
|
276
|
+
| Read your own durable write | `w:"majority"` | `"majority"` (+ causal session) | no rollback window |
|
|
277
|
+
| Transaction default | `w:"majority"` | `"snapshot"` | consistent point-in-time |
|
|
278
|
+
| Logs / fire-and-forget | `w:1` | `"local"` | fast, may be rolled back |
|
|
279
|
+
|
|
280
|
+
### Atlas tier chooser
|
|
281
|
+
|
|
282
|
+
| Tier | Use it for | Limits |
|
|
283
|
+
| --- | --- | --- |
|
|
284
|
+
| **M0** | learning, tiny prototypes | free forever, up to 5 GB, shared, no SLA |
|
|
285
|
+
| **Flex** (GA Feb 2025) | small prod / variable load | $8 base capped at $30/mo, 100 ops/sec (burst 500), 5 GB; supports Atlas Search, Vector Search, Change Streams, Triggers |
|
|
286
|
+
| **M10+** (dedicated) | production, isolation, scale-up | from ~$0.08/hr (~$57/mo); dedicated resources, full features |
|
|
287
|
+
|
|
288
|
+
M0 does **not** run Vector Search well for real workloads — move to Flex or dedicated. Legacy
|
|
289
|
+
Serverless / M2 / M5 were auto-migrated to Flex.
|
|
290
|
+
|
|
291
|
+
### Aggregation memory
|
|
292
|
+
|
|
293
|
+
Each blocking stage (`$group`, `$sort` without an index, `$bucket`) is capped at **100 MB**. Past it
|
|
294
|
+
the stage errors unless `allowDiskUse:true` lets it spill. Spilling is a correctness fallback for
|
|
295
|
+
genuinely large groups, not a performance fix for a missing index.
|
|
296
|
+
|
|
297
|
+
## Verify
|
|
298
|
+
|
|
299
|
+
Run `scripts/verify.sh` from your project root. It is read-only, never connects to a database, and
|
|
300
|
+
never writes. It scans discovered `.js`/`.mongodb.js` files and flags foot-guns: a committed
|
|
301
|
+
plaintext `mongodb://user:pass@` credential (the **only** hard failure), `createIndex` calls with no
|
|
302
|
+
options, redundant compound-index prefixes, `$where` predicates, unbounded `$lookup`,
|
|
303
|
+
`allowDiskUse:true` that may be masking a missing index, and money stored as a JS number in seed
|
|
304
|
+
scripts. If `node` is present it runs `node --check` for a syntax pass; otherwise that step is
|
|
305
|
+
`[skip]`. Everything except a committed credential is advisory `[warn]`/`[skip]`. It runs on stock
|
|
306
|
+
macOS bash 3.2 and exits 0 on a clean or empty target.
|
|
307
|
+
|
|
308
|
+
## Project grounding (02-DOCS + CLAUDE.md)
|
|
309
|
+
|
|
310
|
+
When this skill runs in a project with a `02-DOCS/` layer (the [`harness`](../harness/SKILL.md)
|
|
311
|
+
Karpathy wiki), record this project's MongoDB decisions there and index them from the root
|
|
312
|
+
`CLAUDE.md`, so the next agent inherits the conventions instead of re-deriving them.
|
|
313
|
+
|
|
314
|
+
1. **Find the article** `02-DOCS/wiki/stack/mongodb.md`, indexed in `02-DOCS/wiki/index.md` (the
|
|
315
|
+
Knowledge map index; root `CLAUDE.md` points to it).
|
|
316
|
+
2. **If missing or stale**, create/update it with the project's real choices — collection layout and
|
|
317
|
+
embed/reference decisions, the index set and its ESR rationale, read/write concern policy, the
|
|
318
|
+
Atlas tier, and any encryption/RBAC setup — then index it in `02-DOCS/wiki/index.md` (the
|
|
319
|
+
Knowledge map; root `CLAUDE.md` keeps only a short pointer to it).
|
|
320
|
+
3. **Read it first on every use** and stay consistent; when a convention changes, update the article
|
|
321
|
+
(bump its `Updated` date) in the same change.
|
|
322
|
+
|
|
323
|
+
No `02-DOCS/` layer? Skip silently (optionally suggest `harness`). Technical conventions are
|
|
324
|
+
*recorded, not gated* — never block the task on this.
|
|
325
|
+
|
|
326
|
+
## See Also
|
|
327
|
+
|
|
328
|
+
- [references/data-modeling.md](references/data-modeling.md) — embed/reference tree, the six
|
|
329
|
+
patterns with worked documents, 16 MB math, polymorphic & schema versioning.
|
|
330
|
+
- [references/aggregation.md](references/aggregation.md) — per-stage index eligibility, `$lookup`
|
|
331
|
+
variants, `$facet`, window functions, `$merge`/`$out`, hybrid `$scoreFusion`, reading pipeline
|
|
332
|
+
`explain`.
|
|
333
|
+
- [references/transactions-and-ops.md](references/transactions-and-ops.md) — retry wrappers, concern
|
|
334
|
+
semantics, replica-set requirement, Atlas tiers, Search/Vector Search, Queryable Encryption, RBAC,
|
|
335
|
+
pooling, change streams.
|
|
336
|
+
- Sibling skills: [`harness`](../harness/SKILL.md) (scaffolds the `01-TOOLS/MONGODB` operational
|
|
337
|
+
tool) and [`secure-coding`](../secure-coding/SKILL.md) (auth, encryption, least-privilege).
|
|
338
|
+
- For relational work — SQL, foreign keys, `EXPLAIN ANALYZE`, MVCC — use
|
|
339
|
+
[`postgresdb`](../postgresdb/SKILL.md), not this skill. Different engine and planner.
|
|
340
|
+
- Out of scope here — external tools with their own docs: ODM/driver API surface (Mongoose hooks,
|
|
341
|
+
the Node driver's `bulkWrite`/`updateMany` return shapes) and cross-engine vector-store selection.
|
|
342
|
+
This skill owns the server query and the index the server picks.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Eval harness — `mongodb`
|
|
2
|
+
|
|
3
|
+
These cases check two things: **triggering** (does the skill fire on real MongoDB problems and stay
|
|
4
|
+
quiet on near-misses?) and **capability** (does loading it measurably improve the answer?). Cases
|
|
5
|
+
live in `cases.yaml` and are **LLM-graded against the rubric — no live MongoDB is needed**; run them
|
|
6
|
+
through the repo's agent eval harness, not a shell script.
|
|
7
|
+
|
|
8
|
+
## Triggering
|
|
9
|
+
|
|
10
|
+
For each prompt, start a fresh agent session with only the `mongodb` skill discoverable (its
|
|
11
|
+
`SKILL.md` description in scope, no siblings loaded), paste the prompt verbatim, and run 3–5 trials
|
|
12
|
+
(the trigger decision is stochastic):
|
|
13
|
+
|
|
14
|
+
- `should_trigger`: PASS if the skill fires in the majority of trials. Several prompts deliberately
|
|
15
|
+
avoid the words "index" / "MongoDB" (the COLLSCAN complaint, the Spanish modeling request) to test
|
|
16
|
+
intent recognition over keyword matching.
|
|
17
|
+
- `should_not_trigger`: PASS if the skill does **not** fire. Each names a `route_to` sibling
|
|
18
|
+
(`postgresdb`, `nodejs`, `secure-coding`, `redis`, `vector-db`); a wrong-but-not-`mongodb` route
|
|
19
|
+
still passes this skill's gate.
|
|
20
|
+
|
|
21
|
+
Pass bar: ≥ 90% trigger accuracy across all trigger cases.
|
|
22
|
+
|
|
23
|
+
## Capability
|
|
24
|
+
|
|
25
|
+
Run the `capability` scenario twice — once WITHOUT the skill (clean agent) and once WITH it — and
|
|
26
|
+
grade each transcript against the `must_include` checklist, one point per bullet that is correctly
|
|
27
|
+
and specifically covered (not merely name-dropped). Pass bar: WITH the skill covers ≥ 80% of bullets
|
|
28
|
+
and clearly beats WITHOUT (target ≥ +30 points). Record trial counts and per-bullet verdicts so a
|
|
29
|
+
reviewer can audit; don't report a bare pass/fail.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
skill: mongodb
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "This find() takes forever and the logs say it's scanning the whole collection — 4 million docs. How do I make it fast?"
|
|
5
|
+
why: "A full collection scan (COLLSCAN) on a large collection is core scope; the skill owns reading explain and choosing the index, even though the user never says 'index' or 'COLLSCAN'."
|
|
6
|
+
- prompt: "Should I put the comments inside the post document or keep them in their own collection?"
|
|
7
|
+
why: "Embed vs reference is a named modeling decision with an explicit rule and the 16 MB rationale."
|
|
8
|
+
- prompt: "My aggregation with a $lookup and a $group is slow and sometimes errors out on memory. What's wrong?"
|
|
9
|
+
why: "Pipeline stage order, $lookup cost, and the 100 MB blocking-stage limit / allowDiskUse are all in scope."
|
|
10
|
+
- prompt: "My multi-document transaction keeps throwing TransientTransactionError and I don't know how to handle it."
|
|
11
|
+
why: "Non-obvious: the fix is the mandatory retry-on-the-transient-label (withTransaction), a core transactions topic the user wouldn't phrase as 'retry'."
|
|
12
|
+
- prompt: "Necesito modelar una colección de pedidos con muchísimos items que crece sin límite, cómo lo hago?"
|
|
13
|
+
why: "Spanish; unbounded array growth → reference or bucket pattern, a named modeling case."
|
|
14
|
+
- prompt: "Which Atlas tier do I actually need to run Vector Search — is the free M0 enough?"
|
|
15
|
+
why: "Non-obvious tier boundary: M0 won't run Vector Search for real workloads; Atlas tier choice + Vector Search are explicitly in scope."
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Design a normalized Postgres schema with foreign keys and help me read this EXPLAIN ANALYZE output."
|
|
19
|
+
route_to: "postgresdb"
|
|
20
|
+
why: "Relational engine, SQL, and EXPLAIN ANALYZE — a different planner and concurrency model; the named boundary sibling."
|
|
21
|
+
- prompt: "My Mongoose pre-save hook isn't firing and I don't understand what updateMany returns."
|
|
22
|
+
route_to: "nodejs"
|
|
23
|
+
why: "ODM/driver API ergonomics, not engine behavior; nearest catalog skill is the JS runtime, the ODM's own docs own this."
|
|
24
|
+
- prompt: "Audit my repo for hardcoded credentials and unsafe authentication patterns."
|
|
25
|
+
route_to: "secure-coding"
|
|
26
|
+
why: "A security audit of the codebase, not MongoDB modeling/indexing; secure-coding owns app-layer security review."
|
|
27
|
+
- prompt: "Set up a Redis cache in front of my read queries to cut database load."
|
|
28
|
+
route_to: "redis"
|
|
29
|
+
why: "App-layer caching with a different store; explicitly out of scope for this engine skill."
|
|
30
|
+
- prompt: "Help me choose between Pinecone and Weaviate for our vector store."
|
|
31
|
+
route_to: "vector-db"
|
|
32
|
+
why: "Cross-engine vector-DB selection is out of scope; Atlas Vector Search inside Mongo would be in scope, but choosing between external products is not."
|
|
33
|
+
|
|
34
|
+
capability:
|
|
35
|
+
- scenario: "A posts/comments app where the number of comments per post is unbounded, and a feed query filters by author and sorts by date. The user asks how to model the collections and which index to add."
|
|
36
|
+
must_include:
|
|
37
|
+
- "Chooses to reference comments in a separate collection (not an unbounded embedded array), citing the 16 MB document cap — or proposes a bucket pattern for the comment stream"
|
|
38
|
+
- "Designs a compound index ordered by ESR: author equality first, then createdAt as the sort key (e.g. { 'author._id': 1, createdAt: -1 })"
|
|
39
|
+
- "Shows explain('executionStats') and reads it: confirms IXSCAN (not COLLSCAN) and totalKeysExamined close to nReturned, with no in-memory SORT stage"
|
|
40
|
+
- "States that inserting a single comment or post is already atomic, so no multi-document transaction is needed for it"
|
|
41
|
+
- "Uses mongosh syntax (createIndex/find/explain), money as Decimal128 if money appears, not relational/SQL framing"
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Aggregation pipelines (MongoDB 8.2)
|
|
2
|
+
|
|
3
|
+
A pipeline is stages run in order; the order decides whether an index is used and whether a stage
|
|
4
|
+
blows the memory limit. The single most important rule: **put `$match` and `$sort` as early as
|
|
5
|
+
possible**, because once a `$group`, `$project`, `$unwind`, or `$lookup` has reshaped the stream, the
|
|
6
|
+
original index no longer applies.
|
|
7
|
+
|
|
8
|
+
## Per-stage index eligibility
|
|
9
|
+
|
|
10
|
+
| Stage | Uses an index? | Notes |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| `$match` (first stage) | yes | behaves like a `find` filter; ESR rules apply |
|
|
13
|
+
| `$sort` (before any reshape) | yes, if a compound index covers filter+sort | after `$group`/`$project` it is an in-memory SORT |
|
|
14
|
+
| `$match` after `$group`/`$project` | no | runs on computed/in-memory docs |
|
|
15
|
+
| `$lookup` | uses the *foreign* collection's index on `foreignField` | index the join target |
|
|
16
|
+
| `$group` | no (blocking) | 100 MB/stage; `allowDiskUse` to spill |
|
|
17
|
+
| `$unwind` | no | can multiply document count — `$match` before it |
|
|
18
|
+
| `$limit` / `$skip` | benefits from a preceding indexed `$sort` | push `$limit` up where correctness allows |
|
|
19
|
+
|
|
20
|
+
## `$lookup` variants
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
// Simple equality join — index customers._id (it is the _id, already indexed).
|
|
24
|
+
{ $lookup: { from: "customers", localField: "customerId", foreignField: "_id", as: "customer" } }
|
|
25
|
+
|
|
26
|
+
// Subpipeline join — project/filter the foreign side so you pull only what you display.
|
|
27
|
+
{ $lookup: {
|
|
28
|
+
from: "customers",
|
|
29
|
+
let: { cid: "$customerId" },
|
|
30
|
+
pipeline: [
|
|
31
|
+
{ $match: { $expr: { $eq: ["$_id", "$$cid"] } } },
|
|
32
|
+
{ $project: { name: 1, tier: 1 } }
|
|
33
|
+
],
|
|
34
|
+
as: "customer"
|
|
35
|
+
}}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`$lookup` runs the foreign lookup per input document — it is not a hash join. If you do it on every
|
|
39
|
+
read, model it away with the **extended reference** pattern (see data-modeling) instead.
|
|
40
|
+
|
|
41
|
+
## `$facet` — multiple aggregations in one pass
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
db.products.aggregate([
|
|
45
|
+
{ $match: { active: true } },
|
|
46
|
+
{ $facet: {
|
|
47
|
+
byCategory: [ { $group: { _id: "$category", n: { $sum: 1 } } } ],
|
|
48
|
+
priceStats: [ { $group: { _id: null, avg: { $avg: "$price" }, max: { $max: "$price" } } } ],
|
|
49
|
+
page: [ { $sort: { createdAt: -1 } }, { $limit: 20 } ]
|
|
50
|
+
}}
|
|
51
|
+
])
|
|
52
|
+
// Note: the input to a $facet is materialized; the per-facet sub-pipelines do NOT use indexes.
|
|
53
|
+
// Keep the upstream $match selective so the materialized set is small.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Window functions (`$setWindowFields`)
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
// Running total of amount per customer, ordered by date — no self-join.
|
|
60
|
+
db.orders.aggregate([
|
|
61
|
+
{ $setWindowFields: {
|
|
62
|
+
partitionBy: "$customerId",
|
|
63
|
+
sortBy: { createdAt: 1 },
|
|
64
|
+
output: { runningTotal: { $sum: "$amount", window: { documents: ["unbounded", "current"] } } }
|
|
65
|
+
}}
|
|
66
|
+
])
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## `$merge` / `$out` — materialized output
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
// $merge: upsert results into a target collection (incremental rollups, materialized views).
|
|
73
|
+
{ $merge: { into: "daily_rollup", on: "_id", whenMatched: "merge", whenNotMatched: "insert" } }
|
|
74
|
+
|
|
75
|
+
// $out: replace the target collection wholesale. Destructive — overwrites. Prefer $merge for
|
|
76
|
+
// incremental jobs; reach for $out only for a full rebuild.
|
|
77
|
+
{ $out: "report_snapshot" }
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Hybrid search (8.2)
|
|
81
|
+
|
|
82
|
+
MongoDB 8.2 adds the `$scoreFusion` stage, which combines the ranked results of multiple subqueries
|
|
83
|
+
(for example an Atlas Search full-text query and a Vector Search semantic query) into one fused
|
|
84
|
+
ranking — the building block for hybrid search without doing the score blending in application code.
|
|
85
|
+
Pair it with a `$vectorSearch`/`$search` stage per input ranking. (Atlas/Search-index setup lives in
|
|
86
|
+
transactions-and-ops.)
|
|
87
|
+
|
|
88
|
+
## Memory limit and `allowDiskUse`
|
|
89
|
+
|
|
90
|
+
Each blocking stage (`$group`, `$sort` without a supporting index, `$bucket`,
|
|
91
|
+
`$setWindowFields`) is capped at **100 MB**. Past it the stage errors unless you pass
|
|
92
|
+
`allowDiskUse: true`, which lets it spill to temporary files on disk.
|
|
93
|
+
|
|
94
|
+
Spilling is the right tool for a genuinely large aggregation (an analytics rollup over the whole
|
|
95
|
+
collection). It is the **wrong** tool to "fix" a slow pipeline whose real problem is a `$match` that
|
|
96
|
+
isn't using an index — that just makes the unindexed scan spill instead of fixing it. Always check
|
|
97
|
+
the explain first.
|
|
98
|
+
|
|
99
|
+
## Reading a pipeline's explain
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
db.orders.explain("executionStats").aggregate([
|
|
103
|
+
{ $match: { status: "paid", createdAt: { $gte: since } } },
|
|
104
|
+
{ $sort: { createdAt: -1 } },
|
|
105
|
+
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } }
|
|
106
|
+
])
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Look for:
|
|
110
|
+
|
|
111
|
+
- The first stage shows `IXSCAN`, not `COLLSCAN` — the leading `$match` used an index.
|
|
112
|
+
- No surprise in-memory `SORT` stage where a compound index (ESR) should have served the order.
|
|
113
|
+
- `totalDocsExamined` close to the count the `$match` should return — a big gap means the index
|
|
114
|
+
isn't selective enough or the wrong one was chosen.
|
|
115
|
+
- For `$lookup`, the sub-explain shows an `IXSCAN` on the foreign `foreignField`.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Data modeling (MongoDB 8.2)
|
|
2
|
+
|
|
3
|
+
The rule that overrides every other: **model for the queries you run, not the shape of your data.**
|
|
4
|
+
A document should make your common read a single, index-eligible fetch. Everything below is a tool
|
|
5
|
+
for getting there.
|
|
6
|
+
|
|
7
|
+
## The embed-vs-reference decision tree
|
|
8
|
+
|
|
9
|
+
Walk it top to bottom; the first match wins.
|
|
10
|
+
|
|
11
|
+
1. **Is the child read together with the parent, almost always?** No → reference.
|
|
12
|
+
2. **Is the child set bounded and small (will it stay under a few dozen, forever)?** No → reference.
|
|
13
|
+
3. **Is the child shared across multiple parents, or independently/frequently mutated?** Yes →
|
|
14
|
+
reference (embedding would duplicate and drift, or rewrite a big parent per child edit).
|
|
15
|
+
4. **Could the embedded array ever push the document toward 16 MB?** Yes → reference or bucket.
|
|
16
|
+
5. **Otherwise → embed.** One read, atomic update, no `$lookup`.
|
|
17
|
+
|
|
18
|
+
The 16 MB cap is the hard backstop. There is no overflow storage; a write that would exceed it
|
|
19
|
+
fails. So any one-to-many whose "many" is unbounded (comments, events, line items on a long-lived
|
|
20
|
+
cart) is referenced or bucketed, never embedded as a growing array.
|
|
21
|
+
|
|
22
|
+
### 16 MB math (sanity-check before you embed)
|
|
23
|
+
|
|
24
|
+
Estimate average child size × expected count, with headroom. A 300-byte comment subdocument hits
|
|
25
|
+
16 MB at roughly 52,000 comments — but you are in trouble long before that, because every read of the
|
|
26
|
+
parent deserializes the whole array. Treat a few hundred unbounded children as the practical ceiling
|
|
27
|
+
for embedding, and reference past it.
|
|
28
|
+
|
|
29
|
+
## The six patterns, with worked Bad → Good
|
|
30
|
+
|
|
31
|
+
### 1. Subset
|
|
32
|
+
|
|
33
|
+
Embed only the hot fields the common view needs; reference the cold rest.
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
// BAD: product carries its full 200-review history; the catalog card read drags all of it.
|
|
37
|
+
db.products.insertOne({ _id: ObjectId(), name: "Lamp", reviews: [ /* 200 full reviews */ ] })
|
|
38
|
+
|
|
39
|
+
// GOOD: embed the 3 most-recent reviews for the card; full set lives in its own collection.
|
|
40
|
+
db.products.insertOne({
|
|
41
|
+
_id: ObjectId(), name: "Lamp",
|
|
42
|
+
recentReviews: [ { author: "Ada", stars: 5, text: "…" } /* top 3 only */ ],
|
|
43
|
+
reviewCount: 200
|
|
44
|
+
})
|
|
45
|
+
db.reviews.insertOne({ _id: ObjectId(), productId: ObjectId(), author: "Ada", stars: 5, text: "…" })
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. Extended reference
|
|
49
|
+
|
|
50
|
+
Copy the few joined fields you display so the read needs no `$lookup`.
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
// BAD: every order render does a $lookup into customers just to show a name.
|
|
54
|
+
db.orders.insertOne({ _id: ObjectId(), customerId: ObjectId(), amount: NumberDecimal("9.99") })
|
|
55
|
+
|
|
56
|
+
// GOOD: duplicate the small, slow-changing fields you actually display.
|
|
57
|
+
db.orders.insertOne({
|
|
58
|
+
_id: ObjectId(),
|
|
59
|
+
customer: { _id: ObjectId(), name: "Ada", tier: "gold" }, // the display fields, copied
|
|
60
|
+
amount: NumberDecimal("9.99")
|
|
61
|
+
})
|
|
62
|
+
// Trade-off: when the source name changes, refresh the copies (a background job or change stream).
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Bucket
|
|
66
|
+
|
|
67
|
+
Group N time-ordered events per document instead of one document per event — fewer documents,
|
|
68
|
+
smaller indexes, and the array stays bounded by the bucket size.
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// BAD: one document per sensor reading — millions of tiny docs, huge index.
|
|
72
|
+
db.readings.insertOne({ sensorId: ObjectId(), ts: new Date(), value: 21.4 })
|
|
73
|
+
|
|
74
|
+
// GOOD: one bucket per sensor per hour, capped at N readings; roll to a new bucket past the cap.
|
|
75
|
+
db.readings.updateOne(
|
|
76
|
+
{ sensorId: ObjectId(), hour: ISODate("2026-06-02T10:00:00Z"), count: { $lt: 200 } },
|
|
77
|
+
{ $push: { samples: { ts: new Date(), value: 21.4 } }, $inc: { count: 1 } },
|
|
78
|
+
{ upsert: true }
|
|
79
|
+
)
|
|
80
|
+
// For pure metrics, also consider a native time-series collection (timeField/metaField).
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 4. Computed
|
|
84
|
+
|
|
85
|
+
Store the rollup; update it on write rather than recomputing on every read.
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
// GOOD: keep commentCount on the post; bump it when a comment is inserted.
|
|
89
|
+
db.posts.updateOne({ _id: postId }, { $inc: { commentCount: 1 } })
|
|
90
|
+
// Read is O(1); you trade a tiny write cost for avoiding a count aggregation per page load.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 5. Outlier
|
|
94
|
+
|
|
95
|
+
When ~1% of documents break the shape (a celebrity with millions of followers), flag them and
|
|
96
|
+
overflow into linked documents so the common case stays small.
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
db.users.insertOne({
|
|
100
|
+
_id: ObjectId(), name: "Ada",
|
|
101
|
+
followerIds: [ /* up to N */ ],
|
|
102
|
+
hasExtras: false // flip to true and spill into a followers_overflow collection past N
|
|
103
|
+
})
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 6. Polymorphic
|
|
107
|
+
|
|
108
|
+
One collection holding several entity shapes, distinguished by a `type` field, sharing an `_id`
|
|
109
|
+
space and the indexes they have in common.
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
db.assets.insertMany([
|
|
113
|
+
{ _id: ObjectId(), type: "image", url: "…", width: 800, height: 600 },
|
|
114
|
+
{ _id: ObjectId(), type: "video", url: "…", durationSec: 42 }
|
|
115
|
+
])
|
|
116
|
+
// Index the shared fields (type, createdAt); query with the discriminator in the filter.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Schema versioning
|
|
120
|
+
|
|
121
|
+
Documents in one collection can have different shapes over time. Stamp a `schemaVersion` and migrate
|
|
122
|
+
lazily on read/write — no big-bang migration, no downtime.
|
|
123
|
+
|
|
124
|
+
```javascript
|
|
125
|
+
db.users.insertOne({ _id: ObjectId(), schemaVersion: 2, name: "Ada", emails: ["ada@x.io"] })
|
|
126
|
+
// App reads: if doc.schemaVersion < 2, upconvert in code (and optionally write the upgraded shape back).
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## `_id` discipline
|
|
130
|
+
|
|
131
|
+
- Default `ObjectId` is fine: 12 bytes, roughly time-ordered, generated client- or server-side.
|
|
132
|
+
- A natural unique key (a slug, an external id) is a valid `_id` — but it is immutable, so only use
|
|
133
|
+
one that never changes.
|
|
134
|
+
- Don't add a second unique field as your "real" key and ignore `_id`; make the meaningful key the
|
|
135
|
+
`_id` or give it its own unique index.
|