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,201 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# verify.sh — structural lint for a proposal / SOW markdown draft.
|
|
4
|
+
#
|
|
5
|
+
# WHAT IT DOES (read-only; never edits a file)
|
|
6
|
+
# Greps a generated proposal/SOW markdown for its required-section contract and
|
|
7
|
+
# flags scope-creep and smuggled-legal language. It is a STRUCTURE check, not a
|
|
8
|
+
# quality judgement — the persuasion rigor lives in the capability eval.
|
|
9
|
+
# 1. Required proposal sections present: executive summary, scope, pricing/
|
|
10
|
+
# investment, timeline, next step.
|
|
11
|
+
# 2. If the doc looks like a SOW, its required clauses are present:
|
|
12
|
+
# exclusions, acceptance criteria, change order, payment schedule.
|
|
13
|
+
# 3. Weasel / scope-creep ban-list ABSENT: "etc.", "as needed", "and more",
|
|
14
|
+
# "TBD" (in scope), unbounded "ongoing". -> FAIL (these lose free-work fights)
|
|
15
|
+
# 4. Binding-legal smuggle WARNING: "indemnif", "governing law",
|
|
16
|
+
# "limitation of liability", "intellectual property assigns/assignment".
|
|
17
|
+
# -> warn "route to contracts" (do not draft binding terms here).
|
|
18
|
+
# 5. Executive-summary length 200–400 words -> warn if outside.
|
|
19
|
+
#
|
|
20
|
+
# EXIT CODES
|
|
21
|
+
# 0 clean, or no target file to inspect (empty target is NOT a failure),
|
|
22
|
+
# or warn-only findings
|
|
23
|
+
# 1 a required section is missing, or a banned weasel word is present
|
|
24
|
+
# 2 bad usage
|
|
25
|
+
#
|
|
26
|
+
# HOW TO RUN (point it at YOUR draft, not the skills repo)
|
|
27
|
+
# ./verify.sh proposal.md # lint one file
|
|
28
|
+
# ./verify.sh --path proposals/ # lint every *.md / *.markdown under a dir
|
|
29
|
+
# ./verify.sh # scan ./ ; if nothing matches, skip + exit 0
|
|
30
|
+
#
|
|
31
|
+
# Runs on stock macOS bash 3.2: no mapfile, no associative arrays.
|
|
32
|
+
|
|
33
|
+
set -euo pipefail
|
|
34
|
+
|
|
35
|
+
if [ -t 1 ]; then
|
|
36
|
+
RED=$'\033[31m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; NC=$'\033[0m'
|
|
37
|
+
else
|
|
38
|
+
RED=''; GREEN=''; YELLOW=''; NC=''
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
ok_count=0; skip_count=0; warn_count=0; fail_count=0
|
|
42
|
+
ok() { printf '%s[ ok ]%s %s\n' "$GREEN" "$NC" "$*"; ok_count=$((ok_count + 1)); }
|
|
43
|
+
skip() { printf '%s[skip]%s %s\n' "$YELLOW" "$NC" "$*"; skip_count=$((skip_count + 1)); }
|
|
44
|
+
warn() { printf '%s[warn]%s %s\n' "$YELLOW" "$NC" "$*"; warn_count=$((warn_count + 1)); }
|
|
45
|
+
fail() { printf '%s[fail]%s %s\n' "$RED" "$NC" "$*"; fail_count=$((fail_count + 1)); }
|
|
46
|
+
|
|
47
|
+
usage() { sed -n '2,33p' "$0" | sed 's/^# \{0,1\}//'; }
|
|
48
|
+
|
|
49
|
+
# --- arg parse --------------------------------------------------------------
|
|
50
|
+
SCAN_PATH=""
|
|
51
|
+
while [ $# -gt 0 ]; do
|
|
52
|
+
case "$1" in
|
|
53
|
+
--path) SCAN_PATH="${2:?--path needs a value}"; shift 2 ;;
|
|
54
|
+
-h|--help) usage; exit 0 ;;
|
|
55
|
+
-*) printf '%sUnknown argument: %s%s\n\n' "$RED" "$1" "$NC"; usage; exit 2 ;;
|
|
56
|
+
*) SCAN_PATH="$1"; shift ;;
|
|
57
|
+
esac
|
|
58
|
+
done
|
|
59
|
+
[ -z "$SCAN_PATH" ] && SCAN_PATH="."
|
|
60
|
+
|
|
61
|
+
if [ ! -e "$SCAN_PATH" ]; then
|
|
62
|
+
printf '%sPath not found: %s%s\n' "$RED" "$SCAN_PATH" "$NC"; exit 2
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
have() { command -v "$1" >/dev/null 2>&1; }
|
|
66
|
+
|
|
67
|
+
# --- collect candidate markdown files --------------------------------------
|
|
68
|
+
# A single file is used as-is; a directory is searched for *.md / *.markdown.
|
|
69
|
+
FILES=""
|
|
70
|
+
if [ -f "$SCAN_PATH" ]; then
|
|
71
|
+
FILES="$SCAN_PATH"
|
|
72
|
+
else
|
|
73
|
+
FILES="$(find "$SCAN_PATH" -type f \( -name '*.md' -o -name '*.markdown' \) 2>/dev/null || true)"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Empty / clean target is NOT a failure — nothing to lint, exit 0.
|
|
77
|
+
if [ -z "$FILES" ]; then
|
|
78
|
+
skip "no proposal/SOW markdown found under '$SCAN_PATH' — nothing to lint"
|
|
79
|
+
printf '\nok=%d skip=%d warn=%d fail=%d\n' "$ok_count" "$skip_count" "$warn_count" "$fail_count"
|
|
80
|
+
exit 0
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# gci <pattern> <file>: case-insensitive grep, swallow no-match (so set -e is safe).
|
|
84
|
+
gci() { grep -iE -e "$1" "$2" >/dev/null 2>&1; }
|
|
85
|
+
|
|
86
|
+
# word_count_section <file> <start-heading-regex>: words from the first matching
|
|
87
|
+
# heading until the next markdown "## " heading. 0 if the heading is absent.
|
|
88
|
+
exec_summary_words() {
|
|
89
|
+
awk '
|
|
90
|
+
BEGIN { inseg=0; words=0 }
|
|
91
|
+
tolower($0) ~ /^#+ +(executive summary|exec summary|resumen ejecutivo|resum executiu)/ { inseg=1; next }
|
|
92
|
+
inseg && /^#{1,6} / { inseg=0 }
|
|
93
|
+
inseg { words += NF }
|
|
94
|
+
END { print words+0 }
|
|
95
|
+
' "$1"
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
printf 'Linting %d file(s) under: %s\n\n' "$(printf '%s\n' "$FILES" | grep -c .)" "$SCAN_PATH"
|
|
99
|
+
|
|
100
|
+
# --- per-file checks --------------------------------------------------------
|
|
101
|
+
printf '%s\n' "$FILES" | while IFS= read -r f; do
|
|
102
|
+
[ -z "$f" ] && continue
|
|
103
|
+
printf '%s— %s%s\n' "$YELLOW" "$f" "$NC"
|
|
104
|
+
|
|
105
|
+
# 1. required proposal sections
|
|
106
|
+
gci 'executive summary|exec summary|resumen ejecutivo|resum executiu' "$f" \
|
|
107
|
+
&& ok " exec summary present" || fail " missing executive summary"
|
|
108
|
+
gci '(^|[^a-z])scope([^a-z]|$)|what.?s included|abast|alcance' "$f" \
|
|
109
|
+
&& ok " scope present" || fail " missing scope section"
|
|
110
|
+
gci 'pricing|investment|tiers?|inversi|preu|precio' "$f" \
|
|
111
|
+
&& ok " pricing/investment present" || fail " missing pricing/investment section"
|
|
112
|
+
gci 'timeline|milestones?|calendari|cronograma' "$f" \
|
|
113
|
+
&& ok " timeline/milestones present" || fail " missing timeline section"
|
|
114
|
+
gci 'next steps?|mutual action|propers passos|pr.ximos pasos|call to action' "$f" \
|
|
115
|
+
&& ok " next-step/close present" || fail " missing next-step/close"
|
|
116
|
+
|
|
117
|
+
# 2. SOW-specific clauses (only if the doc declares itself a SOW)
|
|
118
|
+
if gci 'statement of work|scope of work|^#.*\bsow\b|abast del projecte' "$f"; then
|
|
119
|
+
ok " detected SOW — checking SOW clauses"
|
|
120
|
+
gci 'exclud|exclusion|not (in scope|included)|out of scope|fora d.abast|excluido' "$f" \
|
|
121
|
+
&& ok " explicit exclusions present" || fail " SOW missing explicit EXCLUSIONS"
|
|
122
|
+
gci 'acceptance criteria|accept(ed|ance)|criteris d.acceptaci|criterios de aceptaci' "$f" \
|
|
123
|
+
&& ok " acceptance criteria present" || fail " SOW missing acceptance criteria"
|
|
124
|
+
gci 'change order|change.?request|written approval|ordre de canvi|orden de cambio' "$f" \
|
|
125
|
+
&& ok " change-order clause present" || fail " SOW missing change-order clause"
|
|
126
|
+
gci 'payment (schedule|milestones?|terms)|on signature|on acceptance|calendari de pagament' "$f" \
|
|
127
|
+
&& ok " payment schedule present" || fail " SOW missing payment schedule"
|
|
128
|
+
else
|
|
129
|
+
skip " not a SOW (skipping SOW-specific clause checks)"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
# 3. weasel / scope-creep ban-list -> FAIL
|
|
133
|
+
weasel="$(grep -inE 'etc\.|[^a-z]as needed|and more|[^a-z]tbd[^a-z]|ongoing (support|work|maintenance)' "$f" 2>/dev/null || true)"
|
|
134
|
+
if [ -n "$weasel" ]; then
|
|
135
|
+
fail " weasel / scope-creep words (bound them with a quantity):"
|
|
136
|
+
printf '%s\n' "$weasel" | head -n 5 | sed 's/^/ /'
|
|
137
|
+
else
|
|
138
|
+
ok " no weasel / scope-creep words"
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# 4. binding-legal smuggle -> WARN (route to contracts)
|
|
142
|
+
legal="$(grep -inE 'indemnif|governing law|limitation of liability|intellectual property (assigns|assignment)|liability cap' "$f" 2>/dev/null || true)"
|
|
143
|
+
if [ -n "$legal" ]; then
|
|
144
|
+
warn " binding-legal language found — route these to the contracts skill / MSA:"
|
|
145
|
+
printf '%s\n' "$legal" | head -n 5 | sed 's/^/ /'
|
|
146
|
+
else
|
|
147
|
+
ok " no smuggled binding-legal clauses"
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
# 5. exec-summary length 200–400 words -> WARN
|
|
151
|
+
w="$(exec_summary_words "$f")"
|
|
152
|
+
if [ "$w" -eq 0 ]; then
|
|
153
|
+
: # absence already reported in check 1
|
|
154
|
+
elif [ "$w" -lt 200 ] || [ "$w" -gt 400 ]; then
|
|
155
|
+
warn " exec summary is $w words (aim 200–400)"
|
|
156
|
+
else
|
|
157
|
+
ok " exec summary length ok ($w words)"
|
|
158
|
+
fi
|
|
159
|
+
printf '\n'
|
|
160
|
+
done
|
|
161
|
+
|
|
162
|
+
# The while-pipe runs in a subshell under bash 3.2, so its counters don't survive.
|
|
163
|
+
# Re-derive the pass/fail decision from a second, quiet aggregate pass.
|
|
164
|
+
agg_fail=0
|
|
165
|
+
while IFS= read -r f; do
|
|
166
|
+
[ -z "$f" ] && continue
|
|
167
|
+
for p in \
|
|
168
|
+
'executive summary|exec summary|resumen ejecutivo|resum executiu' \
|
|
169
|
+
'(^|[^a-z])scope([^a-z]|$)|what.?s included|abast|alcance' \
|
|
170
|
+
'pricing|investment|tiers?|inversi|preu|precio' \
|
|
171
|
+
'timeline|milestones?|calendari|cronograma' \
|
|
172
|
+
'next steps?|mutual action|propers passos|pr.ximos pasos|call to action'
|
|
173
|
+
do
|
|
174
|
+
gci "$p" "$f" || agg_fail=$((agg_fail + 1))
|
|
175
|
+
done
|
|
176
|
+
if gci 'statement of work|scope of work|^#.*\bsow\b|abast del projecte' "$f"; then
|
|
177
|
+
for p in \
|
|
178
|
+
'exclud|exclusion|not (in scope|included)|out of scope|fora d.abast|excluido' \
|
|
179
|
+
'acceptance criteria|accept(ed|ance)|criteris d.acceptaci|criterios de aceptaci' \
|
|
180
|
+
'change order|change.?request|written approval|ordre de canvi|orden de cambio' \
|
|
181
|
+
'payment (schedule|milestones?|terms)|on signature|on acceptance|calendari de pagament'
|
|
182
|
+
do
|
|
183
|
+
gci "$p" "$f" || agg_fail=$((agg_fail + 1))
|
|
184
|
+
done
|
|
185
|
+
fi
|
|
186
|
+
if grep -iE 'etc\.|[^a-z]as needed|and more|[^a-z]tbd[^a-z]|ongoing (support|work|maintenance)' "$f" >/dev/null 2>&1; then
|
|
187
|
+
agg_fail=$((agg_fail + 1))
|
|
188
|
+
fi
|
|
189
|
+
done <<EOF
|
|
190
|
+
$FILES
|
|
191
|
+
EOF
|
|
192
|
+
|
|
193
|
+
printf 'Done. (re-run after fixing any [fail] lines above)\n'
|
|
194
|
+
cat <<'NOTE'
|
|
195
|
+
|
|
196
|
+
Note: [fail] = a broken section contract or scope-creep word (fix before sending).
|
|
197
|
+
[warn] = binding-legal language or an off-length exec summary (review/justify).
|
|
198
|
+
NOTE
|
|
199
|
+
|
|
200
|
+
if [ "$agg_fail" -gt 0 ]; then exit 1; fi
|
|
201
|
+
exit 0
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python
|
|
3
|
+
description: "Use when writing, reviewing, modernizing, typing, or packaging Python at the language level (any framework or none) - PEP 695 generics and the type-alias statement, mypy --strict typing, dataclasses/Protocol/TypedDict/Enum choices, asyncio.TaskGroup and structured concurrency, stdlib idioms (pathlib/itertools/functools/contextlib/match), src/ layout + pyproject.toml managed with uv, and a ruff+mypy+pytest verify gate. Triggers: 'set up a Python project with uv', 'is this Pythonic / modernize to 3.12+', 'make mypy --strict pass', 'convertir este gather a TaskGroup', 'dataclass slots frozen vs NamedTuple', any .py file or pyproject.toml. NOT building a FastAPI/ASGI service (that is fastapi), NOT a deep pytest fixture/mock suite (that is testing-py)."
|
|
4
|
+
tags: [python, typing, async, packaging, uv]
|
|
5
|
+
recommends: [fastapi, secure-coding, deployment]
|
|
6
|
+
origin: risco
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Modern Python at the language level
|
|
10
|
+
|
|
11
|
+
Write, review, modernize, type, and package Python that reads like a typed,
|
|
12
|
+
flat-control-flow, stdlib-first program whose dependencies and tooling all live in one
|
|
13
|
+
`pyproject.toml`. Types are part of the design, not decoration; the stdlib is large and you
|
|
14
|
+
reach for it before a dependency; correctness is `ruff` + a type checker + `pytest` in one gate.
|
|
15
|
+
|
|
16
|
+
Targets **Python 3.12+ (floor) / 3.14 (current**, released 7 Oct 2025): PEP 695 inline
|
|
17
|
+
type parameters (`class Box[T]:`, `type Alias = ...`), `asyncio.TaskGroup`, and — in 3.14 —
|
|
18
|
+
deferred annotation evaluation by default (PEP 649/749, no more `from __future__ import
|
|
19
|
+
annotations`), PEP 750 template strings (`t"..."`), and `compression.zstd`. Tooling pins:
|
|
20
|
+
**uv 0.11** (project + package manager), **ruff 0.15** (lint + format), **mypy 1.20
|
|
21
|
+
`--strict`** (or Astral's `ty`, still preview — default to mypy), **pytest 8**.
|
|
22
|
+
|
|
23
|
+
## When to use / When NOT to use
|
|
24
|
+
|
|
25
|
+
**Use when** the question is *the language* in any `.py` file or `pyproject.toml`: typing,
|
|
26
|
+
generics, protocols, dataclass/NamedTuple/TypedDict/Enum choices, async (`TaskGroup`, timeouts,
|
|
27
|
+
cancellation — not a web server), comprehensions, context managers, error handling; setting up a
|
|
28
|
+
project from zero with `uv` (init, venv, lockfile, scripts); modernizing to PEP 695; or wiring
|
|
29
|
+
the `ruff` + type-checker + `pytest` + `verify.sh` gate.
|
|
30
|
+
|
|
31
|
+
**When NOT to use (delegate):**
|
|
32
|
+
|
|
33
|
+
- Building a FastAPI / ASGI service (routes, Pydantic models, SQLAlchemy, uvicorn) ->
|
|
34
|
+
[`fastapi`](../fastapi/SKILL.md). That skill owns the service shape; this one owns the
|
|
35
|
+
language it is written in.
|
|
36
|
+
- A pytest suite as the primary task — fixtures, parametrize matrices, mocking, coverage,
|
|
37
|
+
property-based testing -> `testing-py` (this skill keeps only the *baseline*: a few tests
|
|
38
|
+
so `verify.sh` has something to run, then hands off).
|
|
39
|
+
- Language-agnostic threat modeling / authz / OWASP review ->
|
|
40
|
+
[`secure-coding`](../secure-coding/SKILL.md) (this skill keeps Python-specific safety: no
|
|
41
|
+
`eval`/`pickle` of untrusted data, `subprocess` without `shell=True`, `secrets` over `random`).
|
|
42
|
+
- Containerfile / CI pipeline / deploy mechanics -> [`deployment`](../deployment/SKILL.md)
|
|
43
|
+
(this skill ships only a uv-based CI note).
|
|
44
|
+
- Another language -> `go`, `typescript`, `rust`, etc. Django ORM/models/migrations -> `django`.
|
|
45
|
+
|
|
46
|
+
Python typing, async language semantics, and uv packaging live **here**, not in a separate
|
|
47
|
+
skill — this skill is the canonical authority for the language substrate under any Python program.
|
|
48
|
+
|
|
49
|
+
## Decision rules
|
|
50
|
+
|
|
51
|
+
Apply on every Python edit:
|
|
52
|
+
|
|
53
|
+
1. **Type the boundary.** Every public function, method, and module-level name gets an
|
|
54
|
+
annotation; let inference handle locals. Untyped public API defeats `--strict`.
|
|
55
|
+
2. **Flat control flow.** Guard-clause and `return`/`raise` early; keep the happy path
|
|
56
|
+
unindented — arrow code hides the logic.
|
|
57
|
+
3. **Stdlib before a dependency.** `pathlib`, `itertools`, `functools`, `dataclasses`,
|
|
58
|
+
`collections` cover most needs; a new dep is a maintenance liability you must justify.
|
|
59
|
+
4. **One `pyproject.toml`, managed with uv.** Never hand-edit `requirements.txt`; `uv add`
|
|
60
|
+
writes the dep and updates `uv.lock`, which you commit.
|
|
61
|
+
5. **Prefer immutability.** `@dataclass(frozen=True, slots=True)` for value objects; mutate
|
|
62
|
+
only where you must — shared mutable state is the bug you debug at 2am.
|
|
63
|
+
6. **`pathlib`, not `os.path`.** `Path("a") / "b"` over `os.path.join`; it is typed and composable.
|
|
64
|
+
7. **Structured `logging`, never `print` in a library.** `print` writes to a caller's stdout
|
|
65
|
+
you do not own; `logging.getLogger(__name__)` lets them configure it.
|
|
66
|
+
8. **`asyncio.TaskGroup` over bare `gather`.** A `TaskGroup` cancels siblings on first error and
|
|
67
|
+
propagates an `ExceptionGroup`; `gather` leaks tasks on failure (rule 8 in Async below).
|
|
68
|
+
9. **No mutable default arguments.** `def f(xs: list[int] | None = None)` then `xs = xs or []`;
|
|
69
|
+
`def f(xs=[])` shares one list across all calls — a classic latent bug.
|
|
70
|
+
10. **Everything passes the gate.** `ruff check` + `ruff format --check` + `mypy --strict` +
|
|
71
|
+
`pytest` — green locally via `scripts/verify.sh` before you call it done.
|
|
72
|
+
|
|
73
|
+
## Typing
|
|
74
|
+
|
|
75
|
+
Type the boundary; run `mypy --strict` so untyped code and implicit `Any` are errors, not
|
|
76
|
+
silent gaps. Use **PEP 695** inline syntax for all new generic code — no explicit `TypeVar`
|
|
77
|
+
objects:
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
# Good (3.12+): inline type parameter and the `type` alias statement.
|
|
81
|
+
def first[T](xs: list[T]) -> T:
|
|
82
|
+
return xs[0]
|
|
83
|
+
|
|
84
|
+
class Box[T]: ...
|
|
85
|
+
type UserId = int # `type` statement: a real alias, lazily evaluated
|
|
86
|
+
# Bad (legacy): `T = TypeVar("T")` then a Generic[T] — fine in old code, don't write it new.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Core choices: `Protocol` (structural, no inheritance) over an ABC when you only need "has these
|
|
90
|
+
methods"; `X | None` (not `Optional[X]`); `Literal`/`Enum` for closed value sets; `Final` for
|
|
91
|
+
constants; `Self` for fluent returns; `@overload` for signature families. Narrow with
|
|
92
|
+
`isinstance`, `assert`, or an `is None` guard — mypy follows the flow. In **3.14** annotations
|
|
93
|
+
are lazy by default (PEP 649/749), so forward references resolve without `from __future__ import
|
|
94
|
+
annotations`.
|
|
95
|
+
|
|
96
|
+
Full PEP 695 bounds/constraints/variance, `Protocol` vs ABC, `TypedDict`
|
|
97
|
+
`Required`/`NotRequired`, `ParamSpec`/`TypeVarTuple`, `TypeGuard`/`TypeIs`, `cast`, and common
|
|
98
|
+
`--strict` errors with fixes -> `references/typing.md`.
|
|
99
|
+
|
|
100
|
+
## Data modeling
|
|
101
|
+
|
|
102
|
+
Pick the carrier by what the data *is*, not by habit:
|
|
103
|
+
|
|
104
|
+
| Need | Use | Why |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| Immutable value object, typed fields, methods | `@dataclass(frozen=True, slots=True)` | Hashable, no `__dict__` overhead, real types |
|
|
107
|
+
| Small fixed tuple, positional + named, immutable | `NamedTuple` | Tuple semantics + field names; cheap |
|
|
108
|
+
| Shape of an external/JSON dict, no runtime class | `TypedDict` | Types a plain `dict` without wrapping it |
|
|
109
|
+
| Closed set of named constants | `Enum` / `StrEnum` / `IntEnum` | One source of truth; `Literal`-friendly |
|
|
110
|
+
| Mutable bag of related state with behavior | plain class / `@dataclass` | When you genuinely need mutation |
|
|
111
|
+
| Runtime-validated I/O model (parse untrusted data) | Pydantic -> [`fastapi`](../fastapi/SKILL.md) | Validation is a service concern, not language |
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
from dataclasses import dataclass
|
|
115
|
+
|
|
116
|
+
@dataclass(frozen=True, slots=True)
|
|
117
|
+
class Point:
|
|
118
|
+
x: float
|
|
119
|
+
y: float
|
|
120
|
+
def translated(self, dx: float, dy: float) -> "Point":
|
|
121
|
+
return Point(self.x + dx, self.y + dy) # returns a new value, never mutates
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Frozen-slots dataclass when you want methods + hashability + clear types; `NamedTuple` when
|
|
125
|
+
the thing genuinely *is* a small tuple you also unpack positionally.
|
|
126
|
+
|
|
127
|
+
## Stdlib idioms
|
|
128
|
+
|
|
129
|
+
Reach into the stdlib before adding a dependency.
|
|
130
|
+
|
|
131
|
+
- **`pathlib`** for all filesystem paths: `Path("data") / name`, `p.read_text()`,
|
|
132
|
+
`p.glob("*.json")`, `p.with_suffix(".bak")`.
|
|
133
|
+
- **`collections`**: `defaultdict(list)`, `Counter(words)`, `deque(maxlen=100)` for ring buffers.
|
|
134
|
+
- **`itertools`**: `chain`, `groupby`, `islice`, `batched` (3.12+) instead of hand-rolled loops.
|
|
135
|
+
- **`functools`**: `@cache` / `@lru_cache` for pure memoization, `@cached_property`, `partial`.
|
|
136
|
+
- **`contextlib`**: `@contextmanager`, `ExitStack` for dynamic resource sets, `suppress(FileNotFoundError)`.
|
|
137
|
+
|
|
138
|
+
Prefer comprehensions over `map`/`filter`+`lambda`; prefer a generator (`(... for ...)`) when
|
|
139
|
+
you only iterate once. Use `match` for structural dispatch over a chain of `isinstance`:
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
from functools import cache
|
|
143
|
+
from pathlib import Path
|
|
144
|
+
|
|
145
|
+
@cache
|
|
146
|
+
def config_dir() -> Path: # computed once, memoized
|
|
147
|
+
return Path.home() / ".config" / "myapp"
|
|
148
|
+
|
|
149
|
+
def area(shape: object) -> float:
|
|
150
|
+
match shape: # structural dispatch, captures by attribute/key
|
|
151
|
+
case {"kind": "circle", "r": float(r)}:
|
|
152
|
+
return 3.14159 * r * r
|
|
153
|
+
case _:
|
|
154
|
+
raise TypeError(f"unknown shape: {shape!r}")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
f-strings for formatting; note 3.14's PEP 750 `t"..."` template strings yield a `Template`
|
|
158
|
+
(not a `str`) for *safe custom interpolation* (e.g. escaping) — use them when an f-string would
|
|
159
|
+
inject untrusted text. Full cookbook (itertools/functools/collections recipes, `match`
|
|
160
|
+
patterns, dataclass `field`/`default_factory`/`__post_init__`, `Enum`/`StrEnum`/`IntFlag`) ->
|
|
161
|
+
`references/stdlib.md`.
|
|
162
|
+
|
|
163
|
+
## Errors & resources
|
|
164
|
+
|
|
165
|
+
Define a small exception hierarchy rooted in one base so callers can catch broadly or
|
|
166
|
+
narrowly; chain causes with `raise ... from`; never write a bare `except:`.
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
class AppError(Exception): ...
|
|
170
|
+
class NotFoundError(AppError): ...
|
|
171
|
+
|
|
172
|
+
def load(path: Path) -> str:
|
|
173
|
+
try:
|
|
174
|
+
return path.read_text()
|
|
175
|
+
except FileNotFoundError as e:
|
|
176
|
+
raise NotFoundError(f"missing {path}") from e # preserves the cause chain
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Use `except*` to handle an `ExceptionGroup` (what a `TaskGroup` raises) by member type.
|
|
180
|
+
Prefer **EAFP** (try the operation, handle the failure) over LBYL race-prone pre-checks.
|
|
181
|
+
Always release resources with `with` (a context manager), not manual try/finally close.
|
|
182
|
+
|
|
183
|
+
## Async (language level)
|
|
184
|
+
|
|
185
|
+
Use `asyncio.run(main())` as the single entry point. **`asyncio.TaskGroup` (3.11+) over bare
|
|
186
|
+
`gather`** — it is the structured-concurrency primitive: a child failure cancels its siblings
|
|
187
|
+
and surfaces as an `ExceptionGroup`, and no task outlives the block.
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
import asyncio
|
|
191
|
+
|
|
192
|
+
# Bad: gather leaks the other tasks on first failure and loses structure.
|
|
193
|
+
async def fetch_all_bad(ids: list[int]) -> list[bytes]:
|
|
194
|
+
return await asyncio.gather(*(fetch(i) for i in ids))
|
|
195
|
+
|
|
196
|
+
# Good: TaskGroup — sibling cancellation on error, bounded lifetime, real grouping.
|
|
197
|
+
async def fetch_all(ids: list[int]) -> list[bytes]:
|
|
198
|
+
async with asyncio.TaskGroup() as tg:
|
|
199
|
+
tasks = [tg.create_task(fetch(i)) for i in ids]
|
|
200
|
+
return [t.result() for t in tasks] # block exited => all done or raised
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Bound every wait with `async with asyncio.timeout(5.0):`. On `CancelledError`, clean up and
|
|
204
|
+
**re-raise** — swallowing it breaks cancellation for the whole tree. Async is for **IO-bound**
|
|
205
|
+
concurrency only; CPU-bound work blocks the loop — push it to `asyncio.to_thread` / a
|
|
206
|
+
`ProcessPoolExecutor` (or 3.14's free-threaded build). **HTTP servers belong to
|
|
207
|
+
[`fastapi`](../fastapi/SKILL.md), not here.** Runtime model, `ExceptionGroup`/`except*`, queues
|
|
208
|
+
with backpressure, cancellation discipline, and sync<->async bridging -> `references/async.md`.
|
|
209
|
+
|
|
210
|
+
## Project layout & packaging (uv)
|
|
211
|
+
|
|
212
|
+
Use a `src/` layout so tests import the installed package, not the source tree by accident:
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
myapp/
|
|
216
|
+
src/myapp/__init__.py
|
|
217
|
+
src/myapp/core.py
|
|
218
|
+
tests/test_core.py
|
|
219
|
+
pyproject.toml
|
|
220
|
+
uv.lock # committed
|
|
221
|
+
scripts/verify.sh
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
`pyproject.toml` is the single config — PEP 621 metadata, dependency groups, and tool config:
|
|
225
|
+
|
|
226
|
+
```toml
|
|
227
|
+
[project]
|
|
228
|
+
name = "myapp"
|
|
229
|
+
version = "0.1.0"
|
|
230
|
+
requires-python = ">=3.12"
|
|
231
|
+
dependencies = ["httpx>=0.27"]
|
|
232
|
+
|
|
233
|
+
[project.scripts]
|
|
234
|
+
myapp = "myapp.core:main" # console entry point
|
|
235
|
+
|
|
236
|
+
[dependency-groups]
|
|
237
|
+
dev = ["ruff>=0.15", "mypy>=1.13", "pytest>=8"]
|
|
238
|
+
|
|
239
|
+
[build-system]
|
|
240
|
+
requires = ["uv_build>=0.11"]
|
|
241
|
+
build-backend = "uv_build" # uv's own backend, stable since July 2025
|
|
242
|
+
|
|
243
|
+
[tool.ruff]
|
|
244
|
+
line-length = 100
|
|
245
|
+
|
|
246
|
+
[tool.mypy]
|
|
247
|
+
strict = true
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Core uv verbs (each updates `uv.lock`, which you commit):
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
uv init --package myapp # scaffold pyproject.toml + src/ + .venv
|
|
254
|
+
uv add httpx # add a runtime dep
|
|
255
|
+
uv add --dev ruff mypy pytest # add to the dev group
|
|
256
|
+
uv sync --frozen # install exactly from the lockfile (CI + fresh clones)
|
|
257
|
+
uv run pytest -q # run inside the managed venv
|
|
258
|
+
uv python install 3.14 # pin/install an interpreter
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Quality gate + verify.sh
|
|
262
|
+
|
|
263
|
+
One local gate, mirroring CI: `ruff check --fix .`, `ruff format .`, `mypy --strict src`
|
|
264
|
+
(or `ty check`), `pytest -q`. `scripts/verify.sh` runs all of them, skips a missing tool/dir
|
|
265
|
+
with a warning, and exits non-zero on any real failure — run `./scripts/verify.sh` from the
|
|
266
|
+
project root before declaring done. CI is `astral-sh/setup-uv` + `uv sync --frozen` + the same
|
|
267
|
+
four commands; full pipeline -> [`deployment`](../deployment/SKILL.md).
|
|
268
|
+
|
|
269
|
+
## pytest baseline
|
|
270
|
+
|
|
271
|
+
Carry just enough to make `verify.sh` meaningful — plain `test_*` functions, `assert`,
|
|
272
|
+
`pytest.raises`, one `parametrize`, `tmp_path` for files:
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
import pytest
|
|
276
|
+
from myapp.core import head
|
|
277
|
+
|
|
278
|
+
@pytest.mark.parametrize("xs, expected", [(["a", "b"], "a"), (["x"], "x")])
|
|
279
|
+
def test_head_returns_first(xs: list[str], expected: str) -> None:
|
|
280
|
+
assert head(xs) == expected
|
|
281
|
+
|
|
282
|
+
def test_head_rejects_empty() -> None:
|
|
283
|
+
with pytest.raises(ValueError):
|
|
284
|
+
head([])
|
|
285
|
+
|
|
286
|
+
def test_writes_file(tmp_path) -> None:
|
|
287
|
+
(tmp_path / "f.txt").write_text("hi")
|
|
288
|
+
assert (tmp_path / "f.txt").read_text() == "hi"
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Deep fixtures, mocking, coverage gates, and property-based testing belong to `testing-py` —
|
|
292
|
+
stop at the baseline and hand off.
|
|
293
|
+
|
|
294
|
+
## Security (embedded, Python-specific)
|
|
295
|
+
|
|
296
|
+
Generic threat modeling and authz live in [`secure-coding`](../secure-coding/SKILL.md); these Python-specific controls stay here:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
# Bad # Good
|
|
300
|
+
eval(user_input) ast.literal_eval(user_input) # never eval/exec input
|
|
301
|
+
pickle.loads(network_bytes) json.loads(network_bytes) # never unpickle untrusted data
|
|
302
|
+
subprocess.run(cmd, shell=True) subprocess.run(["ls", path]) # list args, no shell=True
|
|
303
|
+
random.random() # tokens secrets.token_urlsafe(32) # secrets, not random, for secrets
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Keep deps locked (`uv.lock`) and audited (`pip-audit` / `uv` resolution); read secrets from
|
|
307
|
+
env or a secret manager, never hardcode or log them.
|
|
308
|
+
|
|
309
|
+
## Anti-patterns / rationalizations -> STOP
|
|
310
|
+
|
|
311
|
+
| Rationalization | Reality / Do instead |
|
|
312
|
+
| --- | --- |
|
|
313
|
+
| "`def f(xs=[])` is fine, it's empty" | One list shared across all calls; use `= None` then `xs = xs or []`. |
|
|
314
|
+
| "bare `except:` to be safe" | Swallows `KeyboardInterrupt`/bugs; catch a specific type. |
|
|
315
|
+
| "`from module import *`" | Pollutes the namespace, breaks tooling; import names explicitly. |
|
|
316
|
+
| "`print()` to debug this library" | Writes to a stdout you don't own; use `logging.getLogger(__name__)`. |
|
|
317
|
+
| "`os.path.join` is what I know" | `pathlib.Path` is typed and composable; use `/`. |
|
|
318
|
+
| "I'll add types later" | Untyped public API defeats `--strict`; type the boundary now. |
|
|
319
|
+
| "edit `requirements.txt` by hand" | Drifts from the lock; `uv add` / `uv remove` and commit `uv.lock`. |
|
|
320
|
+
| "`asyncio.gather` is simpler" | Leaks siblings on failure; `TaskGroup` for structured concurrency. |
|
|
321
|
+
| "swallow `CancelledError`, it's noise" | Breaks cancellation for the whole tree; clean up and re-raise. |
|
|
322
|
+
| "`time.sleep` inside this coroutine" | Blocks the event loop; `await asyncio.sleep(...)`. |
|
|
323
|
+
| "`pickle.loads` the cache, it's ours" | Any untrusted byte = code execution; use `json`. |
|
|
324
|
+
| "explicit `TypeVar` everywhere" | New code uses PEP 695 `def f[T]` / `class C[T]` / `type X`. |
|
|
325
|
+
|
|
326
|
+
## Quick reference
|
|
327
|
+
|
|
328
|
+
| Task | Command / idiom |
|
|
329
|
+
| --- | --- |
|
|
330
|
+
| New project | `uv init --package myapp` |
|
|
331
|
+
| Add dep / dev dep | `uv add httpx` / `uv add --dev pytest` |
|
|
332
|
+
| Reproducible install | `uv sync --frozen` |
|
|
333
|
+
| Run in venv | `uv run python -m myapp` |
|
|
334
|
+
| Lint + autofix | `uv run ruff check --fix .` |
|
|
335
|
+
| Format (check) | `uv run ruff format --check .` |
|
|
336
|
+
| Type check | `uv run mypy --strict src` |
|
|
337
|
+
| Test | `uv run pytest -q` |
|
|
338
|
+
| Local gate | `./scripts/verify.sh` |
|
|
339
|
+
| Generic | `def f[T](x: T) -> T:` / `type Alias = ...` |
|
|
340
|
+
| Optional | `X | None` (not `Optional[X]`) |
|
|
341
|
+
| Structured async | `async with asyncio.TaskGroup() as tg: tg.create_task(...)` |
|
|
342
|
+
| Memoize | `@functools.cache` |
|
|
343
|
+
| Token | `secrets.token_urlsafe(32)` |
|
|
344
|
+
|
|
345
|
+
## Project grounding (02-DOCS + CLAUDE.md)
|
|
346
|
+
|
|
347
|
+
When this skill runs in a project with a `02-DOCS/` layer (the
|
|
348
|
+
[`harness`](../harness/SKILL.md) Karpathy wiki), record this project's Python conventions
|
|
349
|
+
there so the next agent inherits them — *recorded, not gated*, never block the task on this.
|
|
350
|
+
|
|
351
|
+
1. **Find** `02-DOCS/wiki/stack/python.md`, linked from a `## Knowledge map` in the root `CLAUDE.md`.
|
|
352
|
+
2. **If missing or stale**, write the project's real choices (interpreter floor, `src/` layout,
|
|
353
|
+
uv workflow, ruff/mypy config, async-vs-sync stance, data-modeling defaults) and add the link.
|
|
354
|
+
3. **Read it first on every use**; bump its `Updated` date when a convention changes.
|
|
355
|
+
|
|
356
|
+
No `02-DOCS/` layer? Skip silently (optionally suggest `harness`).
|
|
357
|
+
|
|
358
|
+
## See Also
|
|
359
|
+
|
|
360
|
+
Sibling skills: [`fastapi`](../fastapi/SKILL.md) (the FastAPI/ASGI service shape — this skill
|
|
361
|
+
owns the language it is written in), [`secure-coding`](../secure-coding/SKILL.md) (language-
|
|
362
|
+
agnostic threat modeling/authz — this skill keeps the Python-specific controls),
|
|
363
|
+
[`deployment`](../deployment/SKILL.md) (Containerfile/CI/shipping — this skill ships only the
|
|
364
|
+
uv CI note), and `testing-py` (by id; deep pytest technique — this skill carries only the baseline).
|
|
365
|
+
|
|
366
|
+
Local references (read when): `references/typing.md` (PEP 695 generics, Protocol vs ABC,
|
|
367
|
+
TypedDict, narrowing, `--strict` fixes); `references/async.md` (asyncio model, TaskGroup vs
|
|
368
|
+
gather, timeouts, cancellation, queues, CPU-bound); `references/stdlib.md`
|
|
369
|
+
(itertools/functools/collections/contextlib/pathlib cookbook, `match`, dataclasses, Enum).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Eval harness — `python` skill
|
|
2
|
+
|
|
3
|
+
These cases are read by an **agent harness** (a Claude agent with the skill catalog loaded),
|
|
4
|
+
not a plain shell script. `cases.yaml` is the fixture; this file is the procedure. Two things
|
|
5
|
+
are measured: **triggering** (does `python` fire on language-level prompts and stay silent on
|
|
6
|
+
near-misses that belong to `fastapi`, `testing-py`, `django`, `secure-coding`, `deployment`?)
|
|
7
|
+
and **capability** (does loading the skill make a scaffold answer measurably better?).
|
|
8
|
+
|
|
9
|
+
**Triggering:** load the full sibling descriptions, start a fresh session per prompt, feed each
|
|
10
|
+
`should_trigger.prompt` and confirm `python` fires; feed each `should_not_trigger.prompt` and
|
|
11
|
+
confirm it routes to the stated `route_to` and does *not* fire `python`. LLM routing is
|
|
12
|
+
non-deterministic — run 3–5 trials each and pass on the majority; target ≥90% accuracy.
|
|
13
|
+
|
|
14
|
+
**Capability:** run the `capability.scenario` twice — once with the skill body unavailable, once
|
|
15
|
+
with `python/SKILL.md` (and references) loaded — and grade each output against the `must_include`
|
|
16
|
+
rubric (fraction of points present and correct, averaged over 3 trials). Pass bar: ≥80% with the
|
|
17
|
+
skill, and a clear margin over the without-skill baseline. No network is required; grading is
|
|
18
|
+
rubric-based and partly judgment (e.g. "no mutable default argument"). Keep `cases.yaml` faithful
|
|
19
|
+
to SKILL.md's "When to use / When NOT to use" — change them together.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
skill: python
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Set up a new Python project with uv — package layout, pyproject, lint and types."
|
|
5
|
+
why: "Core packaging/layout/uv duty of this skill: src/ layout, pyproject.toml, ruff+mypy wiring."
|
|
6
|
+
- prompt: "Is this idiomatic Python? Modernize it to 3.12+ typing."
|
|
7
|
+
why: "Language-level idiom review plus PEP 695 modernization is the spine of the skill."
|
|
8
|
+
- prompt: "Add type hints to this module and make mypy --strict pass."
|
|
9
|
+
why: "Typing the boundary and satisfying a strict checker is owned here, even without naming the tool."
|
|
10
|
+
- prompt: "Convertir este asyncio.gather a algo más seguro con cancelación correcta."
|
|
11
|
+
why: "Non-obvious + Spanish: structured concurrency / TaskGroup at the language level; user describes the problem without naming TaskGroup."
|
|
12
|
+
- prompt: "Should I use a frozen slots dataclass or a NamedTuple for this value object?"
|
|
13
|
+
why: "Non-obvious data-modeling decision the skill's table resolves; no framework or tool named."
|
|
14
|
+
- prompt: "This function takes xs=[] as a default and the list keeps growing across calls — what's wrong?"
|
|
15
|
+
why: "Classic mutable-default-argument bug; a language-level anti-pattern this skill diagnoses without the user naming it."
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Add a FastAPI route that returns a Pydantic response model with async SQLAlchemy."
|
|
19
|
+
route_to: "fastapi"
|
|
20
|
+
why: "Service/route/Pydantic/ORM wiring belongs to fastapi; this skill owns only the language it is written in."
|
|
21
|
+
- prompt: "Write a thorough pytest suite with shared fixtures, mocking, and a coverage gate."
|
|
22
|
+
route_to: "testing-py"
|
|
23
|
+
why: "Deep test technique is testing-py; python carries only the baseline and hands off."
|
|
24
|
+
- prompt: "Model this table as a Django ORM model with migrations and an admin view."
|
|
25
|
+
route_to: "django"
|
|
26
|
+
why: "Django ORM/models/migrations/admin is the django skill, not the language substrate."
|
|
27
|
+
- prompt: "Threat-model this login flow and review it for OWASP-class authorization issues."
|
|
28
|
+
route_to: "secure-coding"
|
|
29
|
+
why: "Language-agnostic threat modeling and authz/abuse review is secure-coding; only Python-specific controls stay here."
|
|
30
|
+
- prompt: "Write a multi-stage Containerfile and a GitHub Actions pipeline to deploy this Python app."
|
|
31
|
+
route_to: "deployment"
|
|
32
|
+
why: "Containerfile / CI / shipping mechanics are deployment; this skill ships only a uv-based CI note."
|
|
33
|
+
|
|
34
|
+
capability:
|
|
35
|
+
- scenario: "Scaffold a typed src/-layout Python package with uv: one stdlib-idiomatic module
|
|
36
|
+
using a PEP 695 generic, one asyncio TaskGroup function, a pyproject.toml with ruff+mypy
|
|
37
|
+
config and a console entry point, a baseline pytest test, and scripts/verify.sh."
|
|
38
|
+
must_include:
|
|
39
|
+
- "uv commands: uv init --package, uv add / uv add --dev, and uv sync --frozen for reproducible installs"
|
|
40
|
+
- "pyproject.toml with a [project] table (PEP 621, requires-python >=3.12) and a build-system/backend"
|
|
41
|
+
- "a PEP 695 inline generic (e.g. def first[T](xs: list[T]) -> T or class Box[T]), not an explicit TypeVar object"
|
|
42
|
+
- "an asyncio.TaskGroup function (not bare asyncio.gather) with cancellation-safe structure"
|
|
43
|
+
- "mypy --strict configured (e.g. [tool.mypy] strict = true) and ruff check/format wired in"
|
|
44
|
+
- "at least one pytest test_* function (assert and/or pytest.raises)"
|
|
45
|
+
- "no mutable default argument (uses = None then x = x or [], or field(default_factory=...)) and no bare except"
|
|
46
|
+
- "an explicit note that HTTP routes/services belong to fastapi, not this skill"
|