rsc-universal 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +279 -0
- package/manifest.json +4761 -0
- package/package.json +59 -0
- package/schema/frontmatter.schema.json +12 -0
- package/scripts/build-manifest.js +72 -0
- package/scripts/consult.js +106 -0
- package/scripts/detect-repo.js +118 -0
- package/scripts/doctor.js +21 -0
- package/scripts/eval-lint.sh +179 -0
- package/scripts/install-apply.js +52 -0
- package/scripts/install-plan.js +13 -0
- package/scripts/lib/behavior-score.js +103 -0
- package/scripts/lib/frontmatter.js +47 -0
- package/scripts/lib/harden-policy.js +41 -0
- package/scripts/lib/manifest.js +18 -0
- package/scripts/lib/recommend.js +36 -0
- package/scripts/lib/registry.js +110 -0
- package/scripts/lib/result-envelope.js +35 -0
- package/scripts/lib/state.js +12 -0
- package/scripts/lib/ui.js +17 -0
- package/scripts/reviewer-guard.sh +67 -0
- package/scripts/rsc.js +108 -0
- package/scripts/skill-behavior-eval.js +33 -0
- package/scripts/skill-behavior-eval.workflow.js +136 -0
- package/scripts/skill-behavior-rubric.md +63 -0
- package/scripts/skill-harden-rubric.md +40 -0
- package/scripts/skill-harden.workflow.js +161 -0
- package/scripts/skill-rubric.md +39 -0
- package/scripts/skill-scoreboard.workflow.js +35 -0
- package/skills/ab-testing/SKILL.md +191 -0
- package/skills/ab-testing/evals/README.md +8 -0
- package/skills/ab-testing/evals/cases.yaml +49 -0
- package/skills/ab-testing/references/pitfalls.md +74 -0
- package/skills/ab-testing/references/sample-size-and-cuped.md +128 -0
- package/skills/ab-testing/scripts/verify.sh +89 -0
- package/skills/accessibility/SKILL.md +218 -0
- package/skills/accessibility/evals/README.md +3 -0
- package/skills/accessibility/evals/cases.yaml +47 -0
- package/skills/accessibility/references/aria-patterns.md +113 -0
- package/skills/accessibility/references/wcag22-checklist.md +83 -0
- package/skills/accessibility/scripts/verify.sh +103 -0
- package/skills/ads/SKILL.md +175 -0
- package/skills/ads/evals/README.md +15 -0
- package/skills/ads/evals/cases.yaml +58 -0
- package/skills/ads/references/platform-specs.md +73 -0
- package/skills/ads/references/roas-model.md +77 -0
- package/skills/ads/scripts/verify.sh +210 -0
- package/skills/agent-eval/SKILL.md +213 -0
- package/skills/agent-eval/evals/README.md +12 -0
- package/skills/agent-eval/evals/cases.yaml +45 -0
- package/skills/agent-eval/references/judge-design.md +118 -0
- package/skills/agent-eval/references/runner-and-gate.md +183 -0
- package/skills/agent-eval/scripts/verify.sh +161 -0
- package/skills/agent-safety/SKILL.md +176 -0
- package/skills/agent-safety/evals/README.md +12 -0
- package/skills/agent-safety/evals/cases.yaml +46 -0
- package/skills/agent-safety/references/threat-model.md +51 -0
- package/skills/ai-media/SKILL.md +196 -0
- package/skills/ai-media/evals/README.md +3 -0
- package/skills/ai-media/evals/cases.yaml +45 -0
- package/skills/ai-media/references/ffmpeg-assembly.md +117 -0
- package/skills/ai-media/references/models-and-params.md +78 -0
- package/skills/ai-media/scripts/verify.sh +103 -0
- package/skills/analytics/SKILL.md +219 -0
- package/skills/analytics/evals/README.md +9 -0
- package/skills/analytics/evals/cases.yaml +53 -0
- package/skills/analytics/references/event-taxonomy.md +75 -0
- package/skills/analytics/references/ga4-setup.md +122 -0
- package/skills/analytics/references/posthog-setup.md +100 -0
- package/skills/analytics/scripts/verify.sh +95 -0
- package/skills/analyze/SKILL.md +136 -0
- package/skills/analyze/evals/README.md +72 -0
- package/skills/analyze/evals/cases.yaml +74 -0
- package/skills/angular/SKILL.md +288 -0
- package/skills/angular/evals/README.md +3 -0
- package/skills/angular/evals/cases.yaml +38 -0
- package/skills/angular/references/migration.md +81 -0
- package/skills/angular/references/signals-rxjs.md +92 -0
- package/skills/angular/scripts/verify.sh +122 -0
- package/skills/api-connector-builder/SKILL.md +285 -0
- package/skills/api-connector-builder/evals/README.md +11 -0
- package/skills/api-connector-builder/evals/cases.yaml +47 -0
- package/skills/api-connector-builder/references/auth-flows.md +132 -0
- package/skills/api-connector-builder/references/pagination.md +144 -0
- package/skills/api-connector-builder/scripts/verify.sh +172 -0
- package/skills/api-design/SKILL.md +189 -0
- package/skills/api-design/evals/README.md +3 -0
- package/skills/api-design/evals/cases.yaml +45 -0
- package/skills/api-design/references/graphql-design.md +70 -0
- package/skills/api-design/references/openapi-contract.md +86 -0
- package/skills/api-design/references/rest-conventions.md +63 -0
- package/skills/api-design/references/versioning-and-evolution.md +49 -0
- package/skills/api-design/scripts/verify.sh +138 -0
- package/skills/article-writing/SKILL.md +175 -0
- package/skills/article-writing/evals/README.md +3 -0
- package/skills/article-writing/evals/cases.yaml +47 -0
- package/skills/article-writing/references/ai-tell-banlist.md +114 -0
- package/skills/article-writing/references/on-page-seo.md +133 -0
- package/skills/article-writing/scripts/verify.sh +165 -0
- package/skills/astro/SKILL.md +275 -0
- package/skills/astro/evals/README.md +3 -0
- package/skills/astro/evals/cases.yaml +41 -0
- package/skills/astro/references/content-layer.md +118 -0
- package/skills/astro/references/deploy-and-integrations.md +163 -0
- package/skills/astro/scripts/verify.sh +137 -0
- package/skills/author-skill/SKILL.md +206 -0
- package/skills/author-skill/evals/README.md +66 -0
- package/skills/author-skill/evals/cases.yaml +75 -0
- package/skills/author-skill/references/description-recipe.md +84 -0
- package/skills/author-skill/references/eval-authoring.md +74 -0
- package/skills/author-skill/references/rsc-conventions.md +91 -0
- package/skills/automation-flows/SKILL.md +132 -0
- package/skills/automation-flows/evals/README.md +5 -0
- package/skills/automation-flows/evals/cases.yaml +44 -0
- package/skills/automation-flows/references/error-handling.md +58 -0
- package/skills/automation-flows/references/n8n-workflow-json.md +63 -0
- package/skills/automation-flows/scripts/verify.sh +78 -0
- package/skills/aws-essentials/SKILL.md +223 -0
- package/skills/aws-essentials/evals/README.md +10 -0
- package/skills/aws-essentials/evals/cases.yaml +44 -0
- package/skills/aws-essentials/references/iam-least-privilege.md +134 -0
- package/skills/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
- package/skills/aws-essentials/scripts/verify.sh +99 -0
- package/skills/backups/SKILL.md +137 -0
- package/skills/backups/evals/README.md +3 -0
- package/skills/backups/evals/cases.yaml +42 -0
- package/skills/backups/references/engine-recipes.md +121 -0
- package/skills/backups/references/restore-runbook.md +65 -0
- package/skills/backups/scripts/verify.sh +80 -0
- package/skills/bash-scripting/SKILL.md +231 -0
- package/skills/bash-scripting/evals/README.md +3 -0
- package/skills/bash-scripting/evals/cases.yaml +45 -0
- package/skills/bash-scripting/references/portability.md +97 -0
- package/skills/bash-scripting/scripts/verify.sh +140 -0
- package/skills/bookkeeping/SKILL.md +184 -0
- package/skills/bookkeeping/evals/README.md +5 -0
- package/skills/bookkeeping/evals/cases.yaml +52 -0
- package/skills/bookkeeping/references/chart-of-accounts.md +87 -0
- package/skills/bookkeeping/references/reconciliation-playbook.md +54 -0
- package/skills/bookkeeping/references/tricky-transactions.md +192 -0
- package/skills/brand-identity/SKILL.md +161 -0
- package/skills/brand-identity/evals/README.md +14 -0
- package/skills/brand-identity/evals/cases.yaml +43 -0
- package/skills/brand-identity/references/color-and-tokens.md +129 -0
- package/skills/brand-identity/references/logo-and-assets.md +117 -0
- package/skills/brand-identity/scripts/verify.sh +224 -0
- package/skills/brand-voice/SKILL.md +183 -0
- package/skills/brand-voice/evals/README.md +3 -0
- package/skills/brand-voice/evals/cases.yaml +57 -0
- package/skills/brand-voice/references/voice-guide-template.md +150 -0
- package/skills/brand-voice/references/word-bank.md +61 -0
- package/skills/brand-voice/scripts/verify.sh +190 -0
- package/skills/building-agents/SKILL.md +469 -0
- package/skills/building-agents/evals/README.md +68 -0
- package/skills/building-agents/evals/cases.yaml +60 -0
- package/skills/building-agents/references/agent-loops-and-harness.md +371 -0
- package/skills/building-agents/references/evals-and-observability.md +420 -0
- package/skills/building-agents/references/mcp-servers.md +294 -0
- package/skills/building-agents/references/provider-abstraction.md +489 -0
- package/skills/building-agents/references/tools-and-rag.md +417 -0
- package/skills/building-agents/scripts/verify.sh +121 -0
- package/skills/business-intelligence/SKILL.md +176 -0
- package/skills/business-intelligence/evals/README.md +3 -0
- package/skills/business-intelligence/evals/cases.yaml +43 -0
- package/skills/business-intelligence/references/authoring-semantic-models.md +120 -0
- package/skills/business-intelligence/references/wiring-agents-and-apis.md +79 -0
- package/skills/business-intelligence/scripts/verify.sh +143 -0
- package/skills/calendar-scheduling/SKILL.md +196 -0
- package/skills/calendar-scheduling/evals/README.md +14 -0
- package/skills/calendar-scheduling/evals/cases.yaml +45 -0
- package/skills/calendar-scheduling/references/google-calendar-sync.md +78 -0
- package/skills/calendar-scheduling/references/provider-matrix.md +71 -0
- package/skills/calendar-scheduling/scripts/verify.sh +117 -0
- package/skills/case-studies/SKILL.md +147 -0
- package/skills/case-studies/evals/README.md +3 -0
- package/skills/case-studies/evals/cases.yaml +63 -0
- package/skills/case-studies/references/case-study-skeleton.md +90 -0
- package/skills/case-studies/references/consent-and-substantiation.md +80 -0
- package/skills/case-studies/scripts/verify.sh +161 -0
- package/skills/chatbot/SKILL.md +168 -0
- package/skills/chatbot/evals/README.md +13 -0
- package/skills/chatbot/evals/cases.yaml +43 -0
- package/skills/chatbot/references/handoff-and-sales.md +71 -0
- package/skills/chatbot/references/system-prompt-and-guardrails.md +78 -0
- package/skills/chatbot/scripts/verify.sh +162 -0
- package/skills/chrome-extension/SKILL.md +169 -0
- package/skills/chrome-extension/evals/README.md +12 -0
- package/skills/chrome-extension/evals/cases.yaml +40 -0
- package/skills/chrome-extension/references/store-and-migration.md +84 -0
- package/skills/chrome-extension/scripts/verify.sh +62 -0
- package/skills/clarify/SKILL.md +159 -0
- package/skills/clarify/evals/README.md +70 -0
- package/skills/clarify/evals/cases.yaml +71 -0
- package/skills/clickhouse-analytics/SKILL.md +165 -0
- package/skills/clickhouse-analytics/evals/README.md +3 -0
- package/skills/clickhouse-analytics/evals/cases.yaml +45 -0
- package/skills/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
- package/skills/clickhouse-analytics/references/query-optimization.md +76 -0
- package/skills/clickhouse-analytics/references/schema-and-engines.md +63 -0
- package/skills/clickhouse-analytics/scripts/verify.sh +109 -0
- package/skills/client-onboarding/SKILL.md +254 -0
- package/skills/client-onboarding/evals/README.md +14 -0
- package/skills/client-onboarding/evals/cases.yaml +40 -0
- package/skills/client-onboarding/references/onboarding-playbook.md +126 -0
- package/skills/cloudflare/SKILL.md +191 -0
- package/skills/cloudflare/evals/README.md +15 -0
- package/skills/cloudflare/evals/cases.yaml +46 -0
- package/skills/cloudflare/references/storage-primitives.md +104 -0
- package/skills/cloudflare/references/wrangler-config.md +91 -0
- package/skills/cloudflare/scripts/verify.sh +133 -0
- package/skills/code-review/SKILL.md +143 -0
- package/skills/code-review/evals/README.md +3 -0
- package/skills/code-review/evals/cases.yaml +55 -0
- package/skills/code-review/references/pr-workflow.md +67 -0
- package/skills/codebase-onboarding/SKILL.md +133 -0
- package/skills/codebase-onboarding/evals/README.md +3 -0
- package/skills/codebase-onboarding/evals/cases.yaml +69 -0
- package/skills/codebase-onboarding/references/recon-playbook.md +57 -0
- package/skills/codebase-onboarding/scripts/verify.sh +54 -0
- package/skills/cold-outreach/SKILL.md +206 -0
- package/skills/cold-outreach/evals/README.md +3 -0
- package/skills/cold-outreach/evals/cases.yaml +60 -0
- package/skills/cold-outreach/references/compliance-footer.md +50 -0
- package/skills/cold-outreach/references/hook-derivation.md +73 -0
- package/skills/cold-outreach/references/templates.md +88 -0
- package/skills/cold-outreach/scripts/verify.sh +170 -0
- package/skills/community/SKILL.md +225 -0
- package/skills/community/evals/README.md +3 -0
- package/skills/community/evals/cases.yaml +40 -0
- package/skills/community/references/metrics-and-rituals.md +58 -0
- package/skills/community/references/platform-playbooks.md +64 -0
- package/skills/community/scripts/verify.sh +83 -0
- package/skills/competitor-watch/SKILL.md +193 -0
- package/skills/competitor-watch/evals/README.md +19 -0
- package/skills/competitor-watch/evals/cases.yaml +54 -0
- package/skills/competitor-watch/references/monitoring-config.md +124 -0
- package/skills/competitor-watch/references/tracker-schema.md +79 -0
- package/skills/competitor-watch/scripts/verify.sh +253 -0
- package/skills/compliance/SKILL.md +184 -0
- package/skills/compliance/evals/README.md +14 -0
- package/skills/compliance/evals/cases.yaml +46 -0
- package/skills/compliance/references/frameworks.md +108 -0
- package/skills/compliance/references/operating-rhythm.md +79 -0
- package/skills/compliance/scripts/verify.sh +168 -0
- package/skills/compose-multiplatform/SKILL.md +198 -0
- package/skills/compose-multiplatform/evals/README.md +3 -0
- package/skills/compose-multiplatform/evals/cases.yaml +40 -0
- package/skills/compose-multiplatform/references/ios-interop.md +91 -0
- package/skills/compose-multiplatform/references/project-setup.md +96 -0
- package/skills/compose-multiplatform/scripts/verify.sh +123 -0
- package/skills/constitution/SKILL.md +160 -0
- package/skills/constitution/evals/README.md +68 -0
- package/skills/constitution/evals/cases.yaml +72 -0
- package/skills/constitution/references/constitution-template.md +90 -0
- package/skills/content-engine/SKILL.md +164 -0
- package/skills/content-engine/evals/README.md +17 -0
- package/skills/content-engine/evals/cases.yaml +62 -0
- package/skills/content-engine/references/atomization.md +81 -0
- package/skills/content-engine/references/brief-and-pipeline.md +90 -0
- package/skills/content-engine/scripts/verify.sh +146 -0
- package/skills/context-budget/SKILL.md +132 -0
- package/skills/context-budget/evals/README.md +11 -0
- package/skills/context-budget/evals/cases.yaml +40 -0
- package/skills/context-budget/references/handoff-and-compaction.md +96 -0
- package/skills/continuous-learning/SKILL.md +136 -0
- package/skills/continuous-learning/evals/README.md +16 -0
- package/skills/continuous-learning/evals/cases.yaml +39 -0
- package/skills/continuous-learning/references/lesson-routing.md +106 -0
- package/skills/contracts/SKILL.md +124 -0
- package/skills/contracts/evals/README.md +3 -0
- package/skills/contracts/evals/cases.yaml +42 -0
- package/skills/contracts/references/clause-library.md +129 -0
- package/skills/contracts/references/review-playbook.md +49 -0
- package/skills/contracts/scripts/verify.sh +53 -0
- package/skills/coolify/SKILL.md +201 -0
- package/skills/coolify/evals/README.md +21 -0
- package/skills/coolify/evals/cases.yaml +46 -0
- package/skills/coolify/references/databases-and-backups.md +99 -0
- package/skills/coolify/references/deploy-recipes.md +105 -0
- package/skills/coolify/references/install-and-proxy.md +80 -0
- package/skills/coolify/scripts/verify.sh +123 -0
- package/skills/cost-tracking/SKILL.md +183 -0
- package/skills/cost-tracking/evals/README.md +3 -0
- package/skills/cost-tracking/evals/cases.yaml +45 -0
- package/skills/cost-tracking/references/cloud-caps.md +52 -0
- package/skills/cost-tracking/references/pricing-tables.md +51 -0
- package/skills/cost-tracking/scripts/verify.sh +135 -0
- package/skills/course-builder/SKILL.md +186 -0
- package/skills/course-builder/evals/README.md +16 -0
- package/skills/course-builder/evals/cases.yaml +49 -0
- package/skills/course-builder/references/assessment-design.md +74 -0
- package/skills/course-builder/references/grounding-and-scoping.md +69 -0
- package/skills/course-builder/references/outcomes-and-blooms.md +82 -0
- package/skills/course-builder/scripts/verify.sh +247 -0
- package/skills/course-storytelling/SKILL.md +205 -0
- package/skills/course-storytelling/evals/README.md +54 -0
- package/skills/course-storytelling/evals/cases.yaml +50 -0
- package/skills/course-storytelling/references/brunson-frameworks.md +190 -0
- package/skills/course-storytelling/references/concept-landing-recipe.md +136 -0
- package/skills/course-storytelling/references/course-analysis.md +124 -0
- package/skills/course-storytelling/references/learner-grounding.md +183 -0
- package/skills/course-storytelling/references/mental-models.md +115 -0
- package/skills/course-storytelling/scripts/verify.sh +223 -0
- package/skills/cpp/SKILL.md +349 -0
- package/skills/cpp/evals/README.md +14 -0
- package/skills/cpp/evals/cases.yaml +44 -0
- package/skills/cpp/references/cmake.md +167 -0
- package/skills/cpp/references/move-and-templates.md +130 -0
- package/skills/cpp/references/undefined-behavior.md +86 -0
- package/skills/cpp/scripts/verify.sh +165 -0
- package/skills/csharp-dotnet/SKILL.md +291 -0
- package/skills/csharp-dotnet/evals/README.md +3 -0
- package/skills/csharp-dotnet/evals/cases.yaml +48 -0
- package/skills/csharp-dotnet/references/aspnetcore.md +99 -0
- package/skills/csharp-dotnet/references/async.md +82 -0
- package/skills/csharp-dotnet/references/efcore.md +96 -0
- package/skills/csharp-dotnet/scripts/verify.sh +90 -0
- package/skills/customer-support/SKILL.md +193 -0
- package/skills/customer-support/evals/README.md +13 -0
- package/skills/customer-support/evals/cases.yaml +61 -0
- package/skills/customer-support/references/macros-and-sla.md +142 -0
- package/skills/dashboard/SKILL.md +205 -0
- package/skills/dashboard/evals/README.md +3 -0
- package/skills/dashboard/evals/cases.yaml +50 -0
- package/skills/dashboard/references/chart-selection.md +34 -0
- package/skills/dashboard/references/tile-schema.md +164 -0
- package/skills/dashboard/scripts/verify.sh +130 -0
- package/skills/data-cleaning/SKILL.md +285 -0
- package/skills/data-cleaning/evals/README.md +16 -0
- package/skills/data-cleaning/evals/cases.yaml +57 -0
- package/skills/data-cleaning/references/normalization-recipes.md +136 -0
- package/skills/data-cleaning/references/validation-patterns.md +134 -0
- package/skills/data-cleaning/scripts/verify.sh +115 -0
- package/skills/data-policy/SKILL.md +163 -0
- package/skills/data-policy/evals/README.md +15 -0
- package/skills/data-policy/evals/cases.yaml +44 -0
- package/skills/data-policy/references/consent-and-ropa.md +97 -0
- package/skills/data-policy/references/retention-schedule.md +83 -0
- package/skills/data-policy/scripts/verify.sh +143 -0
- package/skills/data-scraper/SKILL.md +134 -0
- package/skills/data-scraper/evals/README.md +3 -0
- package/skills/data-scraper/evals/cases.yaml +46 -0
- package/skills/data-scraper/references/anti-bot.md +85 -0
- package/skills/data-scraper/references/frameworks.md +116 -0
- package/skills/data-scraper/references/legal-compliance.md +59 -0
- package/skills/data-scraper/scripts/verify.sh +166 -0
- package/skills/db-migrations/SKILL.md +254 -0
- package/skills/db-migrations/evals/README.md +10 -0
- package/skills/db-migrations/evals/cases.yaml +46 -0
- package/skills/db-migrations/references/backfill-and-batching.md +105 -0
- package/skills/db-migrations/references/expand-contract-playbook.md +152 -0
- package/skills/db-migrations/references/tools-and-runners.md +88 -0
- package/skills/db-migrations/scripts/verify.sh +112 -0
- package/skills/debug/SKILL.md +227 -0
- package/skills/debug/evals/README.md +88 -0
- package/skills/debug/evals/cases.yaml +74 -0
- package/skills/decision-records/SKILL.md +189 -0
- package/skills/decision-records/evals/README.md +3 -0
- package/skills/decision-records/evals/cases.yaml +43 -0
- package/skills/decision-records/references/templates.md +232 -0
- package/skills/decision-records/scripts/verify.sh +105 -0
- package/skills/deployment/SKILL.md +439 -0
- package/skills/deployment/evals/README.md +50 -0
- package/skills/deployment/evals/cases.yaml +53 -0
- package/skills/deployment/references/coolify.md +216 -0
- package/skills/deployment/references/dockerfiles-by-stack.md +319 -0
- package/skills/deployment/references/github-actions.md +295 -0
- package/skills/deployment/references/hosting-targets.md +272 -0
- package/skills/deployment/scripts/verify.sh +134 -0
- package/skills/design/SKILL.md +399 -0
- package/skills/design/evals/README.md +53 -0
- package/skills/design/evals/cases.yaml +56 -0
- package/skills/design/references/brand-grounding.md +187 -0
- package/skills/design/references/copywriting-frameworks.md +138 -0
- package/skills/design/references/landing-anatomy-and-cro.md +202 -0
- package/skills/design/references/motion-and-interaction.md +182 -0
- package/skills/design/references/research-method.md +147 -0
- package/skills/design/references/signature-and-craft.md +148 -0
- package/skills/design/references/trends-2026.md +80 -0
- package/skills/design/references/visual-system.md +236 -0
- package/skills/design/scripts/verify.sh +248 -0
- package/skills/digitalocean/SKILL.md +251 -0
- package/skills/digitalocean/evals/README.md +10 -0
- package/skills/digitalocean/evals/cases.yaml +37 -0
- package/skills/digitalocean/references/app-spec.md +126 -0
- package/skills/digitalocean/references/droplet-ops.md +95 -0
- package/skills/digitalocean/scripts/verify.sh +102 -0
- package/skills/django/SKILL.md +268 -0
- package/skills/django/evals/README.md +11 -0
- package/skills/django/evals/cases.yaml +47 -0
- package/skills/django/references/drf.md +109 -0
- package/skills/django/references/orm-performance.md +91 -0
- package/skills/django/references/security.md +81 -0
- package/skills/django/references/testing.md +86 -0
- package/skills/django/scripts/verify.sh +115 -0
- package/skills/docker/SKILL.md +283 -0
- package/skills/docker/evals/README.md +10 -0
- package/skills/docker/evals/cases.yaml +44 -0
- package/skills/docker/references/base-images-and-stages.md +104 -0
- package/skills/docker/references/compose-recipes.md +109 -0
- package/skills/docker/scripts/verify.sh +149 -0
- package/skills/document-processing/SKILL.md +214 -0
- package/skills/document-processing/evals/README.md +3 -0
- package/skills/document-processing/evals/cases.yaml +65 -0
- package/skills/document-processing/references/engines.md +67 -0
- package/skills/document-processing/scripts/verify.sh +172 -0
- package/skills/domains-dns/SKILL.md +146 -0
- package/skills/domains-dns/evals/README.md +16 -0
- package/skills/domains-dns/evals/cases.yaml +47 -0
- package/skills/domains-dns/references/record-cookbook.md +94 -0
- package/skills/domains-dns/references/tls-and-acme.md +90 -0
- package/skills/domains-dns/references/verify-and-debug.md +64 -0
- package/skills/domains-dns/scripts/verify.sh +163 -0
- package/skills/drizzle-orm/SKILL.md +234 -0
- package/skills/drizzle-orm/evals/README.md +12 -0
- package/skills/drizzle-orm/evals/cases.yaml +47 -0
- package/skills/drizzle-orm/references/relations-and-drivers.md +118 -0
- package/skills/drizzle-orm/scripts/verify.sh +155 -0
- package/skills/duckdb/SKILL.md +207 -0
- package/skills/duckdb/evals/README.md +31 -0
- package/skills/duckdb/evals/cases.yaml +41 -0
- package/skills/duckdb/references/python-and-interop.md +105 -0
- package/skills/duckdb/references/remote-and-lakehouse.md +101 -0
- package/skills/duckdb/scripts/verify.sh +71 -0
- package/skills/dynamodb/SKILL.md +217 -0
- package/skills/dynamodb/evals/README.md +8 -0
- package/skills/dynamodb/evals/cases.yaml +46 -0
- package/skills/dynamodb/references/access-patterns.md +127 -0
- package/skills/dynamodb/references/capacity-and-limits.md +78 -0
- package/skills/dynamodb/scripts/verify.sh +108 -0
- package/skills/e-signature/SKILL.md +185 -0
- package/skills/e-signature/evals/README.md +3 -0
- package/skills/e-signature/evals/cases.yaml +44 -0
- package/skills/e-signature/references/docusign.md +83 -0
- package/skills/e-signature/references/dropbox-sign.md +73 -0
- package/skills/e-signature/references/legal-tiers.md +37 -0
- package/skills/e-signature/scripts/verify.sh +81 -0
- package/skills/e2e-testing/SKILL.md +243 -0
- package/skills/e2e-testing/evals/README.md +10 -0
- package/skills/e2e-testing/evals/cases.yaml +64 -0
- package/skills/e2e-testing/references/config-and-ci.md +156 -0
- package/skills/e2e-testing/references/flakiness-playbook.md +124 -0
- package/skills/e2e-testing/scripts/verify.sh +117 -0
- package/skills/electron/SKILL.md +221 -0
- package/skills/electron/evals/README.md +13 -0
- package/skills/electron/evals/cases.yaml +38 -0
- package/skills/electron/references/packaging-and-updates.md +122 -0
- package/skills/electron/references/security-and-ipc.md +158 -0
- package/skills/electron/scripts/verify.sh +143 -0
- package/skills/elixir/SKILL.md +217 -0
- package/skills/elixir/evals/README.md +3 -0
- package/skills/elixir/evals/cases.yaml +41 -0
- package/skills/elixir/references/mix-and-releases.md +91 -0
- package/skills/elixir/references/otp-patterns.md +96 -0
- package/skills/elixir/scripts/verify.sh +76 -0
- package/skills/email-connector/SKILL.md +294 -0
- package/skills/email-connector/evals/README.md +19 -0
- package/skills/email-connector/evals/cases.yaml +39 -0
- package/skills/email-connector/references/providers.md +107 -0
- package/skills/email-connector/scripts/verify.sh +72 -0
- package/skills/email-deliverability/SKILL.md +168 -0
- package/skills/email-deliverability/evals/README.md +21 -0
- package/skills/email-deliverability/evals/cases.yaml +45 -0
- package/skills/email-deliverability/scripts/verify.sh +98 -0
- package/skills/embeddings-search/SKILL.md +193 -0
- package/skills/embeddings-search/evals/README.md +10 -0
- package/skills/embeddings-search/evals/cases.yaml +44 -0
- package/skills/embeddings-search/references/evaluation.md +86 -0
- package/skills/embeddings-search/references/models.md +73 -0
- package/skills/embeddings-search/scripts/verify.sh +103 -0
- package/skills/error-handling/SKILL.md +307 -0
- package/skills/error-handling/evals/README.md +12 -0
- package/skills/error-handling/evals/cases.yaml +46 -0
- package/skills/error-handling/references/boundaries-and-messaging.md +120 -0
- package/skills/error-handling/references/retry-and-resilience.md +154 -0
- package/skills/error-handling/scripts/verify.sh +110 -0
- package/skills/expo/SKILL.md +253 -0
- package/skills/expo/evals/README.md +13 -0
- package/skills/expo/evals/cases.yaml +44 -0
- package/skills/expo/references/config-plugins.md +117 -0
- package/skills/expo/references/eas-update.md +118 -0
- package/skills/expo/scripts/verify.sh +132 -0
- package/skills/fal/SKILL.md +210 -0
- package/skills/fal/evals/README.md +3 -0
- package/skills/fal/evals/cases.yaml +42 -0
- package/skills/fal/references/models-and-cost.md +53 -0
- package/skills/fal/references/queue-and-webhooks.md +153 -0
- package/skills/fal/scripts/verify.sh +72 -0
- package/skills/fastapi/SKILL.md +499 -0
- package/skills/fastapi/evals/README.md +50 -0
- package/skills/fastapi/evals/cases.yaml +55 -0
- package/skills/fastapi/references/database.md +347 -0
- package/skills/fastapi/references/production.md +338 -0
- package/skills/fastapi/references/security.md +330 -0
- package/skills/fastapi/references/testing.md +349 -0
- package/skills/fastapi/scripts/verify.sh +116 -0
- package/skills/finance-ops/SKILL.md +149 -0
- package/skills/finance-ops/evals/README.md +3 -0
- package/skills/finance-ops/evals/cases.yaml +39 -0
- package/skills/finance-ops/references/cash-flow-forecast.md +57 -0
- package/skills/finance-ops/references/month-close.md +59 -0
- package/skills/finance-ops/references/reconciliation.md +65 -0
- package/skills/finance-ops/scripts/verify.sh +166 -0
- package/skills/financial-model/SKILL.md +170 -0
- package/skills/financial-model/evals/README.md +3 -0
- package/skills/financial-model/evals/cases.yaml +53 -0
- package/skills/financial-model/references/benchmarks-and-scenarios.md +55 -0
- package/skills/financial-model/references/model-structure.md +67 -0
- package/skills/financial-model/references/revenue-build.md +68 -0
- package/skills/financial-model/scripts/verify.sh +232 -0
- package/skills/firebase/SKILL.md +251 -0
- package/skills/firebase/evals/README.md +12 -0
- package/skills/firebase/evals/cases.yaml +45 -0
- package/skills/firebase/references/cloud-functions.md +102 -0
- package/skills/firebase/references/data-modeling.md +108 -0
- package/skills/firebase/references/security-rules.md +137 -0
- package/skills/firebase/scripts/verify.sh +98 -0
- package/skills/flutter/SKILL.md +448 -0
- package/skills/flutter/evals/README.md +54 -0
- package/skills/flutter/evals/cases.yaml +69 -0
- package/skills/flutter/references/architecture-and-state.md +499 -0
- package/skills/flutter/references/i18n-and-dependencies.md +197 -0
- package/skills/flutter/references/performance.md +299 -0
- package/skills/flutter/references/testing.md +385 -0
- package/skills/flutter/references/ui-and-navigation.md +378 -0
- package/skills/flutter/scripts/verify.sh +104 -0
- package/skills/fly-io/SKILL.md +206 -0
- package/skills/fly-io/evals/README.md +3 -0
- package/skills/fly-io/evals/cases.yaml +42 -0
- package/skills/fly-io/references/fly-toml.md +155 -0
- package/skills/fly-io/references/multi-region.md +66 -0
- package/skills/fly-io/scripts/verify.sh +90 -0
- package/skills/forecasting/SKILL.md +139 -0
- package/skills/forecasting/evals/README.md +13 -0
- package/skills/forecasting/evals/cases.yaml +47 -0
- package/skills/forecasting/references/accuracy-and-backtesting.md +104 -0
- package/skills/forecasting/references/methods-cheatsheet.md +94 -0
- package/skills/forecasting/scripts/verify.sh +99 -0
- package/skills/fundraising/SKILL.md +162 -0
- package/skills/fundraising/evals/README.md +18 -0
- package/skills/fundraising/evals/cases.yaml +76 -0
- package/skills/fundraising/references/funnel-math.md +90 -0
- package/skills/fundraising/references/process-playbook.md +97 -0
- package/skills/gcp-essentials/SKILL.md +327 -0
- package/skills/gcp-essentials/evals/README.md +12 -0
- package/skills/gcp-essentials/evals/cases.yaml +38 -0
- package/skills/gcp-essentials/references/deploy-recipes.md +81 -0
- package/skills/gcp-essentials/references/iam-and-auth.md +94 -0
- package/skills/gcp-essentials/references/networking-and-sql.md +74 -0
- package/skills/gcp-essentials/scripts/verify.sh +158 -0
- package/skills/gdpr-privacy/SKILL.md +167 -0
- package/skills/gdpr-privacy/evals/README.md +3 -0
- package/skills/gdpr-privacy/evals/cases.yaml +47 -0
- package/skills/gdpr-privacy/references/dpa-and-transfers.md +63 -0
- package/skills/gdpr-privacy/references/dsar-and-consent.md +83 -0
- package/skills/gdpr-privacy/references/privacy-policy-blueprint.md +99 -0
- package/skills/gdpr-privacy/scripts/verify.sh +84 -0
- package/skills/git-workflow/SKILL.md +190 -0
- package/skills/git-workflow/evals/README.md +10 -0
- package/skills/git-workflow/evals/cases.yaml +47 -0
- package/skills/git-workflow/references/interactive-rebase.md +89 -0
- package/skills/github-actions/SKILL.md +256 -0
- package/skills/github-actions/evals/README.md +3 -0
- package/skills/github-actions/evals/cases.yaml +45 -0
- package/skills/github-actions/references/caching-and-matrix.md +92 -0
- package/skills/github-actions/references/oidc-deploys.md +130 -0
- package/skills/github-actions/scripts/verify.sh +105 -0
- package/skills/go/SKILL.md +438 -0
- package/skills/go/evals/README.md +56 -0
- package/skills/go/evals/cases.yaml +55 -0
- package/skills/go/references/concurrency.md +557 -0
- package/skills/go/references/http-services.md +529 -0
- package/skills/go/references/testing.md +338 -0
- package/skills/go/scripts/verify.sh +109 -0
- package/skills/google-workspace/SKILL.md +287 -0
- package/skills/google-workspace/evals/README.md +16 -0
- package/skills/google-workspace/evals/cases.yaml +44 -0
- package/skills/google-workspace/references/api-recipes.md +148 -0
- package/skills/google-workspace/references/auth-setup.md +100 -0
- package/skills/google-workspace/scripts/verify.sh +128 -0
- package/skills/grants/SKILL.md +171 -0
- package/skills/grants/evals/README.md +3 -0
- package/skills/grants/evals/cases.yaml +69 -0
- package/skills/grants/references/budget-justification.md +71 -0
- package/skills/grants/references/jurisdictions.md +35 -0
- package/skills/grants/references/logic-model.md +66 -0
- package/skills/grants/scripts/verify.sh +193 -0
- package/skills/harness/SKILL.md +329 -0
- package/skills/harness/assets/_TEMPLATE/.env.example +8 -0
- package/skills/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
- package/skills/harness/assets/_TEMPLATE/README.md +25 -0
- package/skills/harness/assets/_TEMPLATE/test_connection.sh +30 -0
- package/skills/harness/evals/README.md +54 -0
- package/skills/harness/evals/cases.yaml +72 -0
- package/skills/harness/examples/audit-example.md +120 -0
- package/skills/harness/references/agents-md-template.md +41 -0
- package/skills/harness/references/audit-report-template.html +140 -0
- package/skills/harness/references/audit-report-template.md +116 -0
- package/skills/harness/references/claude-md-template.md +98 -0
- package/skills/harness/references/inbox-readme-template.md +51 -0
- package/skills/harness/references/ingest-formats.md +185 -0
- package/skills/harness/references/providers.yaml +3410 -0
- package/skills/harness/references/tools-readme-template.md +88 -0
- package/skills/harness/references/wiki-archive-template.html +81 -0
- package/skills/harness/references/wiki-article-template.md +20 -0
- package/skills/harness/references/wiki-dashboard-template.html +136 -0
- package/skills/harness/references/wiki-deep-improve-report-template.html +126 -0
- package/skills/harness/references/wiki-gaps-template.md +18 -0
- package/skills/harness/references/wiki-index-template.md +23 -0
- package/skills/harness/references/wiki-protocol.md +699 -0
- package/skills/harness/references/wiki-raw-template.md +7 -0
- package/skills/hetzner/SKILL.md +221 -0
- package/skills/hetzner/evals/README.md +35 -0
- package/skills/hetzner/evals/cases.yaml +46 -0
- package/skills/hetzner/references/cloud-init.md +120 -0
- package/skills/hetzner/references/plans-and-locations.md +56 -0
- package/skills/hetzner/scripts/verify.sh +122 -0
- package/skills/hiring/SKILL.md +248 -0
- package/skills/hiring/evals/README.md +13 -0
- package/skills/hiring/evals/cases.yaml +41 -0
- package/skills/hiring/references/templates.md +118 -0
- package/skills/htmx/SKILL.md +261 -0
- package/skills/htmx/evals/README.md +3 -0
- package/skills/htmx/evals/cases.yaml +38 -0
- package/skills/htmx/references/patterns.md +113 -0
- package/skills/htmx/references/server-contract.md +91 -0
- package/skills/htmx/scripts/verify.sh +93 -0
- package/skills/huggingface/SKILL.md +190 -0
- package/skills/huggingface/evals/README.md +11 -0
- package/skills/huggingface/evals/cases.yaml +41 -0
- package/skills/huggingface/references/endpoints-and-spaces.md +99 -0
- package/skills/huggingface/references/hub-and-cli.md +85 -0
- package/skills/huggingface/references/inference-providers.md +115 -0
- package/skills/huggingface/scripts/verify.sh +123 -0
- package/skills/implement/SKILL.md +283 -0
- package/skills/implement/evals/README.md +56 -0
- package/skills/implement/evals/cases.yaml +43 -0
- package/skills/init/SKILL.md +184 -0
- package/skills/init/evals/README.md +49 -0
- package/skills/init/evals/cases.yaml +74 -0
- package/skills/init/references/accompaniment-and-profile.md +140 -0
- package/skills/init/references/discovery.md +90 -0
- package/skills/init/references/recommend-skills.md +115 -0
- package/skills/init/scripts/verify.sh +122 -0
- package/skills/instagram-api/SKILL.md +241 -0
- package/skills/instagram-api/evals/README.md +3 -0
- package/skills/instagram-api/evals/cases.yaml +43 -0
- package/skills/instagram-api/references/insights-metrics.md +88 -0
- package/skills/instagram-api/references/publish-reel.md +98 -0
- package/skills/instagram-api/scripts/verify.sh +137 -0
- package/skills/inventory/SKILL.md +131 -0
- package/skills/inventory/evals/README.md +3 -0
- package/skills/inventory/evals/cases.yaml +43 -0
- package/skills/inventory/references/abc-xyz.md +52 -0
- package/skills/inventory/references/ddmrp.md +32 -0
- package/skills/inventory/references/reorder-policies.md +85 -0
- package/skills/inventory/references/safety-stock.md +63 -0
- package/skills/inventory/scripts/verify.sh +155 -0
- package/skills/investor-materials/SKILL.md +175 -0
- package/skills/investor-materials/evals/README.md +15 -0
- package/skills/investor-materials/evals/cases.yaml +60 -0
- package/skills/investor-materials/references/dataroom-checklist.md +134 -0
- package/skills/investor-materials/references/update-and-onepager-templates.md +152 -0
- package/skills/investor-materials/scripts/verify.sh +148 -0
- package/skills/invoicing/SKILL.md +154 -0
- package/skills/invoicing/evals/README.md +5 -0
- package/skills/invoicing/evals/cases.yaml +49 -0
- package/skills/invoicing/references/dunning-ladder.md +53 -0
- package/skills/invoicing/references/e-invoicing-mandates.md +43 -0
- package/skills/invoicing/scripts/fixtures/broken-invoice.json +13 -0
- package/skills/invoicing/scripts/fixtures/valid-invoice.json +15 -0
- package/skills/invoicing/scripts/verify.sh +133 -0
- package/skills/ip-trademark/SKILL.md +186 -0
- package/skills/ip-trademark/evals/README.md +10 -0
- package/skills/ip-trademark/evals/cases.yaml +47 -0
- package/skills/ip-trademark/references/jurisdictions.md +63 -0
- package/skills/ip-trademark/references/ownership-and-licensing.md +90 -0
- package/skills/java/SKILL.md +341 -0
- package/skills/java/evals/README.md +23 -0
- package/skills/java/evals/cases.yaml +43 -0
- package/skills/java/references/builds.md +133 -0
- package/skills/java/references/concurrency.md +108 -0
- package/skills/java/references/streams.md +102 -0
- package/skills/java/scripts/verify.sh +107 -0
- package/skills/knowledge-ops/SKILL.md +125 -0
- package/skills/knowledge-ops/evals/README.md +16 -0
- package/skills/knowledge-ops/evals/cases.yaml +50 -0
- package/skills/knowledge-ops/references/gardening-playbook.md +116 -0
- package/skills/kotlin-android/SKILL.md +245 -0
- package/skills/kotlin-android/evals/README.md +13 -0
- package/skills/kotlin-android/evals/cases.yaml +56 -0
- package/skills/kotlin-android/references/architecture.md +200 -0
- package/skills/kotlin-android/references/gradle-setup.md +125 -0
- package/skills/kotlin-android/scripts/verify.sh +109 -0
- package/skills/kpi-framework/SKILL.md +199 -0
- package/skills/kpi-framework/evals/README.md +11 -0
- package/skills/kpi-framework/evals/cases.yaml +42 -0
- package/skills/kpi-framework/references/definition-and-targets.md +64 -0
- package/skills/kpi-framework/references/metric-catalog.md +84 -0
- package/skills/landing-copy/SKILL.md +153 -0
- package/skills/landing-copy/evals/README.md +18 -0
- package/skills/landing-copy/evals/cases.yaml +63 -0
- package/skills/landing-copy/references/frameworks.md +61 -0
- package/skills/landing-copy/references/page-skeleton.md +92 -0
- package/skills/landing-copy/scripts/verify.sh +164 -0
- package/skills/laravel/SKILL.md +301 -0
- package/skills/laravel/evals/README.md +10 -0
- package/skills/laravel/evals/cases.yaml +45 -0
- package/skills/laravel/references/eloquent-patterns.md +126 -0
- package/skills/laravel/references/queues-and-scheduling.md +153 -0
- package/skills/laravel/scripts/verify.sh +128 -0
- package/skills/lead-gen/SKILL.md +155 -0
- package/skills/lead-gen/evals/README.md +3 -0
- package/skills/lead-gen/evals/cases.yaml +43 -0
- package/skills/lead-gen/references/data-sources.md +87 -0
- package/skills/lead-gen/references/scoring-model.md +93 -0
- package/skills/lead-gen/scripts/verify.sh +179 -0
- package/skills/linkedin-api/SKILL.md +211 -0
- package/skills/linkedin-api/evals/README.md +3 -0
- package/skills/linkedin-api/evals/cases.yaml +41 -0
- package/skills/linkedin-api/references/api-reference.md +168 -0
- package/skills/linkedin-api/scripts/verify.sh +98 -0
- package/skills/linkedin-carousels/SKILL.md +239 -0
- package/skills/linkedin-carousels/evals/README.md +13 -0
- package/skills/linkedin-carousels/evals/cases.yaml +62 -0
- package/skills/linkedin-carousels/references/carousel-patterns.md +200 -0
- package/skills/linkedin-carousels/scripts/verify.sh +160 -0
- package/skills/linkedin-content/SKILL.md +162 -0
- package/skills/linkedin-content/evals/README.md +13 -0
- package/skills/linkedin-content/evals/cases.yaml +62 -0
- package/skills/linkedin-content/references/hooks-and-formats.md +114 -0
- package/skills/linkedin-content/scripts/verify.sh +154 -0
- package/skills/linkedin-outreach/SKILL.md +174 -0
- package/skills/linkedin-outreach/evals/README.md +3 -0
- package/skills/linkedin-outreach/evals/cases.yaml +43 -0
- package/skills/linkedin-outreach/references/ledger-schema.md +48 -0
- package/skills/linkedin-outreach/references/sales-navigator-playbook.md +61 -0
- package/skills/linkedin-outreach/scripts/verify.sh +120 -0
- package/skills/linkedin-strategy/SKILL.md +167 -0
- package/skills/linkedin-strategy/evals/README.md +3 -0
- package/skills/linkedin-strategy/evals/cases.yaml +49 -0
- package/skills/linkedin-strategy/references/ssi-and-pillars.md +59 -0
- package/skills/linkedin-strategy/references/wiki-records.md +62 -0
- package/skills/linkedin-strategy/scripts/verify.sh +120 -0
- package/skills/llm-pipeline/SKILL.md +155 -0
- package/skills/llm-pipeline/evals/README.md +3 -0
- package/skills/llm-pipeline/evals/cases.yaml +44 -0
- package/skills/llm-pipeline/references/caching-layers.md +60 -0
- package/skills/llm-pipeline/references/litellm-router.md +101 -0
- package/skills/llm-pipeline/scripts/verify.sh +169 -0
- package/skills/logistics-ops/SKILL.md +219 -0
- package/skills/logistics-ops/evals/README.md +20 -0
- package/skills/logistics-ops/evals/cases.yaml +48 -0
- package/skills/logistics-ops/references/carriers-and-claims.md +105 -0
- package/skills/market-research/SKILL.md +145 -0
- package/skills/market-research/evals/README.md +3 -0
- package/skills/market-research/evals/cases.yaml +48 -0
- package/skills/market-research/references/demand-signals.md +63 -0
- package/skills/market-research/references/sizing-playbook.md +121 -0
- package/skills/market-research/scripts/verify.sh +215 -0
- package/skills/marketing/SKILL.md +233 -0
- package/skills/marketing/evals/README.md +61 -0
- package/skills/marketing/evals/cases.yaml +84 -0
- package/skills/marketing/references/brand-grounding.md +197 -0
- package/skills/marketing/references/campaigns-and-channels.md +151 -0
- package/skills/marketing/references/copy-frameworks.md +166 -0
- package/skills/marketing/references/landing-copy.md +191 -0
- package/skills/marketing/references/seo-geo.md +391 -0
- package/skills/marketing/scripts/seo_audit.py +166 -0
- package/skills/marketing/scripts/verify.sh +233 -0
- package/skills/medium-publishing/SKILL.md +152 -0
- package/skills/medium-publishing/evals/README.md +3 -0
- package/skills/medium-publishing/evals/cases.yaml +42 -0
- package/skills/medium-publishing/references/cross-post-and-canonical.md +65 -0
- package/skills/medium-publishing/references/legacy-api.md +100 -0
- package/skills/medium-strategy/SKILL.md +161 -0
- package/skills/medium-strategy/evals/README.md +3 -0
- package/skills/medium-strategy/evals/cases.yaml +50 -0
- package/skills/medium-strategy/references/distribution-and-boost.md +65 -0
- package/skills/medium-strategy/references/wiki-records.md +60 -0
- package/skills/medium-strategy/scripts/verify.sh +118 -0
- package/skills/medium-writing/SKILL.md +140 -0
- package/skills/medium-writing/evals/README.md +5 -0
- package/skills/medium-writing/evals/cases.yaml +39 -0
- package/skills/medium-writing/references/title-patterns.md +79 -0
- package/skills/meeting-notes/SKILL.md +168 -0
- package/skills/meeting-notes/evals/README.md +14 -0
- package/skills/meeting-notes/evals/cases.yaml +46 -0
- package/skills/meeting-notes/references/templates.md +140 -0
- package/skills/modal/SKILL.md +307 -0
- package/skills/modal/evals/README.md +29 -0
- package/skills/modal/evals/cases.yaml +50 -0
- package/skills/modal/references/images-gpu-cookbook.md +160 -0
- package/skills/modal/references/web-and-scaling.md +138 -0
- package/skills/modal/scripts/verify.sh +127 -0
- package/skills/mongodb/SKILL.md +342 -0
- package/skills/mongodb/evals/README.md +29 -0
- package/skills/mongodb/evals/cases.yaml +41 -0
- package/skills/mongodb/references/aggregation.md +115 -0
- package/skills/mongodb/references/data-modeling.md +135 -0
- package/skills/mongodb/references/transactions-and-ops.md +128 -0
- package/skills/mongodb/scripts/verify.sh +151 -0
- package/skills/monitoring/SKILL.md +155 -0
- package/skills/monitoring/evals/README.md +3 -0
- package/skills/monitoring/evals/cases.yaml +47 -0
- package/skills/monitoring/references/burn-rate-and-oncall.md +128 -0
- package/skills/monitoring/references/tool-setup.md +154 -0
- package/skills/monitoring/scripts/verify.sh +145 -0
- package/skills/mysql/SKILL.md +249 -0
- package/skills/mysql/evals/README.md +12 -0
- package/skills/mysql/evals/cases.yaml +49 -0
- package/skills/mysql/references/indexing-and-explain.md +161 -0
- package/skills/mysql/references/mysql-vs-mariadb.md +78 -0
- package/skills/mysql/references/online-ddl-and-migrations.md +120 -0
- package/skills/mysql/references/replication-and-ha.md +115 -0
- package/skills/mysql/scripts/verify.sh +141 -0
- package/skills/neon/SKILL.md +218 -0
- package/skills/neon/evals/README.md +11 -0
- package/skills/neon/evals/cases.yaml +45 -0
- package/skills/neon/references/branching-ci.md +86 -0
- package/skills/neon/scripts/verify.sh +78 -0
- package/skills/nestjs/SKILL.md +225 -0
- package/skills/nestjs/evals/README.md +3 -0
- package/skills/nestjs/evals/cases.yaml +38 -0
- package/skills/nestjs/references/cross-cutting.md +135 -0
- package/skills/nestjs/references/testing-recipes.md +105 -0
- package/skills/nestjs/scripts/verify.sh +98 -0
- package/skills/netlify/SKILL.md +208 -0
- package/skills/netlify/evals/README.md +13 -0
- package/skills/netlify/evals/cases.yaml +43 -0
- package/skills/netlify/references/functions.md +97 -0
- package/skills/netlify/references/netlify-toml.md +115 -0
- package/skills/netlify/scripts/verify.sh +95 -0
- package/skills/newsletter/SKILL.md +162 -0
- package/skills/newsletter/evals/README.md +12 -0
- package/skills/newsletter/evals/cases.yaml +42 -0
- package/skills/newsletter/references/growth-loops.md +73 -0
- package/skills/newsletter/references/welcome-sequence.md +62 -0
- package/skills/newsletter/scripts/verify.sh +173 -0
- package/skills/nextjs/SKILL.md +472 -0
- package/skills/nextjs/evals/README.md +59 -0
- package/skills/nextjs/evals/cases.yaml +56 -0
- package/skills/nextjs/references/data-and-caching.md +309 -0
- package/skills/nextjs/references/metadata.md +208 -0
- package/skills/nextjs/references/performance.md +325 -0
- package/skills/nextjs/references/react.md +383 -0
- package/skills/nextjs/references/security.md +239 -0
- package/skills/nextjs/references/testing.md +290 -0
- package/skills/nextjs/scripts/verify.sh +141 -0
- package/skills/no-code-app/SKILL.md +153 -0
- package/skills/no-code-app/evals/README.md +3 -0
- package/skills/no-code-app/evals/cases.yaml +43 -0
- package/skills/no-code-app/references/platform-limits.md +100 -0
- package/skills/nodejs/SKILL.md +242 -0
- package/skills/nodejs/evals/README.md +3 -0
- package/skills/nodejs/evals/cases.yaml +39 -0
- package/skills/nodejs/references/express5-migration.md +53 -0
- package/skills/nodejs/references/graceful-shutdown.md +73 -0
- package/skills/nodejs/scripts/verify.sh +122 -0
- package/skills/notion-connector/SKILL.md +234 -0
- package/skills/notion-connector/evals/README.md +15 -0
- package/skills/notion-connector/evals/cases.yaml +45 -0
- package/skills/notion-connector/references/api-versions.md +63 -0
- package/skills/notion-connector/references/property-shapes.md +110 -0
- package/skills/notion-connector/references/sync-patterns.md +95 -0
- package/skills/notion-connector/scripts/verify.sh +162 -0
- package/skills/observability/SKILL.md +231 -0
- package/skills/observability/evals/README.md +3 -0
- package/skills/observability/evals/cases.yaml +49 -0
- package/skills/observability/references/collector-config.md +98 -0
- package/skills/observability/references/instrumentation-recipes.md +115 -0
- package/skills/observability/scripts/verify.sh +156 -0
- package/skills/ollama/SKILL.md +213 -0
- package/skills/ollama/evals/README.md +9 -0
- package/skills/ollama/evals/cases.yaml +43 -0
- package/skills/ollama/references/api.md +148 -0
- package/skills/ollama/references/hardware-sizing.md +87 -0
- package/skills/ollama/scripts/verify.sh +116 -0
- package/skills/orient/SKILL.md +54 -0
- package/skills/orient/evals/README.md +16 -0
- package/skills/orient/evals/cases.yaml +57 -0
- package/skills/orient/references/orientation-contract.md +34 -0
- package/skills/parallel/SKILL.md +198 -0
- package/skills/parallel/evals/README.md +62 -0
- package/skills/parallel/evals/cases.yaml +44 -0
- package/skills/people-ops/SKILL.md +122 -0
- package/skills/people-ops/evals/README.md +14 -0
- package/skills/people-ops/evals/cases.yaml +43 -0
- package/skills/people-ops/references/templates.md +129 -0
- package/skills/performance/SKILL.md +221 -0
- package/skills/performance/evals/README.md +3 -0
- package/skills/performance/evals/cases.yaml +47 -0
- package/skills/performance/references/profiling-playbook.md +54 -0
- package/skills/performance/scripts/verify.sh +94 -0
- package/skills/phoenix/SKILL.md +169 -0
- package/skills/phoenix/evals/README.md +3 -0
- package/skills/phoenix/evals/cases.yaml +40 -0
- package/skills/phoenix/references/auth-and-scopes.md +82 -0
- package/skills/phoenix/references/ecto-patterns.md +93 -0
- package/skills/phoenix/references/liveview.md +134 -0
- package/skills/phoenix/scripts/verify.sh +73 -0
- package/skills/php/SKILL.md +397 -0
- package/skills/php/evals/README.md +12 -0
- package/skills/php/evals/cases.yaml +45 -0
- package/skills/php/references/tooling.md +170 -0
- package/skills/php/references/type-system.md +220 -0
- package/skills/php/scripts/verify.sh +155 -0
- package/skills/pitch-deck/SKILL.md +209 -0
- package/skills/pitch-deck/evals/README.md +15 -0
- package/skills/pitch-deck/evals/cases.yaml +55 -0
- package/skills/pitch-deck/references/numbers-that-matter.md +78 -0
- package/skills/pitch-deck/references/slide-spine.md +149 -0
- package/skills/pitch-deck/scripts/verify.sh +186 -0
- package/skills/plan/SKILL.md +204 -0
- package/skills/plan/evals/README.md +62 -0
- package/skills/plan/evals/cases.yaml +49 -0
- package/skills/plan/references/plan-template.md +124 -0
- package/skills/planetscale/SKILL.md +223 -0
- package/skills/planetscale/evals/README.md +11 -0
- package/skills/planetscale/evals/cases.yaml +46 -0
- package/skills/planetscale/references/deploy-requests.md +75 -0
- package/skills/planetscale/references/no-foreign-keys.md +88 -0
- package/skills/planetscale/scripts/verify.sh +115 -0
- package/skills/podcast/SKILL.md +166 -0
- package/skills/podcast/evals/README.md +17 -0
- package/skills/podcast/evals/cases.yaml +61 -0
- package/skills/podcast/references/rss-and-namespace.md +136 -0
- package/skills/podcast/scripts/verify.sh +246 -0
- package/skills/postgresdb/SKILL.md +372 -0
- package/skills/postgresdb/evals/README.md +55 -0
- package/skills/postgresdb/evals/cases.yaml +57 -0
- package/skills/postgresdb/references/migrations.md +279 -0
- package/skills/postgresdb/references/operations-and-security.md +267 -0
- package/skills/postgresdb/references/query-optimization.md +374 -0
- package/skills/postgresdb/references/schema-and-indexing.md +379 -0
- package/skills/postgresdb/scripts/verify.sh +191 -0
- package/skills/presentations/SKILL.md +296 -0
- package/skills/presentations/evals/README.md +61 -0
- package/skills/presentations/evals/cases.yaml +56 -0
- package/skills/presentations/references/brand-grounding.md +160 -0
- package/skills/presentations/references/markdown-decks.md +290 -0
- package/skills/presentations/references/pptx-python.md +242 -0
- package/skills/presentations/references/slide-design.md +261 -0
- package/skills/presentations/references/storytelling-and-decks.md +150 -0
- package/skills/presentations/scripts/verify.sh +252 -0
- package/skills/press-kit/SKILL.md +243 -0
- package/skills/press-kit/evals/README.md +15 -0
- package/skills/press-kit/evals/cases.yaml +55 -0
- package/skills/press-kit/references/release-types.md +102 -0
- package/skills/press-kit/references/templates.md +132 -0
- package/skills/press-kit/scripts/verify.sh +161 -0
- package/skills/pricing/SKILL.md +160 -0
- package/skills/pricing/evals/README.md +5 -0
- package/skills/pricing/evals/cases.yaml +44 -0
- package/skills/pricing/references/localization.md +56 -0
- package/skills/pricing/references/pricing-models.md +55 -0
- package/skills/pricing/scripts/verify.sh +91 -0
- package/skills/prisma-orm/SKILL.md +320 -0
- package/skills/prisma-orm/evals/README.md +12 -0
- package/skills/prisma-orm/evals/cases.yaml +56 -0
- package/skills/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
- package/skills/prisma-orm/references/queries-and-performance.md +169 -0
- package/skills/prisma-orm/scripts/verify.sh +137 -0
- package/skills/procurement/SKILL.md +179 -0
- package/skills/procurement/evals/README.md +20 -0
- package/skills/procurement/evals/cases.yaml +49 -0
- package/skills/procurement/references/scorecard-and-tco.md +100 -0
- package/skills/procurement/references/sourcing-requests.md +116 -0
- package/skills/procurement/scripts/verify.sh +280 -0
- package/skills/project-ops/SKILL.md +130 -0
- package/skills/project-ops/evals/README.md +3 -0
- package/skills/project-ops/evals/cases.yaml +71 -0
- package/skills/project-ops/references/raid-and-rag.md +58 -0
- package/skills/project-ops/references/status-report-template.md +68 -0
- package/skills/project-ops/scripts/verify.sh +257 -0
- package/skills/prompt-engineering/SKILL.md +138 -0
- package/skills/prompt-engineering/evals/README.md +11 -0
- package/skills/prompt-engineering/evals/cases.yaml +46 -0
- package/skills/prompt-engineering/references/eval-templates.md +94 -0
- package/skills/prompt-engineering/references/output-contracts.md +120 -0
- package/skills/prompt-engineering/scripts/verify.sh +84 -0
- package/skills/proposals/SKILL.md +159 -0
- package/skills/proposals/evals/README.md +3 -0
- package/skills/proposals/evals/cases.yaml +53 -0
- package/skills/proposals/references/proposal-skeleton.md +110 -0
- package/skills/proposals/references/sow-skeleton.md +79 -0
- package/skills/proposals/scripts/verify.sh +201 -0
- package/skills/python/SKILL.md +369 -0
- package/skills/python/evals/README.md +19 -0
- package/skills/python/evals/cases.yaml +46 -0
- package/skills/python/references/async.md +136 -0
- package/skills/python/references/stdlib.md +162 -0
- package/skills/python/references/typing.md +160 -0
- package/skills/python/scripts/verify.sh +125 -0
- package/skills/rag/SKILL.md +226 -0
- package/skills/rag/evals/README.md +13 -0
- package/skills/rag/evals/cases.yaml +45 -0
- package/skills/rag/references/evaluation.md +99 -0
- package/skills/rag/references/pipeline.md +151 -0
- package/skills/rag/scripts/verify.sh +99 -0
- package/skills/rails/SKILL.md +264 -0
- package/skills/rails/evals/README.md +12 -0
- package/skills/rails/evals/cases.yaml +47 -0
- package/skills/rails/references/activerecord.md +148 -0
- package/skills/rails/references/hotwire.md +139 -0
- package/skills/rails/references/testing.md +110 -0
- package/skills/rails/scripts/verify.sh +128 -0
- package/skills/railway/SKILL.md +245 -0
- package/skills/railway/evals/README.md +14 -0
- package/skills/railway/evals/cases.yaml +44 -0
- package/skills/railway/references/cli-cookbook.md +137 -0
- package/skills/railway/references/config-as-code.md +120 -0
- package/skills/railway/scripts/verify.sh +162 -0
- package/skills/react/SKILL.md +222 -0
- package/skills/react/evals/README.md +3 -0
- package/skills/react/evals/cases.yaml +43 -0
- package/skills/react/references/data-and-state.md +152 -0
- package/skills/react/references/performance.md +75 -0
- package/skills/react/references/routing.md +99 -0
- package/skills/react/scripts/verify.sh +123 -0
- package/skills/react-native/SKILL.md +220 -0
- package/skills/react-native/evals/README.md +3 -0
- package/skills/react-native/evals/cases.yaml +42 -0
- package/skills/react-native/references/native-modules.md +123 -0
- package/skills/react-native/references/performance-debugging.md +46 -0
- package/skills/react-native/scripts/verify.sh +117 -0
- package/skills/redis/SKILL.md +298 -0
- package/skills/redis/evals/README.md +10 -0
- package/skills/redis/evals/cases.yaml +43 -0
- package/skills/redis/references/caching.md +116 -0
- package/skills/redis/references/locks-and-rate-limiting.md +140 -0
- package/skills/redis/references/queues.md +102 -0
- package/skills/redis/scripts/verify.sh +164 -0
- package/skills/remotion-video/SKILL.md +218 -0
- package/skills/remotion-video/evals/README.md +23 -0
- package/skills/remotion-video/evals/cases.yaml +64 -0
- package/skills/remotion-video/references/captions-pipeline.md +163 -0
- package/skills/remotion-video/references/render-and-pipeline.md +131 -0
- package/skills/remotion-video/scripts/verify.sh +169 -0
- package/skills/render/SKILL.md +256 -0
- package/skills/render/evals/README.md +12 -0
- package/skills/render/evals/cases.yaml +45 -0
- package/skills/render/references/blueprint-reference.md +203 -0
- package/skills/render/scripts/verify.sh +167 -0
- package/skills/replicate/SKILL.md +210 -0
- package/skills/replicate/evals/README.md +9 -0
- package/skills/replicate/evals/cases.yaml +45 -0
- package/skills/replicate/references/cog-packaging.md +89 -0
- package/skills/replicate/references/deployments-api.md +87 -0
- package/skills/replicate/references/webhooks-and-async.md +110 -0
- package/skills/replicate/scripts/verify.sh +162 -0
- package/skills/replicate-images/SKILL.md +241 -0
- package/skills/replicate-images/evals/README.md +13 -0
- package/skills/replicate-images/evals/cases.yaml +41 -0
- package/skills/replicate-images/references/editing-recipes.md +129 -0
- package/skills/replicate-images/references/models.md +131 -0
- package/skills/replicate-images/scripts/verify.sh +178 -0
- package/skills/reporting/SKILL.md +178 -0
- package/skills/reporting/evals/README.md +12 -0
- package/skills/reporting/evals/cases.yaml +46 -0
- package/skills/reporting/references/pipeline.md +213 -0
- package/skills/reporting/scripts/verify.sh +149 -0
- package/skills/research-ops/SKILL.md +200 -0
- package/skills/research-ops/evals/README.md +13 -0
- package/skills/research-ops/evals/cases.yaml +38 -0
- package/skills/research-ops/references/credibility-rubric.md +78 -0
- package/skills/research-ops/references/memo-template.md +63 -0
- package/skills/research-ops/scripts/verify.sh +181 -0
- package/skills/retention/SKILL.md +206 -0
- package/skills/retention/evals/README.md +13 -0
- package/skills/retention/evals/cases.yaml +42 -0
- package/skills/retention/references/health-score-and-metrics.md +97 -0
- package/skills/retention/references/save-and-winback-plays.md +65 -0
- package/skills/review/SKILL.md +222 -0
- package/skills/review/evals/README.md +84 -0
- package/skills/review/evals/cases.yaml +55 -0
- package/skills/review-management/SKILL.md +204 -0
- package/skills/review-management/evals/README.md +13 -0
- package/skills/review-management/evals/cases.yaml +60 -0
- package/skills/review-management/references/platform-apis.md +86 -0
- package/skills/review-management/scripts/verify.sh +128 -0
- package/skills/ruby/SKILL.md +316 -0
- package/skills/ruby/evals/README.md +12 -0
- package/skills/ruby/evals/cases.yaml +41 -0
- package/skills/ruby/references/gems-and-testing.md +208 -0
- package/skills/ruby/references/metaprogramming.md +161 -0
- package/skills/ruby/scripts/verify.sh +83 -0
- package/skills/runpod/SKILL.md +238 -0
- package/skills/runpod/evals/README.md +11 -0
- package/skills/runpod/evals/cases.yaml +47 -0
- package/skills/runpod/references/cost-and-scaling.md +85 -0
- package/skills/runpod/references/serverless-workers.md +101 -0
- package/skills/runpod/scripts/verify.sh +126 -0
- package/skills/rust/SKILL.md +395 -0
- package/skills/rust/evals/README.md +12 -0
- package/skills/rust/evals/cases.yaml +42 -0
- package/skills/rust/references/async-tokio.md +141 -0
- package/skills/rust/references/axum-service.md +132 -0
- package/skills/rust/references/ownership.md +86 -0
- package/skills/rust/references/testing.md +108 -0
- package/skills/rust/scripts/verify.sh +91 -0
- package/skills/sales-pipeline/SKILL.md +162 -0
- package/skills/sales-pipeline/evals/README.md +13 -0
- package/skills/sales-pipeline/evals/cases.yaml +60 -0
- package/skills/sales-pipeline/references/forecasting-math.md +82 -0
- package/skills/sales-pipeline/references/stage-playbook.md +84 -0
- package/skills/sales-pipeline/scripts/verify.sh +210 -0
- package/skills/scaling/SKILL.md +137 -0
- package/skills/scaling/evals/README.md +3 -0
- package/skills/scaling/evals/cases.yaml +42 -0
- package/skills/scaling/references/load-testing-k6.md +127 -0
- package/skills/scaling/scripts/example.load.js +24 -0
- package/skills/scaling/scripts/verify.sh +70 -0
- package/skills/sdd/SKILL.md +203 -0
- package/skills/sdd/evals/README.md +60 -0
- package/skills/sdd/evals/cases.yaml +78 -0
- package/skills/sdd-init/SKILL.md +148 -0
- package/skills/sdd-init/evals/README.md +3 -0
- package/skills/sdd-init/evals/cases.yaml +43 -0
- package/skills/secure-coding/SKILL.md +365 -0
- package/skills/secure-coding/evals/README.md +68 -0
- package/skills/secure-coding/evals/cases.yaml +55 -0
- package/skills/secure-coding/references/authn-authz.md +249 -0
- package/skills/secure-coding/references/owasp-by-stack.md +574 -0
- package/skills/secure-coding/references/secrets-and-supply-chain.md +205 -0
- package/skills/secure-coding/references/threat-modeling.md +213 -0
- package/skills/secure-coding/scripts/verify.sh +208 -0
- package/skills/security-scan/SKILL.md +239 -0
- package/skills/security-scan/evals/README.md +14 -0
- package/skills/security-scan/evals/cases.yaml +50 -0
- package/skills/security-scan/references/tools.md +98 -0
- package/skills/security-scan/references/triage.md +93 -0
- package/skills/security-scan/scripts/verify.sh +108 -0
- package/skills/seo-geo/SKILL.md +192 -0
- package/skills/seo-geo/evals/README.md +14 -0
- package/skills/seo-geo/evals/cases.yaml +45 -0
- package/skills/seo-geo/references/ai-crawler-control.md +104 -0
- package/skills/seo-geo/references/schema-recipes.md +130 -0
- package/skills/seo-geo/scripts/verify.sh +236 -0
- package/skills/ship/SKILL.md +258 -0
- package/skills/ship/evals/README.md +89 -0
- package/skills/ship/evals/cases.yaml +44 -0
- package/skills/shopify/SKILL.md +229 -0
- package/skills/shopify/evals/README.md +14 -0
- package/skills/shopify/evals/cases.yaml +41 -0
- package/skills/shopify/references/apps-graphql.md +103 -0
- package/skills/shopify/references/checkout-extensibility.md +71 -0
- package/skills/shopify/references/liquid-themes.md +89 -0
- package/skills/shopify/scripts/verify.sh +120 -0
- package/skills/shortform-editing/SKILL.md +161 -0
- package/skills/shortform-editing/evals/README.md +16 -0
- package/skills/shortform-editing/evals/cases.yaml +61 -0
- package/skills/shortform-editing/references/captions.md +85 -0
- package/skills/shortform-editing/references/ffmpeg-pipeline.md +126 -0
- package/skills/shortform-editing/scripts/verify.sh +148 -0
- package/skills/shortform-ideation/SKILL.md +153 -0
- package/skills/shortform-ideation/evals/README.md +20 -0
- package/skills/shortform-ideation/evals/cases.yaml +58 -0
- package/skills/shortform-ideation/references/experiment-ledger.md +85 -0
- package/skills/shortform-ideation/references/trend-sources.md +69 -0
- package/skills/shortform-ideation/scripts/verify.sh +172 -0
- package/skills/shortform-packaging/SKILL.md +247 -0
- package/skills/shortform-packaging/evals/README.md +10 -0
- package/skills/shortform-packaging/evals/cases.yaml +48 -0
- package/skills/shortform-packaging/references/package-templates.md +117 -0
- package/skills/shortform-packaging/scripts/verify.sh +210 -0
- package/skills/shortform-strategy/SKILL.md +149 -0
- package/skills/shortform-strategy/evals/README.md +3 -0
- package/skills/shortform-strategy/evals/cases.yaml +52 -0
- package/skills/shortform-strategy/references/learning-loop-template.md +49 -0
- package/skills/shortform-strategy/references/platform-signals-2026.md +46 -0
- package/skills/shortform-strategy/scripts/verify.sh +176 -0
- package/skills/skill-scout/SKILL.md +133 -0
- package/skills/skill-scout/evals/README.md +12 -0
- package/skills/skill-scout/evals/cases.yaml +56 -0
- package/skills/skill-scout/references/install-commands.md +76 -0
- package/skills/skill-scout/scripts/verify.sh +154 -0
- package/skills/social-publisher/SKILL.md +179 -0
- package/skills/social-publisher/evals/README.md +14 -0
- package/skills/social-publisher/evals/cases.yaml +55 -0
- package/skills/social-publisher/references/calendar-schema.md +97 -0
- package/skills/social-publisher/references/platform-limits.md +56 -0
- package/skills/social-publisher/scripts/verify.sh +232 -0
- package/skills/solid-js/SKILL.md +260 -0
- package/skills/solid-js/evals/README.md +3 -0
- package/skills/solid-js/evals/cases.yaml +38 -0
- package/skills/solid-js/references/reactivity-deep-dive.md +89 -0
- package/skills/solid-js/references/router-and-start.md +93 -0
- package/skills/solid-js/scripts/verify.sh +130 -0
- package/skills/sop-builder/SKILL.md +233 -0
- package/skills/sop-builder/evals/README.md +14 -0
- package/skills/sop-builder/evals/cases.yaml +48 -0
- package/skills/sop-builder/references/sop-skeleton.md +170 -0
- package/skills/specify/SKILL.md +214 -0
- package/skills/specify/evals/README.md +73 -0
- package/skills/specify/evals/cases.yaml +80 -0
- package/skills/specify/references/eliciting-requirements.md +77 -0
- package/skills/specify/references/spec-template.md +60 -0
- package/skills/spreadsheet-ops/SKILL.md +180 -0
- package/skills/spreadsheet-ops/evals/README.md +33 -0
- package/skills/spreadsheet-ops/evals/cases.yaml +42 -0
- package/skills/spreadsheet-ops/references/formula-cookbook.md +70 -0
- package/skills/spreadsheet-ops/references/python-excel.md +87 -0
- package/skills/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
- package/skills/spreadsheet-ops/scripts/verify.sh +152 -0
- package/skills/spring-boot/SKILL.md +375 -0
- package/skills/spring-boot/evals/README.md +11 -0
- package/skills/spring-boot/evals/cases.yaml +49 -0
- package/skills/spring-boot/references/jpa.md +94 -0
- package/skills/spring-boot/references/security.md +92 -0
- package/skills/spring-boot/references/testing.md +95 -0
- package/skills/spring-boot/scripts/verify.sh +115 -0
- package/skills/sql/SKILL.md +286 -0
- package/skills/sql/evals/README.md +9 -0
- package/skills/sql/evals/cases.yaml +49 -0
- package/skills/sql/references/ctes-and-recursion.md +63 -0
- package/skills/sql/references/joins-and-sets.md +71 -0
- package/skills/sql/references/portability.md +38 -0
- package/skills/sql/references/window-functions.md +72 -0
- package/skills/sql/scripts/verify.sh +139 -0
- package/skills/sqlite-turso/SKILL.md +214 -0
- package/skills/sqlite-turso/evals/README.md +24 -0
- package/skills/sqlite-turso/evals/cases.yaml +45 -0
- package/skills/sqlite-turso/references/embedded-replicas.md +96 -0
- package/skills/sqlite-turso/scripts/verify.sh +95 -0
- package/skills/stripe/SKILL.md +269 -0
- package/skills/stripe/evals/README.md +11 -0
- package/skills/stripe/evals/cases.yaml +45 -0
- package/skills/stripe/references/going-live.md +64 -0
- package/skills/stripe/references/webhook-events.md +79 -0
- package/skills/stripe/scripts/verify.sh +130 -0
- package/skills/structured-extraction/SKILL.md +230 -0
- package/skills/structured-extraction/evals/README.md +13 -0
- package/skills/structured-extraction/evals/cases.yaml +70 -0
- package/skills/structured-extraction/references/providers.md +152 -0
- package/skills/structured-extraction/scripts/verify.sh +160 -0
- package/skills/suggest/SKILL.md +30 -0
- package/skills/suggest/evals/README.md +14 -0
- package/skills/suggest/evals/cases.yaml +51 -0
- package/skills/supabase/SKILL.md +268 -0
- package/skills/supabase/evals/README.md +12 -0
- package/skills/supabase/evals/cases.yaml +42 -0
- package/skills/supabase/references/auth-ssr.md +173 -0
- package/skills/supabase/references/rls-cookbook.md +122 -0
- package/skills/supabase/scripts/verify.sh +149 -0
- package/skills/svelte/SKILL.md +238 -0
- package/skills/svelte/evals/README.md +3 -0
- package/skills/svelte/evals/cases.yaml +41 -0
- package/skills/svelte/references/runes.md +97 -0
- package/skills/svelte/references/sveltekit-data.md +156 -0
- package/skills/svelte/scripts/verify.sh +128 -0
- package/skills/swift-ios/SKILL.md +217 -0
- package/skills/swift-ios/evals/README.md +3 -0
- package/skills/swift-ios/evals/cases.yaml +46 -0
- package/skills/swift-ios/references/concurrency.md +132 -0
- package/skills/swift-ios/references/testing.md +112 -0
- package/skills/swift-ios/scripts/verify.sh +98 -0
- package/skills/tasks/SKILL.md +260 -0
- package/skills/tasks/evals/README.md +70 -0
- package/skills/tasks/evals/cases.yaml +75 -0
- package/skills/tauri/SKILL.md +224 -0
- package/skills/tauri/evals/README.md +12 -0
- package/skills/tauri/evals/cases.yaml +46 -0
- package/skills/tauri/references/bundling-distribution.md +129 -0
- package/skills/tauri/references/security.md +143 -0
- package/skills/tauri/scripts/verify.sh +178 -0
- package/skills/technical-writing/SKILL.md +230 -0
- package/skills/technical-writing/evals/README.md +12 -0
- package/skills/technical-writing/evals/cases.yaml +53 -0
- package/skills/technical-writing/references/diataxis-modes.md +131 -0
- package/skills/technical-writing/references/vale-starter.md +90 -0
- package/skills/technical-writing/scripts/verify.sh +83 -0
- package/skills/terms-conditions/SKILL.md +147 -0
- package/skills/terms-conditions/evals/README.md +14 -0
- package/skills/terms-conditions/evals/cases.yaml +48 -0
- package/skills/terms-conditions/references/clause-library.md +158 -0
- package/skills/terms-conditions/references/notices-and-aup.md +125 -0
- package/skills/terms-conditions/scripts/verify.sh +92 -0
- package/skills/testing-go/SKILL.md +246 -0
- package/skills/testing-go/evals/README.md +3 -0
- package/skills/testing-go/evals/cases.yaml +44 -0
- package/skills/testing-go/references/coverage-and-benchmarks.md +85 -0
- package/skills/testing-go/references/mocks-and-fakes.md +140 -0
- package/skills/testing-go/references/synctest-and-concurrency.md +82 -0
- package/skills/testing-go/scripts/verify.sh +72 -0
- package/skills/testing-py/SKILL.md +179 -0
- package/skills/testing-py/evals/README.md +5 -0
- package/skills/testing-py/evals/cases.yaml +44 -0
- package/skills/testing-py/references/mocking.md +141 -0
- package/skills/testing-py/references/property-testing.md +99 -0
- package/skills/testing-py/scripts/verify.sh +117 -0
- package/skills/testing-web/SKILL.md +224 -0
- package/skills/testing-web/evals/README.md +11 -0
- package/skills/testing-web/evals/cases.yaml +52 -0
- package/skills/testing-web/references/jest-setup.md +88 -0
- package/skills/testing-web/references/recipes.md +116 -0
- package/skills/testing-web/scripts/verify.sh +111 -0
- package/skills/tiktok-api/SKILL.md +315 -0
- package/skills/tiktok-api/evals/README.md +17 -0
- package/skills/tiktok-api/evals/cases.yaml +51 -0
- package/skills/tiktok-api/references/metrics-and-publish.md +127 -0
- package/skills/tiktok-api/references/oauth-setup.md +105 -0
- package/skills/tiktok-api/references/wiki-schema.md +85 -0
- package/skills/tiktok-api/scripts/verify.sh +96 -0
- package/skills/together-fireworks/SKILL.md +181 -0
- package/skills/together-fireworks/evals/README.md +3 -0
- package/skills/together-fireworks/evals/cases.yaml +50 -0
- package/skills/together-fireworks/references/batch-and-tuning.md +59 -0
- package/skills/together-fireworks/references/models-and-pricing.md +79 -0
- package/skills/together-fireworks/scripts/verify.sh +165 -0
- package/skills/translation-l10n/SKILL.md +229 -0
- package/skills/translation-l10n/evals/README.md +3 -0
- package/skills/translation-l10n/evals/cases.yaml +39 -0
- package/skills/translation-l10n/references/icu-cookbook.md +82 -0
- package/skills/translation-l10n/references/rtl-and-bidi.md +60 -0
- package/skills/typescript/SKILL.md +258 -0
- package/skills/typescript/evals/README.md +15 -0
- package/skills/typescript/evals/cases.yaml +46 -0
- package/skills/typescript/references/build-and-monorepo.md +141 -0
- package/skills/typescript/references/type-system.md +162 -0
- package/skills/typescript/scripts/verify.sh +52 -0
- package/skills/unit-economics/SKILL.md +180 -0
- package/skills/unit-economics/evals/README.md +5 -0
- package/skills/unit-economics/evals/cases.yaml +43 -0
- package/skills/unit-economics/references/formulas.md +144 -0
- package/skills/unit-economics/scripts/verify.sh +179 -0
- package/skills/vector-db/SKILL.md +189 -0
- package/skills/vector-db/evals/README.md +10 -0
- package/skills/vector-db/evals/cases.yaml +45 -0
- package/skills/vector-db/references/engines.md +175 -0
- package/skills/vector-db/references/tuning.md +62 -0
- package/skills/vector-db/scripts/verify.sh +110 -0
- package/skills/vercel/SKILL.md +242 -0
- package/skills/vercel/evals/README.md +23 -0
- package/skills/vercel/evals/cases.yaml +45 -0
- package/skills/vercel/references/cli-cookbook.md +98 -0
- package/skills/vercel/references/vercel-json.md +120 -0
- package/skills/vercel/scripts/verify.sh +168 -0
- package/skills/verify/SKILL.md +188 -0
- package/skills/verify/evals/README.md +78 -0
- package/skills/verify/evals/cases.yaml +74 -0
- package/skills/video-shorts/SKILL.md +163 -0
- package/skills/video-shorts/evals/README.md +15 -0
- package/skills/video-shorts/evals/cases.yaml +56 -0
- package/skills/video-shorts/references/hook-and-script-patterns.md +95 -0
- package/skills/video-shorts/references/specs-and-safe-zones.md +74 -0
- package/skills/video-shorts/scripts/verify.sh +172 -0
- package/skills/vue-nuxt/SKILL.md +384 -0
- package/skills/vue-nuxt/evals/README.md +11 -0
- package/skills/vue-nuxt/evals/cases.yaml +49 -0
- package/skills/vue-nuxt/references/data-and-state.md +127 -0
- package/skills/vue-nuxt/references/migration-nuxt4.md +79 -0
- package/skills/vue-nuxt/references/nitro-and-rendering.md +117 -0
- package/skills/vue-nuxt/references/reactivity.md +135 -0
- package/skills/vue-nuxt/scripts/verify.sh +148 -0
- package/skills/webhooks/SKILL.md +246 -0
- package/skills/webhooks/evals/README.md +15 -0
- package/skills/webhooks/evals/cases.yaml +46 -0
- package/skills/webhooks/references/framework-raw-body.md +97 -0
- package/skills/webhooks/references/signature-schemes.md +66 -0
- package/skills/webhooks/scripts/verify.sh +142 -0
- package/skills/webinar/SKILL.md +196 -0
- package/skills/webinar/evals/README.md +14 -0
- package/skills/webinar/evals/cases.yaml +44 -0
- package/skills/webinar/references/email-cadence.md +75 -0
- package/skills/webinar/references/run-of-show.md +83 -0
- package/skills/whatsapp-telegram/SKILL.md +235 -0
- package/skills/whatsapp-telegram/evals/README.md +11 -0
- package/skills/whatsapp-telegram/evals/cases.yaml +44 -0
- package/skills/whatsapp-telegram/references/telegram-bot-api.md +91 -0
- package/skills/whatsapp-telegram/references/whatsapp-cloud-api.md +103 -0
- package/skills/whatsapp-telegram/scripts/verify.sh +90 -0
- package/skills/wordpress/SKILL.md +224 -0
- package/skills/wordpress/evals/README.md +3 -0
- package/skills/wordpress/evals/cases.yaml +50 -0
- package/skills/wordpress/references/hardening.md +108 -0
- package/skills/wordpress/references/performance.md +80 -0
- package/skills/wordpress/references/woocommerce.md +65 -0
- package/skills/wordpress/scripts/verify.sh +96 -0
- package/skills/worktrees/SKILL.md +199 -0
- package/skills/worktrees/evals/README.md +78 -0
- package/skills/worktrees/evals/cases.yaml +47 -0
- package/skills/youtube-api/SKILL.md +286 -0
- package/skills/youtube-api/evals/README.md +3 -0
- package/skills/youtube-api/evals/cases.yaml +50 -0
- package/skills/youtube-api/references/analytics-queries.md +89 -0
- package/skills/youtube-api/references/oauth-setup.md +55 -0
- package/skills/youtube-api/references/wiki-schema.md +70 -0
- package/skills/youtube-api/scripts/verify.sh +84 -0
- package/skills/youtube-ideation/SKILL.md +234 -0
- package/skills/youtube-ideation/evals/README.md +14 -0
- package/skills/youtube-ideation/evals/cases.yaml +52 -0
- package/skills/youtube-ideation/references/idea-ledger-and-loop.md +89 -0
- package/skills/youtube-ideation/references/research-and-signals.md +92 -0
- package/skills/youtube-ideation/scripts/verify.sh +237 -0
- package/skills/youtube-packaging/SKILL.md +220 -0
- package/skills/youtube-packaging/evals/README.md +16 -0
- package/skills/youtube-packaging/evals/cases.yaml +48 -0
- package/skills/youtube-packaging/references/description-and-chapters.md +135 -0
- package/skills/youtube-packaging/scripts/verify.sh +250 -0
- package/skills/youtube-strategy/SKILL.md +157 -0
- package/skills/youtube-strategy/evals/README.md +5 -0
- package/skills/youtube-strategy/evals/cases.yaml +61 -0
- package/skills/youtube-strategy/references/channel-architecture.md +46 -0
- package/skills/youtube-strategy/references/wiki-records.md +86 -0
- package/skills/youtube-strategy/scripts/verify.sh +118 -0
- package/skills/youtube-thumbnails/SKILL.md +180 -0
- package/skills/youtube-thumbnails/evals/README.md +11 -0
- package/skills/youtube-thumbnails/evals/cases.yaml +48 -0
- package/skills/youtube-thumbnails/references/composition-and-specs.md +69 -0
- package/skills/youtube-thumbnails/references/experiment-log-format.md +65 -0
- package/skills/youtube-thumbnails/scripts/verify.sh +123 -0
- package/targets/claude.js +23 -0
- package/targets/codex.js +29 -0
- package/targets/cursor.js +20 -0
- package/targets/gemini.js +29 -0
- package/targets/index.js +55 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# verify.sh - re-derive a unit-economics worksheet and fail if the arithmetic lies.
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# cd <dir containing unit-economics.yaml|.csv|.md>
|
|
7
|
+
# ./verify.sh [path-to-worksheet]
|
|
8
|
+
#
|
|
9
|
+
# Read-only: never mutates anything. Parses named inputs/outputs and checks:
|
|
10
|
+
# - cac == period_sm_spend / new_customers
|
|
11
|
+
# - contribution_margin == monthly_arpa * gross_margin_pct
|
|
12
|
+
# - payback_months == cac / (monthly_arpa * gross_margin_pct)
|
|
13
|
+
# - ltv uses gross-margin form (ARPA*GM)/churn, NOT revenue form ARPA/churn
|
|
14
|
+
# - ltv_cac == ltv / cac (within 0.05)
|
|
15
|
+
# - implied lifetime (1/monthly_churn) <= 48 months unless lifetime_cap_override set
|
|
16
|
+
#
|
|
17
|
+
# Tolerance: +/-0.5% on money figures, +/-0.05 on ratios.
|
|
18
|
+
# Exits 0 on a clean worksheet AND on no worksheet found (no false failure).
|
|
19
|
+
# Exits 1 with the specific failing check on any violation.
|
|
20
|
+
#
|
|
21
|
+
# Portable: stock macOS bash 3.2 + awk. No associative arrays, no mapfile.
|
|
22
|
+
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
if [ -t 1 ]; then
|
|
26
|
+
RED=$'\033[31m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; RESET=$'\033[0m'
|
|
27
|
+
else
|
|
28
|
+
RED=''; GREEN=''; YELLOW=''; RESET=''
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
fail() { printf '%s[fail]%s %s\n' "$RED" "$RESET" "$*"; failed=1; }
|
|
32
|
+
ok() { printf '%s[ ok ]%s %s\n' "$GREEN" "$RESET" "$*"; }
|
|
33
|
+
|
|
34
|
+
# --- locate the worksheet ----------------------------------------------------
|
|
35
|
+
file="${1:-}"
|
|
36
|
+
if [ -z "$file" ]; then
|
|
37
|
+
for cand in unit-economics.yaml unit-economics.yml unit-economics.csv unit-economics.md; do
|
|
38
|
+
if [ -f "$cand" ]; then file="$cand"; break; fi
|
|
39
|
+
done
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -z "$file" ] || [ ! -f "$file" ]; then
|
|
43
|
+
printf '%s[skip]%s no unit-economics.{yaml,csv,md} found - nothing to verify.\n' "$YELLOW" "$RESET"
|
|
44
|
+
exit 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# --- extract a numeric field by key (yaml-ish, csv-ish, or "key: value") -----
|
|
48
|
+
# Matches lines like " cac: 1500", "cac,1500", "cac = 1500", "| cac | 1500 |".
|
|
49
|
+
# Strips $ , % and surrounding noise; takes the first number after the key.
|
|
50
|
+
getnum() {
|
|
51
|
+
key="$1"
|
|
52
|
+
awk -v k="$key" '
|
|
53
|
+
{ line=$0
|
|
54
|
+
# normalise separators to spaces, drop currency/percent/comma noise
|
|
55
|
+
gsub(/[,$%|{}\[\]]/, " ", line)
|
|
56
|
+
gsub(/[:=]/, " ", line)
|
|
57
|
+
}
|
|
58
|
+
line ~ ("(^|[^a-zA-Z_])" k "([^a-zA-Z_]|$)") {
|
|
59
|
+
n=split(line, a, " ")
|
|
60
|
+
seen=0
|
|
61
|
+
for (i=1;i<=n;i++){
|
|
62
|
+
if (a[i]==k){ seen=1; continue }
|
|
63
|
+
if (seen && a[i] ~ /^-?[0-9]+(\.[0-9]+)?$/){ print a[i]; exit }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
' "$file"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
spend=$(getnum period_sm_spend)
|
|
70
|
+
newc=$(getnum new_customers)
|
|
71
|
+
arpa=$(getnum monthly_arpa)
|
|
72
|
+
gm=$(getnum gross_margin_pct)
|
|
73
|
+
churn=$(getnum monthly_churn)
|
|
74
|
+
override=$(getnum lifetime_cap_override)
|
|
75
|
+
|
|
76
|
+
cac=$(getnum cac)
|
|
77
|
+
cm=$(getnum contribution_margin)
|
|
78
|
+
ltv=$(getnum ltv)
|
|
79
|
+
payback=$(getnum payback_months)
|
|
80
|
+
ltvcac=$(getnum ltv_cac)
|
|
81
|
+
|
|
82
|
+
failed=0
|
|
83
|
+
|
|
84
|
+
require() { # name value
|
|
85
|
+
if [ -z "$2" ]; then fail "missing required input '$1' in $file"; fi
|
|
86
|
+
}
|
|
87
|
+
require period_sm_spend "$spend"
|
|
88
|
+
require new_customers "$newc"
|
|
89
|
+
require monthly_arpa "$arpa"
|
|
90
|
+
require gross_margin_pct "$gm"
|
|
91
|
+
require monthly_churn "$churn"
|
|
92
|
+
if [ "$failed" -ne 0 ]; then
|
|
93
|
+
printf '\n%sFAIL:%s worksheet is missing inputs needed to verify.\n' "$RED" "$RESET"
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# gross_margin_pct may be given as 0.75 or 75; normalise to a fraction.
|
|
98
|
+
gm=$(awk -v g="$gm" 'BEGIN{ if (g>1.0001) g=g/100; printf "%.6f", g }')
|
|
99
|
+
|
|
100
|
+
printf -- '----- verifying %s\n' "$file"
|
|
101
|
+
|
|
102
|
+
# helper: are two numbers within tolerance? tol is a fraction of |expected|.
|
|
103
|
+
close() { # actual expected tol
|
|
104
|
+
awk -v a="$1" -v e="$2" -v t="$3" 'BEGIN{
|
|
105
|
+
d=a-e; if(d<0)d=-d;
|
|
106
|
+
lim=e; if(lim<0)lim=-lim;
|
|
107
|
+
lim=lim*t; if(lim<0.0001)lim=0.0001; # floor so exact zeros still compare
|
|
108
|
+
exit (d<=lim)?0:1
|
|
109
|
+
}'
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
exp_cac=$(awk -v s="$spend" -v n="$newc" 'BEGIN{ if(n==0){print "NaN"} else printf "%.6f", s/n }')
|
|
113
|
+
exp_cm=$(awk -v a="$arpa" -v g="$gm" 'BEGIN{ printf "%.6f", a*g }')
|
|
114
|
+
exp_pay=$(awk -v c="$exp_cac" -v a="$arpa" -v g="$gm" 'BEGIN{ d=a*g; if(d==0){print "NaN"} else printf "%.6f", c/d }')
|
|
115
|
+
exp_ltv=$(awk -v a="$arpa" -v g="$gm" -v ch="$churn" 'BEGIN{ if(ch==0){print "NaN"} else printf "%.6f", (a*g)/ch }')
|
|
116
|
+
rev_ltv=$(awk -v a="$arpa" -v ch="$churn" 'BEGIN{ if(ch==0){print "NaN"} else printf "%.6f", a/ch }')
|
|
117
|
+
|
|
118
|
+
# 1. CAC
|
|
119
|
+
if [ -n "$cac" ]; then
|
|
120
|
+
if close "$cac" "$exp_cac" 0.005; then ok "CAC $cac == spend/new ($exp_cac)";
|
|
121
|
+
else fail "CAC $cac != spend/new_customers ($exp_cac)"; fi
|
|
122
|
+
else
|
|
123
|
+
fail "stated output 'cac' missing"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
# 2. contribution margin
|
|
127
|
+
if [ -n "$cm" ]; then
|
|
128
|
+
if close "$cm" "$exp_cm" 0.005; then ok "contribution_margin $cm == ARPA*GM ($exp_cm)";
|
|
129
|
+
else fail "contribution_margin $cm != ARPA*GM% ($exp_cm)"; fi
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
# 3. payback
|
|
133
|
+
if [ -n "$payback" ]; then
|
|
134
|
+
if close "$payback" "$exp_pay" 0.005; then ok "payback_months $payback == CAC/(ARPA*GM) ($exp_pay)";
|
|
135
|
+
else fail "payback_months $payback != CAC/(ARPA*GM%) ($exp_pay)"; fi
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
# 4. LTV must be gross-margin form, not revenue form
|
|
139
|
+
if [ -n "$ltv" ]; then
|
|
140
|
+
if close "$ltv" "$exp_ltv" 0.005; then
|
|
141
|
+
ok "LTV $ltv == (ARPA*GM)/churn ($exp_ltv)"
|
|
142
|
+
elif close "$ltv" "$rev_ltv" 0.005; then
|
|
143
|
+
fail "LTV $ltv uses REVENUE form ARPA/churn ($rev_ltv); use gross-margin (ARPA*GM)/churn ($exp_ltv)"
|
|
144
|
+
else
|
|
145
|
+
fail "LTV $ltv != (ARPA*GM)/churn ($exp_ltv)"
|
|
146
|
+
fi
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
# 5. LTV:CAC
|
|
150
|
+
if [ -n "$ltvcac" ] && [ -n "$cac" ] && [ -n "$ltv" ]; then
|
|
151
|
+
exp_ratio=$(awk -v l="$ltv" -v c="$cac" 'BEGIN{ if(c==0){print "NaN"} else printf "%.6f", l/c }')
|
|
152
|
+
# absolute 0.05 tolerance on the ratio
|
|
153
|
+
if awk -v a="$ltvcac" -v e="$exp_ratio" 'BEGIN{ d=a-e; if(d<0)d=-d; exit (d<=0.05)?0:1 }'; then
|
|
154
|
+
ok "ltv_cac $ltvcac == LTV/CAC ($exp_ratio)"
|
|
155
|
+
else
|
|
156
|
+
fail "ltv_cac $ltvcac != LTV/CAC ($exp_ratio)"
|
|
157
|
+
fi
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
# 6. lifetime cap
|
|
161
|
+
life=$(awk -v ch="$churn" 'BEGIN{ if(ch==0){print "999999"} else printf "%.2f", 1/ch }')
|
|
162
|
+
cap=48
|
|
163
|
+
if [ -n "$override" ]; then cap="$override"; fi
|
|
164
|
+
if awk -v l="$life" -v c="$cap" 'BEGIN{ exit (l<=c)?0:1 }'; then
|
|
165
|
+
ok "implied lifetime ${life}mo <= cap ${cap}mo"
|
|
166
|
+
else
|
|
167
|
+
if [ -n "$override" ]; then
|
|
168
|
+
fail "implied lifetime ${life}mo exceeds override cap ${cap}mo"
|
|
169
|
+
else
|
|
170
|
+
fail "implied lifetime ${life}mo exceeds 48mo cap; set lifetime_cap_override to justify"
|
|
171
|
+
fi
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
echo
|
|
175
|
+
if [ "$failed" -ne 0 ]; then
|
|
176
|
+
printf '%sFAIL:%s worksheet arithmetic is inconsistent.\n' "$RED" "$RESET"
|
|
177
|
+
exit 1
|
|
178
|
+
fi
|
|
179
|
+
printf '%sPASS:%s worksheet is self-consistent.\n' "$GREEN" "$RESET"
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vector-db
|
|
3
|
+
description: "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate, or pgvector; designing a collection/index (distance metric, dimensions, HNSW m/ef_construction, named vectors); filtering on metadata/payload; running hybrid dense+sparse search; or picking quantization to cut RAM and cost. Symptoms: search returns garbage, filters get silently ignored, recall is low, queries are slow, the bill is too high, a filtered query returns fewer than k rows. Triggers: 'set up a vector database', 'my similarity search ignores the metadata filter', 'ef_search vs recall', 'move off Pinecone to pgvector to cut cost', 'hybrid search with RRF', 'why does my filtered query return fewer than k results', 'crear una colección en Qdrant con cuantización binaria', 'la cerca vectorial retorna resultats dolents'. NOT how to produce, chunk, or judge embeddings (that is embeddings-search)."
|
|
4
|
+
tags: [vector-database, pinecone, qdrant, weaviate, pgvector, hnsw, hybrid-search, metadata-filter, quantization]
|
|
5
|
+
recommends: [embeddings-search, rag, postgresdb, redis, supabase]
|
|
6
|
+
origin: risco
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# vector-db — operate the store, not the embeddings
|
|
10
|
+
|
|
11
|
+
You own the **store**: the collection schema, the index, the filter path, recall-vs-latency
|
|
12
|
+
tuning, hybrid fusion, quantization, and the production knobs (upserts, namespaces, deletes,
|
|
13
|
+
backups). You operate it across the four engines a Claude agent actually meets: **pgvector**
|
|
14
|
+
(Postgres extension), **Qdrant**, **Weaviate**, **Pinecone** (serverless).
|
|
15
|
+
|
|
16
|
+
Three things are **not** yours, and pretending they are produces wrong advice:
|
|
17
|
+
|
|
18
|
+
- Producing, chunking, rewriting, or scoring embeddings → `../embeddings-search/SKILL.md`. You
|
|
19
|
+
store vectors; you do not make or judge them.
|
|
20
|
+
- Assembling the retrieve → rerank → prompt → generate loop and its eval → `../rag/SKILL.md`.
|
|
21
|
+
- General Postgres (non-vector schema, EXPLAIN, RLS, VACUUM, pooling) → `../postgresdb/SKILL.md`.
|
|
22
|
+
You own **only** the pgvector surface: the `vector`/`halfvec` column, its index, its operators,
|
|
23
|
+
its recall. "My Postgres is slow in general" is theirs; "my `<=>` query has low recall" is yours.
|
|
24
|
+
|
|
25
|
+
## Pick the engine
|
|
26
|
+
|
|
27
|
+
Match the engine to where the data already lives and how much ops you want to run. All four
|
|
28
|
+
implement HNSW with comparable recall at a matched `ef`, so the differentiator is operations and
|
|
29
|
+
hybrid, not raw quality.
|
|
30
|
+
|
|
31
|
+
| Engine | Best when | Hybrid built-in | Ops cost | Scale sweet spot |
|
|
32
|
+
|---|---|---|---|---|
|
|
33
|
+
| **pgvector** | Data already in Postgres; one less system to run | No — DIY (`vector` + `tsvector`, combine yourself) | You already run Postgres | ≤ a few M vectors |
|
|
34
|
+
| **Qdrant** | You want best filtered-search latency and self-host control | Yes — `query` API, `prefetch` + RRF/DBSF, server-side IDF | Self-host or cloud | 10M+ |
|
|
35
|
+
| **Weaviate** | You want hybrid + modules out of the box | Yes — `alpha` + `fusionType`, BlockMax WAND BM25 | Self-host or cloud | 10M+ |
|
|
36
|
+
| **Pinecone** | You refuse to operate anything | Yes — sparse-dense, integrated inference | Zero (serverless) | Any (pay per use) |
|
|
37
|
+
|
|
38
|
+
Rule: **don't add a new system to host vectors if the rows already live in Postgres and you are
|
|
39
|
+
under a few million.** pgvector is one extension, not a second database to back up and monitor.
|
|
40
|
+
|
|
41
|
+
## Design the collection & index
|
|
42
|
+
|
|
43
|
+
1. **Distance metric MUST match the embedding model.** A model trained for cosine, indexed with
|
|
44
|
+
L2, ranks *silently wrong* — no error, just bad results. OpenAI `text-embedding-3-*`, Cohere,
|
|
45
|
+
most sentence-transformers → cosine. pgvector operator cheatsheet:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
<-> L2 / Euclidean (vector_l2_ops)
|
|
49
|
+
<=> cosine distance (vector_cosine_ops) <- the common one
|
|
50
|
+
<#> negative inner product (vector_ip_ops) <- for normalized vectors
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
2. **Dimensions are fixed by the model**, not a choice. `text-embedding-3-small` = 1536,
|
|
54
|
+
`-3-large` = 3072. pgvector's `vector` caps at 2000 dims for an index; for more, use `halfvec`.
|
|
55
|
+
|
|
56
|
+
3. **HNSW defaults and the one invariant.** Build-time `m` (default 16) and `ef_construction`
|
|
57
|
+
(default 64); query-time `ef_search` (pgvector default 40). Keep `ef_construction >= 2*m`
|
|
58
|
+
(so ≥32 at the default `m`) — too low starves graph quality and recall never recovers without
|
|
59
|
+
a rebuild. Raise `m` to 32–48 only for high-dim or high-recall needs (more RAM, slower build).
|
|
60
|
+
|
|
61
|
+
4. **IVFFlat only when build speed beats recall.** It is cheaper to build but lower recall and
|
|
62
|
+
needs `lists`/`probes` tuning; on a selective filter it is the wrong default (see next section).
|
|
63
|
+
Prefer HNSW unless you have a measured reason.
|
|
64
|
+
|
|
65
|
+
5. **Named vectors when one object has multiple spaces** (e.g. a dense semantic vector + a sparse
|
|
66
|
+
BM25 vector, or title-vector + body-vector). Qdrant and Weaviate support this natively; it is
|
|
67
|
+
how you do hybrid in one collection instead of two.
|
|
68
|
+
|
|
69
|
+
## Metadata / payload filtering
|
|
70
|
+
|
|
71
|
+
The #1 "search is broken" bug: the filter is applied **after** top-k, so a selective filter
|
|
72
|
+
returns fewer than `k` rows (or zero). Fix it by filtering *inside* the search and indexing the
|
|
73
|
+
filter field.
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Bad: ANN top-k=10, THEN drop rows where tenant_id != 'acme' -> often < 10, sometimes 0
|
|
77
|
+
Good: search the index WITH the filter as a constraint -> k rows that already match
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- **Index every field you filter on.** Unindexed filters force a scan and kill latency. Qdrant:
|
|
81
|
+
create a payload index. Pinecone: metadata filtering is in the retrieval path (still keep
|
|
82
|
+
cardinality sane). pgvector: a B-tree (or partition) on `tenant_id` so the planner can use it.
|
|
83
|
+
- **Prefer in-graph / in-path filtering.** Qdrant filters *inside* HNSW traversal; Pinecone
|
|
84
|
+
serverless filters in the retrieval path. Both beat naive post-filter.
|
|
85
|
+
- **pgvector 0.8 iterative scan** is the fix when a selective `WHERE` returns too few rows:
|
|
86
|
+
|
|
87
|
+
```sql
|
|
88
|
+
SET hnsw.iterative_scan = 'relaxed_order'; -- or 'strict_order' if exact ordering matters
|
|
89
|
+
SET hnsw.ef_search = 100;
|
|
90
|
+
SELECT id FROM docs
|
|
91
|
+
WHERE tenant_id = 'acme' -- selective filter
|
|
92
|
+
ORDER BY embedding <=> $1 -- cosine, matches the model
|
|
93
|
+
LIMIT 10;
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Without iterative scan (pgvector < 0.8 behavior), a highly selective filter silently returns
|
|
97
|
+
fewer than `LIMIT` rows. Never recommend IVFFlat-only with a selective filter and no iterative
|
|
98
|
+
scan — that is the deprecated foot-gun.
|
|
99
|
+
|
|
100
|
+
## Tune recall vs latency
|
|
101
|
+
|
|
102
|
+
You cannot tune what you do not measure. Establish recall **before** shipping.
|
|
103
|
+
|
|
104
|
+
1. Build an exact baseline: brute-force the true top-k on a sample (a few hundred queries) — in
|
|
105
|
+
pgvector, query without the index (seq scan) for ground truth.
|
|
106
|
+
2. Query the index and compute recall@k = overlap with the baseline.
|
|
107
|
+
3. Raise the query-time knob until recall hits target (commonly ≥0.95), then stop — higher `ef`
|
|
108
|
+
costs latency for nothing:
|
|
109
|
+
|
|
110
|
+
| Engine | Knob | Default |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| pgvector | `hnsw.ef_search` | 40 |
|
|
113
|
+
| Qdrant | `hnsw_ef` (search) | per-collection |
|
|
114
|
+
| Weaviate | `ef` (vectorIndexConfig) | dynamic |
|
|
115
|
+
| Pinecone | (managed) | — |
|
|
116
|
+
|
|
117
|
+
Full parameter table and the recall recipe live in [references/tuning.md](references/tuning.md).
|
|
118
|
+
|
|
119
|
+
## Hybrid search
|
|
120
|
+
|
|
121
|
+
Dense (semantic) + sparse (BM25/keyword) catches exact terms, IDs, and rare tokens that dense
|
|
122
|
+
alone misses. The two normalize differently, so you **fuse**, you don't add raw scores.
|
|
123
|
+
|
|
124
|
+
- **RRF** (reciprocal rank fusion): robust default, score-scale agnostic, combines ranks.
|
|
125
|
+
- **Relative-score / DBSF**: normalizes scores before combining — use when you trust score scales.
|
|
126
|
+
|
|
127
|
+
Per engine:
|
|
128
|
+
|
|
129
|
+
- **Weaviate**: one call — `hybrid(query, alpha=0.5, fusionType=relativeScoreFusion)`. `alpha`
|
|
130
|
+
slides 0.0 (pure keyword) → 1.0 (pure vector). BM25 is BlockMax WAND (default from v1.30, ~10x faster).
|
|
131
|
+
- **Qdrant**: `prefetch` a dense and a sparse query, then a fusion step (`Fusion.RRF` or DBSF);
|
|
132
|
+
IDF is computed server-side (v1.15+).
|
|
133
|
+
- **Pinecone**: sparse-dense vectors in one index, or integrated inference (embed + rerank server-side).
|
|
134
|
+
- **pgvector**: no built-in hybrid — run vector (`<=>`) and `ts_rank` over a `tsvector` column
|
|
135
|
+
separately and combine ranks yourself (RRF in SQL or app code).
|
|
136
|
+
|
|
137
|
+
Concrete current-API code for all four is in [references/engines.md](references/engines.md).
|
|
138
|
+
|
|
139
|
+
## Quantization & cost
|
|
140
|
+
|
|
141
|
+
Quantization trades recall for RAM/cost. Decide by **dimension count and a recall test**, never blind.
|
|
142
|
+
|
|
143
|
+
| Method | Compression | When safe |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| Scalar (int8) | ~4x | Almost always; tiny recall loss. Good default RAM cut. |
|
|
146
|
+
| Product (PQ) | 8–64x | Large corpora where RAM dominates; needs tuning + recall check. |
|
|
147
|
+
| Binary | ~32x (~40x faster via SIMD popcount) | **High-dim only** (≥1024). On 384-dim it shreds recall — measure or don't. |
|
|
148
|
+
| pgvector `halfvec` | ~2x | Near-free: 16-bit float, near-identical recall, and required for >2000 dims. |
|
|
149
|
+
|
|
150
|
+
Reach for `halfvec` first in Postgres — it is the cheapest win. Reach for binary only on
|
|
151
|
+
high-dim vectors and only after a recall test, optionally with full-precision rescoring.
|
|
152
|
+
|
|
153
|
+
## Operate it
|
|
154
|
+
|
|
155
|
+
- **Batch upserts.** One-by-one upserts are 10–100x slower and hammer the index. Send batches of
|
|
156
|
+
hundreds; size to the engine's payload limit.
|
|
157
|
+
- **Namespaces / multitenancy.** Pinecone namespaces and Qdrant payload-keyed isolation partition
|
|
158
|
+
tenants inside one index — cheaper and faster than a collection per tenant at low tenant counts.
|
|
159
|
+
- **Delete by filter**, not by enumerating ids, when removing a tenant or a stale source.
|
|
160
|
+
- **Replicas** for read throughput / HA; **snapshots/backups** before any index rebuild or
|
|
161
|
+
dimension/metric change (those are not in-place — plan a reindex).
|
|
162
|
+
- **To "update" a vector, re-upsert by id.** Do not store only raw text and re-embed on read.
|
|
163
|
+
|
|
164
|
+
## Anti-patterns
|
|
165
|
+
|
|
166
|
+
| Anti-pattern | Why it bites | Do instead |
|
|
167
|
+
|---|---|---|
|
|
168
|
+
| Cosine-trained model indexed with L2 (`<->`) | Silently wrong ranking, no error | Match metric to model — cosine → `<=>` / `vector_cosine_ops` |
|
|
169
|
+
| Post-filtering top-k results | Returns < k rows, sometimes 0, on selective filters | Filter inside the search; index the filter field |
|
|
170
|
+
| IVFFlat + selective filter, no iterative scan | Drops rows; deprecated path in pgvector 0.8 | HNSW + `hnsw.iterative_scan='relaxed_order'` |
|
|
171
|
+
| Never measuring recall | "Search is bad" with no number to move | Recall@k vs an exact baseline before shipping |
|
|
172
|
+
| Binary quantization on 384-dim | Recall collapses, then blamed on the engine | Binary only ≥1024 dims, after a recall test; else scalar/halfvec |
|
|
173
|
+
| One-by-one upserts | 10–100x slower, index thrash | Batch hundreds per request |
|
|
174
|
+
| `ef_construction < 2*m` | Permanently weak graph; recall needs a full rebuild | Keep `ef_construction >= 2*m` (≥32 at default `m=16`) |
|
|
175
|
+
| Store only raw text, re-embed to "update" | Drift, cost, no point-update path | Re-upsert the vector by id |
|
|
176
|
+
| Unindexed filter field | Full scan, latency spikes | Payload index (Qdrant) / B-tree (pgvector) / sane metadata cardinality (Pinecone) |
|
|
177
|
+
|
|
178
|
+
## References & siblings
|
|
179
|
+
|
|
180
|
+
- [references/engines.md](references/engines.md) — current-API recipes per engine: create
|
|
181
|
+
collection/index + a filtered hybrid query (pgvector SQL + halfvec + iterative scan; Qdrant
|
|
182
|
+
named dense+sparse + `query_points` RRF; Weaviate `hybrid`; Pinecone serverless sparse-dense).
|
|
183
|
+
- [references/tuning.md](references/tuning.md) — HNSW vs IVFFlat parameter table, recall-measurement
|
|
184
|
+
recipe, quantization tradeoffs, per-engine filtered-search pitfalls.
|
|
185
|
+
|
|
186
|
+
Siblings: embeddings/chunking/retrieval-quality → `../embeddings-search/SKILL.md`; the full RAG
|
|
187
|
+
loop → `../rag/SKILL.md`; general Postgres → `../postgresdb/SKILL.md`.
|
|
188
|
+
|
|
189
|
+
Validate a produced index DDL / collection schema with `scripts/verify.sh <artifact-file>`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# evals — vector-db
|
|
2
|
+
|
|
3
|
+
These cases are run by the repo's standard skill-eval harness against the skill router. The
|
|
4
|
+
`should_trigger` prompts assert that vector-db is the skill that fires (including the non-obvious
|
|
5
|
+
"search ignores my filter" and the Spanish/Catalan phrasings); `should_not_trigger` prompts assert
|
|
6
|
+
the router yields to the named sibling (`embeddings-search`, `rag`, `postgresdb`, `redis`,
|
|
7
|
+
`supabase`) instead of vector-db; and the `capability` scenario is graded by a judge against its
|
|
8
|
+
`must_include` rubric. No live vector database or Postgres instance is required — routing is
|
|
9
|
+
matched against the skill's description/triggers and the capability answer is judged on content.
|
|
10
|
+
Run them with the repo's usual eval command pointed at `skills/vector-db/evals/cases.yaml`.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
skill: vector-db
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Set up a Qdrant collection with metadata filtering for our docs."
|
|
5
|
+
why: "Core store design — collection schema plus a payload-indexed filter field is squarely vector-db."
|
|
6
|
+
- prompt: "My similarity search ignores my category filter and recall is bad."
|
|
7
|
+
why: "Reads like a bug but is a store-config issue (post-filter / unindexed filter / low ef_search); the symptom phrasing is non-obvious and never names a vector DB."
|
|
8
|
+
- prompt: "We need to move off Pinecone to pgvector to cut cost."
|
|
9
|
+
why: "Migration between stores, including metric/index/quantization re-design, is explicitly in scope."
|
|
10
|
+
- prompt: "Add hybrid search with RRF to our Weaviate setup."
|
|
11
|
+
why: "Hybrid dense+sparse plus a fusion strategy is a named vector-db section."
|
|
12
|
+
- prompt: "crear una colección en Qdrant con cuantización binaria para ahorrar RAM"
|
|
13
|
+
why: "Spanish trigger covering quantization/cost — binary quantization tradeoff is core scope."
|
|
14
|
+
- prompt: "ef_search is 40 and recall is only 0.7, how do I tune the HNSW index?"
|
|
15
|
+
why: "Non-obvious tuning phrasing; recall-vs-latency knob tuning against a baseline is owned here."
|
|
16
|
+
- prompt: "My filtered pgvector query keeps returning fewer than k rows when I add a WHERE on tenant_id."
|
|
17
|
+
why: "Classic pgvector 0.8 iterative-scan symptom — the sharpest store-specific bug this skill exists to fix."
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "Which embedding model and chunk size should I use for these PDFs?"
|
|
21
|
+
route_to: "embeddings-search"
|
|
22
|
+
why: "Producing/chunking vectors is the technique layer, not the store."
|
|
23
|
+
- prompt: "Build the full RAG pipeline: retrieve, rerank, prompt, and generate an answer."
|
|
24
|
+
route_to: "rag"
|
|
25
|
+
why: "End-to-end pipeline orchestration and its eval, not the data layer underneath it."
|
|
26
|
+
- prompt: "My Postgres is slow, help me read this EXPLAIN and add the right indexes."
|
|
27
|
+
route_to: "postgresdb"
|
|
28
|
+
why: "General Postgres performance with no vector column involved is postgresdb's surface."
|
|
29
|
+
- prompt: "Cache these API responses in Redis with a 5-minute TTL."
|
|
30
|
+
route_to: "redis"
|
|
31
|
+
why: "Redis as a cache, not as a vector store."
|
|
32
|
+
- prompt: "Set up Supabase auth and row-level security for my app."
|
|
33
|
+
route_to: "supabase"
|
|
34
|
+
why: "Supabase platform features, not its pgvector usage."
|
|
35
|
+
|
|
36
|
+
capability:
|
|
37
|
+
- scenario: "Design a pgvector setup for 2M OpenAI text-embedding-3-small (1536-dim) vectors with a tenant_id filter. Search is slow and sometimes returns fewer than k rows when filtering."
|
|
38
|
+
must_include:
|
|
39
|
+
- "cosine index (vector_cosine_ops / <=>) to match the embedding model"
|
|
40
|
+
- "HNSW with sensible m and ef_construction (ef_construction >= 2*m) plus query-time hnsw.ef_search"
|
|
41
|
+
- "hnsw.iterative_scan (0.8) so the selective tenant_id filter stops returning fewer than k rows"
|
|
42
|
+
- "an index on tenant_id (B-tree or partition) so the filter is cheap"
|
|
43
|
+
- "a recall-measurement step against an exact/brute-force baseline before shipping"
|
|
44
|
+
- "halfvec mentioned as an optional ~2x storage cut at near-identical recall"
|
|
45
|
+
- "routes embedding-model and chunking questions to embeddings-search"
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# engines.md — per-engine recipes (current APIs)
|
|
2
|
+
|
|
3
|
+
Concrete create-collection / create-index + a filtered hybrid query for each of the four engines.
|
|
4
|
+
Adjust dims and metric to your model; cosine shown throughout (the common case).
|
|
5
|
+
|
|
6
|
+
## pgvector (Postgres extension, 0.8.x)
|
|
7
|
+
|
|
8
|
+
HNSW since 0.5.0; iterative scan, `halfvec`, and `binary_quantize` since 0.8.0.
|
|
9
|
+
|
|
10
|
+
```sql
|
|
11
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
12
|
+
|
|
13
|
+
CREATE TABLE docs (
|
|
14
|
+
id bigserial PRIMARY KEY,
|
|
15
|
+
tenant_id text NOT NULL,
|
|
16
|
+
body text,
|
|
17
|
+
embedding vector(1536) -- text-embedding-3-small; use halfvec(3072) for -3-large
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- Filter field gets its own index so the planner can use it.
|
|
21
|
+
CREATE INDEX docs_tenant_idx ON docs (tenant_id);
|
|
22
|
+
|
|
23
|
+
-- HNSW, cosine ops to match the model. ef_construction >= 2*m.
|
|
24
|
+
CREATE INDEX docs_embedding_idx
|
|
25
|
+
ON docs USING hnsw (embedding vector_cosine_ops)
|
|
26
|
+
WITH (m = 16, ef_construction = 64);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`halfvec` to halve storage at near-identical recall (and the only path above 2000 dims):
|
|
30
|
+
|
|
31
|
+
```sql
|
|
32
|
+
ALTER TABLE docs ADD COLUMN embedding_h halfvec(1536);
|
|
33
|
+
CREATE INDEX ON docs USING hnsw (embedding_h halfvec_cosine_ops);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Filtered query with iterative scan so a selective `WHERE` does not return fewer than `LIMIT` rows:
|
|
37
|
+
|
|
38
|
+
```sql
|
|
39
|
+
SET hnsw.iterative_scan = 'relaxed_order'; -- 'strict_order' if exact ordering required
|
|
40
|
+
SET hnsw.ef_search = 100; -- raise until recall@k hits target
|
|
41
|
+
SELECT id, body
|
|
42
|
+
FROM docs
|
|
43
|
+
WHERE tenant_id = 'acme'
|
|
44
|
+
ORDER BY embedding <=> $1
|
|
45
|
+
LIMIT 10;
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Hybrid is DIY: keep a `tsvector` column, score with `ts_rank`, run both, fuse ranks yourself.
|
|
49
|
+
|
|
50
|
+
```sql
|
|
51
|
+
ALTER TABLE docs ADD COLUMN tsv tsvector
|
|
52
|
+
GENERATED ALWAYS AS (to_tsvector('english', coalesce(body,''))) STORED;
|
|
53
|
+
CREATE INDEX docs_tsv_idx ON docs USING gin (tsv);
|
|
54
|
+
-- Then run a vector ORDER BY and a ts_rank query, and combine by reciprocal rank in SQL/app.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Qdrant (named vectors + hybrid via query API)
|
|
58
|
+
|
|
59
|
+
In-graph payload filtering, named dense+sparse vectors, server-side IDF (v1.15+), RRF/DBSF fusion.
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from qdrant_client import QdrantClient, models
|
|
63
|
+
|
|
64
|
+
client = QdrantClient(url="http://localhost:6333")
|
|
65
|
+
|
|
66
|
+
client.create_collection(
|
|
67
|
+
collection_name="docs",
|
|
68
|
+
vectors_config={"dense": models.VectorParams(size=1536, distance=models.Distance.COSINE)},
|
|
69
|
+
sparse_vectors_config={"bm25": models.SparseVectorParams()},
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Index the field you filter on (in-graph filtering needs it).
|
|
73
|
+
client.create_payload_index(
|
|
74
|
+
collection_name="docs",
|
|
75
|
+
field_name="tenant_id",
|
|
76
|
+
field_schema=models.PayloadSchemaType.KEYWORD,
|
|
77
|
+
)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Hybrid query: prefetch dense + sparse, fuse with RRF, filter inside the search.
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
flt = models.Filter(must=[models.FieldCondition(
|
|
84
|
+
key="tenant_id", match=models.MatchValue(value="acme"))])
|
|
85
|
+
|
|
86
|
+
res = client.query_points(
|
|
87
|
+
collection_name="docs",
|
|
88
|
+
prefetch=[
|
|
89
|
+
models.Prefetch(query=dense_vec, using="dense", filter=flt, limit=50),
|
|
90
|
+
models.Prefetch(query=models.SparseVector(indices=idx, values=val),
|
|
91
|
+
using="bm25", filter=flt, limit=50),
|
|
92
|
+
],
|
|
93
|
+
query=models.FusionQuery(fusion=models.Fusion.RRF), # or models.Fusion.DBSF
|
|
94
|
+
limit=10,
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Search-time recall knob: pass `search_params=models.SearchParams(hnsw_ef=128)`.
|
|
99
|
+
|
|
100
|
+
## Weaviate (alpha + fusionType, BlockMax WAND BM25)
|
|
101
|
+
|
|
102
|
+
`alpha` slides keyword↔vector; BlockMax WAND BM25 is the default from v1.30 (~10x faster).
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
import weaviate
|
|
106
|
+
import weaviate.classes.config as wc
|
|
107
|
+
|
|
108
|
+
client = weaviate.connect_to_local()
|
|
109
|
+
client.collections.create(
|
|
110
|
+
name="Docs",
|
|
111
|
+
vector_config=wc.Configure.Vectors.self_provided(), # bring your own vectors
|
|
112
|
+
properties=[
|
|
113
|
+
wc.Property(name="body", data_type=wc.DataType.TEXT),
|
|
114
|
+
wc.Property(name="tenant_id", data_type=wc.DataType.TEXT),
|
|
115
|
+
],
|
|
116
|
+
)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Hybrid query with fusion and a filter:
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from weaviate.classes.query import Filter, HybridFusion
|
|
123
|
+
|
|
124
|
+
docs = client.collections.get("Docs")
|
|
125
|
+
res = docs.query.hybrid(
|
|
126
|
+
query="how to reset a token",
|
|
127
|
+
vector=dense_vec,
|
|
128
|
+
alpha=0.5, # 0.0 keyword .. 1.0 vector
|
|
129
|
+
fusion_type=HybridFusion.RELATIVE_SCORE, # or RANKED
|
|
130
|
+
filters=Filter.by_property("tenant_id").equal("acme"),
|
|
131
|
+
limit=10,
|
|
132
|
+
)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Pinecone (serverless, API 2025-01)
|
|
136
|
+
|
|
137
|
+
Serverless is the default; namespaces partition tenants inside one index. Python SDK v6.x.
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
from pinecone import Pinecone, ServerlessSpec
|
|
141
|
+
|
|
142
|
+
pc = Pinecone(api_key="...")
|
|
143
|
+
pc.create_index(
|
|
144
|
+
name="docs",
|
|
145
|
+
dimension=1536,
|
|
146
|
+
metric="cosine", # match the model
|
|
147
|
+
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
|
|
148
|
+
)
|
|
149
|
+
index = pc.Index("docs")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Batched upsert into a namespace (never one-by-one):
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
index.upsert(
|
|
156
|
+
vectors=[{"id": d["id"], "values": d["vec"], "metadata": {"source": d["src"]}}
|
|
157
|
+
for d in batch], # send hundreds per call
|
|
158
|
+
namespace="acme",
|
|
159
|
+
)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Query with metadata filter in the retrieval path (not post-filter):
|
|
163
|
+
|
|
164
|
+
```python
|
|
165
|
+
res = index.query(
|
|
166
|
+
vector=dense_vec,
|
|
167
|
+
top_k=10,
|
|
168
|
+
namespace="acme",
|
|
169
|
+
filter={"source": {"$eq": "handbook"}},
|
|
170
|
+
include_metadata=True,
|
|
171
|
+
)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Sparse-dense hybrid uses `sparse_values` on upsert and query, or integrated inference to embed +
|
|
175
|
+
rerank server-side.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# tuning.md — recall, parameters, quantization, filter pitfalls
|
|
2
|
+
|
|
3
|
+
## HNSW vs IVFFlat
|
|
4
|
+
|
|
5
|
+
| | HNSW | IVFFlat |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Recall | High, smooth with `ef_search` | Lower; depends on `lists`/`probes` |
|
|
8
|
+
| Build cost | Higher (graph) | Lower / faster |
|
|
9
|
+
| Memory | Higher | Lower |
|
|
10
|
+
| Build params | `m` (default 16), `ef_construction` (default 64) | `lists` (≈ rows/1000, capped) |
|
|
11
|
+
| Query param | `ef_search` (default 40) | `probes` (more = better recall, slower) |
|
|
12
|
+
| Selective filter | Use with iterative scan (pgvector 0.8) | Drops rows on selective filters — avoid |
|
|
13
|
+
| Default choice | **Yes** | Only when build speed > recall |
|
|
14
|
+
|
|
15
|
+
Invariant: keep `ef_construction >= 2*m`. A too-low `ef_construction` permanently degrades the
|
|
16
|
+
graph; you cannot tune it back at query time — only a rebuild fixes it.
|
|
17
|
+
|
|
18
|
+
## Recall-measurement recipe
|
|
19
|
+
|
|
20
|
+
Do this on a sample before shipping. "Search is bad" is unactionable without a recall number.
|
|
21
|
+
|
|
22
|
+
1. Pick ~200–500 representative query vectors.
|
|
23
|
+
2. **Exact baseline**: compute true top-k by brute force (full scan / no index). In pgvector,
|
|
24
|
+
query with the index disabled to get ground truth.
|
|
25
|
+
3. **Index result**: same queries through the ANN index.
|
|
26
|
+
4. `recall@k = mean(|index_topk ∩ exact_topk| / k)`.
|
|
27
|
+
5. Raise the search knob (below) until recall hits target (often ≥0.95), then stop — extra `ef`
|
|
28
|
+
buys latency, not quality.
|
|
29
|
+
|
|
30
|
+
| Engine | Search-time recall knob | Default |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| pgvector | `hnsw.ef_search` | 40 |
|
|
33
|
+
| Qdrant | `hnsw_ef` (`SearchParams`) | per-collection |
|
|
34
|
+
| Weaviate | `ef` (vectorIndexConfig; `-1` = dynamic) | dynamic |
|
|
35
|
+
| Pinecone | managed (no manual knob) | — |
|
|
36
|
+
|
|
37
|
+
## Quantization tradeoffs
|
|
38
|
+
|
|
39
|
+
| Method | Compression | Recall risk | Notes |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| Scalar (int8) | ~4x | Low | Safe default RAM cut |
|
|
42
|
+
| Product (PQ) | 8–64x | Medium–high | Needs tuning; recall-test mandatory |
|
|
43
|
+
| Binary | ~32x, ~40x faster (SIMD popcount) | High on low dims | Only ≥1024 dims; rescore with full precision |
|
|
44
|
+
| pgvector `halfvec` | ~2x | Negligible | 16-bit float; required for >2000 dims |
|
|
45
|
+
|
|
46
|
+
Order of reach: `halfvec`/scalar first (near-free) → product for huge corpora → binary only on
|
|
47
|
+
high-dim vectors after a measured recall test, with optional full-precision rescoring.
|
|
48
|
+
|
|
49
|
+
## Per-engine filtered-search pitfalls
|
|
50
|
+
|
|
51
|
+
- **pgvector**: a selective `WHERE` on a pre-0.8 setup (or without `hnsw.iterative_scan`) returns
|
|
52
|
+
fewer than `LIMIT` rows because the index returns `ef_search` candidates and then the filter
|
|
53
|
+
removes most. Set `hnsw.iterative_scan='relaxed_order'` and index the filter column.
|
|
54
|
+
- **Qdrant**: filtering only works well when the payload field has a payload index; otherwise it
|
|
55
|
+
degrades to a scan. Filtering happens in-graph during traversal — keep the index.
|
|
56
|
+
- **Weaviate**: combine `filters=` with `hybrid(...)`; an unfiltered prefetch followed by an
|
|
57
|
+
app-side filter is the post-filter trap.
|
|
58
|
+
- **Pinecone**: metadata filtering is in the retrieval path, but very high-cardinality metadata
|
|
59
|
+
still costs; keep filterable fields lean and use namespaces for tenant isolation.
|
|
60
|
+
|
|
61
|
+
Cross-cutting rule: **filter inside the search, index the filter field, and verify you still get
|
|
62
|
+
`k` rows on your most selective real filter.**
|