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,169 @@
|
|
|
1
|
+
# Queries and performance (Prisma 7)
|
|
2
|
+
|
|
3
|
+
Depth offloaded from `SKILL.md`. Everything here assumes the v7 client: `provider =
|
|
4
|
+
"prisma-client"`, a driver adapter on the constructor, connection in `prisma.config.ts`.
|
|
5
|
+
|
|
6
|
+
## Shaping rows: `select` vs `include`
|
|
7
|
+
|
|
8
|
+
| You want | Use | Returns |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| Only specific scalar fields | `select` | Exactly the named fields, nothing else |
|
|
11
|
+
| Specific fields + nested relation fields | nested `select` | Named scalars + named relation fields |
|
|
12
|
+
| A relation alongside the full record | `include` | **All** scalar fields + the named relation |
|
|
13
|
+
|
|
14
|
+
Rules:
|
|
15
|
+
|
|
16
|
+
- Default to `select`. `include` is convenient but over-fetches every column on the row,
|
|
17
|
+
which costs bandwidth and leaks fields you did not mean to expose.
|
|
18
|
+
- Never put `select` and `include` at the same level — Prisma throws a validation error. Nest
|
|
19
|
+
`select` inside a relation key to get both shaping and the relation.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
// Shape the parent AND the relation with nested select
|
|
23
|
+
const users = await prisma.user.findMany({
|
|
24
|
+
take: 20,
|
|
25
|
+
select: {
|
|
26
|
+
id: true,
|
|
27
|
+
email: true,
|
|
28
|
+
posts: { select: { id: true, title: true } }, // nested select, not include
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Pagination: offset vs cursor
|
|
34
|
+
|
|
35
|
+
| Pattern | API | When | Cost |
|
|
36
|
+
| --- | --- | --- | --- |
|
|
37
|
+
| Offset | `skip` + `take` | Jump to an arbitrary page, small/medium tables | `skip` re-scans skipped rows; degrades on large offsets |
|
|
38
|
+
| Cursor | `cursor` + `take` (+ `skip: 1` to drop the anchor) | Infinite scroll, large tables, stable ordering | Seeks by an indexed unique column; constant cost |
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
// Cursor pagination — seek from the last id you saw
|
|
42
|
+
const page = await prisma.post.findMany({
|
|
43
|
+
take: 20,
|
|
44
|
+
...(lastId ? { cursor: { id: lastId }, skip: 1 } : {}),
|
|
45
|
+
orderBy: { id: "asc" }, // cursor needs a stable, indexed order
|
|
46
|
+
select: { id: true, title: true },
|
|
47
|
+
});
|
|
48
|
+
const nextCursor = page.at(-1)?.id;
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The cursor column must be unique and indexed (here `id`). Cursor pagination cannot jump to
|
|
52
|
+
"page 7" — it only moves forward/backward from a known row.
|
|
53
|
+
|
|
54
|
+
## Writes
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
// upsert: create-or-update keyed on a unique field
|
|
58
|
+
await prisma.user.upsert({
|
|
59
|
+
where: { email },
|
|
60
|
+
create: { email, role: "MEMBER" },
|
|
61
|
+
update: { role: "MEMBER" },
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// createMany: bulk insert, skip rows that collide on a unique constraint
|
|
65
|
+
await prisma.user.createMany({
|
|
66
|
+
data: rows,
|
|
67
|
+
skipDuplicates: true,
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`createMany` does not return created rows and does not support nested writes. Use
|
|
72
|
+
`createManyAndReturn` when you need the inserted records back.
|
|
73
|
+
|
|
74
|
+
## Transactions
|
|
75
|
+
|
|
76
|
+
| Situation | Form | Why |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| Several independent writes that must all commit or all roll back | `prisma.$transaction([opA, opB, opC])` (array) | One round trip, no app-side logic between ops |
|
|
79
|
+
| Read, branch on the result, then write conditionally | `prisma.$transaction(async (tx) => { … })` (interactive) | You need values from one op to decide the next |
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
// Interactive: read-then-write with a guard inside one transaction
|
|
83
|
+
const order = await prisma.$transaction(async (tx) => {
|
|
84
|
+
const stock = await tx.product.findUniqueOrThrow({ where: { id }, select: { qty: true } });
|
|
85
|
+
if (stock.qty < want) throw new Error("out of stock"); // throwing rolls the tx back
|
|
86
|
+
await tx.product.update({ where: { id }, data: { qty: { decrement: want } } });
|
|
87
|
+
return tx.order.create({ data: { productId: id, qty: want } });
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Keep interactive transactions short. Every statement holds a connection and a DB lock; long
|
|
92
|
+
transactions starve the pool. Set a `timeout` / `maxWait` option for slow paths.
|
|
93
|
+
|
|
94
|
+
## Generated types and `Prisma.validator`
|
|
95
|
+
|
|
96
|
+
Do not hand-write the shape of a query result. Derive it from the query args so the two never
|
|
97
|
+
drift.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
// Reuse one args object as both the query input and its result type
|
|
101
|
+
const userWithPosts = Prisma.validator<Prisma.UserDefaultArgs>()({
|
|
102
|
+
select: { id: true, email: true, posts: { select: { title: true } } },
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
type UserWithPosts = Prisma.UserGetPayload<typeof userWithPosts>;
|
|
106
|
+
|
|
107
|
+
const users: UserWithPosts[] = await prisma.user.findMany(userWithPosts);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`Prisma.validator` type-checks the args at definition time; `Prisma.<Model>GetPayload`
|
|
111
|
+
extracts the exact return type for that selection.
|
|
112
|
+
|
|
113
|
+
## Performance checklist: kill N+1 and over-fetch
|
|
114
|
+
|
|
115
|
+
1. **Use `relationLoadStrategy: "join"` for parent-with-children reads.** Default in v7. On
|
|
116
|
+
Postgres it emits a single LATERAL JOIN with JSON aggregation; on MySQL, correlated
|
|
117
|
+
subqueries. The top-level choice cascades to nested relations. This collapses N+1 into one
|
|
118
|
+
query.
|
|
119
|
+
2. **Switch to `"query"` only when a join fans out badly** (one parent → thousands of children
|
|
120
|
+
multiplies rows). `"query"` runs one query per relation and stitches in the app.
|
|
121
|
+
3. **`select` only the columns you render.** A list view that shows a title should not pull a
|
|
122
|
+
`body @db.Text`.
|
|
123
|
+
4. **`@@index` every column you filter or order on**, and every FK you join on — Prisma does
|
|
124
|
+
not create FK indexes for you.
|
|
125
|
+
5. **See the SQL.** Set `log: ["query"]` on the client (or `["query", "warn", "error"]`). Read
|
|
126
|
+
the emitted statements; a burst of identical `SELECT … WHERE id = $1` is N+1 — fix it with
|
|
127
|
+
`"join"` or a batched `where: { id: { in: ids } }`.
|
|
128
|
+
6. **For `EXPLAIN ANALYZE`, the query planner, index theory, and pool sizing**, that is the
|
|
129
|
+
database engine — see `../postgresdb/SKILL.md`. This skill stops at "here is the SQL Prisma
|
|
130
|
+
emitted and how to make Prisma emit a better one".
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
// N+1 in disguise: looks like one call, but each iteration is a round trip
|
|
134
|
+
for (const u of users) {
|
|
135
|
+
u.posts = await prisma.post.findMany({ where: { authorId: u.id } }); // N queries
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Fixed: load children with the parents in one query
|
|
139
|
+
const withPosts = await prisma.user.findMany({
|
|
140
|
+
relationLoadStrategy: "join",
|
|
141
|
+
select: { id: true, posts: { select: { id: true, title: true } } },
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Raw SQL safety matrix
|
|
146
|
+
|
|
147
|
+
| API | Parameterized? | Use |
|
|
148
|
+
| --- | --- | --- |
|
|
149
|
+
| `` $queryRaw`… ${x} …` `` (tagged template) | Yes | Default for ad-hoc reads with dynamic values |
|
|
150
|
+
| `` $executeRaw`… ${x} …` `` (tagged template) | Yes | Writes / DDL with dynamic values |
|
|
151
|
+
| `$queryRawTyped(...)` + `.sql` files | Yes + typed result | Reusable queries you want fully type-checked |
|
|
152
|
+
| `Prisma.sql` / `Prisma.join` | Yes (composed) | Building a parameterized fragment / `IN` list |
|
|
153
|
+
| `$queryRawUnsafe(string)` / `$executeRawUnsafe(string)` | **No** | Only with a fixed, non-user string (e.g. a known identifier you whitelisted) |
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
// Safe: values are bound as parameters, never concatenated
|
|
157
|
+
const rows = await prisma.$queryRaw`SELECT id FROM "User" WHERE email = ${email}`;
|
|
158
|
+
|
|
159
|
+
// Safe IN-list via Prisma.join
|
|
160
|
+
const ids = [1, 2, 3];
|
|
161
|
+
await prisma.$queryRaw`SELECT * FROM "Post" WHERE id IN (${Prisma.join(ids)})`;
|
|
162
|
+
|
|
163
|
+
// UNSAFE: interpolating user input into the *Unsafe API is SQL injection
|
|
164
|
+
const rows = await prisma.$queryRawUnsafe(`SELECT id FROM "User" WHERE email = '${email}'`);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Identifiers (table/column names) cannot be parameterized. If you must vary an identifier,
|
|
168
|
+
validate it against an allowlist before building the string — never pass user input straight
|
|
169
|
+
through.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# verify.sh — prisma-orm skill gate. Static lint of Prisma artifacts. NO database connection.
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# scripts/verify.sh [paths...] # lint the given files/dirs
|
|
8
|
+
# scripts/verify.sh # discover schema.prisma + *.ts under cwd (skips vendor dirs)
|
|
9
|
+
#
|
|
10
|
+
# Read-only and idempotent — it never writes, migrates, or connects. What it checks:
|
|
11
|
+
# 1. generator block uses provider = "prisma-client" (legacy "prisma-client-js" is a fail)
|
|
12
|
+
# and carries a required output =.
|
|
13
|
+
# 2. every `new PrismaClient(` passes an `adapter`/`accelerateUrl` (bare construction is a fail).
|
|
14
|
+
# 3. hard banlist: $queryRawUnsafe(/$executeRawUnsafe( with a ${ interpolation (SQL injection),
|
|
15
|
+
# binaryTargets (Rust-era v6), prisma-client-js generator.
|
|
16
|
+
# 4. warn-only: findMany( with no take/cursor nearby (likely unbounded read).
|
|
17
|
+
# 5. contamination: drizzle-kit / pgTable( / drizzle.config (wrong ORM leaked in).
|
|
18
|
+
#
|
|
19
|
+
# Exit code: non-zero ONLY on a hard violation. An empty/clean target is a clean pass.
|
|
20
|
+
# Warnings are printed but never fail the run. Targets bash 3.2 (no mapfile/assoc arrays).
|
|
21
|
+
|
|
22
|
+
YELLOW=$'\033[33m'; GREEN=$'\033[32m'; RED=$'\033[31m'; NC=$'\033[0m'
|
|
23
|
+
EXIT=0
|
|
24
|
+
skip() { printf '%s[skip]%s %s\n' "$YELLOW" "$NC" "$*"; }
|
|
25
|
+
warn() { printf '%s[warn]%s %s\n' "$YELLOW" "$NC" "$*"; }
|
|
26
|
+
ok() { printf '%s[ok]%s %s\n' "$GREEN" "$NC" "$*"; }
|
|
27
|
+
err() { printf '%s[fail]%s %s\n' "$RED" "$NC" "$*"; EXIT=1; }
|
|
28
|
+
|
|
29
|
+
ROOT="$(pwd)"
|
|
30
|
+
|
|
31
|
+
# ---- collect candidate files (schema.prisma + *.ts), skipping vendor/build dirs ----
|
|
32
|
+
FILES=()
|
|
33
|
+
add_under() {
|
|
34
|
+
local base="$1"
|
|
35
|
+
while IFS= read -r -d '' f; do FILES+=("$f"); done < <(
|
|
36
|
+
find "$base" \
|
|
37
|
+
\( -path '*/node_modules/*' -o -path '*/.git/*' -o -path '*/dist/*' \
|
|
38
|
+
-o -path '*/.next/*' -o -path '*/build/*' -o -path '*/generated/*' \) -prune -o \
|
|
39
|
+
-type f \( -name 'schema.prisma' -o -name '*.prisma' -o -name '*.ts' -o -name '*.mts' \) -print0 \
|
|
40
|
+
2>/dev/null
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if [ "$#" -gt 0 ]; then
|
|
45
|
+
for p in "$@"; do
|
|
46
|
+
if [ -f "$p" ]; then FILES+=("$p")
|
|
47
|
+
elif [ -d "$p" ]; then add_under "$p"
|
|
48
|
+
else err "no such path: $p"; fi
|
|
49
|
+
done
|
|
50
|
+
else
|
|
51
|
+
add_under "$ROOT"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Keep only files that look Prisma-related (a .prisma file, or TS that touches Prisma).
|
|
55
|
+
PRISMA_FILES=()
|
|
56
|
+
for f in "${FILES[@]:-}"; do
|
|
57
|
+
[ -z "$f" ] && continue
|
|
58
|
+
case "$f" in
|
|
59
|
+
*.prisma) PRISMA_FILES+=("$f"); continue;;
|
|
60
|
+
esac
|
|
61
|
+
if grep -Eq 'PrismaClient|@prisma/|prisma\.\$|prisma/config|relationLoadStrategy' "$f" 2>/dev/null; then
|
|
62
|
+
PRISMA_FILES+=("$f")
|
|
63
|
+
fi
|
|
64
|
+
done
|
|
65
|
+
|
|
66
|
+
if [ "${#PRISMA_FILES[@]}" -eq 0 ]; then
|
|
67
|
+
ok "no Prisma artifacts found — nothing to verify (clean)"
|
|
68
|
+
exit 0
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# ---- 1. generator block in .prisma files ----
|
|
72
|
+
SCHEMA_SEEN=0
|
|
73
|
+
for f in "${PRISMA_FILES[@]}"; do
|
|
74
|
+
case "$f" in *.prisma) ;; *) continue;; esac
|
|
75
|
+
grep -Eq 'generator\s' "$f" 2>/dev/null || continue
|
|
76
|
+
SCHEMA_SEEN=1
|
|
77
|
+
if grep -Eq 'provider\s*=\s*"prisma-client-js"' "$f" 2>/dev/null; then
|
|
78
|
+
err "$f: legacy generator provider \"prisma-client-js\" — v7 uses \"prisma-client\""
|
|
79
|
+
elif grep -Eq 'provider\s*=\s*"prisma-client"' "$f" 2>/dev/null; then
|
|
80
|
+
if grep -Eq '^\s*output\s*=' "$f" 2>/dev/null; then
|
|
81
|
+
ok "$f: prisma-client generator with output"
|
|
82
|
+
else
|
|
83
|
+
err "$f: prisma-client generator is missing the required output ="
|
|
84
|
+
fi
|
|
85
|
+
fi
|
|
86
|
+
done
|
|
87
|
+
[ "$SCHEMA_SEEN" -eq 0 ] && skip "no generator block found in a .prisma file"
|
|
88
|
+
|
|
89
|
+
# ---- 2. PrismaClient construction must carry an adapter / accelerateUrl ----
|
|
90
|
+
CLIENT_SEEN=0
|
|
91
|
+
for f in "${PRISMA_FILES[@]}"; do
|
|
92
|
+
case "$f" in *.prisma) continue;; esac
|
|
93
|
+
grep -Eq 'new[[:space:]]+PrismaClient[[:space:]]*\(' "$f" 2>/dev/null || continue
|
|
94
|
+
CLIENT_SEEN=1
|
|
95
|
+
# bare new PrismaClient() with empty/no args
|
|
96
|
+
if grep -Eq 'new[[:space:]]+PrismaClient[[:space:]]*\([[:space:]]*\)' "$f" 2>/dev/null; then
|
|
97
|
+
err "$f: bare new PrismaClient() — v7 needs an adapter (throws 'requires either adapter or accelerateUrl')"
|
|
98
|
+
elif grep -Eq 'adapter|accelerateUrl' "$f" 2>/dev/null; then
|
|
99
|
+
ok "$f: PrismaClient construction passes an adapter/accelerateUrl"
|
|
100
|
+
else
|
|
101
|
+
err "$f: new PrismaClient(...) without an adapter or accelerateUrl in the file"
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
[ "$CLIENT_SEEN" -eq 0 ] && skip "no PrismaClient construction found"
|
|
105
|
+
|
|
106
|
+
# ---- 3. hard banlist ----
|
|
107
|
+
for f in "${PRISMA_FILES[@]}"; do
|
|
108
|
+
# $queryRawUnsafe / $executeRawUnsafe carrying an interpolation = injection
|
|
109
|
+
if grep -Eq '\$(query|execute)RawUnsafe[[:space:]]*\([^)]*\$\{' "$f" 2>/dev/null; then
|
|
110
|
+
err "$f: \$queryRawUnsafe/\$executeRawUnsafe with \${} interpolation — SQL injection; use a tagged \$queryRaw\`\`"
|
|
111
|
+
fi
|
|
112
|
+
if grep -Eq 'binaryTargets' "$f" 2>/dev/null; then
|
|
113
|
+
err "$f: binaryTargets is Rust-era (v6); v7 is Rust-free — remove it"
|
|
114
|
+
fi
|
|
115
|
+
done
|
|
116
|
+
|
|
117
|
+
# ---- 4. warn-only: unbounded findMany ----
|
|
118
|
+
for f in "${PRISMA_FILES[@]}"; do
|
|
119
|
+
case "$f" in *.prisma) continue;; esac
|
|
120
|
+
grep -Eq 'findMany[[:space:]]*\(' "$f" 2>/dev/null || continue
|
|
121
|
+
# crude heuristic: file uses findMany but never mentions take or cursor
|
|
122
|
+
if ! grep -Eq '\btake\b|\bcursor\b' "$f" 2>/dev/null; then
|
|
123
|
+
warn "$f: findMany() with no take/cursor in the file — likely an unbounded read"
|
|
124
|
+
fi
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
# ---- 5. wrong-ORM contamination ----
|
|
128
|
+
for f in "${PRISMA_FILES[@]}"; do
|
|
129
|
+
if grep -Eq 'drizzle-kit|pgTable[[:space:]]*\(|drizzle\.config' "$f" 2>/dev/null; then
|
|
130
|
+
err "$f: Drizzle signal (drizzle-kit/pgTable/drizzle.config) in a Prisma artifact — wrong ORM leaked in"
|
|
131
|
+
fi
|
|
132
|
+
done
|
|
133
|
+
|
|
134
|
+
if [ "$EXIT" -eq 0 ]; then
|
|
135
|
+
ok "prisma-orm checks passed"
|
|
136
|
+
fi
|
|
137
|
+
exit "$EXIT"
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: procurement
|
|
3
|
+
description: "Use when a small operator must decide what to buy and from whom — pick a supplier/vendor, write an RFI/RFQ/RFP that gets comparable bids back, compare quotes on total cost not sticker price, negotiate price and payment terms, judge single-source risk, or build a vendor scorecard for quarterly review. Triggers: 'help me pick a supplier for X', 'write an RFQ for 5,000 units', 'which of these quotes is actually cheapest over three years', 'should I take the 2/10 net 30 early-payment discount', 'we buy a critical part from one supplier — how risky is that', 'build a supplier scorecard', 'compara estos proveedores / negociar condiciones de pago', 'compara aquests proveïdors / negociar condicions amb el proveïdor'. NOT signing the binding purchase agreement or redlining liability/IP clauses (that is contracts), NOT the price you charge your own customers (that is pricing), NOT counting or reordering the stock once it arrives (that is inventory)."
|
|
4
|
+
tags: [procurement, sourcing, suppliers, rfq, negotiation, vendor-management]
|
|
5
|
+
recommends: [contracts, pricing, inventory, logistics-ops, invoicing, cost-tracking]
|
|
6
|
+
origin: risco
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Procurement — buy well, and leave a decision someone could audit
|
|
10
|
+
|
|
11
|
+
You are a disciplined buyer's analyst. Your job is to choose the **right supplier** and the **right terms** on **total cost** — and to leave behind a scored, weighted decision a colleague could re-run and reach the same conclusion. You do not sign the contract, you do not set the price *you* charge customers, and you do not count the stock once it lands. You decide *what to buy and from whom*, and you make the deal.
|
|
12
|
+
|
|
13
|
+
**The one rule, stated up front:** never compare suppliers on sticker price — always total cost of ownership. And never single-source a critical input silently — name the risk and write down the backup. Every other section serves these two.
|
|
14
|
+
|
|
15
|
+
## What you produce
|
|
16
|
+
|
|
17
|
+
Four artifacts. Each exists because a later question demands it.
|
|
18
|
+
|
|
19
|
+
1. **Requirement brief** — what you are buying, in numbers (spec, quantity, quality bar, delivery window, must-haves vs nice-to-haves). Without it, bids come back incomparable.
|
|
20
|
+
2. **Sourcing request** — the RFI, RFQ, or RFP you send. Its job is to force *comparable* responses, so it discloses the evaluation criteria and a deadline.
|
|
21
|
+
3. **Weighted supplier scorecard** — criteria with weights summing to 100, a score per supplier per criterion, a weighted total. This is what makes the choice defensible and what `scripts/verify.sh` checks.
|
|
22
|
+
4. **Negotiation / term sheet** — the price, the payment terms, the concession you traded for them, and your walk-away (BATNA).
|
|
23
|
+
|
|
24
|
+
## First move: segment the buy (Kraljic 2×2)
|
|
25
|
+
|
|
26
|
+
Before you pick a tactic, place the buy on two axes — **business impact** (profit/criticality if it fails) and **supply risk** (how hard to replace the supplier). Tactic must match the quadrant, or you over-invest effort on a stapler order and under-invest on the part that halts production (Kraljic, HBR 1983).
|
|
27
|
+
|
|
28
|
+
| Impact \ Risk | Low supply risk | High supply risk |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **Low impact** | **Routine** — automate, consolidate orders, buy from an approved-supplier list. Don't run a tender for paperclips. | **Bottleneck** — secure continuity. Develop a backup supplier, hold buffer stock, lock a delivery SLA. |
|
|
31
|
+
| **High impact** | **Leverage** — run a competitive bid, exploit your buying power, churn suppliers for price. | **Strategic** — partner. Fewest suppliers, joint planning, multi-year deal, deepest relationship. |
|
|
32
|
+
|
|
33
|
+
Re-score quadrants at least annually — a routine item becomes a bottleneck the day its only maker exits the market. SRM cadence scales with quadrant (see references): quarterly reviews for Strategic, semiannual for Bottleneck.
|
|
34
|
+
|
|
35
|
+
## Pick the right request: RFI vs RFQ vs RFP
|
|
36
|
+
|
|
37
|
+
Match the request to *what you don't yet know*. Sending the wrong one wastes a bidding cycle.
|
|
38
|
+
|
|
39
|
+
| You need to… | Send a… | Use when |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Learn the market, scope the field | **RFI** (request for information) | Requirements are still fuzzy; non-binding; you're narrowing a shortlist. |
|
|
42
|
+
| Get a price on a fully-specified, identical need | **RFQ** (request for quotation) | Specs are locked, suppliers are comparable, and price is the decider. |
|
|
43
|
+
| Solicit a full solution where the *how* is open | **RFP** (request for proposal) | You must evaluate approach *and* price — the supplier designs part of the answer. |
|
|
44
|
+
|
|
45
|
+
The mature phased flow is **RFI → RFP → RFQ**, but a well-defined commodity buy skips straight to an RFQ. Don't run an RFP for a screw you can fully spec — that's an RFQ wearing a costume.
|
|
46
|
+
|
|
47
|
+
Whatever you send, it MUST contain these or the bids come back incomparable:
|
|
48
|
+
|
|
49
|
+
- exact spec + quantity (and minimum order quantity tolerance);
|
|
50
|
+
- delivery terms and required date (Incoterm if cross-border);
|
|
51
|
+
- **the evaluation criteria and their weights, disclosed** — bidders optimize for what you'll score, and disclosure cuts disputes;
|
|
52
|
+
- a hard response deadline;
|
|
53
|
+
- a required response format (a filled table beats free-form prose you can't compare).
|
|
54
|
+
|
|
55
|
+
Copy-ready RFI/RFQ/RFP skeletons and the invite + award/regret email templates: see `references/sourcing-requests.md`.
|
|
56
|
+
|
|
57
|
+
## The weighted scorecard
|
|
58
|
+
|
|
59
|
+
Assign each criterion a weight; **weights sum to 100**. Score every supplier on every criterion (a 1–5 scale is enough). Weighted total = Σ(weight × score). Predefined weights set *before* you see bids kill the bias where you reverse-engineer the criteria to pick the supplier you already liked.
|
|
60
|
+
|
|
61
|
+
A common starting split — tune per category:
|
|
62
|
+
|
|
63
|
+
- technical / capability fit ~40
|
|
64
|
+
- price / commercial ~30
|
|
65
|
+
- vendor viability / risk ~30
|
|
66
|
+
|
|
67
|
+
Worked mini-example (scores 1–5):
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Criterion Weight SupplierA SupplierB A weighted B weighted
|
|
71
|
+
Capability 40 4 3 160 120
|
|
72
|
+
Commercial 30 3 5 90 150
|
|
73
|
+
Viability/risk 30 4 3 120 90
|
|
74
|
+
---- ---- ----
|
|
75
|
+
Total 100 370 360
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
A edges B (370 vs 360) even though B is cheaper on the commercial line — because capability and risk outweigh a lower price. **Disclose these weights to bidders.** Full template: `references/scorecard-and-tco.md`.
|
|
79
|
+
|
|
80
|
+
## Total cost of ownership, never sticker price
|
|
81
|
+
|
|
82
|
+
The cheapest unit price routinely loses once you add the costs nobody quoted. A workable model:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
TCO = Acquisition
|
|
86
|
+
+ (Annual Operating × Years)
|
|
87
|
+
+ (Annual Maintenance × Years)
|
|
88
|
+
+ Training
|
|
89
|
+
+ Downtime / lost productivity
|
|
90
|
+
− Residual / resale value
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The lines people forget: **delivery & freight, installation, integration effort, training, support, downtime, license true-ups, exit/disposal.** Quote all of them or you're comparing fiction.
|
|
94
|
+
|
|
95
|
+
**Bad → Good.** You are buying 5,000 units a year.
|
|
96
|
+
|
|
97
|
+
- Bad — compare on unit price: Supplier A at **$9.00** beats Supplier B at **$11.00**. Pick A.
|
|
98
|
+
- Good — compare on TCO:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
Line Supplier A Supplier B
|
|
102
|
+
Unit × 5,000 $9.00 → $45,000 $11.00 → $55,000
|
|
103
|
+
Freight $6,000 (overseas) $500 (local)
|
|
104
|
+
Support contract $5,000/yr included
|
|
105
|
+
Downtime (8% defect, lost prod.) $4,000 $0
|
|
106
|
+
-------- --------
|
|
107
|
+
Year-1 TCO $60,000 $55,500
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Supplier B — the "expensive" one — is **$4,500 cheaper** once freight, support, and defect downtime land. Always recompute on TCO before you award.
|
|
111
|
+
|
|
112
|
+
## Negotiation
|
|
113
|
+
|
|
114
|
+
Rules, each with its why:
|
|
115
|
+
|
|
116
|
+
- **Separate price from terms; settle price first.** Resistance is lowest on price when terms aren't yet on the table; opening with both lets the supplier trade one against the other.
|
|
117
|
+
- **Trade something for every concession — never ask free.** Want Net 60 or a volume discount? Offer what the supplier values: an annual/volume commitment, a phased ramp (Net 45 for 6 months → Net 60 after), or a reliable-payer track record. A free ask gets a free no.
|
|
118
|
+
- **Know your BATNA (walk-away).** Your leverage is the credible alternative supplier. If you have none, that's a single-source problem to fix first (next section), not a negotiation to win.
|
|
119
|
+
- **Anchor on TCO, not line items.** Negotiate the total cost you computed, so the supplier can't claw back a unit-price cut through freight or support.
|
|
120
|
+
|
|
121
|
+
**The early-payment discount is math, not a vibe.** A "2/10 net 30" offer (2% off if paid within 10 days, else full at 30) is a return on paying 20 days early:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
Annualized return = (Discount% ÷ (1 − Discount%)) × (365 ÷ DaysSaved)
|
|
125
|
+
= (0.02 ÷ 0.98) × (365 ÷ 20)
|
|
126
|
+
≈ 0.0204 × 18.25
|
|
127
|
+
≈ 37.2% annualized
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Take the discount whenever your cost of capital is below ~37.2%. "We're tight on cash" is rarely a reason to skip a 37.2% return — borrow against it before you pass. Negotiation playbook and BATNA worksheet: `references/scorecard-and-tco.md`.
|
|
131
|
+
|
|
132
|
+
## Supply risk + the maverick-spend leak
|
|
133
|
+
|
|
134
|
+
Name which case any critical input falls in — they are different risks:
|
|
135
|
+
|
|
136
|
+
- **Single source** — you *chose* one supplier though alternatives exist. A concentration risk you accepted; document why and a switch plan.
|
|
137
|
+
- **Sole source** — only one supplier exists. A risk you must *mitigate*, not choose away: buffer stock, a qualification project for an alternative, a contractual continuity clause.
|
|
138
|
+
- **Dual sourcing** — two qualified suppliers for the same item, splitting volume. Cuts single-point-of-failure risk at higher unit cost; right for Bottleneck/Strategic items.
|
|
139
|
+
|
|
140
|
+
**Require a written backup plan for any critical or strategic single/sole source.** A critical input with no named backup is an outage waiting for a date.
|
|
141
|
+
|
|
142
|
+
**Maverick (off-process) spend** is the silent leak — purchases made outside the approved process and supplier list. APQC measured it around **1.8% of annual purchase value**; organizations can lose up to **~16% of negotiated savings** to it, and the practical target is **under 10% of spend** going off-contract. The fix isn't a procurement suite — it's a one-page **intake gate** (anything over $X routes through this skill's flow) plus an **approved-supplier list**.
|
|
143
|
+
|
|
144
|
+
## Ongoing: scorecard, cadence, re-source triggers
|
|
145
|
+
|
|
146
|
+
A supplier you picked once is not a supplier you can ignore. Track four dimensions on a recurring **performance scorecard**: **quality** (defect/return rate), **delivery** (on-time-in-full), **price drift** (vs the awarded price), **responsiveness** (issue resolution time). Review on the SRM cadence set by Kraljic quadrant.
|
|
147
|
+
|
|
148
|
+
Re-source — re-open the comparison — when a trigger fires: OTIF drops below your threshold for two periods, price drifts up beyond the contracted escalator, a single/sole source loses its only backup, or the category re-segments into a higher-risk quadrant. Performance scorecard template, SRM-cadence-by-quadrant table, and re-source thresholds: `references/scorecard-and-tco.md`.
|
|
149
|
+
|
|
150
|
+
## Anti-patterns
|
|
151
|
+
|
|
152
|
+
| Anti-pattern | Why it bites | Do instead |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| Compare suppliers on unit price only | The cheapest unit routinely loses once freight, support, and downtime land | Recompute every shortlist on TCO before awarding |
|
|
155
|
+
| One vague RFP for a commodity you can fully spec | Wastes a bidding cycle; bids come back incomparable | Send an RFQ with fixed specs when price is the decider |
|
|
156
|
+
| Evaluation weights kept secret (or invented after bids arrive) | Invites bias and post-award disputes | Set weights before bids, disclose them, score predefined criteria |
|
|
157
|
+
| Ask for Net 60 / a discount with nothing offered | A free ask earns a free no | Trade a volume commit, phased ramp, or reliable-payer record |
|
|
158
|
+
| Skip the early-payment discount because "we're tight" | You pass on a ~37.2% annualized return | Compute it; take it whenever cost of capital is lower |
|
|
159
|
+
| Single-source a critical part and say nothing | An outage with no named owner or backup | Label single/sole/dual, write the backup plan |
|
|
160
|
+
| Negotiate price and terms in one breath | The supplier trades one against the other | Settle price first, then negotiate terms separately |
|
|
161
|
+
| Let small buys skip the process | Maverick spend quietly burns negotiated savings | A one-page intake gate + approved-supplier list |
|
|
162
|
+
|
|
163
|
+
## Hand-offs
|
|
164
|
+
|
|
165
|
+
You own the decision and the deal. The moment it becomes something else, route:
|
|
166
|
+
|
|
167
|
+
- Drafting/redlining the binding purchase agreement, MSA, liability/IP clauses, signature → `../contracts/SKILL.md`.
|
|
168
|
+
- The price *you* charge *your* customers, your margins, packaging → `../pricing/SKILL.md`.
|
|
169
|
+
- Stock levels, reorder points, safety stock, SKU counts once goods are on hand → `../inventory/SKILL.md`.
|
|
170
|
+
- Freight, carrier choice, warehousing, customs once you've decided to buy → `../logistics-ops/SKILL.md`.
|
|
171
|
+
- Generating and paying the supplier bill, dunning, payment runs → `../invoicing/SKILL.md`.
|
|
172
|
+
- Tracking ongoing SaaS/subscription spend after a renewal decision → `../cost-tracking/SKILL.md`.
|
|
173
|
+
|
|
174
|
+
> Note on AI: generative tools can compress supplier *discovery* by up to ~90% — finding candidates fast. They do not replace the weighting, TCO model, risk segmentation, or negotiation. Use AI to widen the shortlist; keep the judgment human and on paper.
|
|
175
|
+
|
|
176
|
+
## references/
|
|
177
|
+
|
|
178
|
+
- `references/sourcing-requests.md` — copy-ready RFI/RFQ/RFP skeletons with the mandatory comparable-bid sections, plus invite and award/regret email templates.
|
|
179
|
+
- `references/scorecard-and-tco.md` — weighted-scorecard template, worked TCO comparison layout, supplier performance scorecard, SRM-cadence-by-quadrant table, and re-source trigger thresholds.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Evals — procurement
|
|
2
|
+
|
|
3
|
+
`cases.yaml` holds three groups: `should_trigger`, `should_not_trigger`, and a
|
|
4
|
+
`capability` case. These are LLM-graded routing and capability checks, not unit
|
|
5
|
+
tests. Run them through whatever eval harness the repo provides, or by hand: feed
|
|
6
|
+
each `should_trigger` prompt to the router and confirm it selects `procurement`
|
|
7
|
+
(including the non-obvious ones — the "actually cheaper over three years" TCO trap
|
|
8
|
+
and the "2/10 net 30" early-payment-discount question that masquerades as an AP
|
|
9
|
+
task — and the Spanish/Catalan phrasings). Feed each `should_not_trigger` prompt
|
|
10
|
+
and confirm it routes to the named sibling (`contracts`, `pricing`, `inventory`,
|
|
11
|
+
`logistics-ops`, `bookkeeping`) and not here; every `route_to` id must resolve to
|
|
12
|
+
a real sibling skill. Grade the `capability` case against its `must_include`
|
|
13
|
+
rubric on an actual generated answer: tick each line (Kraljic segmentation,
|
|
14
|
+
weights summing to 100, TCO not unit price, the early-discount math, single-source
|
|
15
|
+
risk + backup plan, hand-offs to contracts/inventory). Pair the capability grade
|
|
16
|
+
with `scripts/verify.sh` against any generated scorecard/TCO file to confirm the
|
|
17
|
+
artifact ties out (weights sum to 100, no blank scores, recomputed totals match,
|
|
18
|
+
TCO has more than a unit line) — the rubric judges sourcing judgment, verify.sh
|
|
19
|
+
judges structural consistency. No automated harness is assumed beyond reading the
|
|
20
|
+
prompts and checking routing plus the rubric.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
skill: procurement
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Help me choose between three vendors for our packaging supply."
|
|
5
|
+
why: Core supplier-selection ask — the weighted comparison and award decision this skill owns.
|
|
6
|
+
- prompt: "Write an RFQ to send to suppliers for 5,000 units."
|
|
7
|
+
why: Sourcing-request generation; an RFQ with disclosed criteria and a deadline is a primary artifact.
|
|
8
|
+
- prompt: "Which of these two quotes is actually cheaper over three years?"
|
|
9
|
+
why: Non-obvious — reads like simple arithmetic but is the TCO / sticker-price trap; the cheaper unit often loses.
|
|
10
|
+
- prompt: "Should I pay this supplier invoice early to get the 2/10 net 30 discount?"
|
|
11
|
+
why: Non-obvious — looks like an AP payment question but is the early-payment-discount procurement math (~37.2% annualized).
|
|
12
|
+
- prompt: "We buy a critical component from only one supplier — how worried should I be?"
|
|
13
|
+
why: Single/sole-source concentration risk and the backup-plan requirement.
|
|
14
|
+
- prompt: "Negociar mejores condiciones de pago con nuestro proveedor."
|
|
15
|
+
why: Spanish trigger — payment-terms negotiation, trading a concession for extended terms.
|
|
16
|
+
- prompt: "Compara aquests proveïdors i munta una scorecard ponderada per decidir."
|
|
17
|
+
why: Catalan trigger — weighted-scorecard supplier comparison.
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "Draft and redline the purchase agreement so we can sign it."
|
|
21
|
+
route_to: contracts
|
|
22
|
+
why: Binding legal instrument with liability/IP clauses and signature — not the buy decision.
|
|
23
|
+
- prompt: "What price should we charge our customers for this product?"
|
|
24
|
+
route_to: pricing
|
|
25
|
+
why: Our outbound price and margins, not selecting or negotiating with a supplier.
|
|
26
|
+
- prompt: "How many units do we have left and when do we hit the reorder point?"
|
|
27
|
+
route_to: inventory
|
|
28
|
+
why: Stock levels and reorder math once goods are on hand, not the buy decision.
|
|
29
|
+
- prompt: "Find the cheapest carrier to ship this pallet to Madrid."
|
|
30
|
+
route_to: logistics-ops
|
|
31
|
+
why: Freight and carrier choice after we've decided to buy, not supplier selection.
|
|
32
|
+
- prompt: "Record and pay this supplier bill in our books."
|
|
33
|
+
route_to: bookkeeping
|
|
34
|
+
why: Recording the AP entry and paying the bill, not choosing the supplier or the terms.
|
|
35
|
+
|
|
36
|
+
capability:
|
|
37
|
+
- scenario: >
|
|
38
|
+
An operator has three supplier quotes for a recurring input (5,000 units/yr).
|
|
39
|
+
Quotes differ on unit price, freight, lead time, payment terms, support
|
|
40
|
+
cost, and minimum order quantity, and the operator currently buys almost
|
|
41
|
+
everything from one of the three. Ask the skill to recommend a supplier and
|
|
42
|
+
the terms to negotiate.
|
|
43
|
+
must_include:
|
|
44
|
+
- segments the buy on the Kraljic 2x2 (impact x supply risk) before picking a tactic
|
|
45
|
+
- builds a weighted scorecard with criteria weights summing to 100 and predefined criteria
|
|
46
|
+
- computes total cost of ownership (freight, support, downtime, lead-time impact) rather than ranking on unit price
|
|
47
|
+
- evaluates payment terms with the annualized early-payment-discount math (e.g. 2/10 net 30 ≈ 37.2%) where relevant
|
|
48
|
+
- flags the concentration / single-source risk and asks for or states a written backup plan
|
|
49
|
+
- hands signing off to contracts and stock tracking off to inventory rather than doing them here
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Scorecard, TCO, and supplier-relationship templates
|
|
2
|
+
|
|
3
|
+
Copy these, fill the numbers, keep the structure. `scripts/verify.sh` checks the
|
|
4
|
+
scorecard and TCO tables for shape and arithmetic.
|
|
5
|
+
|
|
6
|
+
## Weighted supplier scorecard
|
|
7
|
+
|
|
8
|
+
Weights set **before** bids arrive and **sum to 100**. Score each supplier on
|
|
9
|
+
each criterion (1–5). Weighted total = Σ(weight × score). Disclose weights to
|
|
10
|
+
bidders.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
Criterion Weight Supplier A Supplier B Supplier C
|
|
14
|
+
Capability / fit 40 4 3 5
|
|
15
|
+
Price / commercial (TCO) 30 3 5 2
|
|
16
|
+
Viability / risk 30 4 3 4
|
|
17
|
+
-----------------------------------------------------------------
|
|
18
|
+
Weighted total 100 370 360 380
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Weighted total math (Supplier C): 40×5 + 30×2 + 30×4 = 200 + 60 + 120 = **380**.
|
|
22
|
+
Highest weighted total wins — *not* lowest price. If two are within ~5%, break
|
|
23
|
+
the tie on supply risk, not on a rounding-error price gap.
|
|
24
|
+
|
|
25
|
+
CSV form (what verify.sh reads most cleanly):
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
criterion,weight,supplier_a,supplier_b,supplier_c
|
|
29
|
+
capability,40,4,3,5
|
|
30
|
+
price_commercial,30,3,5,2
|
|
31
|
+
viability_risk,30,4,3,4
|
|
32
|
+
weighted_total,100,370,360,380
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Worked TCO comparison (full lines)
|
|
36
|
+
|
|
37
|
+
Compare like-for-like over the same horizon. Include every line both suppliers
|
|
38
|
+
will actually cost you — not just the quoted unit.
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
Line item Supplier A Supplier B
|
|
42
|
+
Unit price × quantity $9.00 × 5,000 $11.00 × 5,000
|
|
43
|
+
= acquisition 45,000 55,000
|
|
44
|
+
Freight / delivery 6,000 500
|
|
45
|
+
Installation / integration 0 0
|
|
46
|
+
Annual operating (× years) 0 0
|
|
47
|
+
Annual maintenance/support 5,000 0 (included)
|
|
48
|
+
Training 500 0
|
|
49
|
+
Downtime / defect loss 4,000 (8% rate) 0
|
|
50
|
+
License true-ups 0 0
|
|
51
|
+
Residual / resale value (−500) (−1,000)
|
|
52
|
+
-------------------------------------------------------------
|
|
53
|
+
TCO (year 1) 60,000 54,500
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The "cheaper" unit (A) loses by **$5,500** once freight, support, and defect
|
|
57
|
+
downtime land. Always award on the TCO line, never the unit line.
|
|
58
|
+
|
|
59
|
+
Required-lines reminder — a TCO that lists only unit price is not a TCO. Include
|
|
60
|
+
at least delivery, maintenance/support, training, downtime, or exit.
|
|
61
|
+
|
|
62
|
+
## Supplier performance scorecard (ongoing)
|
|
63
|
+
|
|
64
|
+
Score live suppliers each review period on four dimensions; trend matters more
|
|
65
|
+
than any single period.
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
Dimension Metric Target Weight
|
|
69
|
+
Quality defect / return rate < 1% 30
|
|
70
|
+
Delivery (OTIF) on-time-in-full % > 95% 30
|
|
71
|
+
Price stability drift vs awarded price < escalator 20
|
|
72
|
+
Responsiveness issue resolution time < 2 days 20
|
|
73
|
+
-------------------------------------------------------------------
|
|
74
|
+
Score (1–5 each, weighted to 100) 100
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## SRM cadence by Kraljic quadrant
|
|
78
|
+
|
|
79
|
+
| Quadrant | Relationship | Review cadence |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| Routine (low impact / low risk) | transactional, automate | annual |
|
|
82
|
+
| Leverage (high impact / low risk) | competitive, churn for price | annual / per tender |
|
|
83
|
+
| Bottleneck (low impact / high risk) | secure supply, backups | semiannual |
|
|
84
|
+
| Strategic (high impact / high risk) | partnership, joint planning | quarterly |
|
|
85
|
+
|
|
86
|
+
Re-score the quadrant assignment itself at least annually — categories drift.
|
|
87
|
+
|
|
88
|
+
## Re-source trigger thresholds
|
|
89
|
+
|
|
90
|
+
Re-open the comparison when any of these fire:
|
|
91
|
+
|
|
92
|
+
- OTIF below your delivery target for **two consecutive periods**.
|
|
93
|
+
- Price drift **above the contracted escalator** without a justified pass-through.
|
|
94
|
+
- A single/sole-source supplier **loses its only backup** (qualification lapses,
|
|
95
|
+
alt supplier exits).
|
|
96
|
+
- The category **re-segments** into a higher-risk Kraljic quadrant.
|
|
97
|
+
- Quality (defect/return) breaches target for **two consecutive periods**.
|
|
98
|
+
|
|
99
|
+
A re-source doesn't mean switch — it means run the weighted comparison again with
|
|
100
|
+
current data, then decide.
|