@dsalazardev/ai-hub-cli 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +64 -2
- package/agents/cpp-build-resolver.md +25 -0
- package/agents/cpp-reviewer.md +28 -0
- package/agents/csharp-reviewer.md +28 -0
- package/agents/django-build-resolver.md +25 -0
- package/agents/django-reviewer.md +28 -0
- package/agents/explorer-domain.md +28 -0
- package/agents/fastapi-reviewer.md +28 -0
- package/agents/flutter-build-resolver.md +25 -0
- package/agents/flutter-reviewer.md +28 -0
- package/agents/go-build-resolver.md +25 -0
- package/agents/go-reviewer.md +28 -0
- package/agents/implementer-backend.md +30 -0
- package/agents/implementer-frontend.md +30 -0
- package/agents/java-build-resolver.md +26 -0
- package/agents/java-reviewer.md +29 -0
- package/agents/kotlin-build-resolver.md +25 -0
- package/agents/kotlin-reviewer.md +28 -0
- package/agents/mle-reviewer.md +28 -0
- package/agents/php-reviewer.md +29 -0
- package/agents/postgres-reviewer.md +28 -0
- package/agents/python-reviewer.md +28 -0
- package/agents/pytorch-build-resolver.md +25 -0
- package/agents/rag-reviewer.md +28 -0
- package/agents/react-build-resolver.md +26 -0
- package/agents/react-reviewer.md +29 -0
- package/agents/reviewer-architecture.md +32 -0
- package/agents/reviewer-tests.md +31 -0
- package/agents/rust-build-resolver.md +25 -0
- package/agents/rust-reviewer.md +28 -0
- package/agents/spec-author.md +36 -0
- package/agents/spec-miner.md +14 -0
- package/agents/swift-build-resolver.md +25 -0
- package/agents/swift-reviewer.md +28 -0
- package/agents/typescript-reviewer.md +28 -0
- package/agents/vue-reviewer.md +28 -0
- package/dist/backup/snapshots.d.ts +24 -0
- package/dist/backup/snapshots.js +171 -0
- package/dist/bin/ai-hub.d.ts +2 -0
- package/dist/bin/ai-hub.js +11 -0
- package/dist/cli/args.d.ts +4 -0
- package/dist/cli/args.js +63 -0
- package/dist/cli/context.d.ts +7 -0
- package/dist/cli/context.js +74 -0
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +200 -0
- package/dist/cli/drift.d.ts +2 -0
- package/dist/cli/drift.js +34 -0
- package/dist/cli/items.d.ts +5 -0
- package/dist/cli/items.js +10 -0
- package/dist/cli/legacy.d.ts +3 -0
- package/dist/cli/legacy.js +18 -0
- package/dist/cli/maintenance.d.ts +8 -0
- package/dist/cli/maintenance.js +262 -0
- package/dist/cli/memory.d.ts +2 -0
- package/dist/cli/memory.js +84 -0
- package/dist/cli/onboarding.d.ts +17 -0
- package/dist/cli/onboarding.js +234 -0
- package/dist/cli/run.d.ts +15 -0
- package/dist/cli/run.js +183 -0
- package/dist/cli/source.d.ts +5 -0
- package/dist/cli/source.js +22 -0
- package/dist/cli/trunk.d.ts +8 -0
- package/dist/cli/trunk.js +54 -0
- package/dist/cli/types.d.ts +17 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/worktrees.d.ts +11 -0
- package/dist/cli/worktrees.js +141 -0
- package/dist/engine/engine.d.ts +48 -0
- package/dist/engine/engine.js +114 -0
- package/dist/engine/gates.d.ts +2 -0
- package/dist/engine/gates.js +93 -0
- package/dist/frontmatter.d.ts +11 -0
- package/dist/frontmatter.js +30 -0
- package/dist/harness/guards/adapters/context.d.ts +19 -0
- package/dist/harness/guards/adapters/context.js +153 -0
- package/dist/harness/guards/adapters/hermes.d.ts +13 -0
- package/dist/harness/guards/adapters/hermes.js +18 -0
- package/dist/harness/guards/adapters/hooks.d.ts +25 -0
- package/dist/harness/guards/adapters/hooks.js +52 -0
- package/dist/harness/guards/branch.d.ts +5 -0
- package/dist/harness/guards/branch.js +43 -0
- package/dist/harness/guards/danger.d.ts +13 -0
- package/dist/harness/guards/danger.js +157 -0
- package/dist/harness/guards/index.d.ts +6 -0
- package/dist/harness/guards/index.js +6 -0
- package/dist/harness/guards/preflight.d.ts +14 -0
- package/dist/harness/guards/preflight.js +37 -0
- package/dist/harness/guards/ship.d.ts +2 -0
- package/dist/harness/guards/ship.js +35 -0
- package/dist/harness/guards/trunk.d.ts +5 -0
- package/dist/harness/guards/trunk.js +41 -0
- package/dist/harness/guards/types.d.ts +50 -0
- package/dist/harness/guards/types.js +1 -0
- package/dist/harness/memory/ledger.d.ts +53 -0
- package/dist/harness/memory/ledger.js +136 -0
- package/dist/harness/memory/state.d.ts +35 -0
- package/dist/harness/memory/state.js +121 -0
- package/dist/harness/worktree/reaper.d.ts +32 -0
- package/dist/harness/worktree/reaper.js +54 -0
- package/dist/manifest/build.d.ts +1 -0
- package/dist/manifest/build.js +1 -0
- package/dist/manifest/cli.d.ts +2 -0
- package/dist/manifest/cli.js +44 -0
- package/dist/manifest/dispatch.d.ts +13 -0
- package/dist/manifest/dispatch.js +36 -0
- package/dist/manifest/labels.d.ts +15 -0
- package/dist/manifest/labels.js +70 -0
- package/dist/manifest/manifest.d.ts +113 -0
- package/dist/manifest/manifest.js +202 -0
- package/dist/package-info.d.ts +4 -0
- package/dist/package-info.js +7 -0
- package/dist/paths.d.ts +33 -0
- package/dist/paths.js +123 -0
- package/dist/presets/detect.d.ts +24 -0
- package/dist/presets/detect.js +116 -0
- package/dist/presets/materialize.d.ts +18 -0
- package/dist/presets/materialize.js +101 -0
- package/dist/presets/resolve.d.ts +37 -0
- package/dist/presets/resolve.js +83 -0
- package/dist/presets/schema.d.ts +57 -0
- package/dist/presets/schema.js +68 -0
- package/dist/source-checkout.d.ts +8 -0
- package/dist/source-checkout.js +19 -0
- package/dist/sync/config.d.ts +47 -0
- package/dist/sync/config.js +85 -0
- package/dist/sync/lock.d.ts +16 -0
- package/dist/sync/lock.js +43 -0
- package/dist/sync/render.d.ts +18 -0
- package/dist/sync/render.js +255 -0
- package/dist/sync/sync.d.ts +38 -0
- package/dist/sync/sync.js +288 -0
- package/dist/sync/targets.d.ts +24 -0
- package/dist/sync/targets.js +78 -0
- package/engine/coupling.json +4 -0
- package/engine/engine.yaml +250 -0
- package/engine/legacy-paths.json +4 -0
- package/engine/preflight.md +11 -0
- package/manifest.json +393 -0
- package/package.json +61 -4
- package/presets/angular-express/harness/rules/01-zero-any.sh +25 -0
- package/presets/angular-express/harness/rules/02-no-ng-module.sh +21 -0
- package/presets/angular-express/harness/rules/03-no-constructor-injection.sh +21 -0
- package/presets/angular-express/harness/rules/04-no-legacy-directives.sh +21 -0
- package/presets/angular-express/harness/rules/05-no-dolibarrdal-inheritance.sh +25 -0
- package/presets/angular-express/harness/rules/06-no-todos.sh +22 -0
- package/presets/angular-express/harness/run-all.sh +13 -0
- package/presets/angular-express/preset.yaml +55 -0
- package/presets/angular-express/references/common-imports-catalog.md +146 -0
- package/presets/angular-express/references/fichajes-migration-notes.md +57 -0
- package/presets/angular-express/references/module-implementation-flow.md +260 -0
- package/presets/angular-express/references/products-coding-standard.md +143 -0
- package/presets/angular-express/references/products-module-blueprint.md +860 -0
- package/presets/angular-express/references/replicate-module-checklist.md +72 -0
- package/presets/angular-express/references/users-migration-notes.md +172 -0
- package/presets/angular-express/rules/architecture.md +8 -0
- package/presets/angular-express/rules/backend.md +4 -0
- package/presets/angular-express/rules/frontend.md +53 -0
- package/presets/angular-express/skills/angular-developer/SKILL.md +130 -0
- package/presets/angular-express/skills/angular-developer/references/angular-animations.md +160 -0
- package/presets/angular-express/skills/angular-developer/references/angular-aria.md +410 -0
- package/presets/angular-express/skills/angular-developer/references/cli.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/component-harnesses.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/component-styling.md +91 -0
- package/presets/angular-express/skills/angular-developer/references/components.md +117 -0
- package/presets/angular-express/skills/angular-developer/references/creating-services.md +97 -0
- package/presets/angular-express/skills/angular-developer/references/data-resolvers.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/define-routes.md +67 -0
- package/presets/angular-express/skills/angular-developer/references/defining-providers.md +72 -0
- package/presets/angular-express/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/presets/angular-express/skills/angular-developer/references/e2e-testing.md +66 -0
- package/presets/angular-express/skills/angular-developer/references/effects.md +83 -0
- package/presets/angular-express/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/presets/angular-express/skills/angular-developer/references/host-elements.md +80 -0
- package/presets/angular-express/skills/angular-developer/references/injection-context.md +63 -0
- package/presets/angular-express/skills/angular-developer/references/inputs.md +101 -0
- package/presets/angular-express/skills/angular-developer/references/linked-signal.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/loading-strategies.md +61 -0
- package/presets/angular-express/skills/angular-developer/references/mcp.md +106 -0
- package/presets/angular-express/skills/angular-developer/references/migrations.md +30 -0
- package/presets/angular-express/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/outputs.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/reactive-forms.md +122 -0
- package/presets/angular-express/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/presets/angular-express/skills/angular-developer/references/resource.md +74 -0
- package/presets/angular-express/skills/angular-developer/references/route-animations.md +56 -0
- package/presets/angular-express/skills/angular-developer/references/route-guards.md +52 -0
- package/presets/angular-express/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/presets/angular-express/skills/angular-developer/references/router-testing.md +87 -0
- package/presets/angular-express/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/presets/angular-express/skills/angular-developer/references/signal-forms.md +897 -0
- package/presets/angular-express/skills/angular-developer/references/signals-overview.md +94 -0
- package/presets/angular-express/skills/angular-developer/references/tailwind-css.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/presets/angular-express/skills/angular-developer/references/testing-fundamentals.md +66 -0
- package/presets/angular-express/skills/angular-new-app/SKILL.md +62 -0
- package/presets/angular-express/skills/frontend-design/LICENSE.txt +177 -0
- package/presets/angular-express/skills/frontend-design/SKILL.md +55 -0
- package/presets/angular-express/skills/onna-architecture-angular/SKILL.md +229 -0
- package/presets/angular-express/skills/onna-architecture-bff/SKILL.md +446 -0
- package/presets/angular-express/skills/onna-architecture-common/SKILL.md +313 -0
- package/presets/angular-express/skills/onna-design-system/SKILL.md +615 -0
- package/presets/base/preset.yaml +27 -0
- package/presets/base/rules/core.md +35 -0
- package/presets/generic-ts/preset.yaml +46 -0
- package/presets/python/preset.yaml +47 -0
- package/presets/python/rules/python.md +10 -0
- package/schema/engine.schema.json +73 -0
- package/schema/manifest.schema.json +140 -0
- package/schema/preset.schema.json +98 -0
- package/schema/state.schema.json +27 -0
- package/skills/shared/ab-testing/SKILL.md +159 -0
- package/skills/shared/ab-testing/evals/README.md +8 -0
- package/skills/shared/ab-testing/evals/cases.yaml +49 -0
- package/skills/shared/ab-testing/references/pitfalls.md +74 -0
- package/skills/shared/ab-testing/references/sample-size-and-cuped.md +128 -0
- package/skills/shared/ab-testing/scripts/verify.sh +89 -0
- package/skills/shared/accessibility/SKILL.md +216 -0
- package/skills/shared/accessibility/evals/README.md +3 -0
- package/skills/shared/accessibility/evals/cases.yaml +47 -0
- package/skills/shared/accessibility/references/aria-patterns.md +113 -0
- package/skills/shared/accessibility/references/wcag22-checklist.md +83 -0
- package/skills/shared/accessibility/scripts/verify.sh +103 -0
- package/skills/shared/agent-eval/SKILL.md +187 -0
- package/skills/shared/agent-eval/evals/README.md +12 -0
- package/skills/shared/agent-eval/evals/cases.yaml +45 -0
- package/skills/shared/agent-eval/references/judge-design.md +118 -0
- package/skills/shared/agent-eval/references/runner-and-gate.md +183 -0
- package/skills/shared/agent-eval/scripts/verify.sh +161 -0
- package/skills/shared/agent-safety/SKILL.md +169 -0
- package/skills/shared/agent-safety/evals/README.md +12 -0
- package/skills/shared/agent-safety/evals/cases.yaml +46 -0
- package/skills/shared/agent-safety/references/threat-model.md +51 -0
- package/skills/shared/analyze/SKILL.md +123 -0
- package/skills/shared/analyze/evals/README.md +72 -0
- package/skills/shared/analyze/evals/cases.yaml +74 -0
- package/skills/shared/angular/SKILL.md +275 -0
- package/skills/shared/angular/evals/README.md +3 -0
- package/skills/shared/angular/evals/cases.yaml +38 -0
- package/skills/shared/angular/references/migration.md +81 -0
- package/skills/shared/angular/references/signals-rxjs.md +92 -0
- package/skills/shared/angular/scripts/verify.sh +122 -0
- package/skills/shared/api-connector-builder/SKILL.md +268 -0
- package/skills/shared/api-connector-builder/evals/README.md +11 -0
- package/skills/shared/api-connector-builder/evals/cases.yaml +47 -0
- package/skills/shared/api-connector-builder/references/auth-flows.md +132 -0
- package/skills/shared/api-connector-builder/references/pagination.md +144 -0
- package/skills/shared/api-connector-builder/scripts/verify.sh +172 -0
- package/skills/shared/api-design/SKILL.md +182 -0
- package/skills/shared/api-design/evals/README.md +3 -0
- package/skills/shared/api-design/evals/cases.yaml +45 -0
- package/skills/shared/api-design/references/graphql-design.md +70 -0
- package/skills/shared/api-design/references/openapi-contract.md +86 -0
- package/skills/shared/api-design/references/rest-conventions.md +63 -0
- package/skills/shared/api-design/references/versioning-and-evolution.md +49 -0
- package/skills/shared/api-design/scripts/verify.sh +138 -0
- package/skills/shared/astro/SKILL.md +257 -0
- package/skills/shared/astro/evals/README.md +3 -0
- package/skills/shared/astro/evals/cases.yaml +41 -0
- package/skills/shared/astro/references/content-layer.md +118 -0
- package/skills/shared/astro/references/deploy-and-integrations.md +163 -0
- package/skills/shared/astro/scripts/verify.sh +137 -0
- package/skills/shared/author-skill/SKILL.md +194 -0
- package/skills/shared/author-skill/evals/README.md +66 -0
- package/skills/shared/author-skill/evals/cases.yaml +75 -0
- package/skills/shared/author-skill/references/description-recipe.md +85 -0
- package/skills/shared/author-skill/references/eval-authoring.md +108 -0
- package/skills/shared/author-skill/references/skill-conventions.md +95 -0
- package/skills/shared/automation-flows/SKILL.md +122 -0
- package/skills/shared/automation-flows/evals/README.md +5 -0
- package/skills/shared/automation-flows/evals/cases.yaml +44 -0
- package/skills/shared/automation-flows/references/error-handling.md +58 -0
- package/skills/shared/automation-flows/references/n8n-workflow-json.md +63 -0
- package/skills/shared/automation-flows/scripts/verify.sh +78 -0
- package/skills/shared/aws-essentials/SKILL.md +206 -0
- package/skills/shared/aws-essentials/evals/README.md +10 -0
- package/skills/shared/aws-essentials/evals/cases.yaml +44 -0
- package/skills/shared/aws-essentials/references/iam-least-privilege.md +134 -0
- package/skills/shared/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
- package/skills/shared/aws-essentials/scripts/verify.sh +99 -0
- package/skills/shared/backups/SKILL.md +131 -0
- package/skills/shared/backups/evals/README.md +3 -0
- package/skills/shared/backups/evals/cases.yaml +42 -0
- package/skills/shared/backups/references/engine-recipes.md +121 -0
- package/skills/shared/backups/references/restore-runbook.md +65 -0
- package/skills/shared/backups/scripts/verify.sh +80 -0
- package/skills/shared/bash-scripting/SKILL.md +227 -0
- package/skills/shared/bash-scripting/evals/README.md +3 -0
- package/skills/shared/bash-scripting/evals/cases.yaml +45 -0
- package/skills/shared/bash-scripting/references/portability.md +97 -0
- package/skills/shared/bash-scripting/scripts/verify.sh +140 -0
- package/skills/shared/building-agents/SKILL.md +386 -0
- package/skills/shared/building-agents/evals/README.md +68 -0
- package/skills/shared/building-agents/evals/cases.yaml +60 -0
- package/skills/shared/building-agents/references/agent-loops-and-harness.md +371 -0
- package/skills/shared/building-agents/references/evals-and-observability.md +420 -0
- package/skills/shared/building-agents/references/mcp-servers.md +294 -0
- package/skills/shared/building-agents/references/provider-abstraction.md +489 -0
- package/skills/shared/building-agents/references/tools-and-rag.md +417 -0
- package/skills/shared/building-agents/scripts/verify.sh +121 -0
- package/skills/shared/chatbot/SKILL.md +151 -0
- package/skills/shared/chatbot/evals/README.md +13 -0
- package/skills/shared/chatbot/evals/cases.yaml +43 -0
- package/skills/shared/chatbot/references/handoff-and-sales.md +71 -0
- package/skills/shared/chatbot/references/system-prompt-and-guardrails.md +78 -0
- package/skills/shared/chatbot/scripts/verify.sh +162 -0
- package/skills/shared/chrome-extension/SKILL.md +169 -0
- package/skills/shared/chrome-extension/evals/README.md +12 -0
- package/skills/shared/chrome-extension/evals/cases.yaml +40 -0
- package/skills/shared/chrome-extension/references/store-and-migration.md +84 -0
- package/skills/shared/chrome-extension/scripts/verify.sh +62 -0
- package/skills/shared/clarify/SKILL.md +161 -0
- package/skills/shared/clarify/evals/README.md +70 -0
- package/skills/shared/clarify/evals/cases.yaml +71 -0
- package/skills/shared/clickhouse-analytics/SKILL.md +159 -0
- package/skills/shared/clickhouse-analytics/evals/README.md +3 -0
- package/skills/shared/clickhouse-analytics/evals/cases.yaml +45 -0
- package/skills/shared/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
- package/skills/shared/clickhouse-analytics/references/query-optimization.md +76 -0
- package/skills/shared/clickhouse-analytics/references/schema-and-engines.md +63 -0
- package/skills/shared/clickhouse-analytics/scripts/verify.sh +109 -0
- package/skills/shared/cloudflare/SKILL.md +186 -0
- package/skills/shared/cloudflare/evals/README.md +15 -0
- package/skills/shared/cloudflare/evals/cases.yaml +46 -0
- package/skills/shared/cloudflare/references/storage-primitives.md +104 -0
- package/skills/shared/cloudflare/references/wrangler-config.md +91 -0
- package/skills/shared/cloudflare/scripts/verify.sh +133 -0
- package/skills/shared/code-review/SKILL.md +132 -0
- package/skills/shared/code-review/evals/README.md +3 -0
- package/skills/shared/code-review/evals/cases.yaml +55 -0
- package/skills/shared/code-review/references/pr-workflow.md +67 -0
- package/skills/shared/codebase-onboarding/SKILL.md +128 -0
- package/skills/shared/codebase-onboarding/evals/README.md +3 -0
- package/skills/shared/codebase-onboarding/evals/cases.yaml +69 -0
- package/skills/shared/codebase-onboarding/references/recon-playbook.md +57 -0
- package/skills/shared/codebase-onboarding/scripts/verify.sh +54 -0
- package/skills/shared/compose-multiplatform/SKILL.md +198 -0
- package/skills/shared/compose-multiplatform/evals/README.md +3 -0
- package/skills/shared/compose-multiplatform/evals/cases.yaml +40 -0
- package/skills/shared/compose-multiplatform/references/ios-interop.md +91 -0
- package/skills/shared/compose-multiplatform/references/project-setup.md +96 -0
- package/skills/shared/compose-multiplatform/scripts/verify.sh +123 -0
- package/skills/shared/connect-tool/SKILL.md +163 -0
- package/skills/shared/connect-tool/evals/cases.yaml +58 -0
- package/skills/shared/constitution/SKILL.md +158 -0
- package/skills/shared/constitution/evals/README.md +68 -0
- package/skills/shared/constitution/evals/cases.yaml +72 -0
- package/skills/shared/constitution/references/constitution-template.md +100 -0
- package/skills/shared/context-budget/SKILL.md +114 -0
- package/skills/shared/context-budget/evals/README.md +11 -0
- package/skills/shared/context-budget/evals/cases.yaml +40 -0
- package/skills/shared/context-budget/references/handoff-and-compaction.md +96 -0
- package/skills/shared/continuous-learning/SKILL.md +106 -0
- package/skills/shared/continuous-learning/evals/README.md +16 -0
- package/skills/shared/continuous-learning/evals/cases.yaml +39 -0
- package/skills/shared/continuous-learning/references/lesson-routing.md +106 -0
- package/skills/shared/coolify/SKILL.md +194 -0
- package/skills/shared/coolify/evals/README.md +21 -0
- package/skills/shared/coolify/evals/cases.yaml +46 -0
- package/skills/shared/coolify/references/databases-and-backups.md +99 -0
- package/skills/shared/coolify/references/deploy-recipes.md +105 -0
- package/skills/shared/coolify/references/install-and-proxy.md +80 -0
- package/skills/shared/coolify/scripts/verify.sh +123 -0
- package/skills/shared/cost-tracking/SKILL.md +176 -0
- package/skills/shared/cost-tracking/evals/README.md +3 -0
- package/skills/shared/cost-tracking/evals/cases.yaml +45 -0
- package/skills/shared/cost-tracking/references/cloud-caps.md +52 -0
- package/skills/shared/cost-tracking/references/pricing-tables.md +51 -0
- package/skills/shared/cost-tracking/scripts/verify.sh +135 -0
- package/skills/shared/cpp/SKILL.md +302 -0
- package/skills/shared/cpp/evals/README.md +14 -0
- package/skills/shared/cpp/evals/cases.yaml +44 -0
- package/skills/shared/cpp/references/cmake.md +167 -0
- package/skills/shared/cpp/references/move-and-templates.md +130 -0
- package/skills/shared/cpp/references/undefined-behavior.md +86 -0
- package/skills/shared/cpp/scripts/verify.sh +165 -0
- package/skills/shared/csharp-dotnet/SKILL.md +272 -0
- package/skills/shared/csharp-dotnet/evals/README.md +3 -0
- package/skills/shared/csharp-dotnet/evals/cases.yaml +48 -0
- package/skills/shared/csharp-dotnet/references/aspnetcore.md +99 -0
- package/skills/shared/csharp-dotnet/references/async.md +82 -0
- package/skills/shared/csharp-dotnet/references/efcore.md +96 -0
- package/skills/shared/csharp-dotnet/scripts/verify.sh +90 -0
- package/skills/shared/data-cleaning/SKILL.md +259 -0
- package/skills/shared/data-cleaning/evals/README.md +16 -0
- package/skills/shared/data-cleaning/evals/cases.yaml +57 -0
- package/skills/shared/data-cleaning/references/normalization-recipes.md +136 -0
- package/skills/shared/data-cleaning/references/validation-patterns.md +134 -0
- package/skills/shared/data-cleaning/scripts/verify.sh +115 -0
- package/skills/shared/data-scraper/SKILL.md +130 -0
- package/skills/shared/data-scraper/evals/README.md +3 -0
- package/skills/shared/data-scraper/evals/cases.yaml +46 -0
- package/skills/shared/data-scraper/references/anti-bot.md +85 -0
- package/skills/shared/data-scraper/references/frameworks.md +116 -0
- package/skills/shared/data-scraper/references/legal-compliance.md +64 -0
- package/skills/shared/data-scraper/scripts/verify.sh +166 -0
- package/skills/shared/db-migrations/SKILL.md +237 -0
- package/skills/shared/db-migrations/evals/README.md +10 -0
- package/skills/shared/db-migrations/evals/cases.yaml +46 -0
- package/skills/shared/db-migrations/references/backfill-and-batching.md +105 -0
- package/skills/shared/db-migrations/references/expand-contract-playbook.md +152 -0
- package/skills/shared/db-migrations/references/tools-and-runners.md +88 -0
- package/skills/shared/db-migrations/scripts/verify.sh +112 -0
- package/skills/shared/debug/SKILL.md +188 -0
- package/skills/shared/debug/evals/README.md +88 -0
- package/skills/shared/debug/evals/cases.yaml +74 -0
- package/skills/shared/decision-challenge/SKILL.md +113 -0
- package/skills/shared/decision-challenge/evals/README.md +3 -0
- package/skills/shared/decision-challenge/evals/cases.yaml +42 -0
- package/skills/shared/decision-records/SKILL.md +202 -0
- package/skills/shared/decision-records/evals/README.md +3 -0
- package/skills/shared/decision-records/evals/cases.yaml +43 -0
- package/skills/shared/decision-records/references/templates.md +252 -0
- package/skills/shared/decision-records/scripts/verify.sh +105 -0
- package/skills/shared/deep-learning/SKILL.md +226 -0
- package/skills/shared/deep-learning/evals/README.md +11 -0
- package/skills/shared/deep-learning/evals/cases.yaml +48 -0
- package/skills/shared/deep-learning/references/distributed.md +105 -0
- package/skills/shared/deep-learning/references/training-recipes.md +135 -0
- package/skills/shared/deployment/SKILL.md +374 -0
- package/skills/shared/deployment/evals/README.md +50 -0
- package/skills/shared/deployment/evals/cases.yaml +53 -0
- package/skills/shared/deployment/references/coolify.md +216 -0
- package/skills/shared/deployment/references/dockerfiles-by-stack.md +319 -0
- package/skills/shared/deployment/references/github-actions.md +295 -0
- package/skills/shared/deployment/references/hosting-targets.md +272 -0
- package/skills/shared/deployment/scripts/verify.sh +134 -0
- package/skills/shared/deprecation/SKILL.md +123 -0
- package/skills/shared/deprecation/evals/README.md +3 -0
- package/skills/shared/deprecation/evals/cases.yaml +42 -0
- package/skills/shared/design/IMPECCABLE-LICENSE.txt +191 -0
- package/skills/shared/design/SKILL.md +111 -0
- package/skills/shared/design/THIRD_PARTY.md +26 -0
- package/skills/shared/design/engine/LICENSE +21 -0
- package/skills/shared/design/engine/RUN.md +515 -0
- package/skills/shared/design/engine/UPSTREAM.json +4 -0
- package/skills/shared/design/engine/assets/app.css +216 -0
- package/skills/shared/design/engine/assets/base.css +105 -0
- package/skills/shared/design/engine/assets/base.js +37 -0
- package/skills/shared/design/engine/assets/charts.js +617 -0
- package/skills/shared/design/engine/assets/scenes/stage.css +28 -0
- package/skills/shared/design/engine/assets/scenes/stage.js +133 -0
- package/skills/shared/design/engine/library/app.json +1327 -0
- package/skills/shared/design/engine/library/directions.json +1078 -0
- package/skills/shared/design/engine/library/heroes.json +1086 -0
- package/skills/shared/design/engine/library/motions.json +92 -0
- package/skills/shared/design/engine/library/palettes.json +1485 -0
- package/skills/shared/design/engine/library/photos.json +7240 -0
- package/skills/shared/design/engine/library/sections.json +4429 -0
- package/skills/shared/design/engine/library/sites.json +8350 -0
- package/skills/shared/design/engine/library/type.json +2024 -0
- package/skills/shared/design/engine/references/app-screens.md +1199 -0
- package/skills/shared/design/engine/references/colour.md +141 -0
- package/skills/shared/design/engine/references/copy.md +177 -0
- package/skills/shared/design/engine/references/critique.md +182 -0
- package/skills/shared/design/engine/references/imagery.md +791 -0
- package/skills/shared/design/engine/references/layout.md +292 -0
- package/skills/shared/design/engine/references/motion.md +980 -0
- package/skills/shared/design/engine/references/research.md +356 -0
- package/skills/shared/design/engine/references/scenes.md +174 -0
- package/skills/shared/design/engine/references/tells.md +115 -0
- package/skills/shared/design/engine/references/type.md +170 -0
- package/skills/shared/design/engine/scripts/assets.mjs +865 -0
- package/skills/shared/design/engine/scripts/draw.mjs +584 -0
- package/skills/shared/design/engine/scripts/inspect.mjs +303 -0
- package/skills/shared/design/engine/scripts/lib/app-draw.mjs +203 -0
- package/skills/shared/design/engine/scripts/lib/cdp.mjs +248 -0
- package/skills/shared/design/engine/scripts/lib/probe.mjs +909 -0
- package/skills/shared/design/engine/scripts/lib/rules.mjs +243 -0
- package/skills/shared/design/engine/scripts/lint.mjs +119 -0
- package/skills/shared/design/engine/scripts/scenes.mjs +124 -0
- package/skills/shared/design/evals/cases.yaml +45 -0
- package/skills/shared/design/references/design-md.md +49 -0
- package/skills/shared/design/references/finish-review.md +46 -0
- package/skills/shared/design/references/modes.md +51 -0
- package/skills/shared/digitalocean/SKILL.md +227 -0
- package/skills/shared/digitalocean/evals/README.md +10 -0
- package/skills/shared/digitalocean/evals/cases.yaml +37 -0
- package/skills/shared/digitalocean/references/app-spec.md +126 -0
- package/skills/shared/digitalocean/references/droplet-ops.md +95 -0
- package/skills/shared/digitalocean/scripts/verify.sh +102 -0
- package/skills/shared/django/SKILL.md +263 -0
- package/skills/shared/django/evals/README.md +11 -0
- package/skills/shared/django/evals/cases.yaml +47 -0
- package/skills/shared/django/references/drf.md +109 -0
- package/skills/shared/django/references/orm-performance.md +91 -0
- package/skills/shared/django/references/security.md +81 -0
- package/skills/shared/django/references/testing.md +86 -0
- package/skills/shared/django/scripts/verify.sh +115 -0
- package/skills/shared/docker/SKILL.md +251 -0
- package/skills/shared/docker/evals/README.md +10 -0
- package/skills/shared/docker/evals/cases.yaml +44 -0
- package/skills/shared/docker/references/base-images-and-stages.md +104 -0
- package/skills/shared/docker/references/compose-recipes.md +109 -0
- package/skills/shared/docker/scripts/verify.sh +149 -0
- package/skills/shared/domains-dns/SKILL.md +131 -0
- package/skills/shared/domains-dns/evals/README.md +16 -0
- package/skills/shared/domains-dns/evals/cases.yaml +47 -0
- package/skills/shared/domains-dns/references/record-cookbook.md +94 -0
- package/skills/shared/domains-dns/references/tls-and-acme.md +90 -0
- package/skills/shared/domains-dns/references/verify-and-debug.md +64 -0
- package/skills/shared/domains-dns/scripts/verify.sh +163 -0
- package/skills/shared/drizzle-orm/SKILL.md +231 -0
- package/skills/shared/drizzle-orm/evals/README.md +12 -0
- package/skills/shared/drizzle-orm/evals/cases.yaml +47 -0
- package/skills/shared/drizzle-orm/references/relations-and-drivers.md +118 -0
- package/skills/shared/drizzle-orm/scripts/verify.sh +155 -0
- package/skills/shared/duckdb/SKILL.md +202 -0
- package/skills/shared/duckdb/evals/README.md +31 -0
- package/skills/shared/duckdb/evals/cases.yaml +41 -0
- package/skills/shared/duckdb/references/python-and-interop.md +105 -0
- package/skills/shared/duckdb/references/remote-and-lakehouse.md +101 -0
- package/skills/shared/duckdb/scripts/verify.sh +71 -0
- package/skills/shared/dynamodb/SKILL.md +204 -0
- package/skills/shared/dynamodb/evals/README.md +8 -0
- package/skills/shared/dynamodb/evals/cases.yaml +46 -0
- package/skills/shared/dynamodb/references/access-patterns.md +127 -0
- package/skills/shared/dynamodb/references/capacity-and-limits.md +78 -0
- package/skills/shared/dynamodb/scripts/verify.sh +108 -0
- package/skills/shared/e2e-testing/SKILL.md +233 -0
- package/skills/shared/e2e-testing/evals/README.md +10 -0
- package/skills/shared/e2e-testing/evals/cases.yaml +64 -0
- package/skills/shared/e2e-testing/references/config-and-ci.md +156 -0
- package/skills/shared/e2e-testing/references/flakiness-playbook.md +124 -0
- package/skills/shared/e2e-testing/scripts/verify.sh +117 -0
- package/skills/shared/electron/SKILL.md +209 -0
- package/skills/shared/electron/evals/README.md +13 -0
- package/skills/shared/electron/evals/cases.yaml +38 -0
- package/skills/shared/electron/references/packaging-and-updates.md +122 -0
- package/skills/shared/electron/references/security-and-ipc.md +158 -0
- package/skills/shared/electron/scripts/verify.sh +143 -0
- package/skills/shared/elixir/SKILL.md +209 -0
- package/skills/shared/elixir/evals/README.md +3 -0
- package/skills/shared/elixir/evals/cases.yaml +41 -0
- package/skills/shared/elixir/references/mix-and-releases.md +91 -0
- package/skills/shared/elixir/references/otp-patterns.md +96 -0
- package/skills/shared/elixir/scripts/verify.sh +76 -0
- package/skills/shared/email-deliverability/SKILL.md +148 -0
- package/skills/shared/email-deliverability/evals/README.md +21 -0
- package/skills/shared/email-deliverability/evals/cases.yaml +45 -0
- package/skills/shared/email-deliverability/scripts/verify.sh +98 -0
- package/skills/shared/embeddings-search/SKILL.md +184 -0
- package/skills/shared/embeddings-search/evals/README.md +10 -0
- package/skills/shared/embeddings-search/evals/cases.yaml +44 -0
- package/skills/shared/embeddings-search/references/evaluation.md +86 -0
- package/skills/shared/embeddings-search/references/models.md +73 -0
- package/skills/shared/embeddings-search/scripts/verify.sh +103 -0
- package/skills/shared/error-handling/SKILL.md +273 -0
- package/skills/shared/error-handling/evals/README.md +12 -0
- package/skills/shared/error-handling/evals/cases.yaml +46 -0
- package/skills/shared/error-handling/references/boundaries-and-messaging.md +120 -0
- package/skills/shared/error-handling/references/retry-and-resilience.md +154 -0
- package/skills/shared/error-handling/scripts/verify.sh +110 -0
- package/skills/shared/expo/SKILL.md +243 -0
- package/skills/shared/expo/evals/README.md +13 -0
- package/skills/shared/expo/evals/cases.yaml +44 -0
- package/skills/shared/expo/references/config-plugins.md +117 -0
- package/skills/shared/expo/references/eas-update.md +118 -0
- package/skills/shared/expo/scripts/verify.sh +132 -0
- package/skills/shared/fal/SKILL.md +196 -0
- package/skills/shared/fal/evals/README.md +3 -0
- package/skills/shared/fal/evals/cases.yaml +42 -0
- package/skills/shared/fal/references/models-and-cost.md +53 -0
- package/skills/shared/fal/references/queue-and-webhooks.md +153 -0
- package/skills/shared/fal/scripts/verify.sh +72 -0
- package/skills/shared/fastapi/SKILL.md +469 -0
- package/skills/shared/fastapi/evals/README.md +50 -0
- package/skills/shared/fastapi/evals/cases.yaml +55 -0
- package/skills/shared/fastapi/references/database.md +347 -0
- package/skills/shared/fastapi/references/production.md +338 -0
- package/skills/shared/fastapi/references/security.md +330 -0
- package/skills/shared/fastapi/references/testing.md +349 -0
- package/skills/shared/fastapi/scripts/verify.sh +157 -0
- package/skills/shared/finetuning/SKILL.md +232 -0
- package/skills/shared/finetuning/evals/README.md +13 -0
- package/skills/shared/finetuning/evals/cases.yaml +50 -0
- package/skills/shared/finetuning/references/hyperparameters-and-eval.md +74 -0
- package/skills/shared/finetuning/references/methods.md +189 -0
- package/skills/shared/firebase/SKILL.md +237 -0
- package/skills/shared/firebase/evals/README.md +12 -0
- package/skills/shared/firebase/evals/cases.yaml +45 -0
- package/skills/shared/firebase/references/cloud-functions.md +102 -0
- package/skills/shared/firebase/references/data-modeling.md +108 -0
- package/skills/shared/firebase/references/security-rules.md +137 -0
- package/skills/shared/firebase/scripts/verify.sh +98 -0
- package/skills/shared/flutter/SKILL.md +400 -0
- package/skills/shared/flutter/evals/README.md +54 -0
- package/skills/shared/flutter/evals/cases.yaml +69 -0
- package/skills/shared/flutter/references/architecture-and-state.md +499 -0
- package/skills/shared/flutter/references/i18n-and-dependencies.md +197 -0
- package/skills/shared/flutter/references/performance.md +299 -0
- package/skills/shared/flutter/references/testing.md +385 -0
- package/skills/shared/flutter/references/ui-and-navigation.md +378 -0
- package/skills/shared/flutter/scripts/verify.sh +104 -0
- package/skills/shared/fly-io/SKILL.md +197 -0
- package/skills/shared/fly-io/evals/README.md +3 -0
- package/skills/shared/fly-io/evals/cases.yaml +42 -0
- package/skills/shared/fly-io/references/fly-toml.md +155 -0
- package/skills/shared/fly-io/references/multi-region.md +66 -0
- package/skills/shared/fly-io/scripts/verify.sh +90 -0
- package/skills/shared/ftd/SKILL.md +111 -0
- package/skills/shared/ftd/evals/cases.yaml +66 -0
- package/skills/shared/ftd/evals/routing.json +24 -0
- package/skills/shared/game-design/SKILL.md +146 -0
- package/skills/shared/game-design/evals/README.md +13 -0
- package/skills/shared/game-design/evals/cases.yaml +47 -0
- package/skills/shared/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/shared/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/shared/game-design/references/progression-and-economy.md +70 -0
- package/skills/shared/game-storytelling/SKILL.md +134 -0
- package/skills/shared/game-storytelling/evals/README.md +28 -0
- package/skills/shared/game-storytelling/evals/cases.yaml +51 -0
- package/skills/shared/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/shared/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/shared/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/shared/gamedev-multiplayer/SKILL.md +237 -0
- package/skills/shared/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/shared/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/shared/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/shared/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/shared/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/shared/gamedev-pathing/SKILL.md +233 -0
- package/skills/shared/gamedev-pathing/evals/README.md +14 -0
- package/skills/shared/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/shared/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/shared/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/shared/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/shared/gamedev-physics/SKILL.md +225 -0
- package/skills/shared/gamedev-physics/evals/README.md +12 -0
- package/skills/shared/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/shared/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/shared/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/shared/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/shared/gamedev-shaders/SKILL.md +232 -0
- package/skills/shared/gamedev-shaders/evals/README.md +14 -0
- package/skills/shared/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/shared/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/shared/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/shared/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/shared/gamedev-shipping/SKILL.md +220 -0
- package/skills/shared/gamedev-shipping/evals/README.md +9 -0
- package/skills/shared/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/shared/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/shared/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/shared/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/shared/gcp-essentials/SKILL.md +324 -0
- package/skills/shared/gcp-essentials/evals/README.md +12 -0
- package/skills/shared/gcp-essentials/evals/cases.yaml +38 -0
- package/skills/shared/gcp-essentials/references/deploy-recipes.md +81 -0
- package/skills/shared/gcp-essentials/references/iam-and-auth.md +94 -0
- package/skills/shared/gcp-essentials/references/networking-and-sql.md +74 -0
- package/skills/shared/gcp-essentials/scripts/verify.sh +158 -0
- package/skills/shared/git-workflow/SKILL.md +214 -0
- package/skills/shared/git-workflow/evals/README.md +10 -0
- package/skills/shared/git-workflow/evals/cases.yaml +52 -0
- package/skills/shared/git-workflow/references/gitmoji.md +157 -0
- package/skills/shared/git-workflow/references/interactive-rebase.md +89 -0
- package/skills/shared/github-actions/SKILL.md +244 -0
- package/skills/shared/github-actions/evals/README.md +3 -0
- package/skills/shared/github-actions/evals/cases.yaml +45 -0
- package/skills/shared/github-actions/references/caching-and-matrix.md +92 -0
- package/skills/shared/github-actions/references/oidc-deploys.md +130 -0
- package/skills/shared/github-actions/scripts/verify.sh +105 -0
- package/skills/shared/gitlab-auth/SKILL.md +99 -0
- package/skills/shared/gitlab-workflow/SKILL.md +138 -0
- package/skills/shared/go/SKILL.md +390 -0
- package/skills/shared/go/evals/README.md +56 -0
- package/skills/shared/go/evals/cases.yaml +55 -0
- package/skills/shared/go/references/concurrency.md +557 -0
- package/skills/shared/go/references/http-services.md +529 -0
- package/skills/shared/go/references/testing.md +338 -0
- package/skills/shared/go/scripts/verify.sh +134 -0
- package/skills/shared/godot/SKILL.md +300 -0
- package/skills/shared/godot/evals/README.md +13 -0
- package/skills/shared/godot/evals/cases.yaml +50 -0
- package/skills/shared/godot/references/export-and-testing.md +102 -0
- package/skills/shared/godot/references/gdscript-style.md +84 -0
- package/skills/shared/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/shared/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/shared/harness/SKILL.md +316 -0
- package/skills/shared/harness/assets/_TEMPLATE/.env.example +8 -0
- package/skills/shared/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/README.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/gitignore +10 -0
- package/skills/shared/harness/assets/_TEMPLATE/test_connection.sh +30 -0
- package/skills/shared/harness/evals/README.md +54 -0
- package/skills/shared/harness/evals/cases.yaml +72 -0
- package/skills/shared/harness/examples/audit-example.md +120 -0
- package/skills/shared/harness/references/agents-md-template.md +41 -0
- package/skills/shared/harness/references/audit-report-template.html +140 -0
- package/skills/shared/harness/references/audit-report-template.md +116 -0
- package/skills/shared/harness/references/claude-md-template.md +85 -0
- package/skills/shared/harness/references/daily-curation-automation.md +68 -0
- package/skills/shared/harness/references/inbox-readme-template.md +51 -0
- package/skills/shared/harness/references/ingest-formats.md +185 -0
- package/skills/shared/harness/references/ingest-ignore-defaults.md +48 -0
- package/skills/shared/harness/references/obsidian-scaffolding.md +103 -0
- package/skills/shared/harness/references/providers.yaml +3546 -0
- package/skills/shared/harness/references/tools-readme-template.md +88 -0
- package/skills/shared/harness/references/wiki-archive-template.html +81 -0
- package/skills/shared/harness/references/wiki-article-template.md +60 -0
- package/skills/shared/harness/references/wiki-dashboard-template.html +136 -0
- package/skills/shared/harness/references/wiki-deep-improve-report-template.html +126 -0
- package/skills/shared/harness/references/wiki-gaps-template.md +22 -0
- package/skills/shared/harness/references/wiki-index-template.md +32 -0
- package/skills/shared/harness/references/wiki-protocol.md +926 -0
- package/skills/shared/harness/references/wiki-raw-template.md +7 -0
- package/skills/shared/harness/references/wiki-worklog-template.md +60 -0
- package/skills/shared/hetzner/SKILL.md +203 -0
- package/skills/shared/hetzner/evals/README.md +35 -0
- package/skills/shared/hetzner/evals/cases.yaml +46 -0
- package/skills/shared/hetzner/references/cloud-init.md +120 -0
- package/skills/shared/hetzner/references/plans-and-locations.md +56 -0
- package/skills/shared/hetzner/scripts/verify.sh +122 -0
- package/skills/shared/htmx/SKILL.md +261 -0
- package/skills/shared/htmx/evals/README.md +3 -0
- package/skills/shared/htmx/evals/cases.yaml +38 -0
- package/skills/shared/htmx/references/patterns.md +113 -0
- package/skills/shared/htmx/references/server-contract.md +91 -0
- package/skills/shared/htmx/scripts/verify.sh +93 -0
- package/skills/shared/huggingface/SKILL.md +191 -0
- package/skills/shared/huggingface/evals/README.md +11 -0
- package/skills/shared/huggingface/evals/cases.yaml +41 -0
- package/skills/shared/huggingface/references/endpoints-and-spaces.md +99 -0
- package/skills/shared/huggingface/references/hub-and-cli.md +85 -0
- package/skills/shared/huggingface/references/inference-providers.md +115 -0
- package/skills/shared/huggingface/scripts/verify.sh +123 -0
- package/skills/shared/idea-refinement/SKILL.md +121 -0
- package/skills/shared/idea-refinement/evals/README.md +3 -0
- package/skills/shared/idea-refinement/evals/cases.yaml +42 -0
- package/skills/shared/implement/SKILL.md +383 -0
- package/skills/shared/implement/evals/README.md +56 -0
- package/skills/shared/implement/evals/cases.yaml +43 -0
- package/skills/shared/implement/references/per-task-review.md +46 -0
- package/skills/shared/implement/scripts/review-package +59 -0
- package/skills/shared/implement/scripts/sdd-workspace +47 -0
- package/skills/shared/implement/scripts/task-brief +77 -0
- package/skills/shared/init/SKILL.md +209 -0
- package/skills/shared/init/evals/README.md +49 -0
- package/skills/shared/init/evals/cases.yaml +74 -0
- package/skills/shared/init/references/accompaniment-and-profile.md +122 -0
- package/skills/shared/init/references/discovery.md +90 -0
- package/skills/shared/init/references/recommend-skills.md +115 -0
- package/skills/shared/init/scripts/verify.sh +118 -0
- package/skills/shared/java/SKILL.md +341 -0
- package/skills/shared/java/evals/README.md +23 -0
- package/skills/shared/java/evals/cases.yaml +43 -0
- package/skills/shared/java/references/builds.md +133 -0
- package/skills/shared/java/references/concurrency.md +108 -0
- package/skills/shared/java/references/streams.md +102 -0
- package/skills/shared/java/scripts/verify.sh +107 -0
- package/skills/shared/knowledge-ops/SKILL.md +122 -0
- package/skills/shared/knowledge-ops/evals/README.md +16 -0
- package/skills/shared/knowledge-ops/evals/cases.yaml +50 -0
- package/skills/shared/knowledge-ops/references/gardening-playbook.md +126 -0
- package/skills/shared/kotlin-android/SKILL.md +245 -0
- package/skills/shared/kotlin-android/evals/README.md +13 -0
- package/skills/shared/kotlin-android/evals/cases.yaml +56 -0
- package/skills/shared/kotlin-android/references/architecture.md +200 -0
- package/skills/shared/kotlin-android/references/gradle-setup.md +125 -0
- package/skills/shared/kotlin-android/scripts/verify.sh +109 -0
- package/skills/shared/laravel/SKILL.md +301 -0
- package/skills/shared/laravel/evals/README.md +10 -0
- package/skills/shared/laravel/evals/cases.yaml +45 -0
- package/skills/shared/laravel/references/eloquent-patterns.md +126 -0
- package/skills/shared/laravel/references/queues-and-scheduling.md +153 -0
- package/skills/shared/laravel/scripts/verify.sh +128 -0
- package/skills/shared/level-design/SKILL.md +143 -0
- package/skills/shared/level-design/evals/README.md +35 -0
- package/skills/shared/level-design/evals/cases.yaml +58 -0
- package/skills/shared/level-design/references/blockout-to-art.md +118 -0
- package/skills/shared/level-design/references/guidance-and-readability.md +152 -0
- package/skills/shared/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/shared/llm-pipeline/SKILL.md +150 -0
- package/skills/shared/llm-pipeline/evals/README.md +3 -0
- package/skills/shared/llm-pipeline/evals/cases.yaml +44 -0
- package/skills/shared/llm-pipeline/references/caching-layers.md +60 -0
- package/skills/shared/llm-pipeline/references/litellm-router.md +101 -0
- package/skills/shared/llm-pipeline/scripts/verify.sh +169 -0
- package/skills/shared/machine-learning/SKILL.md +228 -0
- package/skills/shared/machine-learning/evals/README.md +15 -0
- package/skills/shared/machine-learning/evals/cases.yaml +54 -0
- package/skills/shared/machine-learning/references/gbdt-and-tuning.md +83 -0
- package/skills/shared/machine-learning/references/metrics-and-imbalance.md +82 -0
- package/skills/shared/machine-learning/references/pipelines-and-cv.md +135 -0
- package/skills/shared/modal/SKILL.md +290 -0
- package/skills/shared/modal/evals/README.md +29 -0
- package/skills/shared/modal/evals/cases.yaml +50 -0
- package/skills/shared/modal/references/images-gpu-cookbook.md +160 -0
- package/skills/shared/modal/references/web-and-scaling.md +138 -0
- package/skills/shared/modal/scripts/verify.sh +127 -0
- package/skills/shared/mongodb/SKILL.md +342 -0
- package/skills/shared/mongodb/evals/README.md +29 -0
- package/skills/shared/mongodb/evals/cases.yaml +41 -0
- package/skills/shared/mongodb/references/aggregation.md +115 -0
- package/skills/shared/mongodb/references/data-modeling.md +135 -0
- package/skills/shared/mongodb/references/transactions-and-ops.md +128 -0
- package/skills/shared/mongodb/scripts/verify.sh +151 -0
- package/skills/shared/monitoring/SKILL.md +155 -0
- package/skills/shared/monitoring/evals/README.md +3 -0
- package/skills/shared/monitoring/evals/cases.yaml +47 -0
- package/skills/shared/monitoring/references/burn-rate-and-oncall.md +128 -0
- package/skills/shared/monitoring/references/tool-setup.md +154 -0
- package/skills/shared/monitoring/scripts/verify.sh +145 -0
- package/skills/shared/mysql/SKILL.md +249 -0
- package/skills/shared/mysql/evals/README.md +12 -0
- package/skills/shared/mysql/evals/cases.yaml +49 -0
- package/skills/shared/mysql/references/indexing-and-explain.md +161 -0
- package/skills/shared/mysql/references/mysql-vs-mariadb.md +78 -0
- package/skills/shared/mysql/references/online-ddl-and-migrations.md +120 -0
- package/skills/shared/mysql/references/replication-and-ha.md +115 -0
- package/skills/shared/mysql/scripts/verify.sh +141 -0
- package/skills/shared/neon/SKILL.md +218 -0
- package/skills/shared/neon/evals/README.md +11 -0
- package/skills/shared/neon/evals/cases.yaml +45 -0
- package/skills/shared/neon/references/branching-ci.md +86 -0
- package/skills/shared/neon/scripts/verify.sh +78 -0
- package/skills/shared/nestjs/SKILL.md +217 -0
- package/skills/shared/nestjs/evals/README.md +3 -0
- package/skills/shared/nestjs/evals/cases.yaml +38 -0
- package/skills/shared/nestjs/references/cross-cutting.md +135 -0
- package/skills/shared/nestjs/references/testing-recipes.md +105 -0
- package/skills/shared/nestjs/scripts/verify.sh +98 -0
- package/skills/shared/netlify/SKILL.md +208 -0
- package/skills/shared/netlify/evals/README.md +13 -0
- package/skills/shared/netlify/evals/cases.yaml +43 -0
- package/skills/shared/netlify/references/functions.md +97 -0
- package/skills/shared/netlify/references/netlify-toml.md +115 -0
- package/skills/shared/netlify/scripts/verify.sh +95 -0
- package/skills/shared/nextjs/SKILL.md +400 -0
- package/skills/shared/nextjs/evals/README.md +59 -0
- package/skills/shared/nextjs/evals/cases.yaml +56 -0
- package/skills/shared/nextjs/references/data-and-caching.md +309 -0
- package/skills/shared/nextjs/references/metadata.md +208 -0
- package/skills/shared/nextjs/references/performance.md +325 -0
- package/skills/shared/nextjs/references/react.md +383 -0
- package/skills/shared/nextjs/references/security.md +239 -0
- package/skills/shared/nextjs/references/testing.md +290 -0
- package/skills/shared/nextjs/scripts/verify.sh +141 -0
- package/skills/shared/nlp/SKILL.md +225 -0
- package/skills/shared/nlp/evals/README.md +10 -0
- package/skills/shared/nlp/evals/cases.yaml +45 -0
- package/skills/shared/nlp/references/evaluation.md +107 -0
- package/skills/shared/nlp/references/tokenization.md +95 -0
- package/skills/shared/no-code-app/SKILL.md +145 -0
- package/skills/shared/no-code-app/evals/README.md +3 -0
- package/skills/shared/no-code-app/evals/cases.yaml +43 -0
- package/skills/shared/no-code-app/references/platform-limits.md +100 -0
- package/skills/shared/nodejs/SKILL.md +229 -0
- package/skills/shared/nodejs/evals/README.md +3 -0
- package/skills/shared/nodejs/evals/cases.yaml +39 -0
- package/skills/shared/nodejs/references/express5-migration.md +53 -0
- package/skills/shared/nodejs/references/graceful-shutdown.md +73 -0
- package/skills/shared/nodejs/scripts/verify.sh +122 -0
- package/skills/shared/observability/SKILL.md +235 -0
- package/skills/shared/observability/evals/README.md +3 -0
- package/skills/shared/observability/evals/cases.yaml +51 -0
- package/skills/shared/observability/references/collector-config.md +98 -0
- package/skills/shared/observability/references/instrumentation-recipes.md +115 -0
- package/skills/shared/observability/scripts/verify.sh +156 -0
- package/skills/shared/ollama/SKILL.md +213 -0
- package/skills/shared/ollama/evals/README.md +9 -0
- package/skills/shared/ollama/evals/cases.yaml +43 -0
- package/skills/shared/ollama/references/api.md +148 -0
- package/skills/shared/ollama/references/hardware-sizing.md +87 -0
- package/skills/shared/ollama/scripts/verify.sh +116 -0
- package/skills/shared/open-weights/SKILL.md +239 -0
- package/skills/shared/open-weights/evals/README.md +14 -0
- package/skills/shared/open-weights/evals/cases.yaml +42 -0
- package/skills/shared/open-weights/references/licenses.md +123 -0
- package/skills/shared/open-weights/references/model-families.md +83 -0
- package/skills/shared/open-weights/references/sizing-and-quant.md +89 -0
- package/skills/shared/orient/SKILL.md +92 -0
- package/skills/shared/orient/evals/README.md +18 -0
- package/skills/shared/orient/evals/cases.yaml +67 -0
- package/skills/shared/orient/references/explain-ladder.md +93 -0
- package/skills/shared/orient/references/orientation-contract.md +86 -0
- package/skills/shared/parallel/SKILL.md +168 -0
- package/skills/shared/parallel/evals/README.md +62 -0
- package/skills/shared/parallel/evals/cases.yaml +44 -0
- package/skills/shared/performance/SKILL.md +229 -0
- package/skills/shared/performance/evals/README.md +3 -0
- package/skills/shared/performance/evals/cases.yaml +49 -0
- package/skills/shared/performance/references/profiling-playbook.md +54 -0
- package/skills/shared/performance/scripts/verify.sh +94 -0
- package/skills/shared/phoenix/SKILL.md +169 -0
- package/skills/shared/phoenix/evals/README.md +3 -0
- package/skills/shared/phoenix/evals/cases.yaml +40 -0
- package/skills/shared/phoenix/references/auth-and-scopes.md +82 -0
- package/skills/shared/phoenix/references/ecto-patterns.md +93 -0
- package/skills/shared/phoenix/references/liveview.md +134 -0
- package/skills/shared/phoenix/scripts/verify.sh +73 -0
- package/skills/shared/php/SKILL.md +397 -0
- package/skills/shared/php/evals/README.md +12 -0
- package/skills/shared/php/evals/cases.yaml +45 -0
- package/skills/shared/php/references/tooling.md +170 -0
- package/skills/shared/php/references/type-system.md +220 -0
- package/skills/shared/php/scripts/verify.sh +155 -0
- package/skills/shared/plan/SKILL.md +166 -0
- package/skills/shared/plan/evals/README.md +62 -0
- package/skills/shared/plan/evals/cases.yaml +49 -0
- package/skills/shared/plan/references/plan-template.md +153 -0
- package/skills/shared/planetscale/SKILL.md +198 -0
- package/skills/shared/planetscale/evals/README.md +11 -0
- package/skills/shared/planetscale/evals/cases.yaml +46 -0
- package/skills/shared/planetscale/references/deploy-requests.md +75 -0
- package/skills/shared/planetscale/references/no-foreign-keys.md +88 -0
- package/skills/shared/planetscale/scripts/verify.sh +115 -0
- package/skills/shared/planning-with-files/SKILL.md +278 -0
- package/skills/shared/planning-with-files/examples.md +202 -0
- package/skills/shared/planning-with-files/reference.md +218 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.ps1 +118 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.sh +110 -0
- package/skills/shared/planning-with-files/scripts/check-complete.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/check-complete.sh +46 -0
- package/skills/shared/planning-with-files/scripts/init-session.ps1 +166 -0
- package/skills/shared/planning-with-files/scripts/init-session.sh +284 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.sh +76 -0
- package/skills/shared/planning-with-files/scripts/session-catchup.py +438 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.ps1 +50 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.sh +50 -0
- package/skills/shared/planning-with-files/templates/findings.md +95 -0
- package/skills/shared/planning-with-files/templates/progress.md +114 -0
- package/skills/shared/planning-with-files/templates/task_plan.md +132 -0
- package/skills/shared/postgresdb/SKILL.md +354 -0
- package/skills/shared/postgresdb/evals/README.md +55 -0
- package/skills/shared/postgresdb/evals/cases.yaml +57 -0
- package/skills/shared/postgresdb/references/migrations.md +279 -0
- package/skills/shared/postgresdb/references/operations-and-security.md +267 -0
- package/skills/shared/postgresdb/references/query-optimization.md +374 -0
- package/skills/shared/postgresdb/references/schema-and-indexing.md +379 -0
- package/skills/shared/postgresdb/scripts/verify.sh +191 -0
- package/skills/shared/prisma-orm/SKILL.md +313 -0
- package/skills/shared/prisma-orm/evals/README.md +12 -0
- package/skills/shared/prisma-orm/evals/cases.yaml +56 -0
- package/skills/shared/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
- package/skills/shared/prisma-orm/references/queries-and-performance.md +169 -0
- package/skills/shared/prisma-orm/scripts/verify.sh +137 -0
- package/skills/shared/prompt-engineering/SKILL.md +127 -0
- package/skills/shared/prompt-engineering/evals/README.md +11 -0
- package/skills/shared/prompt-engineering/evals/cases.yaml +46 -0
- package/skills/shared/prompt-engineering/references/eval-templates.md +94 -0
- package/skills/shared/prompt-engineering/references/output-contracts.md +120 -0
- package/skills/shared/prompt-engineering/scripts/verify.sh +84 -0
- package/skills/shared/python/SKILL.md +320 -0
- package/skills/shared/python/evals/README.md +19 -0
- package/skills/shared/python/evals/cases.yaml +46 -0
- package/skills/shared/python/references/async.md +136 -0
- package/skills/shared/python/references/stdlib.md +162 -0
- package/skills/shared/python/references/typing.md +160 -0
- package/skills/shared/python/scripts/verify.sh +125 -0
- package/skills/shared/rag/SKILL.md +209 -0
- package/skills/shared/rag/evals/README.md +13 -0
- package/skills/shared/rag/evals/cases.yaml +45 -0
- package/skills/shared/rag/references/evaluation.md +99 -0
- package/skills/shared/rag/references/pipeline.md +151 -0
- package/skills/shared/rag/scripts/verify.sh +99 -0
- package/skills/shared/rails/SKILL.md +264 -0
- package/skills/shared/rails/evals/README.md +12 -0
- package/skills/shared/rails/evals/cases.yaml +47 -0
- package/skills/shared/rails/references/activerecord.md +148 -0
- package/skills/shared/rails/references/hotwire.md +139 -0
- package/skills/shared/rails/references/testing.md +110 -0
- package/skills/shared/rails/scripts/verify.sh +128 -0
- package/skills/shared/railway/SKILL.md +245 -0
- package/skills/shared/railway/evals/README.md +14 -0
- package/skills/shared/railway/evals/cases.yaml +44 -0
- package/skills/shared/railway/references/cli-cookbook.md +137 -0
- package/skills/shared/railway/references/config-as-code.md +120 -0
- package/skills/shared/railway/scripts/verify.sh +162 -0
- package/skills/shared/react/SKILL.md +182 -0
- package/skills/shared/react/evals/README.md +3 -0
- package/skills/shared/react/evals/cases.yaml +43 -0
- package/skills/shared/react/references/data-and-state.md +152 -0
- package/skills/shared/react/references/performance.md +75 -0
- package/skills/shared/react/references/routing.md +99 -0
- package/skills/shared/react/scripts/verify.sh +123 -0
- package/skills/shared/react-native/SKILL.md +215 -0
- package/skills/shared/react-native/evals/README.md +3 -0
- package/skills/shared/react-native/evals/cases.yaml +42 -0
- package/skills/shared/react-native/references/native-modules.md +123 -0
- package/skills/shared/react-native/references/performance-debugging.md +46 -0
- package/skills/shared/react-native/scripts/verify.sh +120 -0
- package/skills/shared/redis/SKILL.md +298 -0
- package/skills/shared/redis/evals/README.md +10 -0
- package/skills/shared/redis/evals/cases.yaml +43 -0
- package/skills/shared/redis/references/caching.md +116 -0
- package/skills/shared/redis/references/locks-and-rate-limiting.md +140 -0
- package/skills/shared/redis/references/queues.md +102 -0
- package/skills/shared/redis/scripts/verify.sh +164 -0
- package/skills/shared/render/SKILL.md +256 -0
- package/skills/shared/render/evals/README.md +12 -0
- package/skills/shared/render/evals/cases.yaml +45 -0
- package/skills/shared/render/references/blueprint-reference.md +203 -0
- package/skills/shared/render/scripts/verify.sh +167 -0
- package/skills/shared/replicate/SKILL.md +210 -0
- package/skills/shared/replicate/evals/README.md +9 -0
- package/skills/shared/replicate/evals/cases.yaml +45 -0
- package/skills/shared/replicate/references/cog-packaging.md +89 -0
- package/skills/shared/replicate/references/deployments-api.md +87 -0
- package/skills/shared/replicate/references/webhooks-and-async.md +110 -0
- package/skills/shared/replicate/scripts/verify.sh +162 -0
- package/skills/shared/research-ops/SKILL.md +200 -0
- package/skills/shared/research-ops/evals/README.md +13 -0
- package/skills/shared/research-ops/evals/cases.yaml +38 -0
- package/skills/shared/research-ops/references/credibility-rubric.md +78 -0
- package/skills/shared/research-ops/references/memo-template.md +63 -0
- package/skills/shared/research-ops/scripts/verify.sh +181 -0
- package/skills/shared/review/SKILL.md +314 -0
- package/skills/shared/review/evals/README.md +84 -0
- package/skills/shared/review/evals/cases.yaml +55 -0
- package/skills/shared/ruby/SKILL.md +295 -0
- package/skills/shared/ruby/evals/README.md +12 -0
- package/skills/shared/ruby/evals/cases.yaml +41 -0
- package/skills/shared/ruby/references/gems-and-testing.md +208 -0
- package/skills/shared/ruby/references/metaprogramming.md +161 -0
- package/skills/shared/ruby/scripts/verify.sh +83 -0
- package/skills/shared/runpod/SKILL.md +238 -0
- package/skills/shared/runpod/evals/README.md +11 -0
- package/skills/shared/runpod/evals/cases.yaml +47 -0
- package/skills/shared/runpod/references/cost-and-scaling.md +85 -0
- package/skills/shared/runpod/references/serverless-workers.md +101 -0
- package/skills/shared/runpod/scripts/verify.sh +126 -0
- package/skills/shared/rust/SKILL.md +320 -0
- package/skills/shared/rust/evals/README.md +12 -0
- package/skills/shared/rust/evals/cases.yaml +42 -0
- package/skills/shared/rust/references/async-tokio.md +141 -0
- package/skills/shared/rust/references/axum-service.md +132 -0
- package/skills/shared/rust/references/ownership.md +86 -0
- package/skills/shared/rust/references/testing.md +108 -0
- package/skills/shared/rust/scripts/verify.sh +91 -0
- package/skills/shared/scaling/SKILL.md +137 -0
- package/skills/shared/scaling/evals/README.md +3 -0
- package/skills/shared/scaling/evals/cases.yaml +42 -0
- package/skills/shared/scaling/references/load-testing-k6.md +127 -0
- package/skills/shared/scaling/scripts/example.load.js +24 -0
- package/skills/shared/scaling/scripts/verify.sh +70 -0
- package/skills/shared/sdd/SKILL.md +250 -0
- package/skills/shared/sdd/evals/README.md +60 -0
- package/skills/shared/sdd/evals/cases.yaml +90 -0
- package/skills/shared/sdd/references/model-routing.md +194 -0
- package/skills/shared/sdd-init/SKILL.md +189 -0
- package/skills/shared/sdd-init/evals/README.md +3 -0
- package/skills/shared/sdd-init/evals/cases.yaml +43 -0
- package/skills/shared/secure-coding/SKILL.md +336 -0
- package/skills/shared/secure-coding/evals/README.md +68 -0
- package/skills/shared/secure-coding/evals/cases.yaml +55 -0
- package/skills/shared/secure-coding/references/authn-authz.md +249 -0
- package/skills/shared/secure-coding/references/owasp-by-stack.md +574 -0
- package/skills/shared/secure-coding/references/secrets-and-supply-chain.md +205 -0
- package/skills/shared/secure-coding/references/threat-modeling.md +213 -0
- package/skills/shared/secure-coding/scripts/verify.sh +208 -0
- package/skills/shared/security-scan/SKILL.md +219 -0
- package/skills/shared/security-scan/evals/README.md +14 -0
- package/skills/shared/security-scan/evals/cases.yaml +50 -0
- package/skills/shared/security-scan/references/tools.md +97 -0
- package/skills/shared/security-scan/references/triage.md +92 -0
- package/skills/shared/security-scan/scripts/verify.sh +108 -0
- package/skills/shared/ship/SKILL.md +272 -0
- package/skills/shared/ship/evals/README.md +89 -0
- package/skills/shared/ship/evals/cases.yaml +44 -0
- package/skills/shared/shopify/SKILL.md +229 -0
- package/skills/shared/shopify/evals/README.md +14 -0
- package/skills/shared/shopify/evals/cases.yaml +41 -0
- package/skills/shared/shopify/references/apps-graphql.md +103 -0
- package/skills/shared/shopify/references/checkout-extensibility.md +71 -0
- package/skills/shared/shopify/references/liquid-themes.md +89 -0
- package/skills/shared/shopify/scripts/verify.sh +120 -0
- package/skills/shared/simplify-code/SKILL.md +101 -0
- package/skills/shared/simplify-code/evals/README.md +3 -0
- package/skills/shared/simplify-code/evals/cases.yaml +42 -0
- package/skills/shared/skill-scout/SKILL.md +169 -0
- package/skills/shared/skill-scout/evals/README.md +12 -0
- package/skills/shared/skill-scout/evals/cases.yaml +56 -0
- package/skills/shared/skill-scout/references/install-commands.md +76 -0
- package/skills/shared/skill-scout/scripts/verify.sh +154 -0
- package/skills/shared/solid-js/SKILL.md +260 -0
- package/skills/shared/solid-js/evals/README.md +3 -0
- package/skills/shared/solid-js/evals/cases.yaml +38 -0
- package/skills/shared/solid-js/references/reactivity-deep-dive.md +89 -0
- package/skills/shared/solid-js/references/router-and-start.md +93 -0
- package/skills/shared/solid-js/scripts/verify.sh +130 -0
- package/skills/shared/source-grounded-development/SKILL.md +108 -0
- package/skills/shared/source-grounded-development/evals/README.md +3 -0
- package/skills/shared/source-grounded-development/evals/cases.yaml +42 -0
- package/skills/shared/specify/SKILL.md +391 -0
- package/skills/shared/specify/evals/README.md +73 -0
- package/skills/shared/specify/evals/cases.yaml +93 -0
- package/skills/shared/specify/references/eliciting-requirements.md +117 -0
- package/skills/shared/specify/references/spec-template.md +101 -0
- package/skills/shared/speckit-analyze/SKILL.md +35 -0
- package/skills/shared/speckit-assess-decide/SKILL.md +36 -0
- package/skills/shared/speckit-assess-define/SKILL.md +36 -0
- package/skills/shared/speckit-assess-intake/SKILL.md +38 -0
- package/skills/shared/speckit-assess-research/SKILL.md +36 -0
- package/skills/shared/speckit-assess-shape/SKILL.md +36 -0
- package/skills/shared/speckit-bug-assess/SKILL.md +38 -0
- package/skills/shared/speckit-bug-fix/SKILL.md +37 -0
- package/skills/shared/speckit-bug-test/SKILL.md +37 -0
- package/skills/shared/speckit-checklist/SKILL.md +35 -0
- package/skills/shared/speckit-clarify/SKILL.md +32 -0
- package/skills/shared/speckit-constitution/SKILL.md +35 -0
- package/skills/shared/speckit-converge/SKILL.md +36 -0
- package/skills/shared/speckit-implement/SKILL.md +32 -0
- package/skills/shared/speckit-plan/SKILL.md +37 -0
- package/skills/shared/speckit-specify/SKILL.md +36 -0
- package/skills/shared/speckit-tasks/SKILL.md +34 -0
- package/skills/shared/spreadsheet-ops/SKILL.md +180 -0
- package/skills/shared/spreadsheet-ops/evals/README.md +33 -0
- package/skills/shared/spreadsheet-ops/evals/cases.yaml +42 -0
- package/skills/shared/spreadsheet-ops/references/formula-cookbook.md +70 -0
- package/skills/shared/spreadsheet-ops/references/python-excel.md +87 -0
- package/skills/shared/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
- package/skills/shared/spreadsheet-ops/scripts/verify.sh +152 -0
- package/skills/shared/spring-boot/SKILL.md +350 -0
- package/skills/shared/spring-boot/evals/README.md +11 -0
- package/skills/shared/spring-boot/evals/cases.yaml +49 -0
- package/skills/shared/spring-boot/references/jpa.md +94 -0
- package/skills/shared/spring-boot/references/security.md +92 -0
- package/skills/shared/spring-boot/references/testing.md +95 -0
- package/skills/shared/spring-boot/scripts/verify.sh +115 -0
- package/skills/shared/sql/SKILL.md +286 -0
- package/skills/shared/sql/evals/README.md +9 -0
- package/skills/shared/sql/evals/cases.yaml +49 -0
- package/skills/shared/sql/references/ctes-and-recursion.md +63 -0
- package/skills/shared/sql/references/joins-and-sets.md +71 -0
- package/skills/shared/sql/references/portability.md +38 -0
- package/skills/shared/sql/references/window-functions.md +72 -0
- package/skills/shared/sql/scripts/verify.sh +139 -0
- package/skills/shared/sqlite-turso/SKILL.md +214 -0
- package/skills/shared/sqlite-turso/evals/README.md +24 -0
- package/skills/shared/sqlite-turso/evals/cases.yaml +45 -0
- package/skills/shared/sqlite-turso/references/embedded-replicas.md +96 -0
- package/skills/shared/sqlite-turso/scripts/verify.sh +95 -0
- package/skills/shared/structured-extraction/SKILL.md +230 -0
- package/skills/shared/structured-extraction/evals/README.md +13 -0
- package/skills/shared/structured-extraction/evals/cases.yaml +70 -0
- package/skills/shared/structured-extraction/references/providers.md +152 -0
- package/skills/shared/structured-extraction/scripts/verify.sh +160 -0
- package/skills/shared/suggest/SKILL.md +123 -0
- package/skills/shared/suggest/evals/README.md +17 -0
- package/skills/shared/suggest/evals/cases.yaml +78 -0
- package/skills/shared/supabase/SKILL.md +268 -0
- package/skills/shared/supabase/evals/README.md +12 -0
- package/skills/shared/supabase/evals/cases.yaml +42 -0
- package/skills/shared/supabase/references/auth-ssr.md +173 -0
- package/skills/shared/supabase/references/rls-cookbook.md +122 -0
- package/skills/shared/supabase/scripts/verify.sh +149 -0
- package/skills/shared/svelte/SKILL.md +238 -0
- package/skills/shared/svelte/evals/README.md +3 -0
- package/skills/shared/svelte/evals/cases.yaml +41 -0
- package/skills/shared/svelte/references/runes.md +97 -0
- package/skills/shared/svelte/references/sveltekit-data.md +156 -0
- package/skills/shared/svelte/scripts/verify.sh +128 -0
- package/skills/shared/swift-ios/SKILL.md +224 -0
- package/skills/shared/swift-ios/evals/README.md +3 -0
- package/skills/shared/swift-ios/evals/cases.yaml +46 -0
- package/skills/shared/swift-ios/references/concurrency.md +132 -0
- package/skills/shared/swift-ios/references/testing.md +112 -0
- package/skills/shared/swift-ios/scripts/verify.sh +98 -0
- package/skills/shared/tasks/SKILL.md +265 -0
- package/skills/shared/tasks/evals/README.md +70 -0
- package/skills/shared/tasks/evals/cases.yaml +75 -0
- package/skills/shared/tauri/SKILL.md +219 -0
- package/skills/shared/tauri/evals/README.md +12 -0
- package/skills/shared/tauri/evals/cases.yaml +46 -0
- package/skills/shared/tauri/references/bundling-distribution.md +129 -0
- package/skills/shared/tauri/references/security.md +143 -0
- package/skills/shared/tauri/scripts/verify.sh +178 -0
- package/skills/shared/technical-writing/SKILL.md +230 -0
- package/skills/shared/technical-writing/evals/README.md +12 -0
- package/skills/shared/technical-writing/evals/cases.yaml +53 -0
- package/skills/shared/technical-writing/references/diataxis-modes.md +131 -0
- package/skills/shared/technical-writing/references/vale-starter.md +90 -0
- package/skills/shared/technical-writing/scripts/verify.sh +83 -0
- package/skills/shared/testing-go/SKILL.md +263 -0
- package/skills/shared/testing-go/evals/README.md +3 -0
- package/skills/shared/testing-go/evals/cases.yaml +46 -0
- package/skills/shared/testing-go/references/coverage-and-benchmarks.md +85 -0
- package/skills/shared/testing-go/references/mocks-and-fakes.md +140 -0
- package/skills/shared/testing-go/references/synctest-and-concurrency.md +82 -0
- package/skills/shared/testing-go/scripts/verify.sh +72 -0
- package/skills/shared/testing-py/SKILL.md +197 -0
- package/skills/shared/testing-py/evals/README.md +5 -0
- package/skills/shared/testing-py/evals/cases.yaml +44 -0
- package/skills/shared/testing-py/references/mocking.md +141 -0
- package/skills/shared/testing-py/references/property-testing.md +99 -0
- package/skills/shared/testing-py/scripts/verify.sh +117 -0
- package/skills/shared/testing-web/SKILL.md +244 -0
- package/skills/shared/testing-web/evals/README.md +11 -0
- package/skills/shared/testing-web/evals/cases.yaml +52 -0
- package/skills/shared/testing-web/references/jest-setup.md +88 -0
- package/skills/shared/testing-web/references/recipes.md +116 -0
- package/skills/shared/testing-web/scripts/verify.sh +111 -0
- package/skills/shared/together-fireworks/SKILL.md +176 -0
- package/skills/shared/together-fireworks/evals/README.md +3 -0
- package/skills/shared/together-fireworks/evals/cases.yaml +50 -0
- package/skills/shared/together-fireworks/references/batch-and-tuning.md +59 -0
- package/skills/shared/together-fireworks/references/models-and-pricing.md +79 -0
- package/skills/shared/together-fireworks/scripts/verify.sh +165 -0
- package/skills/shared/training-data/SKILL.md +226 -0
- package/skills/shared/training-data/evals/README.md +13 -0
- package/skills/shared/training-data/evals/cases.yaml +41 -0
- package/skills/shared/training-data/references/formats.md +118 -0
- package/skills/shared/training-data/references/synthesis-dedup-quality.md +134 -0
- package/skills/shared/translation-l10n/SKILL.md +229 -0
- package/skills/shared/translation-l10n/evals/README.md +3 -0
- package/skills/shared/translation-l10n/evals/cases.yaml +39 -0
- package/skills/shared/translation-l10n/references/icu-cookbook.md +82 -0
- package/skills/shared/translation-l10n/references/rtl-and-bidi.md +60 -0
- package/skills/shared/typescript/SKILL.md +225 -0
- package/skills/shared/typescript/evals/README.md +15 -0
- package/skills/shared/typescript/evals/cases.yaml +46 -0
- package/skills/shared/typescript/references/build-and-monorepo.md +141 -0
- package/skills/shared/typescript/references/type-system.md +162 -0
- package/skills/shared/typescript/scripts/verify.sh +52 -0
- package/skills/shared/ui-engineering/SKILL.md +113 -0
- package/skills/shared/ui-engineering/evals/cases.yaml +38 -0
- package/skills/shared/unity/SKILL.md +282 -0
- package/skills/shared/unity/evals/README.md +8 -0
- package/skills/shared/unity/evals/cases.yaml +43 -0
- package/skills/shared/unity/references/build-and-platforms.md +65 -0
- package/skills/shared/unity/references/input-system.md +102 -0
- package/skills/shared/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/shared/unreal/SKILL.md +270 -0
- package/skills/shared/unreal/evals/README.md +12 -0
- package/skills/shared/unreal/evals/cases.yaml +45 -0
- package/skills/shared/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/shared/unreal/references/gameplay-framework.md +95 -0
- package/skills/shared/unreal/references/packaging.md +83 -0
- package/skills/shared/unslop/SKILL.md +143 -0
- package/skills/shared/unslop/evals/README.md +25 -0
- package/skills/shared/unslop/evals/cases.yaml +61 -0
- package/skills/shared/unsloth/SKILL.md +254 -0
- package/skills/shared/unsloth/evals/README.md +10 -0
- package/skills/shared/unsloth/evals/cases.yaml +42 -0
- package/skills/shared/unsloth/references/export.md +75 -0
- package/skills/shared/unsloth/references/grpo.md +91 -0
- package/skills/shared/unsloth/references/masking-and-templates.md +91 -0
- package/skills/shared/variant-explorer/SKILL.md +93 -0
- package/skills/shared/variant-explorer/evals/cases.yaml +38 -0
- package/skills/shared/vector-db/SKILL.md +189 -0
- package/skills/shared/vector-db/evals/README.md +10 -0
- package/skills/shared/vector-db/evals/cases.yaml +45 -0
- package/skills/shared/vector-db/references/engines.md +175 -0
- package/skills/shared/vector-db/references/tuning.md +62 -0
- package/skills/shared/vector-db/scripts/verify.sh +110 -0
- package/skills/shared/vercel/SKILL.md +242 -0
- package/skills/shared/vercel/evals/README.md +23 -0
- package/skills/shared/vercel/evals/cases.yaml +45 -0
- package/skills/shared/vercel/references/cli-cookbook.md +98 -0
- package/skills/shared/vercel/references/vercel-json.md +120 -0
- package/skills/shared/vercel/scripts/verify.sh +168 -0
- package/skills/shared/verify/SKILL.md +230 -0
- package/skills/shared/verify/evals/README.md +78 -0
- package/skills/shared/verify/evals/cases.yaml +104 -0
- package/skills/shared/vllm/SKILL.md +235 -0
- package/skills/shared/vllm/evals/README.md +9 -0
- package/skills/shared/vllm/evals/cases.yaml +47 -0
- package/skills/shared/vllm/references/flags-and-endpoints.md +105 -0
- package/skills/shared/vllm/references/memory-and-throughput.md +78 -0
- package/skills/shared/vue-nuxt/SKILL.md +323 -0
- package/skills/shared/vue-nuxt/evals/README.md +11 -0
- package/skills/shared/vue-nuxt/evals/cases.yaml +49 -0
- package/skills/shared/vue-nuxt/references/data-and-state.md +127 -0
- package/skills/shared/vue-nuxt/references/migration-nuxt4.md +79 -0
- package/skills/shared/vue-nuxt/references/nitro-and-rendering.md +117 -0
- package/skills/shared/vue-nuxt/references/reactivity.md +135 -0
- package/skills/shared/vue-nuxt/scripts/verify.sh +148 -0
- package/skills/shared/webhooks/SKILL.md +229 -0
- package/skills/shared/webhooks/evals/README.md +15 -0
- package/skills/shared/webhooks/evals/cases.yaml +46 -0
- package/skills/shared/webhooks/references/framework-raw-body.md +97 -0
- package/skills/shared/webhooks/references/signature-schemes.md +66 -0
- package/skills/shared/webhooks/scripts/verify.sh +142 -0
- package/skills/shared/wordpress/SKILL.md +224 -0
- package/skills/shared/wordpress/evals/README.md +3 -0
- package/skills/shared/wordpress/evals/cases.yaml +50 -0
- package/skills/shared/wordpress/references/hardening.md +108 -0
- package/skills/shared/wordpress/references/performance.md +80 -0
- package/skills/shared/wordpress/references/woocommerce.md +65 -0
- package/skills/shared/wordpress/scripts/verify.sh +96 -0
- package/skills/shared/worktrees/SKILL.md +204 -0
- package/skills/shared/worktrees/evals/README.md +78 -0
- package/skills/shared/worktrees/evals/cases.yaml +47 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: render
|
|
3
|
+
description: "Use when deploying or fixing an app on Render — web services, background workers, cron jobs, private services, managed Postgres and Key-Value, and especially the render.yaml Blueprint. Covers deploys that fail with no open ports detected, 502s on first deploy, free-tier cold starts, and a free Postgres about to expire with its data. NOT the generic ship and release flow (that is `deployment`), NOT another PaaS such as `railway` or `fly-io`."
|
|
4
|
+
tags: [render, paas, deployment, render-yaml, cron, background-worker, infrastructure-as-code]
|
|
5
|
+
recommends: [deployment, postgresdb, docker, domains-dns, github-actions, scaling]
|
|
6
|
+
origin: ai-hub
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Render — make this repo deploy correctly, wired as code
|
|
10
|
+
|
|
11
|
+
Take any repo and make it deploy on **Render** (render.com) in one pass: pick the right
|
|
12
|
+
service type, declare everything in a version-controlled `render.yaml` Blueprint, bind the
|
|
13
|
+
port the way Render expects, and wire `DATABASE_URL` / secrets across services so they
|
|
14
|
+
survive rotation. Steer clear of the four traps that eat first deploys: the
|
|
15
|
+
"no open ports detected" 502, the free-tier spin-down, the 30-day free-Postgres expiry,
|
|
16
|
+
and the 12-hour cron kill.
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
pick service type → render.yaml at repo root → bind 0.0.0.0:$PORT → wire env across services → push (auto-deploy)
|
|
20
|
+
│ │
|
|
21
|
+
web|worker|cron|pserv|static|keyvalue full key surface → references/blueprint-reference.md
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Facts here are dated to **2026-06-02** against render.com/docs. Render ships changes; if a
|
|
25
|
+
key or limit looks off, confirm against the live Blueprint spec before betting a deploy on it.
|
|
26
|
+
|
|
27
|
+
## The one decision that decides everything: service type
|
|
28
|
+
|
|
29
|
+
Pick the type **before** you write a line of YAML. The type sets the billing model, whether
|
|
30
|
+
the process gets a public URL, and whether Render expects it to bind a port. Choosing wrong
|
|
31
|
+
means a worker that never starts because Render waited for a port, or a 12-hour job that dies
|
|
32
|
+
silently as a cron.
|
|
33
|
+
|
|
34
|
+
| The process… | Type | `runtime` required? | Gets a public URL? |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| serves HTTP/WebSocket traffic | `web` | yes | yes |
|
|
37
|
+
| runs forever, no inbound URL (queue consumer, Celery) | `worker` | yes | no |
|
|
38
|
+
| runs, does work, exits — on a schedule | `cron` | yes | no |
|
|
39
|
+
| internal-only API, reachable only inside Render's network | `pserv` | yes | no (internal host only) |
|
|
40
|
+
| pre-built static assets (SPA, docs) | `web` + `runtime: static` | yes (`static`) | yes |
|
|
41
|
+
| cache / queue / Redis-compatible store | `keyvalue` | **no** | no (internal) |
|
|
42
|
+
|
|
43
|
+
`runtime` enum (everything except `keyvalue`): `node`, `python`, `docker`, `image`,
|
|
44
|
+
`static`, `go`, `ruby`, `elixir`, `rust`.
|
|
45
|
+
|
|
46
|
+
## Blueprint-first: everything lives in render.yaml
|
|
47
|
+
|
|
48
|
+
**Rule: declare every service, database, and env var group in `render.yaml` at the repo
|
|
49
|
+
root. Touch the dashboard only for `sync: false` secrets and one-off debugging.** Why: the
|
|
50
|
+
Blueprint is the reproducible, reviewable source of truth — it powers preview environments
|
|
51
|
+
and a clean re-deploy, while dashboard-only config is invisible state that drifts and can't
|
|
52
|
+
be code-reviewed.
|
|
53
|
+
|
|
54
|
+
Top-level keys: `services`, `databases`, `envVarGroups`, `projects`, `previews`.
|
|
55
|
+
|
|
56
|
+
## Minimal correct render.yaml (annotated)
|
|
57
|
+
|
|
58
|
+
A multi-service app — a Node web service, a Python worker, a nightly cron, a Postgres db,
|
|
59
|
+
and a shared env group. Every load-bearing key is commented.
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
databases:
|
|
63
|
+
- name: app-db
|
|
64
|
+
plan: starter # NOT free for anything you care about — free expires in 30 days
|
|
65
|
+
postgresMajorVersion: "17"
|
|
66
|
+
region: frankfurt
|
|
67
|
+
|
|
68
|
+
envVarGroups:
|
|
69
|
+
- name: app-shared
|
|
70
|
+
envVars:
|
|
71
|
+
- key: LOG_LEVEL
|
|
72
|
+
value: info
|
|
73
|
+
- key: SENTRY_DSN
|
|
74
|
+
sync: false # prompt once at setup; never stored in git
|
|
75
|
+
|
|
76
|
+
services:
|
|
77
|
+
- type: web
|
|
78
|
+
name: api
|
|
79
|
+
runtime: node
|
|
80
|
+
region: frankfurt
|
|
81
|
+
plan: starter # $7/mo — avoids the free-tier 15-min spin-down on an API
|
|
82
|
+
buildCommand: npm ci && npm run build
|
|
83
|
+
startCommand: npm start # MUST bind 0.0.0.0 and read $PORT — see next section
|
|
84
|
+
healthCheckPath: /healthz # gates zero-downtime rollout; new instance must pass first
|
|
85
|
+
preDeployCommand: npm run migrate # runs before the new instance serves traffic
|
|
86
|
+
autoDeployTrigger: commit # commit | checksPass | off
|
|
87
|
+
envVars:
|
|
88
|
+
- fromGroup: app-shared
|
|
89
|
+
- key: DATABASE_URL
|
|
90
|
+
fromDatabase:
|
|
91
|
+
name: app-db
|
|
92
|
+
property: connectionString # never hardcode the URL
|
|
93
|
+
- key: SESSION_SECRET
|
|
94
|
+
generateValue: true # Render generates a random secret
|
|
95
|
+
|
|
96
|
+
- type: worker
|
|
97
|
+
name: jobs
|
|
98
|
+
runtime: python
|
|
99
|
+
plan: starter
|
|
100
|
+
buildCommand: pip install -r requirements.txt
|
|
101
|
+
startCommand: celery -A app worker -l info # no port — workers don't bind one
|
|
102
|
+
envVars:
|
|
103
|
+
- fromGroup: app-shared
|
|
104
|
+
- key: DATABASE_URL
|
|
105
|
+
fromDatabase: { name: app-db, property: connectionString }
|
|
106
|
+
- key: API_URL
|
|
107
|
+
fromService: # reference another service
|
|
108
|
+
name: api
|
|
109
|
+
type: web
|
|
110
|
+
property: hostport
|
|
111
|
+
|
|
112
|
+
- type: cron
|
|
113
|
+
name: nightly-cleanup
|
|
114
|
+
runtime: python
|
|
115
|
+
schedule: "0 3 * * *" # required for cron; 03:00 UTC daily
|
|
116
|
+
buildCommand: pip install -r requirements.txt
|
|
117
|
+
startCommand: python -m app.cleanup
|
|
118
|
+
envVars:
|
|
119
|
+
- key: DATABASE_URL
|
|
120
|
+
fromDatabase: { name: app-db, property: connectionString }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Port binding — do this first (the #1 first-deploy failure)
|
|
124
|
+
|
|
125
|
+
**Rule: a `web` service MUST listen on host `0.0.0.0` and read the `PORT` env var (Render
|
|
126
|
+
sets it, default `10000`).** If Render detects no bound port within its window, the deploy
|
|
127
|
+
**fails with "no open ports detected"** and visitors get a **502**. This is the single most
|
|
128
|
+
common first-deploy break — binding `localhost`/`127.0.0.1` or a hardcoded port does it.
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
// Bad — binds the wrong host and ignores Render's PORT → "no open ports detected"
|
|
132
|
+
app.listen(3000);
|
|
133
|
+
|
|
134
|
+
// Good — bind 0.0.0.0 and honor $PORT
|
|
135
|
+
app.listen(process.env.PORT || 3000, "0.0.0.0");
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Bad — gunicorn on a fixed local port
|
|
140
|
+
gunicorn app:app --bind 127.0.0.1:8000
|
|
141
|
+
|
|
142
|
+
# Good — bind 0.0.0.0 and Render's $PORT
|
|
143
|
+
gunicorn app:app --bind 0.0.0.0:$PORT
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Only `web` services need this. A `worker`/`cron` that tries to bind a port is fine but
|
|
147
|
+
pointless; a `web` service that doesn't is broken.
|
|
148
|
+
|
|
149
|
+
## Wiring env vars across services
|
|
150
|
+
|
|
151
|
+
**Rule: never hardcode `DATABASE_URL`, `REDIS_URL`, or shared secrets as literal `value:`
|
|
152
|
+
strings. Reference the resource** so the value survives a rotation, recreate, or region
|
|
153
|
+
move, and so secrets never land in git.
|
|
154
|
+
|
|
155
|
+
| Form | Use it for |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| `fromDatabase: { name, property: connectionString }` | the Postgres connection string |
|
|
158
|
+
| `fromService: { name, type, property }` | another service's host/port/URL (`property: hostport`, `host`, or `port`) |
|
|
159
|
+
| `fromGroup: <group-name>` | pull a whole shared env var group |
|
|
160
|
+
| `generateValue: true` | a random secret Render generates and stores (session keys) |
|
|
161
|
+
| `sync: false` | a secret you type once at setup; not stored in the repo |
|
|
162
|
+
|
|
163
|
+
For a Key Value store, reference its connection string the same way you reference Postgres,
|
|
164
|
+
via `fromService` against the `keyvalue` service.
|
|
165
|
+
|
|
166
|
+
## Migrations and zero-downtime deploys
|
|
167
|
+
|
|
168
|
+
- `preDeployCommand` — runs **once**, before the new instance starts serving traffic. Put
|
|
169
|
+
migrations here, not in `startCommand` (a startCommand migration runs on every instance
|
|
170
|
+
and races under multiple replicas).
|
|
171
|
+
- `healthCheckPath` — Render polls it on the new instance and only shifts traffic once it
|
|
172
|
+
passes, giving zero-downtime rollout. Point it at a route that checks real readiness.
|
|
173
|
+
- `autoDeployTrigger` — `commit` (deploy every push), `checksPass` (wait for CI status),
|
|
174
|
+
or `off` (manual / deploy-hook only).
|
|
175
|
+
|
|
176
|
+
## Free-tier traps
|
|
177
|
+
|
|
178
|
+
Render's free tier is generous for hobby work and a landmine for anything you care about.
|
|
179
|
+
|
|
180
|
+
| Trap | What happens | Fix |
|
|
181
|
+
| --- | --- | --- |
|
|
182
|
+
| Free web spin-down | after **15 min** of no inbound traffic the instance sleeps; next request waits **30–60s** to wake | Starter at **$7/mo** per service |
|
|
183
|
+
| 750 free instance-hrs/mo | shared across the workspace; spun-down time doesn't count toward it | budget it, or pay Starter |
|
|
184
|
+
| Free Postgres expiry | **deleted 30 days after creation** (14-day grace to upgrade), all data gone; only **one** free Postgres per workspace | Starter Postgres ($7/mo) from day one for anything real |
|
|
185
|
+
| Free Key Value | no disk persistence — data is lost on restart | paid plan if you need durability |
|
|
186
|
+
|
|
187
|
+
## Cron specifics
|
|
188
|
+
|
|
189
|
+
- `schedule:` (standard cron expression) is **required** for `type: cron`.
|
|
190
|
+
- Render guarantees **at most one active run at a time** — runs don't overlap.
|
|
191
|
+
- **A run is killed after 12 hours.** Anything that can exceed that must be a `worker` with
|
|
192
|
+
its own scheduler/queue, not a cron. A long cron fails silently mid-job — partial work,
|
|
193
|
+
no clean error.
|
|
194
|
+
|
|
195
|
+
## Scaling and disk knobs
|
|
196
|
+
|
|
197
|
+
This is the concrete Render surface, not capacity strategy (that's `scaling`).
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
services:
|
|
201
|
+
- type: web
|
|
202
|
+
name: api
|
|
203
|
+
runtime: node
|
|
204
|
+
scaling:
|
|
205
|
+
minInstances: 1
|
|
206
|
+
maxInstances: 4
|
|
207
|
+
targetCPUPercent: 70
|
|
208
|
+
targetMemoryPercent: 80 # autoscale between min/max on CPU/mem
|
|
209
|
+
disk:
|
|
210
|
+
name: data
|
|
211
|
+
mountPath: /var/data
|
|
212
|
+
sizeGB: 10 # a disk PINS the service to ONE instance — blocks horizontal scale
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Use `numInstances` for a fixed replica count instead of `scaling` when you don't want
|
|
216
|
+
autoscaling. A persistent `disk` and horizontal scaling are mutually exclusive — pick one.
|
|
217
|
+
|
|
218
|
+
Regions: `oregon`, `ohio`, `virginia`, `frankfurt`, `singapore`. Plans: `free`, `starter`,
|
|
219
|
+
`standard`, `pro`, `pro plus`, `pro max`, `pro ultra`.
|
|
220
|
+
|
|
221
|
+
## Anti-patterns
|
|
222
|
+
|
|
223
|
+
| Anti-pattern | Why it bites | Do instead |
|
|
224
|
+
| --- | --- | --- |
|
|
225
|
+
| Hardcoding a port (`listen(3000)`) | "no open ports detected" → deploy fails / 502 | bind `0.0.0.0` and `$PORT` |
|
|
226
|
+
| Hardcoding `DATABASE_URL` | breaks on rotation / db recreate | `fromDatabase` reference |
|
|
227
|
+
| A long job as a `cron` | killed at 12h, silent partial work | `worker` + its own scheduler/queue |
|
|
228
|
+
| Free Postgres for production | deleted 30 days after creation | Starter ($7/mo) from day one |
|
|
229
|
+
| Secrets as literal `value:` in render.yaml | leaked in git history | `sync: false` or `generateValue: true` |
|
|
230
|
+
| Migrations in `startCommand` | runs on every instance, races under replicas | `preDeployCommand` |
|
|
231
|
+
| Free web service for a real API | cold-start 502s after idle | Starter, or accept it only for a hobby toy |
|
|
232
|
+
| Dashboard-only config | invisible drift, no preview envs, no review | declare in `render.yaml` |
|
|
233
|
+
|
|
234
|
+
## When to hand off
|
|
235
|
+
|
|
236
|
+
- Schema design, queries, indexing, tuning → `../postgresdb/SKILL.md`. This skill only
|
|
237
|
+
*provisions and connects* Render's managed Postgres.
|
|
238
|
+
- Writing the `Dockerfile` Render consumes via `runtime: docker` → `docker`.
|
|
239
|
+
- Registrar-side DNS records for a custom domain → `domains-dns`. (The Render `domains:`
|
|
240
|
+
block and verification stay here.)
|
|
241
|
+
- Cross-platform release strategy, promotion, rollback flow → `../deployment/SKILL.md` and
|
|
242
|
+
`ship`. This skill is Render config and platform mechanics.
|
|
243
|
+
- Build steps Render's native build doesn't run (custom CI) → `github-actions`. Render
|
|
244
|
+
auto-deploys on push; only reach for Actions when you genuinely need it.
|
|
245
|
+
- Capacity/load strategy beyond the `scaling:` knobs → `scaling`.
|
|
246
|
+
- A different PaaS → its own sibling: `../fly-io/SKILL.md`, `railway`, `vercel`,
|
|
247
|
+
`../netlify/SKILL.md`, `coolify`, `digitalocean`.
|
|
248
|
+
|
|
249
|
+
## Full key surface
|
|
250
|
+
|
|
251
|
+
The exhaustive `render.yaml` key tables per service type, all database keys
|
|
252
|
+
(`postgresMajorVersion`, `diskSizeGB`, `readReplicas`, `highAvailability`, `previewPlan`),
|
|
253
|
+
every env-var reference form, region/plan enums, and four complete copy-paste recipes
|
|
254
|
+
(Next.js web+pg; FastAPI web+worker+cron+keyvalue; Docker monorepo with `rootDir`; static
|
|
255
|
+
SPA with `routes` rewrites) live in `references/blueprint-reference.md` — pull it open when
|
|
256
|
+
you need a key this body didn't cover.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# render evals
|
|
2
|
+
|
|
3
|
+
These cases are routing-and-capability fixtures, not an automated test runner. Feed
|
|
4
|
+
`cases.yaml` through the repo's eval harness, which uses an LLM judge. `should_trigger`
|
|
5
|
+
and `should_not_trigger` check that the SKILL.md `description` routes the right prompts in
|
|
6
|
+
(Render deploys, render.yaml authoring, the port/502/cron/free-tier traps) and the wrong
|
|
7
|
+
ones out to the named sibling (`fly-io`, `docker`, `deployment`, `postgresdb`,
|
|
8
|
+
`domains-dns`). The `capability` case is graded against its `must_include` rubric to confirm
|
|
9
|
+
the SKILL.md body actually produces a correct, trap-free `render.yaml` — right service
|
|
10
|
+
types, `0.0.0.0:$PORT` binding, referenced (not hardcoded) env vars, and the cron/Postgres
|
|
11
|
+
warnings. There is nothing to `npm test` here; the judge reads SKILL.md and scores the
|
|
12
|
+
output against the rubric.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
skill: render
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Write a render.yaml that deploys my Express API plus a background worker and a Postgres database."
|
|
5
|
+
why: "Core Blueprint authoring across multiple service types (web + worker + Postgres) — the central job this skill owns."
|
|
6
|
+
- prompt: "My Render deploy keeps failing with 'no open ports detected'. What's wrong?"
|
|
7
|
+
why: "Non-obvious symptom phrasing that maps directly to the port-binding trap (must bind 0.0.0.0:$PORT) — the #1 first-deploy failure this skill leads with."
|
|
8
|
+
- prompt: "How do I run a nightly cleanup job on Render?"
|
|
9
|
+
why: "Service-type selection: a scheduled run-and-exit job is a `type: cron` with a `schedule:`, not a worker — a decision this skill teaches without naming the type."
|
|
10
|
+
- prompt: "Wire DATABASE_URL from my Render Postgres into both my web service and my worker without hardcoding it."
|
|
11
|
+
why: "Cross-service env reference via fromDatabase — the wiring rule (never hardcode the URL) is a signature concern of this skill."
|
|
12
|
+
- prompt: "Mi web service en Render devuelve 502 después del primer deploy, ¿qué pasa?"
|
|
13
|
+
why: "Spanish trigger; first-deploy 502 is the port-binding / no-open-ports symptom this skill diagnoses."
|
|
14
|
+
- prompt: "Should this email-sending job be a Render worker or a cron job?"
|
|
15
|
+
why: "Non-obvious worker-vs-cron boundary; the answer hinges on the 12h cron kill and run-then-exit semantics, both core to this skill."
|
|
16
|
+
- prompt: "Why does my free Render service take 30 seconds to respond after no one's hit it for a while?"
|
|
17
|
+
why: "Free-tier spin-down / cold-start trap described by symptom, not by name — squarely a free-tier mechanic this skill explains."
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "Deploy this app to Fly.io with a Dockerfile and set up volumes."
|
|
21
|
+
route_to: "fly-io"
|
|
22
|
+
why: "A different PaaS — Fly.io has its own config surface and sibling skill; this skill is Render-specific."
|
|
23
|
+
- prompt: "Write the Dockerfile for my Node app with a small multi-stage runtime image."
|
|
24
|
+
route_to: "docker"
|
|
25
|
+
why: "Container authoring. Render only consumes a Dockerfile via runtime: docker; writing it is docker's job."
|
|
26
|
+
- prompt: "Design our blue/green release and rollback strategy across staging and production."
|
|
27
|
+
route_to: "deployment"
|
|
28
|
+
why: "Platform-agnostic release flow and promotion strategy belongs to deployment; this skill is Render config and mechanics."
|
|
29
|
+
- prompt: "Optimize this slow Postgres query and add the right indexes."
|
|
30
|
+
route_to: "postgresdb"
|
|
31
|
+
why: "Schema and query tuning is postgresdb; this skill only provisions and connects Render's managed Postgres."
|
|
32
|
+
- prompt: "Point my custom domain's DNS A and CNAME records at the host at my registrar."
|
|
33
|
+
route_to: "domains-dns"
|
|
34
|
+
why: "Registrar-side DNS records belong to domains-dns; only the Render domains: block stays here."
|
|
35
|
+
|
|
36
|
+
capability:
|
|
37
|
+
- scenario: "Given a Python FastAPI repo with a Celery worker and a job that must email users every 5 minutes, produce a render.yaml and fix the start command so it deploys correctly on Render."
|
|
38
|
+
must_include:
|
|
39
|
+
- "Web service binds 0.0.0.0 and reads $PORT (e.g. gunicorn/uvicorn --bind 0.0.0.0:$PORT), not a hardcoded port"
|
|
40
|
+
- "The Celery process declared as type: worker (no port binding)"
|
|
41
|
+
- "The 5-minute email job declared as type: cron with a schedule: expression (e.g. */5 * * * *)"
|
|
42
|
+
- "DATABASE_URL wired via fromDatabase (and Redis via fromService), never a hardcoded connection string"
|
|
43
|
+
- "Secrets handled with sync: false or generateValue: true rather than literal value: strings"
|
|
44
|
+
- "Migrations placed in preDeployCommand, not startCommand"
|
|
45
|
+
- "Calls out the 12h cron kill (use a worker for longer jobs) and the free-Postgres 30-day expiry trap"
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# render.yaml — full key reference and recipes
|
|
2
|
+
|
|
3
|
+
The exhaustive Blueprint surface. Dated 2026-06-02 against render.com/docs/blueprint-spec.
|
|
4
|
+
Pull the key you need; copy a recipe and adapt.
|
|
5
|
+
|
|
6
|
+
## Top-level keys
|
|
7
|
+
|
|
8
|
+
| Key | What |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| `services` | every web / pserv / worker / cron / keyvalue service |
|
|
11
|
+
| `databases` | managed Postgres instances |
|
|
12
|
+
| `envVarGroups` | named, reusable env var bundles shared across services |
|
|
13
|
+
| `projects` | group services into a Render project |
|
|
14
|
+
| `previews` | preview-environment config (`generation: automatic \| manual \| off`) |
|
|
15
|
+
|
|
16
|
+
## Common service keys (web / pserv / worker / cron)
|
|
17
|
+
|
|
18
|
+
| Key | Notes |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `type` | `web` \| `pserv` \| `worker` \| `cron` \| `keyvalue` |
|
|
21
|
+
| `name` | unique within the workspace |
|
|
22
|
+
| `runtime` | `node` \| `python` \| `docker` \| `image` \| `static` \| `go` \| `ruby` \| `elixir` \| `rust` (required except `keyvalue`) |
|
|
23
|
+
| `region` | `oregon` \| `ohio` \| `virginia` \| `frankfurt` \| `singapore` |
|
|
24
|
+
| `plan` | `free` \| `starter` \| `standard` \| `pro` \| `pro plus` \| `pro max` \| `pro ultra` |
|
|
25
|
+
| `buildCommand` | build step (native runtimes) |
|
|
26
|
+
| `startCommand` | process entrypoint |
|
|
27
|
+
| `preDeployCommand` | runs once before the new instance serves traffic — migrations |
|
|
28
|
+
| `healthCheckPath` | path Render polls to gate zero-downtime rollout (web only) |
|
|
29
|
+
| `autoDeployTrigger` | `commit` \| `checksPass` \| `off` |
|
|
30
|
+
| `numInstances` | fixed replica count |
|
|
31
|
+
| `scaling` | `{ minInstances, maxInstances, targetCPUPercent, targetMemoryPercent }` |
|
|
32
|
+
| `disk` | `{ name, mountPath, sizeGB }` — pins to a single instance |
|
|
33
|
+
| `rootDir` | subdirectory to treat as the build root (monorepos) |
|
|
34
|
+
| `buildFilter` | `{ paths, ignoredPaths }` — only deploy when matching files change |
|
|
35
|
+
| `envVars` | env var list (see reference forms below) |
|
|
36
|
+
|
|
37
|
+
### Docker-runtime keys
|
|
38
|
+
|
|
39
|
+
| Key | Notes |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `runtime: docker` | build from a Dockerfile in the repo |
|
|
42
|
+
| `dockerfilePath` | path to the Dockerfile (e.g. `./apps/api/Dockerfile`) |
|
|
43
|
+
| `dockerContext` | build context directory |
|
|
44
|
+
| `runtime: image` | deploy a prebuilt image — `image: { url, creds }` |
|
|
45
|
+
|
|
46
|
+
### Static-site keys (`runtime: static`)
|
|
47
|
+
|
|
48
|
+
| Key | Notes |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| `staticPublishPath` | directory of built assets (e.g. `dist`, `build`, `out`) |
|
|
51
|
+
| `routes` | rewrite/redirect rules: `{ type: rewrite \| redirect, source, destination }` |
|
|
52
|
+
| `headers` | `{ path, name, value }` custom response headers |
|
|
53
|
+
|
|
54
|
+
### Cron-only keys
|
|
55
|
+
|
|
56
|
+
| Key | Notes |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `schedule` | **required** cron expression; run killed after 12h; one active run at a time |
|
|
59
|
+
|
|
60
|
+
## envVars reference forms
|
|
61
|
+
|
|
62
|
+
| Form | Resolves to |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `{ key, value }` | a literal (avoid for secrets) |
|
|
65
|
+
| `{ key, sync: false }` | typed once at setup, not stored in the repo |
|
|
66
|
+
| `{ key, generateValue: true }` | random secret Render generates and stores |
|
|
67
|
+
| `{ key, fromDatabase: { name, property } }` | `property`: `connectionString`, `host`, `port`, `user`, `password`, `database` |
|
|
68
|
+
| `{ key, fromService: { name, type, property } }` | `property`: `hostport`, `host`, `port` (and for keyvalue, `connectionString`) |
|
|
69
|
+
| `{ fromGroup: <name> }` | pull a whole env var group |
|
|
70
|
+
|
|
71
|
+
## Database keys (`databases:`)
|
|
72
|
+
|
|
73
|
+
| Key | Notes |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| `name` | unique name |
|
|
76
|
+
| `plan` | `free` (expires 30 days after creation, 14-day grace, one per workspace) \| `starter` \| `standard` \| … |
|
|
77
|
+
| `postgresMajorVersion` | e.g. `"17"` |
|
|
78
|
+
| `region` | same enum as services |
|
|
79
|
+
| `diskSizeGB` | storage size |
|
|
80
|
+
| `databaseName` / `user` | optional explicit names |
|
|
81
|
+
| `readReplicas` | `[{ name }]` read-replica list |
|
|
82
|
+
| `highAvailability` | `{ enabled: true }` (paid) |
|
|
83
|
+
| `previewPlan` | plan used for preview-env databases |
|
|
84
|
+
| `ipAllowList` | `[{ source, description }]` — `0.0.0.0/0` for public, omit for internal-only |
|
|
85
|
+
|
|
86
|
+
## Recipe 1 — Next.js web + Postgres
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
databases:
|
|
90
|
+
- name: web-db
|
|
91
|
+
plan: starter
|
|
92
|
+
postgresMajorVersion: "17"
|
|
93
|
+
|
|
94
|
+
services:
|
|
95
|
+
- type: web
|
|
96
|
+
name: nextjs-app
|
|
97
|
+
runtime: node
|
|
98
|
+
plan: starter
|
|
99
|
+
buildCommand: npm ci && npm run build
|
|
100
|
+
startCommand: npm start # next start binds 0.0.0.0:$PORT by default
|
|
101
|
+
healthCheckPath: /api/health
|
|
102
|
+
preDeployCommand: npx prisma migrate deploy
|
|
103
|
+
envVars:
|
|
104
|
+
- key: DATABASE_URL
|
|
105
|
+
fromDatabase: { name: web-db, property: connectionString }
|
|
106
|
+
- key: NEXTAUTH_SECRET
|
|
107
|
+
generateValue: true
|
|
108
|
+
- key: NODE_ENV
|
|
109
|
+
value: production
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Recipe 2 — FastAPI web + worker + cron + Key Value
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
databases:
|
|
116
|
+
- name: api-db
|
|
117
|
+
plan: starter
|
|
118
|
+
postgresMajorVersion: "17"
|
|
119
|
+
|
|
120
|
+
services:
|
|
121
|
+
- type: keyvalue
|
|
122
|
+
name: cache
|
|
123
|
+
plan: starter
|
|
124
|
+
ipAllowList: [] # internal only
|
|
125
|
+
|
|
126
|
+
- type: web
|
|
127
|
+
name: api
|
|
128
|
+
runtime: python
|
|
129
|
+
plan: starter
|
|
130
|
+
buildCommand: pip install -r requirements.txt
|
|
131
|
+
startCommand: gunicorn -k uvicorn.workers.UvicornWorker app.main:app --bind 0.0.0.0:$PORT
|
|
132
|
+
healthCheckPath: /health
|
|
133
|
+
preDeployCommand: alembic upgrade head
|
|
134
|
+
envVars:
|
|
135
|
+
- key: DATABASE_URL
|
|
136
|
+
fromDatabase: { name: api-db, property: connectionString }
|
|
137
|
+
- key: REDIS_URL
|
|
138
|
+
fromService: { name: cache, type: keyvalue, property: connectionString }
|
|
139
|
+
|
|
140
|
+
- type: worker
|
|
141
|
+
name: tasks
|
|
142
|
+
runtime: python
|
|
143
|
+
plan: starter
|
|
144
|
+
buildCommand: pip install -r requirements.txt
|
|
145
|
+
startCommand: celery -A app.worker worker -l info
|
|
146
|
+
envVars:
|
|
147
|
+
- key: DATABASE_URL
|
|
148
|
+
fromDatabase: { name: api-db, property: connectionString }
|
|
149
|
+
- key: REDIS_URL
|
|
150
|
+
fromService: { name: cache, type: keyvalue, property: connectionString }
|
|
151
|
+
|
|
152
|
+
- type: cron
|
|
153
|
+
name: send-digest
|
|
154
|
+
runtime: python
|
|
155
|
+
schedule: "*/5 * * * *" # every 5 minutes
|
|
156
|
+
buildCommand: pip install -r requirements.txt
|
|
157
|
+
startCommand: python -m app.jobs.digest
|
|
158
|
+
envVars:
|
|
159
|
+
- key: DATABASE_URL
|
|
160
|
+
fromDatabase: { name: api-db, property: connectionString }
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Recipe 3 — Docker monorepo (rootDir + dockerfilePath + buildFilter)
|
|
164
|
+
|
|
165
|
+
```yaml
|
|
166
|
+
services:
|
|
167
|
+
- type: web
|
|
168
|
+
name: api
|
|
169
|
+
runtime: docker
|
|
170
|
+
rootDir: apps/api
|
|
171
|
+
dockerfilePath: apps/api/Dockerfile
|
|
172
|
+
buildFilter:
|
|
173
|
+
paths:
|
|
174
|
+
- apps/api/**
|
|
175
|
+
- packages/shared/** # only redeploy when these change
|
|
176
|
+
plan: starter
|
|
177
|
+
healthCheckPath: /healthz
|
|
178
|
+
envVars:
|
|
179
|
+
- key: PORT
|
|
180
|
+
value: "10000" # your Dockerfile CMD must bind 0.0.0.0:$PORT
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Recipe 4 — static SPA with rewrites and headers
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
services:
|
|
187
|
+
- type: web
|
|
188
|
+
name: spa
|
|
189
|
+
runtime: static
|
|
190
|
+
buildCommand: npm ci && npm run build
|
|
191
|
+
staticPublishPath: dist
|
|
192
|
+
routes:
|
|
193
|
+
- type: rewrite
|
|
194
|
+
source: /*
|
|
195
|
+
destination: /index.html # SPA fallback so client routing works
|
|
196
|
+
headers:
|
|
197
|
+
- path: /*
|
|
198
|
+
name: X-Frame-Options
|
|
199
|
+
value: DENY
|
|
200
|
+
- path: /assets/*
|
|
201
|
+
name: Cache-Control
|
|
202
|
+
value: public, max-age=31536000, immutable
|
|
203
|
+
```
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# verify.sh — lint every render.yaml Blueprint in a target directory against the
|
|
3
|
+
# correctness rules that cause real Render deploy failures. Read-only: parses YAML,
|
|
4
|
+
# checks rules, prints findings. No network, no Render account.
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# bash scripts/verify.sh [TARGET_DIR] # default: current directory
|
|
8
|
+
#
|
|
9
|
+
# Checks per service:
|
|
10
|
+
# - has `name` and a valid `type` (web|pserv|worker|cron|keyvalue)
|
|
11
|
+
# - `runtime` present for every non-keyvalue service and is a valid enum
|
|
12
|
+
# - `schedule` present iff `type: cron`
|
|
13
|
+
# - `plan` / `region` (if set) are valid enums
|
|
14
|
+
# - WARN if a `web` service `startCommand` hardcodes a numeric port without $PORT
|
|
15
|
+
#
|
|
16
|
+
# Exit codes: 0 = clean OR no render.yaml found (never a false failure);
|
|
17
|
+
# 1 = at least one hard error. Warnings never fail the run.
|
|
18
|
+
#
|
|
19
|
+
# Portable to macOS bash 3.2 and CI bash 5. NO_COLOR=1 disables color.
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
|
|
22
|
+
TARGET="${1:-.}"
|
|
23
|
+
|
|
24
|
+
if [ -n "${NO_COLOR:-}" ] || [ ! -t 1 ]; then
|
|
25
|
+
RED=""; YEL=""; GRN=""; RST=""
|
|
26
|
+
else
|
|
27
|
+
RED=$'\033[31m'; YEL=$'\033[33m'; GRN=$'\033[32m'; RST=$'\033[0m'
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
have() { command -v "$1" >/dev/null 2>&1; }
|
|
31
|
+
|
|
32
|
+
# Discover render.yaml / render.yml files. No matches -> clean exit 0.
|
|
33
|
+
FILES=""
|
|
34
|
+
while IFS= read -r f; do
|
|
35
|
+
FILES="$FILES$f
|
|
36
|
+
"
|
|
37
|
+
done < <(find "$TARGET" -type f \( -name 'render.yaml' -o -name 'render.yml' \) 2>/dev/null)
|
|
38
|
+
|
|
39
|
+
if [ -z "${FILES%$'\n'}" ]; then
|
|
40
|
+
echo "${GRN}OK${RST} no render.yaml found under '$TARGET' — nothing to verify."
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
ERRORS=0
|
|
45
|
+
|
|
46
|
+
if have python3; then
|
|
47
|
+
while IFS= read -r FILE; do
|
|
48
|
+
[ -z "$FILE" ] && continue
|
|
49
|
+
echo "→ $FILE"
|
|
50
|
+
OUT="$(
|
|
51
|
+
RENDER_FILE="$FILE" python3 - <<'PY'
|
|
52
|
+
import os, sys
|
|
53
|
+
try:
|
|
54
|
+
import yaml
|
|
55
|
+
except Exception:
|
|
56
|
+
print("WARN\tPyYAML not installed; skipped deep checks (heuristics only)")
|
|
57
|
+
sys.exit(3)
|
|
58
|
+
|
|
59
|
+
path = os.environ["RENDER_FILE"]
|
|
60
|
+
try:
|
|
61
|
+
with open(path) as fh:
|
|
62
|
+
doc = yaml.safe_load(fh) or {}
|
|
63
|
+
except Exception as e:
|
|
64
|
+
print(f"ERROR\tYAML parse failed: {e}")
|
|
65
|
+
sys.exit(0)
|
|
66
|
+
|
|
67
|
+
VALID_TYPE = {"web", "pserv", "worker", "cron", "keyvalue"}
|
|
68
|
+
VALID_RUNTIME = {"node","python","docker","image","static","go","ruby","elixir","rust"}
|
|
69
|
+
VALID_PLAN = {"free","starter","standard","pro","pro plus","pro max","pro ultra"}
|
|
70
|
+
VALID_REGION = {"oregon","ohio","virginia","frankfurt","singapore"}
|
|
71
|
+
|
|
72
|
+
services = doc.get("services") or []
|
|
73
|
+
if not isinstance(services, list):
|
|
74
|
+
print("ERROR\t`services` must be a list")
|
|
75
|
+
services = []
|
|
76
|
+
|
|
77
|
+
for i, svc in enumerate(services):
|
|
78
|
+
if not isinstance(svc, dict):
|
|
79
|
+
print(f"ERROR\tservices[{i}] is not a mapping")
|
|
80
|
+
continue
|
|
81
|
+
label = svc.get("name") or f"services[{i}]"
|
|
82
|
+
stype = svc.get("type")
|
|
83
|
+
|
|
84
|
+
if not svc.get("name"):
|
|
85
|
+
print(f"ERROR\t{label}: missing `name`")
|
|
86
|
+
if stype not in VALID_TYPE:
|
|
87
|
+
print(f"ERROR\t{label}: invalid/missing `type` ({stype!r}); expected one of {sorted(VALID_TYPE)}")
|
|
88
|
+
|
|
89
|
+
if stype != "keyvalue":
|
|
90
|
+
rt = svc.get("runtime")
|
|
91
|
+
if not rt:
|
|
92
|
+
print(f"ERROR\t{label}: missing `runtime` (required for type {stype!r})")
|
|
93
|
+
elif rt not in VALID_RUNTIME:
|
|
94
|
+
print(f"ERROR\t{label}: invalid `runtime` ({rt!r})")
|
|
95
|
+
|
|
96
|
+
if stype == "cron" and not svc.get("schedule"):
|
|
97
|
+
print(f"ERROR\t{label}: type cron requires a `schedule:`")
|
|
98
|
+
if stype and stype != "cron" and svc.get("schedule"):
|
|
99
|
+
print(f"WARN\t{label}: `schedule:` is only used by type cron; ignored here")
|
|
100
|
+
|
|
101
|
+
plan = svc.get("plan")
|
|
102
|
+
if plan is not None and plan not in VALID_PLAN:
|
|
103
|
+
print(f"ERROR\t{label}: invalid `plan` ({plan!r})")
|
|
104
|
+
region = svc.get("region")
|
|
105
|
+
if region is not None and region not in VALID_REGION:
|
|
106
|
+
print(f"ERROR\t{label}: invalid `region` ({region!r})")
|
|
107
|
+
|
|
108
|
+
if stype == "web":
|
|
109
|
+
cmd = str(svc.get("startCommand") or "")
|
|
110
|
+
import re
|
|
111
|
+
if cmd and "$PORT" not in cmd and "${PORT}" not in cmd and re.search(r":\d{2,5}\b", cmd):
|
|
112
|
+
print(f"WARN\t{label}: web startCommand looks like it hardcodes a port without $PORT — Render may report 'no open ports detected'")
|
|
113
|
+
|
|
114
|
+
dbs = doc.get("databases") or []
|
|
115
|
+
if not isinstance(dbs, list):
|
|
116
|
+
print("ERROR\t`databases` must be a list")
|
|
117
|
+
dbs = []
|
|
118
|
+
for i, db in enumerate(dbs):
|
|
119
|
+
if isinstance(db, dict) and db.get("plan") == "free":
|
|
120
|
+
print(f"WARN\tdatabase {db.get('name', i)!r}: free Postgres is deleted 30 days after creation — use starter for production")
|
|
121
|
+
PY
|
|
122
|
+
)" || true
|
|
123
|
+
|
|
124
|
+
# Surface findings; count hard errors.
|
|
125
|
+
if [ -n "$OUT" ]; then
|
|
126
|
+
while IFS= read -r line; do
|
|
127
|
+
[ -z "$line" ] && continue
|
|
128
|
+
case "$line" in
|
|
129
|
+
ERROR*) echo " ${RED}${line}${RST}"; ERRORS=$((ERRORS + 1)) ;;
|
|
130
|
+
WARN*) echo " ${YEL}${line}${RST}" ;;
|
|
131
|
+
*) echo " $line" ;;
|
|
132
|
+
esac
|
|
133
|
+
done <<EOF
|
|
134
|
+
$OUT
|
|
135
|
+
EOF
|
|
136
|
+
else
|
|
137
|
+
echo " ${GRN}OK${RST}"
|
|
138
|
+
fi
|
|
139
|
+
done <<EOF
|
|
140
|
+
$FILES
|
|
141
|
+
EOF
|
|
142
|
+
else
|
|
143
|
+
# No python3: fall back to a shallow grep-based sanity pass (heuristic only).
|
|
144
|
+
echo "${YEL}WARN${RST} python3 not found — running shallow grep checks only."
|
|
145
|
+
while IFS= read -r FILE; do
|
|
146
|
+
[ -z "$FILE" ] && continue
|
|
147
|
+
echo "→ $FILE"
|
|
148
|
+
if grep -Eq '^\s*type:\s*cron' "$FILE" && ! grep -Eq '^\s*schedule:' "$FILE"; then
|
|
149
|
+
echo " ${RED}ERROR\ta cron service appears to be missing a schedule:${RST}"
|
|
150
|
+
ERRORS=$((ERRORS + 1))
|
|
151
|
+
fi
|
|
152
|
+
if grep -Eq 'startCommand:.*:[0-9]{2,5}\b' "$FILE" && ! grep -q '\$PORT' "$FILE"; then
|
|
153
|
+
echo " ${YEL}WARN\tstartCommand may hardcode a port without \$PORT${RST}"
|
|
154
|
+
fi
|
|
155
|
+
echo " ${GRN}OK${RST} (shallow)"
|
|
156
|
+
done <<EOF
|
|
157
|
+
$FILES
|
|
158
|
+
EOF
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
echo
|
|
162
|
+
if [ "$ERRORS" -gt 0 ]; then
|
|
163
|
+
echo "${RED}FAIL${RST} $ERRORS error(s) found."
|
|
164
|
+
exit 1
|
|
165
|
+
fi
|
|
166
|
+
echo "${GRN}PASS${RST} render.yaml checks clean."
|
|
167
|
+
exit 0
|