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,341 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: java
|
|
3
|
+
description: "Use when writing, reviewing, or refactoring modern Java (21+, Java 25 LTS) - records and sealed interfaces as algebraic data types, exhaustive pattern-matching switch over instanceof+cast ladders, virtual-thread (Project Loom) concurrency one-task-per-thread, structured concurrency and ScopedValue replacing ThreadLocal, Stream/Optional/Collector pipelines, compact-constructor validation, parametrized JDBC, and the Maven 3.9 / Gradle 9 build surface against a current JDK. Triggers: \"write a Java service\", \"is this idiomatic Java\", \"refactor this instanceof ladder\", \"fetch 500 URLs concurrently\", \"model this domain with records\", .java files, pom.xml, build.gradle, the non-obvious \"my ThreadLocal context disappears inside the tasks I submit\" (that is ScopedValue), \"modela este dominio de pagos con tipos inmutables\", \"refactoritza aquest switch\". NOT Spring framework wiring (that is spring-boot)."
|
|
4
|
+
tags: [java, jvm, records, virtual-threads, sealed-types]
|
|
5
|
+
recommends: [spring-boot, secure-coding, deployment]
|
|
6
|
+
origin: risco
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Modern Java (21+)
|
|
10
|
+
|
|
11
|
+
Write, review, and refactor Java the way the language is shaped today, not the way it
|
|
12
|
+
was in 2014.
|
|
13
|
+
|
|
14
|
+
Targets **Java 21+ with Java 25 as the current LTS** (released 2025-09-16, supported to
|
|
15
|
+
2033; Java 26 is the current non-LTS, 2026-03-17). "Modern" here means: records and sealed
|
|
16
|
+
interfaces instead of JavaBeans and type hierarchies, exhaustive pattern-matching `switch`
|
|
17
|
+
instead of `instanceof`+cast ladders, virtual threads instead of hand-tuned pools, and
|
|
18
|
+
`ScopedValue` instead of `ThreadLocal`. If you are reaching for a telescoping constructor,
|
|
19
|
+
a getter/setter bean, or a manual `ExecutorService` sized to a core count, stop.
|
|
20
|
+
|
|
21
|
+
## When to use / When NOT to use
|
|
22
|
+
|
|
23
|
+
**Use when:**
|
|
24
|
+
|
|
25
|
+
- Authoring, reviewing, or refactoring any `.java` file.
|
|
26
|
+
- Modeling a domain: record vs class, sealed hierarchy vs enum, where immutability belongs.
|
|
27
|
+
- Replacing `instanceof`+cast chains or visitor boilerplate with a pattern-matching `switch`.
|
|
28
|
+
- Concurrency that blocks on I/O at scale: migrating thread pools / reactive chains to
|
|
29
|
+
virtual threads, fan-out with structured concurrency, `ThreadLocal` -> `ScopedValue`.
|
|
30
|
+
- Stream / Optional / Collector pipelines, and deciding when a plain loop beats a stream.
|
|
31
|
+
- Setting up or fixing a `pom.xml` / `build.gradle(.kts)` for a current JDK (toolchain,
|
|
32
|
+
`--release`, preview flags, JUnit 5).
|
|
33
|
+
|
|
34
|
+
**When NOT to use (delegate):**
|
|
35
|
+
|
|
36
|
+
- **Spring** controllers, beans, starters, autoconfiguration, `@Transactional` -> `spring-boot`.
|
|
37
|
+
This skill is the plain-JDK layer underneath; framework wiring is out of scope by topic.
|
|
38
|
+
- **Kotlin** on the JVM (Android or server) -> `kotlin-android`. Java and Kotlin interop but
|
|
39
|
+
are different languages; coroutines and Kotlin null-safety belong there.
|
|
40
|
+
- **Language-agnostic threat modeling / OWASP / authz** -> `secure-coding`. This skill keeps
|
|
41
|
+
only Java-specific controls (parametrized JDBC, compact-constructor validation, sane deser).
|
|
42
|
+
- **Containerfile / CI pipeline / shipping** -> `deployment`. This skill keeps only a
|
|
43
|
+
jlink/jpackage note and the JDK base-image choice.
|
|
44
|
+
- **PostgreSQL schema / index / query tuning** -> `postgresdb`. This skill covers JDBC
|
|
45
|
+
parametrization from the Java side only.
|
|
46
|
+
- Recording per-project conventions in a workspace wiki -> `harness` (see "Project grounding").
|
|
47
|
+
|
|
48
|
+
Records/sealed/pattern-matching design, virtual-thread concurrency, and the build surface
|
|
49
|
+
live **here** — there is no separate "java-concurrency" or "java-build" skill.
|
|
50
|
+
|
|
51
|
+
## Decision rules
|
|
52
|
+
|
|
53
|
+
Apply these on every Java edit:
|
|
54
|
+
|
|
55
|
+
1. **Record by default for data.** If a type just carries values, make it a `record`; it
|
|
56
|
+
gets `equals`/`hashCode`/`toString` and is immutable for free. Class only when you need
|
|
57
|
+
mutable identity or inheritance.
|
|
58
|
+
2. **Sealed + exhaustive `switch` over `instanceof` ladders.** A closed set of cases is a
|
|
59
|
+
`sealed interface`; the compiler then proves your `switch` is total. An `instanceof`+cast
|
|
60
|
+
ladder is an unchecked manual version of this.
|
|
61
|
+
3. **Immutable and `final` by default.** Fields `final`, collections wrapped/copied; mutate
|
|
62
|
+
only where you have measured a reason. Shared mutable state is the bug you debug at 3am.
|
|
63
|
+
4. **`Optional` is a return type, never a field or parameter.** It signals "maybe absent" to a
|
|
64
|
+
caller; an `Optional` field just adds a null-of-null. For absent collections, return empty.
|
|
65
|
+
5. **Virtual threads for blocking I/O, platform threads for CPU work.** Loom wins when threads
|
|
66
|
+
spend their life parked on sockets/JDBC; it does nothing for a tight CPU loop.
|
|
67
|
+
6. **One virtual thread per task. Never pool them.** They are cheap (millions are fine);
|
|
68
|
+
pooling them re-introduces the limit they exist to remove.
|
|
69
|
+
7. **Validate in the compact constructor.** A `record`'s invariants belong in its compact
|
|
70
|
+
constructor so an invalid instance cannot exist — not in a separate `validate()` you can forget.
|
|
71
|
+
8. **Parametrize every JDBC query.** `PreparedStatement` with `?`, bind values; never
|
|
72
|
+
concatenate user input into SQL.
|
|
73
|
+
9. **Stream for transforms, loop for side-effects.** A `map`/`filter`/`collect` pipeline is
|
|
74
|
+
clear; a `forEach` that mutates external state is a loop wearing a costume — write the loop.
|
|
75
|
+
10. **Treat compiler warnings as failures.** Build with `-Xlint:all -Werror`; an ignored
|
|
76
|
+
`unchecked` or `deprecation` warning is a deferred bug.
|
|
77
|
+
|
|
78
|
+
## Data modeling
|
|
79
|
+
|
|
80
|
+
A `record` is the default data carrier — immutable, no setters, validated in its compact
|
|
81
|
+
constructor.
|
|
82
|
+
|
|
83
|
+
```java
|
|
84
|
+
// Good: invalid Money cannot exist; value semantics for free.
|
|
85
|
+
public record Money(long cents, Currency currency) {
|
|
86
|
+
public Money { // compact constructor
|
|
87
|
+
if (cents < 0) throw new IllegalArgumentException("cents < 0: " + cents);
|
|
88
|
+
Objects.requireNonNull(currency, "currency");
|
|
89
|
+
}
|
|
90
|
+
public Money plus(Money other) {
|
|
91
|
+
if (!currency.equals(other.currency)) throw new IllegalArgumentException("currency mismatch");
|
|
92
|
+
return new Money(cents + other.cents, currency);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```java
|
|
98
|
+
// Bad: telescoping constructors, mutable identity, hand-written equals you will get wrong.
|
|
99
|
+
public final class Money {
|
|
100
|
+
private long cents; private Currency currency;
|
|
101
|
+
public Money() {}
|
|
102
|
+
public Money(long cents) { this.cents = cents; }
|
|
103
|
+
public Money(long cents, Currency currency) { this.cents = cents; this.currency = currency; }
|
|
104
|
+
public void setCents(long c) { this.cents = c; } // now any caller can break invariants
|
|
105
|
+
public long getCents() { return cents; }
|
|
106
|
+
// ... 40 lines of getters/setters/equals/hashCode ...
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
A **sealed interface + record cases is an algebraic data type** — a closed set the compiler
|
|
111
|
+
knows about:
|
|
112
|
+
|
|
113
|
+
```java
|
|
114
|
+
public sealed interface PaymentResult permits Captured, Declined, Pending {}
|
|
115
|
+
public record Captured(String id, Money amount) implements PaymentResult {}
|
|
116
|
+
public record Declined(String reason, int code) implements PaymentResult {}
|
|
117
|
+
public record Pending(String id, Instant retryAfter) implements PaymentResult {}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Enum vs sealed:** use an `enum` when cases are a fixed set of *constants with no per-case
|
|
121
|
+
data* (`Status.ACTIVE`); use a sealed interface when each case *carries different fields*
|
|
122
|
+
(above). Reaching for an enum plus a parallel "payload" map means you wanted a sealed type.
|
|
123
|
+
|
|
124
|
+
## Pattern matching
|
|
125
|
+
|
|
126
|
+
`instanceof` binds the pattern variable directly — no cast:
|
|
127
|
+
|
|
128
|
+
```java
|
|
129
|
+
if (event instanceof Captured c) { // Good: c is in scope, already typed
|
|
130
|
+
ledger.record(c.id(), c.amount());
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
An exhaustive `switch` over a sealed type with **record deconstruction** and `when` guards
|
|
135
|
+
replaces the whole ladder — and **omit `default` when the sealed set is covered** so adding a
|
|
136
|
+
new case becomes a compile error you must handle:
|
|
137
|
+
|
|
138
|
+
```java
|
|
139
|
+
// Good: total over the sealed type; deconstruction patterns; guard; null branch.
|
|
140
|
+
String describe(PaymentResult r) {
|
|
141
|
+
return switch (r) {
|
|
142
|
+
case Captured(var id, var amt) when amt.cents() == 0 -> "free capture " + id;
|
|
143
|
+
case Captured(var id, var amt) -> "captured " + amt.cents() + "c " + id;
|
|
144
|
+
case Declined(var reason, var code) -> "declined(" + code + "): " + reason;
|
|
145
|
+
case Pending(var id, var __) -> "pending " + id;
|
|
146
|
+
case null -> "no result";
|
|
147
|
+
// no default: compiler proves exhaustiveness; a new permits-case won't compile until handled
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
```java
|
|
153
|
+
// Bad: instanceof + cast ladder. No exhaustiveness check; a new case silently falls through.
|
|
154
|
+
String describe(PaymentResult r) {
|
|
155
|
+
if (r instanceof Captured) { Captured c = (Captured) r; return "captured " + c.amount(); }
|
|
156
|
+
else if (r instanceof Declined) { Declined d = (Declined) r; return "declined " + d.reason(); }
|
|
157
|
+
else return "?"; // silently wrong when Pending is added
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Java 25 adds **primitive type patterns** in `instanceof` and `switch` (e.g. `case int i`),
|
|
162
|
+
extending exhaustiveness to primitives.
|
|
163
|
+
|
|
164
|
+
## Concurrency: virtual threads
|
|
165
|
+
|
|
166
|
+
For blocking I/O, run **one virtual thread per task** inside a per-task executor closed with
|
|
167
|
+
try-with-resources (the close call blocks until every submitted task finishes):
|
|
168
|
+
|
|
169
|
+
```java
|
|
170
|
+
// Good: 500 blocking fetches, one virtual thread each. No pool sizing, no reactive ceremony.
|
|
171
|
+
List<String> fetchAll(List<URI> urls, HttpClient http) throws InterruptedException {
|
|
172
|
+
try (var exec = Executors.newVirtualThreadPerTaskExecutor()) {
|
|
173
|
+
var futures = urls.stream()
|
|
174
|
+
.map(u -> exec.submit(() -> http.send(
|
|
175
|
+
HttpRequest.newBuilder(u).build(), BodyHandlers.ofString()).body()))
|
|
176
|
+
.toList();
|
|
177
|
+
return futures.stream().map(f -> {
|
|
178
|
+
try { return f.get(); } catch (Exception e) { throw new CompletionException(e); }
|
|
179
|
+
}).toList();
|
|
180
|
+
} // close() joins all tasks
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```java
|
|
185
|
+
// Bad: a fixed platform-thread pool caps you at N concurrent blocking calls and starves.
|
|
186
|
+
var exec = Executors.newFixedThreadPool(16); // 484 of 500 fetches wait on a thread
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**JEP 491 (JDK 24) removed `synchronized` pinning** — a virtual thread inside a `synchronized`
|
|
190
|
+
block no longer pins its carrier, so legacy `synchronized` code is safe on Loom now. For *long*
|
|
191
|
+
holds prefer `ReentrantLock` anyway (fairness, tryLock, interruptibility).
|
|
192
|
+
|
|
193
|
+
**Structured concurrency** (`StructuredTaskScope`) ties subtasks to a scope so one failure
|
|
194
|
+
cancels the siblings — but it is **still preview in Java 25 (JEP 505, 5th preview)**, so it
|
|
195
|
+
needs `--enable-preview`. **`ScopedValue` is FINAL in Java 25 (JEP 506)** and is the immutable
|
|
196
|
+
replacement for `ThreadLocal` when sharing context across virtual threads:
|
|
197
|
+
|
|
198
|
+
```java
|
|
199
|
+
// Good: immutable, explicitly scoped, propagates into child tasks; nothing to clean up.
|
|
200
|
+
private static final ScopedValue<String> REQUEST_ID = ScopedValue.newInstance();
|
|
201
|
+
ScopedValue.where(REQUEST_ID, id).run(() -> handle(req)); // REQUEST_ID.get() inside
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
A `ThreadLocal` set on the caller does **not** appear in the tasks you submit to an executor,
|
|
205
|
+
and on millions of virtual threads its mutable per-thread copies leak memory — that symptom is
|
|
206
|
+
exactly what `ScopedValue` fixes. Deep dive (scopes, joiners, pinning diagnosis, when platform
|
|
207
|
+
threads still win) -> `references/concurrency.md`.
|
|
208
|
+
|
|
209
|
+
## Streams, Optional, Collectors (essentials)
|
|
210
|
+
|
|
211
|
+
Use `stream().toList()` (Java 16+, immutable) for the common case; `Collectors.groupingBy`
|
|
212
|
+
and `teeing` cover most aggregation:
|
|
213
|
+
|
|
214
|
+
```java
|
|
215
|
+
Map<Currency, Long> totalByCcy = payments.stream()
|
|
216
|
+
.collect(Collectors.groupingBy(Payment::currency,
|
|
217
|
+
Collectors.summingLong(p -> p.amount().cents())));
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
`Optional` discipline: chain `map`/`filter`/`orElseGet`/`orElseThrow`; never `.get()` without a
|
|
221
|
+
prior `isPresent`, never an `Optional` field. Do **not** stream when a loop is clearer — a
|
|
222
|
+
`forEach` with side-effects, an early `break`/`return`, or index-coupled logic is a loop.
|
|
223
|
+
Full Collector catalog, custom collectors, `mapMulti`, Gatherers (Java 24+), and parallel-stream
|
|
224
|
+
caveats -> `references/streams.md`.
|
|
225
|
+
|
|
226
|
+
## Builds
|
|
227
|
+
|
|
228
|
+
Pin the language level with the compiler plugin's `<release>`, run JUnit 5 via Surefire.
|
|
229
|
+
**Maven 4 is not yet GA (4.0.0-rc-5, Nov 2025) — use Maven 3.9.x for production**:
|
|
230
|
+
|
|
231
|
+
```xml
|
|
232
|
+
<properties><maven.compiler.release>25</maven.compiler.release></properties>
|
|
233
|
+
<build><plugins>
|
|
234
|
+
<plugin>
|
|
235
|
+
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId>
|
|
236
|
+
<version>3.13.0</version>
|
|
237
|
+
<configuration><release>25</release>
|
|
238
|
+
<compilerArgs><arg>-Xlint:all</arg><arg>-Werror</arg></compilerArgs></configuration>
|
|
239
|
+
</plugin>
|
|
240
|
+
<plugin>
|
|
241
|
+
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId>
|
|
242
|
+
<version>3.5.2</version>
|
|
243
|
+
</plugin>
|
|
244
|
+
</plugins></build>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Gradle 9.x (current 9.5.1, requires Java 17+ to run, prefers the configuration cache) uses a
|
|
248
|
+
**toolchain block** so the build picks the right JDK regardless of the runner's default:
|
|
249
|
+
|
|
250
|
+
```kotlin
|
|
251
|
+
plugins { java }
|
|
252
|
+
java { toolchain { languageVersion = JavaLanguageVersion.of(25) } }
|
|
253
|
+
tasks.test { useJUnitPlatform() }
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Full `pom.xml` / `build.gradle.kts` skeletons, multi-module, preview-flag wiring, JUnit 5 +
|
|
257
|
+
AssertJ + Mockito, jlink/jpackage -> `references/builds.md`.
|
|
258
|
+
|
|
259
|
+
## Errors & null
|
|
260
|
+
|
|
261
|
+
- **Never return `null`.** Return `Optional<T>` for a maybe-value, an empty collection for "none".
|
|
262
|
+
- **try-with-resources** for anything `AutoCloseable`; do not write a `finally { close() }` by hand.
|
|
263
|
+
- **Chain exceptions** — `throw new ServiceException("loading user " + id, cause)` — so the
|
|
264
|
+
stack trace keeps the root. Swallowing (`catch (Exception e) {}`) destroys the evidence.
|
|
265
|
+
- **Checked vs unchecked:** checked (`extends Exception`) for recoverable, expected conditions
|
|
266
|
+
the caller must handle; unchecked (`extends RuntimeException`) for programming bugs / invariant
|
|
267
|
+
violations. Do not wrap everything in a checked exception "to be safe" — it just gets rethrown.
|
|
268
|
+
|
|
269
|
+
## Anti-patterns / rationalizations -> STOP
|
|
270
|
+
|
|
271
|
+
| Rationalization | Reality / Do instead |
|
|
272
|
+
| --- | --- |
|
|
273
|
+
| "I'll add setters to the record for convenience" | Then it isn't immutable. Build a new instance; validate in the compact constructor. |
|
|
274
|
+
| "instanceof+cast is fine, it's only three cases" | No exhaustiveness; case four silently falls through. Sealed + `switch`. |
|
|
275
|
+
| "pool the virtual threads to be safe" | Pooling re-adds the limit Loom removes. One virtual thread per task. |
|
|
276
|
+
| "ThreadLocal carries my request context" | It doesn't cross submit() and leaks on millions of vthreads. `ScopedValue`. |
|
|
277
|
+
| "Optional field so callers handle absence" | Optional is a return type. A field is null-of-null; use the value or a default. |
|
|
278
|
+
| "raw `List` is shorter than `List<Payment>`" | Raw types disable generics checks. Always parametrize. |
|
|
279
|
+
| "catch and ignore, it can't happen here" | Then assert it; a swallowed exception erases the bug. Log + rethrow or handle. |
|
|
280
|
+
| "fmt the id into the SQL string, it's trusted" | Trust nothing at the boundary. `PreparedStatement` with `?`. |
|
|
281
|
+
| "wrap it in a checked exception to force handling" | Most callers just rethrow. Unchecked for bugs; checked only when recovery is real. |
|
|
282
|
+
| "`new Thread(r).start()` per request" | On platform threads that's a few thousand max. Virtual-thread-per-task executor. |
|
|
283
|
+
| "default branch keeps the switch safe" | A default hides the new case. Omit it on a sealed type so it won't compile. |
|
|
284
|
+
| "warnings are just noise" | `unchecked`/`deprecation` are deferred bugs. `-Xlint:all -Werror`. |
|
|
285
|
+
|
|
286
|
+
## Quick reference
|
|
287
|
+
|
|
288
|
+
| Task | Idiom / command |
|
|
289
|
+
| --- | --- |
|
|
290
|
+
| Build + test (Maven) | `./mvnw -q verify` (or `mvn -q verify`) |
|
|
291
|
+
| Build + test (Gradle) | `./gradlew check` |
|
|
292
|
+
| Data carrier | `record Money(long cents, Currency ccy) { Money { ... } }` |
|
|
293
|
+
| Closed case set | `sealed interface R permits A, B {}` + `record A(...) implements R {}` |
|
|
294
|
+
| Exhaustive match | `switch (r) { case A(var x) -> ...; case B b -> ...; }` (no `default`) |
|
|
295
|
+
| Concurrent blocking I/O | `try (var e = Executors.newVirtualThreadPerTaskExecutor()) { ... }` |
|
|
296
|
+
| Context across threads | `ScopedValue.where(KEY, val).run(() -> ...)` |
|
|
297
|
+
| Run a single source file | `java App.java` (compact source + instance `main`, JEP 512, final in 25) |
|
|
298
|
+
| Local gate | `./scripts/verify.sh` (run in your project root) |
|
|
299
|
+
|
|
300
|
+
## Project grounding (02-DOCS + CLAUDE.md)
|
|
301
|
+
|
|
302
|
+
When this skill runs in a project with a `02-DOCS/` layer (the
|
|
303
|
+
[`harness`](../harness/SKILL.md) Karpathy wiki), record this project's Java decisions there
|
|
304
|
+
and index them from the root `CLAUDE.md`, so the next agent inherits them instead of re-deriving.
|
|
305
|
+
|
|
306
|
+
1. **Find the article** `02-DOCS/wiki/stack/java.md`, linked from a `## Knowledge map` section
|
|
307
|
+
in the root `CLAUDE.md`.
|
|
308
|
+
2. **If missing or stale**, create/update it with the project's real choices — JDK/LTS target,
|
|
309
|
+
Maven vs Gradle, the domain-modeling conventions (records/sealed), the concurrency model
|
|
310
|
+
(virtual threads, structured-concurrency preview on/off), and the error/null conventions —
|
|
311
|
+
then add/refresh the `CLAUDE.md` link (create the `## Knowledge map` section and `CLAUDE.md`
|
|
312
|
+
itself if absent).
|
|
313
|
+
3. **Read it first on every use** and stay consistent; when a convention changes, update the
|
|
314
|
+
article (bump its `Updated` date) in the same change.
|
|
315
|
+
|
|
316
|
+
No `02-DOCS/` layer? Skip silently (optionally suggest `harness`). Technical conventions are
|
|
317
|
+
*recorded, not gated* — never block the task on this.
|
|
318
|
+
|
|
319
|
+
## See Also
|
|
320
|
+
|
|
321
|
+
Sibling skills (link only those present under `skills/`):
|
|
322
|
+
|
|
323
|
+
- `spring-boot` - the Spring framework surface (controllers, beans, autoconfiguration); this
|
|
324
|
+
skill is the plain-JDK/language layer underneath it.
|
|
325
|
+
- [`secure-coding`](../secure-coding/SKILL.md) - threat modeling and language-agnostic
|
|
326
|
+
authz/abuse/OWASP review (this skill keeps the Java-specific controls).
|
|
327
|
+
- [`deployment`](../deployment/SKILL.md) - Docker, CI, and shipping (this skill keeps only the
|
|
328
|
+
jlink/jpackage note and base-image choice).
|
|
329
|
+
- [`postgresdb`](../postgresdb/SKILL.md) - SQL schema/index/query tuning (this skill covers JDBC
|
|
330
|
+
parametrization from the Java side only).
|
|
331
|
+
- [`harness`](../harness/SKILL.md) - the `02-DOCS/` workspace wiki where per-project Java
|
|
332
|
+
conventions are recorded (see "Project grounding").
|
|
333
|
+
|
|
334
|
+
Local references (read when):
|
|
335
|
+
|
|
336
|
+
- `references/concurrency.md` - virtual-thread internals, structured concurrency, ScopedValue,
|
|
337
|
+
pinning diagnosis, when platform threads still win.
|
|
338
|
+
- `references/streams.md` - full Collectors catalog, custom collectors, Gatherers, parallel-stream
|
|
339
|
+
caveats, Stream-vs-loop decision table.
|
|
340
|
+
- `references/builds.md` - full pom.xml + build.gradle.kts skeletons, multi-module, preview flags,
|
|
341
|
+
JUnit 5 + AssertJ + Mockito, jlink/jpackage, dependency hygiene.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Eval harness — `java` skill
|
|
2
|
+
|
|
3
|
+
These are routing/trigger fixtures plus one capability rubric, not an automated CI harness.
|
|
4
|
+
`cases.yaml` is the fixture; this file is how to run it by hand or with a grader-agent.
|
|
5
|
+
|
|
6
|
+
**Triggering.** Load the full skill catalog so the routing layer sees every sibling
|
|
7
|
+
(spring-boot, kotlin-android, secure-coding, deployment, postgresdb, go, python, harness, …).
|
|
8
|
+
Feed each `should_trigger.prompt` in a fresh session and confirm the agent invokes the `java`
|
|
9
|
+
skill; feed each `should_not_trigger.prompt` and confirm it does NOT fire `java` and instead
|
|
10
|
+
routes to the stated `route_to` sibling. LLM routing is non-deterministic, so run 3–5 trials
|
|
11
|
+
per prompt and pass on the majority; aim for ≥90% trigger accuracy. Watch the non-obvious case
|
|
12
|
+
("ThreadLocal disappears inside submitted tasks") — it should still fire `java` and land on
|
|
13
|
+
ScopedValue, and the Spanish case ("modela este dominio de pagos") should fire too.
|
|
14
|
+
|
|
15
|
+
**Capability.** Run the `capability.scenario` once without the skill body and once with
|
|
16
|
+
`java/SKILL.md` (plus `references/`) loaded, and grade each answer against the `must_include`
|
|
17
|
+
rubric (fraction of points present and correct). The skill earns its place only if the
|
|
18
|
+
with-skill answer clearly beats the baseline — chiefly: sealed interface + record cases (no
|
|
19
|
+
JavaBean), compact-constructor validation, an exhaustive `switch` with deconstruction and no
|
|
20
|
+
`default`, no instanceof ladder, a virtual-thread-per-task executor (not a pool), no `null`
|
|
21
|
+
returns, and a `pom.xml` pinned to `<release>25</release>`. Grading is judgment-based; a human
|
|
22
|
+
or grader-agent reads each rubric point against the output. Keep `cases.yaml` faithful to the
|
|
23
|
+
SKILL's "When to use / When NOT to use" — update both in the same change when scope shifts.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
skill: java
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Write a service that fetches 500 URLs concurrently and aggregates the response bodies."
|
|
5
|
+
why: "Virtual-thread fan-out for blocking I/O is the core concurrency use case; the user never names Java or Loom but the shape (concurrent blocking fetches) is exactly what one-vthread-per-task owns here."
|
|
6
|
+
- prompt: "Refactor this instanceof + cast ladder over a Shape type into something cleaner and exhaustive."
|
|
7
|
+
why: "Replacing instanceof+cast ladders with a sealed type + exhaustive pattern-matching switch is explicitly owned by this skill."
|
|
8
|
+
- prompt: "Is this idiomatic modern Java? class User { private String name; private int age; with all the getters and setters and a no-arg constructor }"
|
|
9
|
+
why: "Idiom review of a JavaBean; the skill should push it to a record. 'Is this idiomatic Java' is a named trigger."
|
|
10
|
+
- prompt: "modela este dominio de pagos con tipos inmutables y casos exhaustivos (capturado, rechazado, pendiente)"
|
|
11
|
+
why: "Spanish phrasing for sealed-interface-plus-record ADT modeling with exhaustive handling — records and sealed types are owned here."
|
|
12
|
+
- prompt: "My ThreadLocal request context disappears inside the tasks I submit to the executor, and we're running on millions of virtual threads now. What should I use instead?"
|
|
13
|
+
why: "Non-obvious: the user describes the symptom (ThreadLocal not crossing submit, leaking on vthreads) without naming ScopedValue, which is exactly the fix this skill prescribes."
|
|
14
|
+
- prompt: "Set up a pom.xml that compiles against Java 25 and runs JUnit 5 tests, with warnings treated as errors."
|
|
15
|
+
why: "The Maven/Gradle build surface (compiler-plugin release, surefire + JUnit 5, -Xlint -Werror) is owned by this skill."
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Add a @RestController with @GetMapping(\"/users/{id}\") and inject a @Service bean for the lookup."
|
|
19
|
+
route_to: "spring-boot"
|
|
20
|
+
why: "Spring framework wiring (controllers, beans, annotations, autoconfiguration) is delegated to spring-boot; this skill is only the plain-JDK layer underneath."
|
|
21
|
+
- prompt: "Write a Kotlin coroutine-based repository with a Flow for my Android app."
|
|
22
|
+
route_to: "kotlin-android"
|
|
23
|
+
why: "Kotlin language and Android belong to kotlin-android; Java and Kotlin interop but are different languages."
|
|
24
|
+
- prompt: "Do an OWASP-style authorization review and threat model of my multi-tenant API's permission boundaries."
|
|
25
|
+
route_to: "secure-coding"
|
|
26
|
+
why: "Language-agnostic threat modeling / authz / OWASP review is delegated to secure-coding; only Java-specific controls (JDBC params, compact-constructor validation) stay here."
|
|
27
|
+
- prompt: "Write a multi-stage Dockerfile and a GitHub Actions pipeline to build and ship my jar."
|
|
28
|
+
route_to: "deployment"
|
|
29
|
+
why: "Containerfile / CI / shipping is delegated to deployment; this skill keeps only the jlink/jpackage note and base-image choice."
|
|
30
|
+
- prompt: "Tune the indexes and rewrite this slow query for a Postgres users table with a composite lookup."
|
|
31
|
+
route_to: "postgresdb"
|
|
32
|
+
why: "SQL schema/index/query tuning is a database concern; this skill covers only JDBC parametrization from the Java side."
|
|
33
|
+
|
|
34
|
+
capability:
|
|
35
|
+
- scenario: "Model a payment domain as a sealed interface with record cases (Captured, Declined, Pending), write an exhaustive switch that maps each case to an HTTP-ish result, validate a Money amount in a compact constructor, and fan out N payment validations concurrently. Provide a Maven build targeting Java 25."
|
|
36
|
+
must_include:
|
|
37
|
+
- "Payment outcome modeled as a sealed interface with record cases (sealed interface ... permits ...; record Captured/Declined/Pending implements it) — NOT a JavaBean with getters/setters or a class hierarchy"
|
|
38
|
+
- "Money (or the amount type) is a record that validates its invariant in a compact constructor (e.g. throws on negative cents / null currency) so an invalid instance cannot be constructed"
|
|
39
|
+
- "An exhaustive switch over the sealed type using record deconstruction patterns (case Captured(var id, var amt) -> ...) with NO default branch, relying on the compiler's exhaustiveness check"
|
|
40
|
+
- "No instanceof + cast ladder anywhere in the mapping logic"
|
|
41
|
+
- "Concurrency uses Executors.newVirtualThreadPerTaskExecutor() inside try-with-resources, one task per virtual thread (NOT a fixed-size pool, NOT new Thread per request, NOT pooled virtual threads)"
|
|
42
|
+
- "Returns Optional or an empty collection rather than null for absent results"
|
|
43
|
+
- "pom.xml configures maven-compiler-plugin with <release>25</release> (and ideally -Xlint:all/-Werror) and JUnit 5 via surefire"
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Build surface: Maven 3.9 & Gradle 9 (deep)
|
|
2
|
+
|
|
3
|
+
Versions as of 2026-06: **Maven 3.9.x is current stable** (Maven 4 is 4.0.0-rc-5, not GA —
|
|
4
|
+
prefer 3.9.x for production, watch for 4 GA). **Gradle 9.5.1** is current, requires Java 17+ to
|
|
5
|
+
run, and prefers the configuration cache. JDK target here is **Java 25 LTS** via `<release>` /
|
|
6
|
+
toolchain — adjust to 21 if you must run on the prior LTS.
|
|
7
|
+
|
|
8
|
+
## Maven: full pom.xml skeleton
|
|
9
|
+
|
|
10
|
+
```xml
|
|
11
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
13
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
14
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
15
|
+
<modelVersion>4.0.0</modelVersion>
|
|
16
|
+
<groupId>com.example</groupId>
|
|
17
|
+
<artifactId>payments</artifactId>
|
|
18
|
+
<version>1.0.0</version>
|
|
19
|
+
<packaging>jar</packaging>
|
|
20
|
+
|
|
21
|
+
<properties>
|
|
22
|
+
<maven.compiler.release>25</maven.compiler.release>
|
|
23
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
24
|
+
<junit.version>5.11.4</junit.version>
|
|
25
|
+
<assertj.version>3.27.0</assertj.version>
|
|
26
|
+
<mockito.version>5.15.2</mockito.version>
|
|
27
|
+
</properties>
|
|
28
|
+
|
|
29
|
+
<dependencies>
|
|
30
|
+
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId>
|
|
31
|
+
<version>${junit.version}</version><scope>test</scope></dependency>
|
|
32
|
+
<dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId>
|
|
33
|
+
<version>${assertj.version}</version><scope>test</scope></dependency>
|
|
34
|
+
<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId>
|
|
35
|
+
<version>${mockito.version}</version><scope>test</scope></dependency>
|
|
36
|
+
</dependencies>
|
|
37
|
+
|
|
38
|
+
<build><plugins>
|
|
39
|
+
<plugin>
|
|
40
|
+
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId>
|
|
41
|
+
<version>3.13.0</version>
|
|
42
|
+
<configuration>
|
|
43
|
+
<release>25</release>
|
|
44
|
+
<compilerArgs><arg>-Xlint:all</arg><arg>-Werror</arg></compilerArgs>
|
|
45
|
+
</configuration>
|
|
46
|
+
</plugin>
|
|
47
|
+
<plugin>
|
|
48
|
+
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId>
|
|
49
|
+
<version>3.5.2</version>
|
|
50
|
+
</plugin>
|
|
51
|
+
</plugins></build>
|
|
52
|
+
</project>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Build and test: `./mvnw -q verify` (commit the wrapper via `mvn wrapper:wrapper`). The wrapper
|
|
56
|
+
pins the Maven version per project; do not rely on a globally installed `mvn`.
|
|
57
|
+
|
|
58
|
+
### Preview flags (Maven)
|
|
59
|
+
|
|
60
|
+
For preview features (e.g. `StructuredTaskScope`, JEP 505 in 25), pass `--enable-preview` to
|
|
61
|
+
compiler, surefire, and the run command — all three or it fails at the next stage:
|
|
62
|
+
|
|
63
|
+
```xml
|
|
64
|
+
<configuration>
|
|
65
|
+
<release>25</release>
|
|
66
|
+
<compilerArgs><arg>--enable-preview</arg></compilerArgs>
|
|
67
|
+
</configuration>
|
|
68
|
+
<!-- surefire: -->
|
|
69
|
+
<configuration><argLine>--enable-preview</argLine></configuration>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
java --enable-preview -jar target/payments-1.0.0.jar
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Toolchains (decouple build JDK from runtime JDK)
|
|
77
|
+
|
|
78
|
+
`~/.m2/toolchains.xml` plus `maven-toolchains-plugin` lets the build select a specific JDK
|
|
79
|
+
regardless of `JAVA_HOME`, so CI and laptops compile against the same version.
|
|
80
|
+
|
|
81
|
+
## Gradle: full build.gradle.kts
|
|
82
|
+
|
|
83
|
+
```kotlin
|
|
84
|
+
plugins {
|
|
85
|
+
java
|
|
86
|
+
application
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
group = "com.example"
|
|
90
|
+
version = "1.0.0"
|
|
91
|
+
|
|
92
|
+
java {
|
|
93
|
+
toolchain { languageVersion = JavaLanguageVersion.of(25) } // Gradle provisions/selects JDK 25
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
repositories { mavenCentral() }
|
|
97
|
+
|
|
98
|
+
dependencies {
|
|
99
|
+
testImplementation("org.junit.jupiter:junit-jupiter:5.11.4")
|
|
100
|
+
testImplementation("org.assertj:assertj-core:3.27.0")
|
|
101
|
+
testImplementation("org.mockito:mockito-core:5.15.2")
|
|
102
|
+
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
tasks.withType<JavaCompile> { options.compilerArgs.addAll(listOf("-Xlint:all", "-Werror")) }
|
|
106
|
+
tasks.test { useJUnitPlatform() }
|
|
107
|
+
application { mainClass = "com.example.App" }
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Build and test: `./gradlew check` (compile + test). Gradle 9 prefers the configuration cache —
|
|
111
|
+
enable with `org.gradle.configuration-cache=true` in `gradle.properties`. For preview features:
|
|
112
|
+
`options.compilerArgs.add("--enable-preview")` plus `tasks.test { jvmArgs("--enable-preview") }`
|
|
113
|
+
plus `application { applicationDefaultJvmArgs = listOf("--enable-preview") }`.
|
|
114
|
+
|
|
115
|
+
## Multi-module
|
|
116
|
+
|
|
117
|
+
- **Maven**: a parent `pom.xml` with `<packaging>pom</packaging>` and `<modules>`; share
|
|
118
|
+
versions via `<dependencyManagement>` / a BOM so every module agrees on a version.
|
|
119
|
+
- **Gradle**: `settings.gradle.kts` with `include("api", "core")`; a `buildSrc` or version
|
|
120
|
+
catalog (`gradle/libs.versions.toml`) centralizes versions.
|
|
121
|
+
|
|
122
|
+
## Dependency hygiene
|
|
123
|
+
|
|
124
|
+
- Pin versions; use a BOM (`<dependencyManagement>` / Gradle platform) so transitive versions
|
|
125
|
+
agree.
|
|
126
|
+
- Check for updates: `mvn versions:display-dependency-updates` or the Gradle versions plugin.
|
|
127
|
+
- Scan for vulnerable dependencies in CI (OWASP dependency-check / your SCA tool).
|
|
128
|
+
|
|
129
|
+
## jlink / jpackage (note only — shipping lives in `deployment`)
|
|
130
|
+
|
|
131
|
+
`jlink` builds a minimal custom runtime image containing only the modules your app uses (small
|
|
132
|
+
container base); `jpackage` wraps it into a native installer (.dmg/.msi/.deb). For Dockerfiles,
|
|
133
|
+
CI, and release wiring see the `deployment` skill — this skill only points at the tools.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Virtual threads & structured concurrency (deep)
|
|
2
|
+
|
|
3
|
+
Targets Java 21+ (virtual threads standard), Java 25 LTS for `ScopedValue` (JEP 506, final)
|
|
4
|
+
and `StructuredTaskScope` (JEP 505, still **preview** — needs `--enable-preview`).
|
|
5
|
+
|
|
6
|
+
## Why virtual threads change the model
|
|
7
|
+
|
|
8
|
+
A virtual thread is an ordinary `java.lang.Thread` scheduled by the JVM onto a small pool of
|
|
9
|
+
platform "carrier" threads. When it blocks on I/O, the JVM unmounts it and frees the carrier.
|
|
10
|
+
Millions can exist. The consequence: **the thread-per-request model is fast again** — you no
|
|
11
|
+
longer need reactive callbacks or hand-tuned pools to scale blocking I/O.
|
|
12
|
+
|
|
13
|
+
The rules:
|
|
14
|
+
|
|
15
|
+
- **One task, one virtual thread.** Submit each unit of work; do not pool virtual threads.
|
|
16
|
+
- **Never size them to cores.** Cores matter for CPU work, which stays on platform threads.
|
|
17
|
+
- **Use them for blocking calls** (JDBC, HTTP, file, RPC) — not for tight CPU loops.
|
|
18
|
+
|
|
19
|
+
## Executor wiring
|
|
20
|
+
|
|
21
|
+
```java
|
|
22
|
+
try (var exec = Executors.newVirtualThreadPerTaskExecutor()) {
|
|
23
|
+
for (var task : tasks) exec.submit(task);
|
|
24
|
+
} // close() blocks until every submitted task completes
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
A single `Thread.ofVirtual().start(r)` is fine for a one-off; the executor is for fan-out.
|
|
28
|
+
`Thread.ofVirtual().name("worker-", 0).factory()` gives a named factory for diagnostics.
|
|
29
|
+
|
|
30
|
+
## Pinning: the JEP 491 change
|
|
31
|
+
|
|
32
|
+
Before JDK 24, a virtual thread inside a `synchronized` block **pinned** its carrier — it could
|
|
33
|
+
not unmount, so heavy `synchronized` I/O code starved the carrier pool. **JEP 491 (JDK 24)
|
|
34
|
+
removed this**: virtual threads no longer pin on `synchronized`. Two consequences:
|
|
35
|
+
|
|
36
|
+
- Legacy `synchronized` code runs correctly on Loom now without rewriting to locks.
|
|
37
|
+
- For **long** holds still prefer `ReentrantLock` — it offers `tryLock`, fairness, and
|
|
38
|
+
interruptible acquisition that `synchronized` does not.
|
|
39
|
+
|
|
40
|
+
Diagnose remaining pinning (native frames, some JNI):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# JFR event jdk.VirtualThreadPinned fires on every pin; record and inspect.
|
|
44
|
+
java -XX:StartFlightRecording=filename=app.jfr,settings=profile -jar app.jar
|
|
45
|
+
jfr print --events jdk.VirtualThreadPinned app.jfr
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Structured concurrency (preview in 25)
|
|
49
|
+
|
|
50
|
+
`StructuredTaskScope` binds subtasks to a lexical scope: fork children, join, then the scope
|
|
51
|
+
guarantees all children finish or are cancelled before it closes. One failure cancels siblings.
|
|
52
|
+
|
|
53
|
+
```java
|
|
54
|
+
// Requires --enable-preview on Java 25 (JEP 505).
|
|
55
|
+
// Joiner.awaitAllSuccessfulOrThrow(): all must succeed, else the first failure cancels the rest.
|
|
56
|
+
import java.util.concurrent.StructuredTaskScope;
|
|
57
|
+
|
|
58
|
+
UserPage load(String id) throws Exception {
|
|
59
|
+
try (var scope = StructuredTaskScope.open()) { // 25-era API
|
|
60
|
+
var user = scope.fork(() -> fetchUser(id));
|
|
61
|
+
var orders= scope.fork(() -> fetchOrders(id));
|
|
62
|
+
scope.join(); // wait for both
|
|
63
|
+
return new UserPage(user.get(), orders.get());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The two canonical policies:
|
|
69
|
+
|
|
70
|
+
- **All-success-or-fail** (fan-out where you need every result): first failure cancels siblings.
|
|
71
|
+
- **Any-success** (race / hedged requests): first success cancels the slower siblings.
|
|
72
|
+
|
|
73
|
+
Note: the exact joiner/factory names have shifted across the five previews. When you write this,
|
|
74
|
+
confirm against the JDK you target (`java --enable-preview`) rather than trusting a fixed name.
|
|
75
|
+
If you cannot enable preview, `ExecutorService` + `invokeAll`/`Future` on virtual threads gives
|
|
76
|
+
most of the value without the lifecycle guarantees.
|
|
77
|
+
|
|
78
|
+
## ScopedValue (final in 25) replaces ThreadLocal
|
|
79
|
+
|
|
80
|
+
`ThreadLocal` is mutable, must be cleaned up (`remove()`), and its per-thread copies leak across
|
|
81
|
+
millions of virtual threads. `ScopedValue` is **immutable** and bound only for the dynamic extent
|
|
82
|
+
of a `run`/`call`, so it auto-unbinds and propagates into forked subtasks.
|
|
83
|
+
|
|
84
|
+
```java
|
|
85
|
+
private static final ScopedValue<RequestCtx> CTX = ScopedValue.newInstance();
|
|
86
|
+
|
|
87
|
+
ScopedValue.where(CTX, ctx).run(() -> handle(req)); // CTX.get() anywhere in the call tree
|
|
88
|
+
// Rebind for a nested extent:
|
|
89
|
+
ScopedValue.where(CTX, child).run(() -> deeper()); // outer binding restored on return
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Migration: a `ThreadLocal<T>` field set at the top of a request becomes a `ScopedValue<T>` bound
|
|
93
|
+
once around the request body; every `tl.get()` becomes `sv.get()`; delete every `tl.remove()`.
|
|
94
|
+
|
|
95
|
+
## CompletableFuture vs structured
|
|
96
|
+
|
|
97
|
+
`CompletableFuture` composes async stages (`thenApply`, `thenCompose`) but has no scope: a leaked
|
|
98
|
+
stage runs on. Prefer structured concurrency (or a virtual-thread executor with try-with-resources)
|
|
99
|
+
for request-scoped fan-out so cancellation and lifetime are guaranteed. Keep `CompletableFuture`
|
|
100
|
+
for pipeline-style composition where you genuinely want detached, chained stages.
|
|
101
|
+
|
|
102
|
+
## When platform threads still win
|
|
103
|
+
|
|
104
|
+
- **CPU-bound** work (parsing, compression, math): a `newFixedThreadPool(cores)` is correct;
|
|
105
|
+
virtual threads add no parallelism for compute.
|
|
106
|
+
- **Throttling a scarce resource**: cap concurrency with a `Semaphore` acquired inside each
|
|
107
|
+
virtual task, not by shrinking a pool.
|
|
108
|
+
- **FFI / JNI** that pins for long stretches: measure; keep it on a bounded platform pool.
|