@1aboveio/skills 0.10.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 +3 -0
- package/README.md +90 -0
- package/bin/1aboveio-skills.mjs +18 -0
- package/package.json +28 -0
- package/runtime/skills/distribution/generated/recipes.json +1189 -0
- package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
- package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/backend/airflow-dag-develop/LICENSE +3 -0
- package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
- package/skills/backend/app-debug/LICENSE +3 -0
- package/skills/backend/app-debug/SKILL.md +109 -0
- package/skills/backend/app-debug/references/common-errors.md +128 -0
- package/skills/backend/python-backend/LICENSE +3 -0
- package/skills/backend/python-backend/SKILL.md +326 -0
- package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
- package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
- package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
- package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd-pipeline/docker/LICENSE +3 -0
- package/skills/cicd-pipeline/docker/SKILL.md +126 -0
- package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
- package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
- package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
- package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
- package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
- package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
- package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
- package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd-pipeline/mergify/LICENSE +3 -0
- package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
- package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
- package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
- package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
- package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
- package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
- package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
- package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
- package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd-pipeline/podman/LICENSE +3 -0
- package/skills/cicd-pipeline/podman/SKILL.md +70 -0
- package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +156 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
- package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
- package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
- package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
- package/skills/engineering/e2e-test/references/debugging.md +36 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
- package/skills/engineering/e2e-test/references/reviewing.md +39 -0
- package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +10 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +136 -0
- package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
- package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
- package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
- package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +18 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/implement-and-pr/LICENSE +3 -0
- package/skills/engineering/implement-and-pr/SKILL.md +176 -0
- package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
- package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
- package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
- package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
- package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
- package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
- package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +167 -0
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
- package/skills/engineering/resolve-issues/references/breaker.md +82 -0
- package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
- package/skills/engineering/resolve-issues/references/delivery.md +108 -0
- package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
- package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
- package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
- package/skills/engineering/resolve-issues/references/finalization.md +68 -0
- package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
- package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
- package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
- package/skills/engineering/resolve-issues/references/intake.md +86 -0
- package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
- package/skills/engineering/resolve-issues/references/interference.md +87 -0
- package/skills/engineering/resolve-issues/references/loop.md +134 -0
- package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
- package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
- package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
- package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
- package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
- package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
- package/skills/engineering/resolve-issues/references/run-state.md +288 -0
- package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
- package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
- package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
- package/skills/engineering/resolve-issues/references/why.md +653 -0
- package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
- package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
- package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
- package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
- package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
- package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
- package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
- package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
- package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
- package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
- package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
- package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
- package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
- package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
- package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
- package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
- package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
- package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
- package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
- package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
- package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
- package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
- package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
- package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
- package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
- package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
- package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
- package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
- package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
- package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
- package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
- package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +112 -0
- package/skills/engineering/resolve-release/references/assembly.md +137 -0
- package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
- package/skills/engineering/resolve-release/references/candidate.md +167 -0
- package/skills/engineering/resolve-release/references/exposure.md +178 -0
- package/skills/engineering/resolve-release/references/handoff.md +24 -0
- package/skills/engineering/resolve-release/references/postmortem.md +230 -0
- package/skills/engineering/resolve-release/references/preflight.md +207 -0
- package/skills/engineering/resolve-release/references/principles.md +94 -0
- package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
- package/skills/engineering/resolve-release/references/related-skills.md +12 -0
- package/skills/engineering/resolve-release/references/routing.md +149 -0
- package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
- package/skills/engineering/resolve-release/references/versioning.md +202 -0
- package/skills/engineering/resolve-release/references/why.md +53 -0
- package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
- package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
- package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
- package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
- package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
- package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
- package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
- package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
- package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
- package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
- package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
- package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
- package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
- package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
- package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
- package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
- package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
- package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
- package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
- package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
- package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
- package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
- package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
- package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
- package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
- package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
- package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
- package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
- package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
- package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
- package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/README.md +60 -0
- package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
- package/skills/engineering/review-pr/LICENSE +3 -0
- package/skills/engineering/review-pr/SKILL.md +123 -0
- package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
- package/skills/engineering/review-pr/references/code-correctness.md +5 -0
- package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
- package/skills/engineering/review-pr/references/coordination.md +18 -0
- package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
- package/skills/engineering/review-pr/references/finding-themes.md +7 -0
- package/skills/engineering/review-pr/references/github-posting.md +98 -0
- package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
- package/skills/engineering/review-pr/references/incremental-output.md +16 -0
- package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
- package/skills/engineering/review-pr/references/output-format.md +99 -0
- package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
- package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
- package/skills/engineering/review-pr/references/re-review.md +18 -0
- package/skills/engineering/review-pr/references/review-method.md +199 -0
- package/skills/engineering/review-pr/references/review-mode.md +30 -0
- package/skills/engineering/review-pr/references/review-posture.md +53 -0
- package/skills/engineering/review-pr/references/round1-depth.md +62 -0
- package/skills/engineering/review-pr/references/scripts.md +17 -0
- package/skills/engineering/review-pr/references/workflow.md +16 -0
- package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
- package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
- package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
- package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
- package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
- package/skills/engineering/smoke/LICENSE +3 -0
- package/skills/engineering/smoke/SKILL.md +131 -0
- package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
- package/skills/engineering/smoke/references/manifest.md +192 -0
- package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
- package/skills/fullstack/better-auth/LICENSE +3 -0
- package/skills/fullstack/better-auth/SKILL.md +601 -0
- package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
- package/skills/fullstack/monorepo/LICENSE +3 -0
- package/skills/fullstack/monorepo/SKILL.md +465 -0
- package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
- package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
- package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
- package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
- package/skills/fullstack/prisma-setup/LICENSE +3 -0
- package/skills/fullstack/prisma-setup/SKILL.md +180 -0
- package/skills/fullstack/prisma-setup/nextjs.md +258 -0
- package/skills/fullstack/prisma-setup/turborepo.md +301 -0
- package/skills/fullstack/shadcn/LICENSE +3 -0
- package/skills/fullstack/shadcn/SKILL.md +119 -0
- package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
- package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
- package/skills/fullstack/shadcn/cli.md +411 -0
- package/skills/fullstack/shadcn/customization.md +224 -0
- package/skills/fullstack/shadcn/evals/evals.json +90 -0
- package/skills/fullstack/shadcn/mcp.md +101 -0
- package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
- package/skills/fullstack/shadcn/rules/composition.md +195 -0
- package/skills/fullstack/shadcn/rules/data-table.md +201 -0
- package/skills/fullstack/shadcn/rules/forms.md +255 -0
- package/skills/fullstack/shadcn/rules/icons.md +103 -0
- package/skills/fullstack/shadcn/rules/styling.md +167 -0
- package/skills/fullstack/zod-v4/LICENSE +3 -0
- package/skills/fullstack/zod-v4/SKILL.md +287 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Icons
|
|
2
|
+
|
|
3
|
+
**Always use the project's configured `iconLibrary` for imports.** Check the `iconLibrary` field from project context: `lucide` → `lucide-react`, `tabler` → `@tabler/icons-react`, etc. Never assume `lucide-react`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Icons in Button use data-icon attribute
|
|
8
|
+
|
|
9
|
+
Add `data-icon="inline-start"` (prefix) or `data-icon="inline-end"` (suffix) to the icon. No sizing classes on the icon.
|
|
10
|
+
|
|
11
|
+
**Incorrect:**
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Button>
|
|
15
|
+
<SearchIcon className="mr-2 size-4" />
|
|
16
|
+
Search
|
|
17
|
+
</Button>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Correct:**
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<Button>
|
|
24
|
+
<SearchIcon data-icon="inline-start"/>
|
|
25
|
+
Search
|
|
26
|
+
</Button>
|
|
27
|
+
|
|
28
|
+
<Button>
|
|
29
|
+
Next
|
|
30
|
+
<ArrowRightIcon data-icon="inline-end"/>
|
|
31
|
+
</Button>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## No sizing classes on icons inside components
|
|
37
|
+
|
|
38
|
+
Components handle icon sizing via CSS. Don't add `size-4`, `w-4 h-4`, or other sizing classes to icons inside `Button`, `DropdownMenuItem`, `Alert`, `Sidebar*`, or other shadcn components. Unless the user explicitly asks for custom icon sizes.
|
|
39
|
+
|
|
40
|
+
**A sizing class doesn't just duplicate the default — it disables it.** The rule components ship is `[&_svg:not([class*='size-'])]:size-4`: the component sizes any descendant `svg` *that does not already carry a `size-` class*. So writing `size-4` opts that icon out of the component's sizing entirely and pins it, which is why it looks harmless at the default size and then fails to scale. `Button`'s smaller variants set `size-3` / `size-3.5` through the same selector, so a hardcoded `size-4` inside a `size="sm"` button is visibly wrong.
|
|
41
|
+
|
|
42
|
+
**Incorrect:**
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
<Button>
|
|
46
|
+
<SearchIcon className="size-4" data-icon="inline-start" />
|
|
47
|
+
Search
|
|
48
|
+
</Button>
|
|
49
|
+
|
|
50
|
+
<DropdownMenuItem>
|
|
51
|
+
<SettingsIcon className="mr-2 size-4" />
|
|
52
|
+
Settings
|
|
53
|
+
</DropdownMenuItem>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Correct:**
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<Button>
|
|
60
|
+
<SearchIcon data-icon="inline-start" />
|
|
61
|
+
Search
|
|
62
|
+
</Button>
|
|
63
|
+
|
|
64
|
+
<DropdownMenuItem>
|
|
65
|
+
<SettingsIcon />
|
|
66
|
+
Settings
|
|
67
|
+
</DropdownMenuItem>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Pass icons as component objects, not string keys
|
|
73
|
+
|
|
74
|
+
Use `icon={CheckIcon}`, not a string key to a lookup map.
|
|
75
|
+
|
|
76
|
+
**Incorrect:**
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
const iconMap = {
|
|
80
|
+
check: CheckIcon,
|
|
81
|
+
alert: AlertIcon,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function StatusBadge({ icon }: { icon: string }) {
|
|
85
|
+
const Icon = iconMap[icon]
|
|
86
|
+
return <Icon />
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
<StatusBadge icon="check" />
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Correct:**
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
// Import from the project's configured iconLibrary (e.g. lucide-react, @tabler/icons-react).
|
|
96
|
+
import { CheckIcon } from "lucide-react"
|
|
97
|
+
|
|
98
|
+
function StatusBadge({ icon: Icon }: { icon: React.ComponentType }) {
|
|
99
|
+
return <Icon />
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
<StatusBadge icon={CheckIcon} />
|
|
103
|
+
```
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Styling & Customization
|
|
2
|
+
|
|
3
|
+
See [customization.md](../customization.md) for theming, CSS variables, and adding custom colors.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- Semantic colors
|
|
8
|
+
- No raw color values for status/state indicators (and the real Badge variant list)
|
|
9
|
+
- Built-in variants first
|
|
10
|
+
- className for layout only
|
|
11
|
+
- No space-x-* / space-y-*
|
|
12
|
+
- Prefer size-* over w-* h-* when equal
|
|
13
|
+
- Prefer truncate shorthand
|
|
14
|
+
- No manual dark: color overrides
|
|
15
|
+
- Use cn() for conditional classes
|
|
16
|
+
- No manual z-index on overlay components
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Semantic colors
|
|
21
|
+
|
|
22
|
+
**Incorrect:**
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<div className="bg-blue-500 text-white">
|
|
26
|
+
<p className="text-gray-600">Secondary text</p>
|
|
27
|
+
</div>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Correct:**
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<div className="bg-primary text-primary-foreground">
|
|
34
|
+
<p className="text-muted-foreground">Secondary text</p>
|
|
35
|
+
</div>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## No raw color values for status/state indicators
|
|
41
|
+
|
|
42
|
+
For positive, negative, or status indicators, use Badge variants, semantic tokens like `text-destructive`, or define custom CSS variables — don't reach for raw Tailwind colors.
|
|
43
|
+
|
|
44
|
+
**Incorrect:**
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
<span className="text-emerald-600">+20.1%</span>
|
|
48
|
+
<span className="text-green-500">Active</span>
|
|
49
|
+
<span className="text-red-600">-3.2%</span>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Correct:**
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<Badge variant="secondary">+20.1%</Badge>
|
|
56
|
+
<Badge>Active</Badge>
|
|
57
|
+
<span className="text-destructive">-3.2%</span>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**`Badge` ships exactly five variants: `default`, `secondary`, `destructive`, `outline`, `ghost`.** There is no `success` or `warning` variant — writing `<Badge variant="success">` silently falls back to the default styling, which is why it's such an easy mistake to ship. Negative states have a real token (`destructive`); positive ones don't.
|
|
61
|
+
|
|
62
|
+
So for a success/positive color: use `variant="secondary"` if the color isn't carrying meaning on its own, or add a `--success` CSS variable to the theme and a matching variant (see [customization.md](../customization.md)) if it is. Ask the user before adding the variable — it's a theme change, not a local one.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Built-in variants first
|
|
67
|
+
|
|
68
|
+
**Incorrect:**
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
<Button className="border border-input bg-transparent hover:bg-accent">
|
|
72
|
+
Click me
|
|
73
|
+
</Button>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Correct:**
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<Button variant="outline">Click me</Button>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## className for layout only
|
|
85
|
+
|
|
86
|
+
Use `className` for layout (e.g. `max-w-md`, `mx-auto`, `mt-4`), **not** for overriding component colors or typography. To change colors, use semantic tokens, built-in variants, or CSS variables.
|
|
87
|
+
|
|
88
|
+
**Incorrect:**
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
<Card className="bg-blue-100 text-blue-900 font-bold">
|
|
92
|
+
<CardContent>Dashboard</CardContent>
|
|
93
|
+
</Card>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Correct:**
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
<Card className="max-w-md mx-auto">
|
|
100
|
+
<CardContent>Dashboard</CardContent>
|
|
101
|
+
</Card>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
To customize a component's appearance, prefer these approaches in order:
|
|
105
|
+
1. **Built-in variants** — `variant="outline"`, `variant="destructive"`, etc.
|
|
106
|
+
2. **Semantic color tokens** — `bg-primary`, `text-muted-foreground`.
|
|
107
|
+
3. **CSS variables** — define custom colors in the global CSS file (see [customization.md](../customization.md)).
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## No space-x-* / space-y-*
|
|
112
|
+
|
|
113
|
+
Use `gap-*` instead. `space-y-4` → `flex flex-col gap-4`. `space-x-2` → `flex gap-2`.
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
<div className="flex flex-col gap-4">
|
|
117
|
+
<Input />
|
|
118
|
+
<Input />
|
|
119
|
+
<Button>Submit</Button>
|
|
120
|
+
</div>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Prefer size-* over w-* h-* when equal
|
|
126
|
+
|
|
127
|
+
`size-10` not `w-10 h-10`. Applies to icons, avatars, skeletons, etc.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Prefer truncate shorthand
|
|
132
|
+
|
|
133
|
+
`truncate` not `overflow-hidden text-ellipsis whitespace-nowrap`.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## No manual dark: color overrides
|
|
138
|
+
|
|
139
|
+
Use semantic tokens — they handle light/dark via CSS variables. `bg-background text-foreground` not `bg-white dark:bg-gray-950`.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Use cn() for conditional classes
|
|
144
|
+
|
|
145
|
+
Use the `cn()` utility from the project for conditional or merged class names. Don't write manual ternaries in className strings.
|
|
146
|
+
|
|
147
|
+
**Incorrect:**
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
<div className={`flex items-center ${isActive ? "bg-primary text-primary-foreground" : "bg-muted"}`}>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Correct:**
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
import { cn } from "@/lib/utils" // the project's aliases.utils — don't assume this path
|
|
157
|
+
|
|
158
|
+
<div className={cn("flex items-center", isActive ? "bg-primary text-primary-foreground" : "bg-muted")}>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`cn()` also merges conflicting Tailwind classes rather than concatenating them, so a caller's `className` reliably wins over a component's default. Template-literal concatenation leaves both classes in the string and lets specificity decide — which is why overrides "randomly" fail without it.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## No manual z-index on overlay components
|
|
166
|
+
|
|
167
|
+
`Dialog`, `Sheet`, `Drawer`, `AlertDialog`, `DropdownMenu`, `Popover`, `Tooltip`, `HoverCard` handle their own stacking. Never add `z-50` or `z-[999]`.
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zod-v4
|
|
3
|
+
description: Zod v4 conventions and migration from v3. Read when designing or reviewing validation schemas, or migrating error handling, validators, objects, enums, records, or async patterns from Zod v3 to v4.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Zod v3 to v4 Migration
|
|
7
|
+
|
|
8
|
+
Migration rules and transformations for upgrading Zod v3 code to v4.
|
|
9
|
+
|
|
10
|
+
## Related Skills
|
|
11
|
+
|
|
12
|
+
Use these skills by name when the Zod change is part of a larger stack-specific task:
|
|
13
|
+
|
|
14
|
+
- `nextjs-fullstack` for App Router, Server Actions, and form boundaries
|
|
15
|
+
- `better-auth` for auth/session schemas and validation flow updates
|
|
16
|
+
- `prisma-setup` for schema-adjacent validation and DAL changes
|
|
17
|
+
- `python-backend` for backend request/response validation patterns
|
|
18
|
+
- `feishu-betterauth` for Feishu OAuth validation and callback payload handling
|
|
19
|
+
- `monorepo` for shared schema packages and workspace structure
|
|
20
|
+
- `code-validate` for post-change validation and checks
|
|
21
|
+
- `e2e-test` for E2E coverage when validation changes affect user flows
|
|
22
|
+
- `web-design-guidelines` for UI review after validation-driven form changes
|
|
23
|
+
- `vercel-react-best-practices` for React/Next.js performance-sensitive form patterns
|
|
24
|
+
- `app-debug` for runtime failures caused by validation or payload mismatches
|
|
25
|
+
- `airflow-dag-develop` only when Zod-related config or payload contracts affect DAG tooling
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Error Customization (Unified API)
|
|
30
|
+
|
|
31
|
+
Zod v4 consolidates error handling into a single `error` parameter.
|
|
32
|
+
|
|
33
|
+
### Remove These
|
|
34
|
+
|
|
35
|
+
- `invalid_type_error`
|
|
36
|
+
- `required_error`
|
|
37
|
+
- `description` (if used for error messages)
|
|
38
|
+
|
|
39
|
+
### Replace `message` with `error`
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// v3
|
|
43
|
+
z.string({ message: "Required" })
|
|
44
|
+
|
|
45
|
+
// v4
|
|
46
|
+
z.string({ error: "Required" })
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Replace `errorMap` with `error` callback
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// v3
|
|
53
|
+
z.string({
|
|
54
|
+
required_error: "Required",
|
|
55
|
+
invalid_type_error: "Bad type",
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
// v4
|
|
59
|
+
z.string({
|
|
60
|
+
error: (issue) => issue.input === undefined ? "Required" : "Bad type"
|
|
61
|
+
})
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The error callback can return a string or `undefined` (to fall back to next error map).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 2. String Validators (Top-Level)
|
|
69
|
+
|
|
70
|
+
Many string refinements moved to top-level `z` namespace for better tree-shaking.
|
|
71
|
+
|
|
72
|
+
| v3 | v4 |
|
|
73
|
+
|----|-----|
|
|
74
|
+
| `z.string().email()` | `z.email()` |
|
|
75
|
+
| `z.string().uuid()` | `z.uuid()` |
|
|
76
|
+
| `z.string().url()` | `z.url()` |
|
|
77
|
+
| `z.string().cuid()` | `z.cuid()` |
|
|
78
|
+
|
|
79
|
+
### IP/CIDR Changes
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
// v3
|
|
83
|
+
z.string().ip()
|
|
84
|
+
z.string().cidr()
|
|
85
|
+
|
|
86
|
+
// v4 - removed, use specific versions
|
|
87
|
+
z.ipv4()
|
|
88
|
+
z.ipv6()
|
|
89
|
+
z.union([z.ipv4(), z.ipv6()])
|
|
90
|
+
z.cidrv4()
|
|
91
|
+
z.cidrv6()
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Note:** `z.uuid()` in v4 is stricter regarding RFC 9562 variant bits.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 3. Object & Schema Definition
|
|
99
|
+
|
|
100
|
+
### Strict/Passthrough
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// v3 - chaining
|
|
104
|
+
z.object({ ... }).strict()
|
|
105
|
+
z.object({ ... }).passthrough()
|
|
106
|
+
|
|
107
|
+
// v4 - factories
|
|
108
|
+
z.strictObject({ ... })
|
|
109
|
+
z.looseObject({ ... })
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Extending Objects
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
// v3
|
|
116
|
+
Schema1.merge(Schema2)
|
|
117
|
+
|
|
118
|
+
// v4 - prefer extend or destructuring
|
|
119
|
+
Schema1.extend(Schema2.shape)
|
|
120
|
+
|
|
121
|
+
// Best practice for TypeScript performance
|
|
122
|
+
z.object({
|
|
123
|
+
...Base.shape,
|
|
124
|
+
...Additions.shape,
|
|
125
|
+
})
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Deep Partial
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// v3
|
|
132
|
+
z.deepPartial(schema)
|
|
133
|
+
|
|
134
|
+
// v4 - REMOVED
|
|
135
|
+
// Refactor or implement manual recursive partials
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Defaults Behavior Change
|
|
139
|
+
|
|
140
|
+
`.default()` now short-circuits on `undefined`. Defaults inside optional fields are applied even if parent object is parsed.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 4. Numbers & Coercion
|
|
145
|
+
|
|
146
|
+
### Integers
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
// v4: z.number().int() now only accepts SAFE integers
|
|
150
|
+
z.number().int() // Rejects numbers outside safe integer range
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Floats
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// v4: z.number().safe() no longer accepts floats
|
|
157
|
+
// Behaves like .int()
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Coercion
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
// v4: z.coerce.string() treats input as unknown, not string
|
|
164
|
+
z.coerce.string() // Input type is unknown
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 5. Enums & Records
|
|
170
|
+
|
|
171
|
+
### Native Enums
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
// v3
|
|
175
|
+
z.nativeEnum(MyEnum)
|
|
176
|
+
|
|
177
|
+
// v4 - deprecated, use z.enum() directly
|
|
178
|
+
z.enum(MyEnum) // Now supports native enum objects
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Records
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// v3 - single arg
|
|
185
|
+
z.record(ValueSchema)
|
|
186
|
+
|
|
187
|
+
// v4 - REMOVED, must specify key schema
|
|
188
|
+
z.record(z.string(), ValueSchema)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Record Exhaustiveness
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// v4: z.record(EnumSchema, ValueSchema) enforces ALL keys present
|
|
195
|
+
z.record(StatusEnum, z.number()) // All enum values required
|
|
196
|
+
|
|
197
|
+
// For optional keys, use partialRecord
|
|
198
|
+
z.partialRecord(StatusEnum, z.number())
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 6. Arrays & Tuples
|
|
204
|
+
|
|
205
|
+
### Non-empty Arrays
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// v3: infers [T, ...T[]]
|
|
209
|
+
z.array(T).nonempty()
|
|
210
|
+
|
|
211
|
+
// v4: infers T[]
|
|
212
|
+
z.array(T).nonempty()
|
|
213
|
+
|
|
214
|
+
// For tuple type, use
|
|
215
|
+
z.tuple([T], T) // [T, ...T[]]
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 7. Async & Functions
|
|
221
|
+
|
|
222
|
+
### Promises
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
// v3
|
|
226
|
+
z.promise(z.string())
|
|
227
|
+
|
|
228
|
+
// v4 - DEPRECATED
|
|
229
|
+
// Await values before parsing instead
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Functions
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
// v3
|
|
236
|
+
z.function().args(z.string()).returns(z.number())
|
|
237
|
+
|
|
238
|
+
// v4 - factory function
|
|
239
|
+
z.function({
|
|
240
|
+
input: [z.string()],
|
|
241
|
+
output: z.number(),
|
|
242
|
+
})
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 8. Error Handling Utilities
|
|
248
|
+
|
|
249
|
+
### Formatting Errors
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
// v3
|
|
253
|
+
error.format()
|
|
254
|
+
error.flatten()
|
|
255
|
+
|
|
256
|
+
// v4 - DEPRECATED, use top-level
|
|
257
|
+
z.treeifyError(error)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Pushing Issues
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// v3
|
|
264
|
+
ctx.addIssue({ ... })
|
|
265
|
+
|
|
266
|
+
// v4 - DEPRECATED, push directly
|
|
267
|
+
issues.push({ ... })
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Quick Reference
|
|
273
|
+
|
|
274
|
+
| v3 Pattern | v4 Replacement |
|
|
275
|
+
|------------|----------------|
|
|
276
|
+
| `z.string().email()` | `z.email()` |
|
|
277
|
+
| `z.string().uuid()` | `z.uuid()` |
|
|
278
|
+
| `z.string().url()` | `z.url()` |
|
|
279
|
+
| `z.string().ip()` | `z.ipv4()` / `z.ipv6()` |
|
|
280
|
+
| `z.nativeEnum()` | `z.enum()` |
|
|
281
|
+
| `z.record(Schema)` | `z.record(z.string(), Schema)` |
|
|
282
|
+
| `z.promise()` | Await before parsing |
|
|
283
|
+
| `error.format()` | `z.treeifyError(error)` |
|
|
284
|
+
| `ctx.addIssue()` | `issues.push()` |
|
|
285
|
+
| `.strict()` | `z.strictObject()` |
|
|
286
|
+
| `.passthrough()` | `z.looseObject()` |
|
|
287
|
+
| `.merge()` | `.extend()` or spread |
|