@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,2 @@
|
|
|
1
|
+
var QuickJSFFI=class{constructor(module){this.module=module;this.DEBUG=!1;this.QTS_Throw=this.module.cwrap("QTS_Throw","number",["number","number"]);this.QTS_NewError=this.module.cwrap("QTS_NewError","number",["number"]);this.QTS_RuntimeSetMemoryLimit=this.module.cwrap("QTS_RuntimeSetMemoryLimit",null,["number","number"]);this.QTS_RuntimeComputeMemoryUsage=this.module.cwrap("QTS_RuntimeComputeMemoryUsage","number",["number","number"]);this.QTS_RuntimeDumpMemoryUsage=this.module.cwrap("QTS_RuntimeDumpMemoryUsage","number",["number"]);this.QTS_RecoverableLeakCheck=this.module.cwrap("QTS_RecoverableLeakCheck","number",[]);this.QTS_BuildIsSanitizeLeak=this.module.cwrap("QTS_BuildIsSanitizeLeak","number",[]);this.QTS_RuntimeSetMaxStackSize=this.module.cwrap("QTS_RuntimeSetMaxStackSize",null,["number","number"]);this.QTS_GetUndefined=this.module.cwrap("QTS_GetUndefined","number",[]);this.QTS_GetNull=this.module.cwrap("QTS_GetNull","number",[]);this.QTS_GetFalse=this.module.cwrap("QTS_GetFalse","number",[]);this.QTS_GetTrue=this.module.cwrap("QTS_GetTrue","number",[]);this.QTS_NewHostRef=this.module.cwrap("QTS_NewHostRef","number",["number","number"]);this.QTS_GetHostRefId=this.module.cwrap("QTS_GetHostRefId","number",["number"]);this.QTS_NewRuntime=this.module.cwrap("QTS_NewRuntime","number",[]);this.QTS_FreeRuntime=this.module.cwrap("QTS_FreeRuntime",null,["number"]);this.QTS_NewContext=this.module.cwrap("QTS_NewContext","number",["number","number"]);this.QTS_FreeContext=this.module.cwrap("QTS_FreeContext",null,["number"]);this.QTS_FreeValuePointer=this.module.cwrap("QTS_FreeValuePointer",null,["number","number"]);this.QTS_FreeValuePointerRuntime=this.module.cwrap("QTS_FreeValuePointerRuntime",null,["number","number"]);this.QTS_FreeVoidPointer=this.module.cwrap("QTS_FreeVoidPointer",null,["number","number"]);this.QTS_FreeCString=this.module.cwrap("QTS_FreeCString",null,["number","number"]);this.QTS_DupValuePointer=this.module.cwrap("QTS_DupValuePointer","number",["number","number"]);this.QTS_NewObject=this.module.cwrap("QTS_NewObject","number",["number"]);this.QTS_NewObjectProto=this.module.cwrap("QTS_NewObjectProto","number",["number","number"]);this.QTS_NewArray=this.module.cwrap("QTS_NewArray","number",["number"]);this.QTS_NewArrayBuffer=this.module.cwrap("QTS_NewArrayBuffer","number",["number","number","number"]);this.QTS_NewFloat64=this.module.cwrap("QTS_NewFloat64","number",["number","number"]);this.QTS_GetFloat64=this.module.cwrap("QTS_GetFloat64","number",["number","number"]);this.QTS_NewString=this.module.cwrap("QTS_NewString","number",["number","number"]);this.QTS_GetString=this.module.cwrap("QTS_GetString","number",["number","number"]);this.QTS_GetArrayBuffer=this.module.cwrap("QTS_GetArrayBuffer","number",["number","number"]);this.QTS_GetArrayBufferLength=this.module.cwrap("QTS_GetArrayBufferLength","number",["number","number"]);this.QTS_NewSymbol=this.module.cwrap("QTS_NewSymbol","number",["number","number","number"]);this.QTS_GetSymbolDescriptionOrKey=this.module.cwrap("QTS_GetSymbolDescriptionOrKey","number",["number","number"]);this.QTS_IsGlobalSymbol=this.module.cwrap("QTS_IsGlobalSymbol","number",["number","number"]);this.QTS_IsJobPending=this.module.cwrap("QTS_IsJobPending","number",["number"]);this.QTS_ExecutePendingJob=this.module.cwrap("QTS_ExecutePendingJob","number",["number","number","number"]);this.QTS_GetProp=this.module.cwrap("QTS_GetProp","number",["number","number","number"]);this.QTS_GetPropNumber=this.module.cwrap("QTS_GetPropNumber","number",["number","number","number"]);this.QTS_SetProp=this.module.cwrap("QTS_SetProp",null,["number","number","number","number"]);this.QTS_DefineProp=this.module.cwrap("QTS_DefineProp",null,["number","number","number","number","number","number","boolean","boolean","boolean"]);this.QTS_GetOwnPropertyNames=this.module.cwrap("QTS_GetOwnPropertyNames","number",["number","number","number","number","number"]);this.QTS_Call=this.module.cwrap("QTS_Call","number",["number","number","number","number","number"]);this.QTS_ResolveException=this.module.cwrap("QTS_ResolveException","number",["number","number"]);this.QTS_Dump=this.module.cwrap("QTS_Dump","number",["number","number"]);this.QTS_Eval=this.module.cwrap("QTS_Eval","number",["number","number","number","string","number","number"]);this.QTS_GetModuleNamespace=this.module.cwrap("QTS_GetModuleNamespace","number",["number","number"]);this.QTS_Typeof=this.module.cwrap("QTS_Typeof","number",["number","number"]);this.QTS_GetLength=this.module.cwrap("QTS_GetLength","number",["number","number","number"]);this.QTS_IsEqual=this.module.cwrap("QTS_IsEqual","number",["number","number","number","number"]);this.QTS_GetGlobalObject=this.module.cwrap("QTS_GetGlobalObject","number",["number"]);this.QTS_NewPromiseCapability=this.module.cwrap("QTS_NewPromiseCapability","number",["number","number"]);this.QTS_PromiseState=this.module.cwrap("QTS_PromiseState","number",["number","number"]);this.QTS_PromiseResult=this.module.cwrap("QTS_PromiseResult","number",["number","number"]);this.QTS_TestStringArg=this.module.cwrap("QTS_TestStringArg",null,["string"]);this.QTS_GetDebugLogEnabled=this.module.cwrap("QTS_GetDebugLogEnabled","number",["number"]);this.QTS_SetDebugLogEnabled=this.module.cwrap("QTS_SetDebugLogEnabled",null,["number","number"]);this.QTS_BuildIsDebug=this.module.cwrap("QTS_BuildIsDebug","number",[]);this.QTS_BuildIsAsyncify=this.module.cwrap("QTS_BuildIsAsyncify","number",[]);this.QTS_NewFunction=this.module.cwrap("QTS_NewFunction","number",["number","string","number","boolean","number"]);this.QTS_ArgvGetJSValueConstPointer=this.module.cwrap("QTS_ArgvGetJSValueConstPointer","number",["number","number"]);this.QTS_RuntimeEnableInterruptHandler=this.module.cwrap("QTS_RuntimeEnableInterruptHandler",null,["number"]);this.QTS_RuntimeDisableInterruptHandler=this.module.cwrap("QTS_RuntimeDisableInterruptHandler",null,["number"]);this.QTS_RuntimeEnableModuleLoader=this.module.cwrap("QTS_RuntimeEnableModuleLoader",null,["number","number"]);this.QTS_RuntimeDisableModuleLoader=this.module.cwrap("QTS_RuntimeDisableModuleLoader",null,["number"]);this.QTS_bjson_encode=this.module.cwrap("QTS_bjson_encode","number",["number","number"]);this.QTS_bjson_decode=this.module.cwrap("QTS_bjson_decode","number",["number","number"])}};export{QuickJSFFI};
|
|
2
|
+
//# sourceMappingURL=ffi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ffi.ts"],"sourcesContent":["// This file generated by \"generate.ts ffi\" in the root of the repo.\nimport {\n QuickJSEmscriptenModule,\n JSRuntimePointer,\n JSContextPointer,\n JSContextPointerPointer,\n JSModuleDefPointer,\n JSValuePointer,\n JSValueConstPointer,\n JSValuePointerPointer,\n JSValuePointerPointerPointer,\n JSValueConstPointerPointer,\n QTS_C_To_HostCallbackFuncPointer,\n QTS_C_To_HostInterruptFuncPointer,\n QTS_C_To_HostLoadModuleFuncPointer,\n BorrowedHeapCharPointer,\n OwnedHeapCharPointer,\n JSBorrowedCharPointer,\n JSVoidPointer,\n UInt32Pointer,\n EvalFlags,\n IntrinsicsFlags,\n EvalDetectModule,\n GetOwnPropertyNamesFlags,\n IsEqualOp,\n HostRefId,\n JSPromiseStateEnum,\n} from \"@jitl/quickjs-ffi-types\"\n\n/**\n * Low-level FFI bindings to QuickJS's Emscripten module.\n * See instead {@link QuickJSContext}, the public Javascript interface exposed by this\n * library.\n *\n * @unstable The FFI interface is considered private and may change.\n */\nexport class QuickJSFFI {\n constructor(private module: QuickJSEmscriptenModule) {}\n /** Set at compile time. */\n readonly DEBUG = false\n\n QTS_Throw: (\n ctx: JSContextPointer,\n error: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Throw\", \"number\", [\"number\", \"number\"])\n\n QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewError\",\n \"number\",\n [\"number\"],\n )\n\n QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap(\n \"QTS_RuntimeSetMemoryLimit\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer =\n this.module.cwrap(\"QTS_RuntimeComputeMemoryUsage\", \"number\", [\"number\", \"number\"])\n\n QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap(\n \"QTS_RuntimeDumpMemoryUsage\",\n \"number\",\n [\"number\"],\n )\n\n QTS_RecoverableLeakCheck: () => number = this.module.cwrap(\n \"QTS_RecoverableLeakCheck\",\n \"number\",\n [],\n )\n\n QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap(\"QTS_BuildIsSanitizeLeak\", \"number\", [])\n\n QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void =\n this.module.cwrap(\"QTS_RuntimeSetMaxStackSize\", null, [\"number\", \"number\"])\n\n QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetUndefined\", \"number\", [])\n\n QTS_GetNull: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetNull\", \"number\", [])\n\n QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetFalse\", \"number\", [])\n\n QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetTrue\", \"number\", [])\n\n QTS_NewHostRef: (ctx: JSContextPointer, id: HostRefId) => JSValuePointer = this.module.cwrap(\n \"QTS_NewHostRef\",\n \"number\",\n [\"number\", \"number\"],\n )\n\n QTS_GetHostRefId: (value: JSValuePointer | JSValueConstPointer) => HostRefId = this.module.cwrap(\n \"QTS_GetHostRefId\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap(\"QTS_NewRuntime\", \"number\", [])\n\n QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap(\"QTS_FreeRuntime\", null, [\n \"number\",\n ])\n\n QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer =\n this.module.cwrap(\"QTS_NewContext\", \"number\", [\"number\", \"number\"])\n\n QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap(\"QTS_FreeContext\", null, [\n \"number\",\n ])\n\n QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap(\n \"QTS_FreeValuePointer\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void =\n this.module.cwrap(\"QTS_FreeValuePointerRuntime\", null, [\"number\", \"number\"])\n\n QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap(\n \"QTS_FreeVoidPointer\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap(\n \"QTS_FreeCString\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_DupValuePointer: (\n ctx: JSContextPointer,\n val: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_DupValuePointer\", \"number\", [\"number\", \"number\"])\n\n QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewObject\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewObjectProto: (\n ctx: JSContextPointer,\n proto: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewObjectProto\", \"number\", [\"number\", \"number\"])\n\n QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewArray\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewArrayBuffer: (\n ctx: JSContextPointer,\n buffer: JSVoidPointer,\n length: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewArrayBuffer\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap(\n \"QTS_NewFloat64\",\n \"number\",\n [\"number\", \"number\"],\n )\n\n QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number =\n this.module.cwrap(\"QTS_GetFloat64\", \"number\", [\"number\", \"number\"])\n\n QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer =\n this.module.cwrap(\"QTS_NewString\", \"number\", [\"number\", \"number\"])\n\n QTS_GetString: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_GetString\", \"number\", [\"number\", \"number\"])\n\n QTS_GetArrayBuffer: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => JSVoidPointer = this.module.cwrap(\"QTS_GetArrayBuffer\", \"number\", [\"number\", \"number\"])\n\n QTS_GetArrayBufferLength: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_GetArrayBufferLength\", \"number\", [\"number\", \"number\"])\n\n QTS_NewSymbol: (\n ctx: JSContextPointer,\n description: BorrowedHeapCharPointer,\n isGlobal: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewSymbol\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_GetSymbolDescriptionOrKey: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_GetSymbolDescriptionOrKey\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_IsGlobalSymbol: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_IsGlobalSymbol\", \"number\", [\"number\", \"number\"])\n\n QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap(\n \"QTS_IsJobPending\",\n \"number\",\n [\"number\"],\n )\n\n QTS_ExecutePendingJob: (\n rt: JSRuntimePointer,\n maxJobsToExecute: number,\n lastJobContext: JSContextPointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_ExecutePendingJob\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_GetProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetProp\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_GetPropNumber: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetPropNumber\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_SetProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n prop_value: JSValuePointer | JSValueConstPointer,\n ) => void = this.module.cwrap(\"QTS_SetProp\", null, [\"number\", \"number\", \"number\", \"number\"])\n\n QTS_DefineProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n prop_value: JSValuePointer | JSValueConstPointer,\n get: JSValuePointer | JSValueConstPointer,\n set: JSValuePointer | JSValueConstPointer,\n configurable: boolean,\n enumerable: boolean,\n has_value: boolean,\n ) => void = this.module.cwrap(\"QTS_DefineProp\", null, [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"boolean\",\n \"boolean\",\n \"boolean\",\n ])\n\n QTS_GetOwnPropertyNames: (\n ctx: JSContextPointer,\n out_ptrs: JSValuePointerPointerPointer,\n out_len: UInt32Pointer,\n obj: JSValuePointer | JSValueConstPointer,\n flags: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetOwnPropertyNames\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_Call: (\n ctx: JSContextPointer,\n func_obj: JSValuePointer | JSValueConstPointer,\n this_obj: JSValuePointer | JSValueConstPointer,\n argc: number,\n argv_ptrs: JSValueConstPointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Call\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer =\n this.module.cwrap(\"QTS_ResolveException\", \"number\", [\"number\", \"number\"])\n\n QTS_Dump: (\n ctx: JSContextPointer,\n obj: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_Dump\", \"number\", [\"number\", \"number\"])\n\n QTS_Eval: (\n ctx: JSContextPointer,\n js_code: BorrowedHeapCharPointer,\n js_code_length: number,\n filename: string,\n detectModule: EvalDetectModule,\n evalFlags: EvalFlags,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Eval\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"string\",\n \"number\",\n \"number\",\n ])\n\n QTS_GetModuleNamespace: (\n ctx: JSContextPointer,\n module_func_obj: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetModuleNamespace\", \"number\", [\"number\", \"number\"])\n\n QTS_Typeof: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => OwnedHeapCharPointer = this.module.cwrap(\"QTS_Typeof\", \"number\", [\"number\", \"number\"])\n\n QTS_GetLength: (\n ctx: JSContextPointer,\n out_len: UInt32Pointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_GetLength\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_IsEqual: (\n ctx: JSContextPointer,\n a: JSValuePointer | JSValueConstPointer,\n b: JSValuePointer | JSValueConstPointer,\n op: IsEqualOp,\n ) => number = this.module.cwrap(\"QTS_IsEqual\", \"number\", [\"number\", \"number\", \"number\", \"number\"])\n\n QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_GetGlobalObject\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewPromiseCapability: (\n ctx: JSContextPointer,\n resolve_funcs_out: JSValuePointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewPromiseCapability\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_PromiseState: (\n ctx: JSContextPointer,\n promise: JSValuePointer | JSValueConstPointer,\n ) => JSPromiseStateEnum = this.module.cwrap(\"QTS_PromiseState\", \"number\", [\"number\", \"number\"])\n\n QTS_PromiseResult: (\n ctx: JSContextPointer,\n promise: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_PromiseResult\", \"number\", [\"number\", \"number\"])\n\n QTS_TestStringArg: (string: string) => void = this.module.cwrap(\"QTS_TestStringArg\", null, [\n \"string\",\n ])\n\n QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap(\n \"QTS_GetDebugLogEnabled\",\n \"number\",\n [\"number\"],\n )\n\n QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap(\n \"QTS_SetDebugLogEnabled\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_BuildIsDebug: () => number = this.module.cwrap(\"QTS_BuildIsDebug\", \"number\", [])\n\n QTS_BuildIsAsyncify: () => number = this.module.cwrap(\"QTS_BuildIsAsyncify\", \"number\", [])\n\n QTS_NewFunction: (\n ctx: JSContextPointer,\n name: string,\n arg_length: number,\n is_constructor: boolean,\n host_ref_id: HostRefId,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewFunction\", \"number\", [\n \"number\",\n \"string\",\n \"number\",\n \"boolean\",\n \"number\",\n ])\n\n QTS_ArgvGetJSValueConstPointer: (\n argv: JSValuePointer | JSValueConstPointer,\n index: number,\n ) => JSValueConstPointer = this.module.cwrap(\"QTS_ArgvGetJSValueConstPointer\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeEnableInterruptHandler\",\n null,\n [\"number\"],\n )\n\n QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeDisableInterruptHandler\",\n null,\n [\"number\"],\n )\n\n QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void =\n this.module.cwrap(\"QTS_RuntimeEnableModuleLoader\", null, [\"number\", \"number\"])\n\n QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeDisableModuleLoader\",\n null,\n [\"number\"],\n )\n\n QTS_bjson_encode: (\n ctx: JSContextPointer,\n val: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_bjson_encode\", \"number\", [\"number\", \"number\"])\n\n QTS_bjson_decode: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_bjson_decode\", \"number\", [\"number\", \"number\"])\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { QuickJSSyncVariant } from '@jitl/quickjs-ffi-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ### @jitl/quickjs-wasmfile-release-sync
|
|
5
|
+
*
|
|
6
|
+
* [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) |
|
|
7
|
+
* Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.
|
|
8
|
+
*
|
|
9
|
+
* | Variable | Setting | Description |
|
|
10
|
+
* | -- | -- | -- |
|
|
11
|
+
* | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. |
|
|
12
|
+
* | releaseMode | release | Optimized for performance; use when building/deploying your application. |
|
|
13
|
+
* | syncMode | sync | The default, normal build. Note that both variants support regular async functions. |
|
|
14
|
+
* | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. |
|
|
15
|
+
* | exports | require import browser workerd | Has these package.json export conditions |
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
declare const variant: QuickJSSyncVariant;
|
|
19
|
+
|
|
20
|
+
export { variant as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { QuickJSSyncVariant } from '@jitl/quickjs-ffi-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ### @jitl/quickjs-wasmfile-release-sync
|
|
5
|
+
*
|
|
6
|
+
* [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) |
|
|
7
|
+
* Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.
|
|
8
|
+
*
|
|
9
|
+
* | Variable | Setting | Description |
|
|
10
|
+
* | -- | -- | -- |
|
|
11
|
+
* | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. |
|
|
12
|
+
* | releaseMode | release | Optimized for performance; use when building/deploying your application. |
|
|
13
|
+
* | syncMode | sync | The default, normal build. Note that both variants support regular async functions. |
|
|
14
|
+
* | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. |
|
|
15
|
+
* | exports | require import browser workerd | Has these package.json export conditions |
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
declare const variant: QuickJSSyncVariant;
|
|
19
|
+
|
|
20
|
+
export { variant as default };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __esm=(fn,res)=>function(){return fn&&(res=(0,fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var ffi_exports={};__export(ffi_exports,{QuickJSFFI:()=>QuickJSFFI});var QuickJSFFI,init_ffi=__esm({"src/ffi.ts"(){"use strict";QuickJSFFI=class{constructor(module2){this.module=module2;this.DEBUG=!1;this.QTS_Throw=this.module.cwrap("QTS_Throw","number",["number","number"]);this.QTS_NewError=this.module.cwrap("QTS_NewError","number",["number"]);this.QTS_RuntimeSetMemoryLimit=this.module.cwrap("QTS_RuntimeSetMemoryLimit",null,["number","number"]);this.QTS_RuntimeComputeMemoryUsage=this.module.cwrap("QTS_RuntimeComputeMemoryUsage","number",["number","number"]);this.QTS_RuntimeDumpMemoryUsage=this.module.cwrap("QTS_RuntimeDumpMemoryUsage","number",["number"]);this.QTS_RecoverableLeakCheck=this.module.cwrap("QTS_RecoverableLeakCheck","number",[]);this.QTS_BuildIsSanitizeLeak=this.module.cwrap("QTS_BuildIsSanitizeLeak","number",[]);this.QTS_RuntimeSetMaxStackSize=this.module.cwrap("QTS_RuntimeSetMaxStackSize",null,["number","number"]);this.QTS_GetUndefined=this.module.cwrap("QTS_GetUndefined","number",[]);this.QTS_GetNull=this.module.cwrap("QTS_GetNull","number",[]);this.QTS_GetFalse=this.module.cwrap("QTS_GetFalse","number",[]);this.QTS_GetTrue=this.module.cwrap("QTS_GetTrue","number",[]);this.QTS_NewHostRef=this.module.cwrap("QTS_NewHostRef","number",["number","number"]);this.QTS_GetHostRefId=this.module.cwrap("QTS_GetHostRefId","number",["number"]);this.QTS_NewRuntime=this.module.cwrap("QTS_NewRuntime","number",[]);this.QTS_FreeRuntime=this.module.cwrap("QTS_FreeRuntime",null,["number"]);this.QTS_NewContext=this.module.cwrap("QTS_NewContext","number",["number","number"]);this.QTS_FreeContext=this.module.cwrap("QTS_FreeContext",null,["number"]);this.QTS_FreeValuePointer=this.module.cwrap("QTS_FreeValuePointer",null,["number","number"]);this.QTS_FreeValuePointerRuntime=this.module.cwrap("QTS_FreeValuePointerRuntime",null,["number","number"]);this.QTS_FreeVoidPointer=this.module.cwrap("QTS_FreeVoidPointer",null,["number","number"]);this.QTS_FreeCString=this.module.cwrap("QTS_FreeCString",null,["number","number"]);this.QTS_DupValuePointer=this.module.cwrap("QTS_DupValuePointer","number",["number","number"]);this.QTS_NewObject=this.module.cwrap("QTS_NewObject","number",["number"]);this.QTS_NewObjectProto=this.module.cwrap("QTS_NewObjectProto","number",["number","number"]);this.QTS_NewArray=this.module.cwrap("QTS_NewArray","number",["number"]);this.QTS_NewArrayBuffer=this.module.cwrap("QTS_NewArrayBuffer","number",["number","number","number"]);this.QTS_NewFloat64=this.module.cwrap("QTS_NewFloat64","number",["number","number"]);this.QTS_GetFloat64=this.module.cwrap("QTS_GetFloat64","number",["number","number"]);this.QTS_NewString=this.module.cwrap("QTS_NewString","number",["number","number"]);this.QTS_GetString=this.module.cwrap("QTS_GetString","number",["number","number"]);this.QTS_GetArrayBuffer=this.module.cwrap("QTS_GetArrayBuffer","number",["number","number"]);this.QTS_GetArrayBufferLength=this.module.cwrap("QTS_GetArrayBufferLength","number",["number","number"]);this.QTS_NewSymbol=this.module.cwrap("QTS_NewSymbol","number",["number","number","number"]);this.QTS_GetSymbolDescriptionOrKey=this.module.cwrap("QTS_GetSymbolDescriptionOrKey","number",["number","number"]);this.QTS_IsGlobalSymbol=this.module.cwrap("QTS_IsGlobalSymbol","number",["number","number"]);this.QTS_IsJobPending=this.module.cwrap("QTS_IsJobPending","number",["number"]);this.QTS_ExecutePendingJob=this.module.cwrap("QTS_ExecutePendingJob","number",["number","number","number"]);this.QTS_GetProp=this.module.cwrap("QTS_GetProp","number",["number","number","number"]);this.QTS_GetPropNumber=this.module.cwrap("QTS_GetPropNumber","number",["number","number","number"]);this.QTS_SetProp=this.module.cwrap("QTS_SetProp",null,["number","number","number","number"]);this.QTS_DefineProp=this.module.cwrap("QTS_DefineProp",null,["number","number","number","number","number","number","boolean","boolean","boolean"]);this.QTS_GetOwnPropertyNames=this.module.cwrap("QTS_GetOwnPropertyNames","number",["number","number","number","number","number"]);this.QTS_Call=this.module.cwrap("QTS_Call","number",["number","number","number","number","number"]);this.QTS_ResolveException=this.module.cwrap("QTS_ResolveException","number",["number","number"]);this.QTS_Dump=this.module.cwrap("QTS_Dump","number",["number","number"]);this.QTS_Eval=this.module.cwrap("QTS_Eval","number",["number","number","number","string","number","number"]);this.QTS_GetModuleNamespace=this.module.cwrap("QTS_GetModuleNamespace","number",["number","number"]);this.QTS_Typeof=this.module.cwrap("QTS_Typeof","number",["number","number"]);this.QTS_GetLength=this.module.cwrap("QTS_GetLength","number",["number","number","number"]);this.QTS_IsEqual=this.module.cwrap("QTS_IsEqual","number",["number","number","number","number"]);this.QTS_GetGlobalObject=this.module.cwrap("QTS_GetGlobalObject","number",["number"]);this.QTS_NewPromiseCapability=this.module.cwrap("QTS_NewPromiseCapability","number",["number","number"]);this.QTS_PromiseState=this.module.cwrap("QTS_PromiseState","number",["number","number"]);this.QTS_PromiseResult=this.module.cwrap("QTS_PromiseResult","number",["number","number"]);this.QTS_TestStringArg=this.module.cwrap("QTS_TestStringArg",null,["string"]);this.QTS_GetDebugLogEnabled=this.module.cwrap("QTS_GetDebugLogEnabled","number",["number"]);this.QTS_SetDebugLogEnabled=this.module.cwrap("QTS_SetDebugLogEnabled",null,["number","number"]);this.QTS_BuildIsDebug=this.module.cwrap("QTS_BuildIsDebug","number",[]);this.QTS_BuildIsAsyncify=this.module.cwrap("QTS_BuildIsAsyncify","number",[]);this.QTS_NewFunction=this.module.cwrap("QTS_NewFunction","number",["number","string","number","boolean","number"]);this.QTS_ArgvGetJSValueConstPointer=this.module.cwrap("QTS_ArgvGetJSValueConstPointer","number",["number","number"]);this.QTS_RuntimeEnableInterruptHandler=this.module.cwrap("QTS_RuntimeEnableInterruptHandler",null,["number"]);this.QTS_RuntimeDisableInterruptHandler=this.module.cwrap("QTS_RuntimeDisableInterruptHandler",null,["number"]);this.QTS_RuntimeEnableModuleLoader=this.module.cwrap("QTS_RuntimeEnableModuleLoader",null,["number","number"]);this.QTS_RuntimeDisableModuleLoader=this.module.cwrap("QTS_RuntimeDisableModuleLoader",null,["number"]);this.QTS_bjson_encode=this.module.cwrap("QTS_bjson_encode","number",["number","number"]);this.QTS_bjson_decode=this.module.cwrap("QTS_bjson_decode","number",["number","number"])}}}});var src_exports={};__export(src_exports,{default:()=>src_default});module.exports=__toCommonJS(src_exports);var variant={type:"sync",importFFI:()=>Promise.resolve().then(()=>(init_ffi(),ffi_exports)).then(mod=>mod.QuickJSFFI),importModuleLoader:()=>import("@jitl/quickjs-wasmfile-release-sync/emscripten-module").then(mod=>mod.default)},src_default=variant;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ffi.ts","../src/index.ts"],"sourcesContent":["// This file generated by \"generate.ts ffi\" in the root of the repo.\nimport {\n QuickJSEmscriptenModule,\n JSRuntimePointer,\n JSContextPointer,\n JSContextPointerPointer,\n JSModuleDefPointer,\n JSValuePointer,\n JSValueConstPointer,\n JSValuePointerPointer,\n JSValuePointerPointerPointer,\n JSValueConstPointerPointer,\n QTS_C_To_HostCallbackFuncPointer,\n QTS_C_To_HostInterruptFuncPointer,\n QTS_C_To_HostLoadModuleFuncPointer,\n BorrowedHeapCharPointer,\n OwnedHeapCharPointer,\n JSBorrowedCharPointer,\n JSVoidPointer,\n UInt32Pointer,\n EvalFlags,\n IntrinsicsFlags,\n EvalDetectModule,\n GetOwnPropertyNamesFlags,\n IsEqualOp,\n HostRefId,\n JSPromiseStateEnum,\n} from \"@jitl/quickjs-ffi-types\"\n\n/**\n * Low-level FFI bindings to QuickJS's Emscripten module.\n * See instead {@link QuickJSContext}, the public Javascript interface exposed by this\n * library.\n *\n * @unstable The FFI interface is considered private and may change.\n */\nexport class QuickJSFFI {\n constructor(private module: QuickJSEmscriptenModule) {}\n /** Set at compile time. */\n readonly DEBUG = false\n\n QTS_Throw: (\n ctx: JSContextPointer,\n error: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Throw\", \"number\", [\"number\", \"number\"])\n\n QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewError\",\n \"number\",\n [\"number\"],\n )\n\n QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap(\n \"QTS_RuntimeSetMemoryLimit\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer =\n this.module.cwrap(\"QTS_RuntimeComputeMemoryUsage\", \"number\", [\"number\", \"number\"])\n\n QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap(\n \"QTS_RuntimeDumpMemoryUsage\",\n \"number\",\n [\"number\"],\n )\n\n QTS_RecoverableLeakCheck: () => number = this.module.cwrap(\n \"QTS_RecoverableLeakCheck\",\n \"number\",\n [],\n )\n\n QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap(\"QTS_BuildIsSanitizeLeak\", \"number\", [])\n\n QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void =\n this.module.cwrap(\"QTS_RuntimeSetMaxStackSize\", null, [\"number\", \"number\"])\n\n QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetUndefined\", \"number\", [])\n\n QTS_GetNull: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetNull\", \"number\", [])\n\n QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetFalse\", \"number\", [])\n\n QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap(\"QTS_GetTrue\", \"number\", [])\n\n QTS_NewHostRef: (ctx: JSContextPointer, id: HostRefId) => JSValuePointer = this.module.cwrap(\n \"QTS_NewHostRef\",\n \"number\",\n [\"number\", \"number\"],\n )\n\n QTS_GetHostRefId: (value: JSValuePointer | JSValueConstPointer) => HostRefId = this.module.cwrap(\n \"QTS_GetHostRefId\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap(\"QTS_NewRuntime\", \"number\", [])\n\n QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap(\"QTS_FreeRuntime\", null, [\n \"number\",\n ])\n\n QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer =\n this.module.cwrap(\"QTS_NewContext\", \"number\", [\"number\", \"number\"])\n\n QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap(\"QTS_FreeContext\", null, [\n \"number\",\n ])\n\n QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap(\n \"QTS_FreeValuePointer\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void =\n this.module.cwrap(\"QTS_FreeValuePointerRuntime\", null, [\"number\", \"number\"])\n\n QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap(\n \"QTS_FreeVoidPointer\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap(\n \"QTS_FreeCString\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_DupValuePointer: (\n ctx: JSContextPointer,\n val: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_DupValuePointer\", \"number\", [\"number\", \"number\"])\n\n QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewObject\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewObjectProto: (\n ctx: JSContextPointer,\n proto: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewObjectProto\", \"number\", [\"number\", \"number\"])\n\n QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_NewArray\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewArrayBuffer: (\n ctx: JSContextPointer,\n buffer: JSVoidPointer,\n length: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewArrayBuffer\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap(\n \"QTS_NewFloat64\",\n \"number\",\n [\"number\", \"number\"],\n )\n\n QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number =\n this.module.cwrap(\"QTS_GetFloat64\", \"number\", [\"number\", \"number\"])\n\n QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer =\n this.module.cwrap(\"QTS_NewString\", \"number\", [\"number\", \"number\"])\n\n QTS_GetString: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_GetString\", \"number\", [\"number\", \"number\"])\n\n QTS_GetArrayBuffer: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => JSVoidPointer = this.module.cwrap(\"QTS_GetArrayBuffer\", \"number\", [\"number\", \"number\"])\n\n QTS_GetArrayBufferLength: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_GetArrayBufferLength\", \"number\", [\"number\", \"number\"])\n\n QTS_NewSymbol: (\n ctx: JSContextPointer,\n description: BorrowedHeapCharPointer,\n isGlobal: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewSymbol\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_GetSymbolDescriptionOrKey: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_GetSymbolDescriptionOrKey\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_IsGlobalSymbol: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_IsGlobalSymbol\", \"number\", [\"number\", \"number\"])\n\n QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap(\n \"QTS_IsJobPending\",\n \"number\",\n [\"number\"],\n )\n\n QTS_ExecutePendingJob: (\n rt: JSRuntimePointer,\n maxJobsToExecute: number,\n lastJobContext: JSContextPointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_ExecutePendingJob\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_GetProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetProp\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_GetPropNumber: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetPropNumber\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_SetProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n prop_value: JSValuePointer | JSValueConstPointer,\n ) => void = this.module.cwrap(\"QTS_SetProp\", null, [\"number\", \"number\", \"number\", \"number\"])\n\n QTS_DefineProp: (\n ctx: JSContextPointer,\n this_val: JSValuePointer | JSValueConstPointer,\n prop_name: JSValuePointer | JSValueConstPointer,\n prop_value: JSValuePointer | JSValueConstPointer,\n get: JSValuePointer | JSValueConstPointer,\n set: JSValuePointer | JSValueConstPointer,\n configurable: boolean,\n enumerable: boolean,\n has_value: boolean,\n ) => void = this.module.cwrap(\"QTS_DefineProp\", null, [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"boolean\",\n \"boolean\",\n \"boolean\",\n ])\n\n QTS_GetOwnPropertyNames: (\n ctx: JSContextPointer,\n out_ptrs: JSValuePointerPointerPointer,\n out_len: UInt32Pointer,\n obj: JSValuePointer | JSValueConstPointer,\n flags: number,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetOwnPropertyNames\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_Call: (\n ctx: JSContextPointer,\n func_obj: JSValuePointer | JSValueConstPointer,\n this_obj: JSValuePointer | JSValueConstPointer,\n argc: number,\n argv_ptrs: JSValueConstPointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Call\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n \"number\",\n ])\n\n QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer =\n this.module.cwrap(\"QTS_ResolveException\", \"number\", [\"number\", \"number\"])\n\n QTS_Dump: (\n ctx: JSContextPointer,\n obj: JSValuePointer | JSValueConstPointer,\n ) => JSBorrowedCharPointer = this.module.cwrap(\"QTS_Dump\", \"number\", [\"number\", \"number\"])\n\n QTS_Eval: (\n ctx: JSContextPointer,\n js_code: BorrowedHeapCharPointer,\n js_code_length: number,\n filename: string,\n detectModule: EvalDetectModule,\n evalFlags: EvalFlags,\n ) => JSValuePointer = this.module.cwrap(\"QTS_Eval\", \"number\", [\n \"number\",\n \"number\",\n \"number\",\n \"string\",\n \"number\",\n \"number\",\n ])\n\n QTS_GetModuleNamespace: (\n ctx: JSContextPointer,\n module_func_obj: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_GetModuleNamespace\", \"number\", [\"number\", \"number\"])\n\n QTS_Typeof: (\n ctx: JSContextPointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => OwnedHeapCharPointer = this.module.cwrap(\"QTS_Typeof\", \"number\", [\"number\", \"number\"])\n\n QTS_GetLength: (\n ctx: JSContextPointer,\n out_len: UInt32Pointer,\n value: JSValuePointer | JSValueConstPointer,\n ) => number = this.module.cwrap(\"QTS_GetLength\", \"number\", [\"number\", \"number\", \"number\"])\n\n QTS_IsEqual: (\n ctx: JSContextPointer,\n a: JSValuePointer | JSValueConstPointer,\n b: JSValuePointer | JSValueConstPointer,\n op: IsEqualOp,\n ) => number = this.module.cwrap(\"QTS_IsEqual\", \"number\", [\"number\", \"number\", \"number\", \"number\"])\n\n QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap(\n \"QTS_GetGlobalObject\",\n \"number\",\n [\"number\"],\n )\n\n QTS_NewPromiseCapability: (\n ctx: JSContextPointer,\n resolve_funcs_out: JSValuePointerPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewPromiseCapability\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_PromiseState: (\n ctx: JSContextPointer,\n promise: JSValuePointer | JSValueConstPointer,\n ) => JSPromiseStateEnum = this.module.cwrap(\"QTS_PromiseState\", \"number\", [\"number\", \"number\"])\n\n QTS_PromiseResult: (\n ctx: JSContextPointer,\n promise: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_PromiseResult\", \"number\", [\"number\", \"number\"])\n\n QTS_TestStringArg: (string: string) => void = this.module.cwrap(\"QTS_TestStringArg\", null, [\n \"string\",\n ])\n\n QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap(\n \"QTS_GetDebugLogEnabled\",\n \"number\",\n [\"number\"],\n )\n\n QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap(\n \"QTS_SetDebugLogEnabled\",\n null,\n [\"number\", \"number\"],\n )\n\n QTS_BuildIsDebug: () => number = this.module.cwrap(\"QTS_BuildIsDebug\", \"number\", [])\n\n QTS_BuildIsAsyncify: () => number = this.module.cwrap(\"QTS_BuildIsAsyncify\", \"number\", [])\n\n QTS_NewFunction: (\n ctx: JSContextPointer,\n name: string,\n arg_length: number,\n is_constructor: boolean,\n host_ref_id: HostRefId,\n ) => JSValuePointer = this.module.cwrap(\"QTS_NewFunction\", \"number\", [\n \"number\",\n \"string\",\n \"number\",\n \"boolean\",\n \"number\",\n ])\n\n QTS_ArgvGetJSValueConstPointer: (\n argv: JSValuePointer | JSValueConstPointer,\n index: number,\n ) => JSValueConstPointer = this.module.cwrap(\"QTS_ArgvGetJSValueConstPointer\", \"number\", [\n \"number\",\n \"number\",\n ])\n\n QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeEnableInterruptHandler\",\n null,\n [\"number\"],\n )\n\n QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeDisableInterruptHandler\",\n null,\n [\"number\"],\n )\n\n QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void =\n this.module.cwrap(\"QTS_RuntimeEnableModuleLoader\", null, [\"number\", \"number\"])\n\n QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap(\n \"QTS_RuntimeDisableModuleLoader\",\n null,\n [\"number\"],\n )\n\n QTS_bjson_encode: (\n ctx: JSContextPointer,\n val: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_bjson_encode\", \"number\", [\"number\", \"number\"])\n\n QTS_bjson_decode: (\n ctx: JSContextPointer,\n data: JSValuePointer | JSValueConstPointer,\n ) => JSValuePointer = this.module.cwrap(\"QTS_bjson_decode\", \"number\", [\"number\", \"number\"])\n}\n","import type { QuickJSSyncVariant } from \"@jitl/quickjs-ffi-types\"\n\n/**\n * ### @jitl/quickjs-wasmfile-release-sync\n *\n * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) |\n * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.\n *\n * | Variable | Setting | Description |\n * | -- | -- | -- |\n * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. |\n * | releaseMode | release | Optimized for performance; use when building/deploying your application. |\n * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. |\n * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. |\n * | exports | require import browser workerd | Has these package.json export conditions |\n *\n */\nconst variant: QuickJSSyncVariant = {\n type: \"sync\",\n importFFI: () => import(\"./ffi.js\").then((mod) => mod.QuickJSFFI),\n importModuleLoader: () =>\n import(\"@jitl/quickjs-wasmfile-release-sync/emscripten-module\").then((mod) => mod.default),\n} as const\n\nexport default variant\n"],"mappings":"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","names":["module"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { QuickJSSyncVariant } from \"@jitl/quickjs-ffi-types\"\n\n/**\n * ### @jitl/quickjs-wasmfile-release-sync\n *\n * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) |\n * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.\n *\n * | Variable | Setting | Description |\n * | -- | -- | -- |\n * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. |\n * | releaseMode | release | Optimized for performance; use when building/deploying your application. |\n * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. |\n * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. |\n * | exports | require import browser workerd | Has these package.json export conditions |\n *\n */\nconst variant: QuickJSSyncVariant = {\n type: \"sync\",\n importFFI: () => import(\"./ffi.js\").then((mod) => mod.QuickJSFFI),\n importModuleLoader: () =>\n import(\"@jitl/quickjs-wasmfile-release-sync/emscripten-module\").then((mod) => mod.default),\n} as const\n\nexport default variant\n"],"mappings":"AAiBA,IAAM,QAA8B,CAClC,KAAM,OACN,UAAW,IAAM,OAAO,WAAU,EAAE,KAAM,KAAQ,IAAI,UAAU,EAChE,mBAAoB,IAClB,OAAO,uDAAuD,EAAE,KAAM,KAAQ,IAAI,OAAO,CAC7F,EAEO,YAAQ","names":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jitl/quickjs-wasmfile-release-sync",
|
|
3
|
+
"license": "MIT",
|
|
4
|
+
"version": "0.32.0",
|
|
5
|
+
"description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/justjake/quickjs-emscripten"
|
|
10
|
+
},
|
|
11
|
+
"author": {
|
|
12
|
+
"name": "Jake Teton-Landis",
|
|
13
|
+
"url": "https://jake.tl"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "yarn build:c && yarn build:ts",
|
|
17
|
+
"build:c": "make",
|
|
18
|
+
"build:ts": "npx tsup",
|
|
19
|
+
"check:types": "npx tsc --project . --noEmit",
|
|
20
|
+
"clean": "make clean",
|
|
21
|
+
"prepare": "yarn clean && yarn build"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"README.md",
|
|
26
|
+
"dist/**/*",
|
|
27
|
+
"!dist/*.tsbuildinfo"
|
|
28
|
+
],
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"module": "./dist/index.mjs",
|
|
32
|
+
"browser": "./dist/index.mjs",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.mjs",
|
|
37
|
+
"require": "./dist/index.js",
|
|
38
|
+
"default": "./dist/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json",
|
|
41
|
+
"./ffi": {
|
|
42
|
+
"types": "./dist/ffi.d.ts",
|
|
43
|
+
"import": "./dist/ffi.mjs",
|
|
44
|
+
"require": "./dist/ffi.js",
|
|
45
|
+
"default": "./dist/ffi.js"
|
|
46
|
+
},
|
|
47
|
+
"./wasm": "./dist/emscripten-module.wasm",
|
|
48
|
+
"./emscripten-module": {
|
|
49
|
+
"types": "./dist/emscripten-module.browser.d.ts",
|
|
50
|
+
"iife": "./dist/emscripten-module.cjs",
|
|
51
|
+
"workerd": "./dist/emscripten-module.cloudflare.cjs",
|
|
52
|
+
"browser": "./dist/emscripten-module.browser.mjs",
|
|
53
|
+
"import": "./dist/emscripten-module.mjs",
|
|
54
|
+
"require": "./dist/emscripten-module.cjs",
|
|
55
|
+
"default": "./dist/emscripten-module.cjs"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@jitl/quickjs-ffi-types": "0.32.0"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-pr
|
|
3
|
+
description: "Adversarially review a pull request before merge — verify claimed coverage and behavior against the code, optionally post to GitHub; ends in PASS / NEEDS_CHANGES / FAIL / BLOCKED with inline findings. Two modes: with a spec (Review Contract, ACs, PRD, test criteria) it also verifies spec compliance against every acceptance criterion; with no spec it reviews the code, its tests, and any coverage baseline the repo wires, and never blocks on the missing paperwork. Not code-review (working-tree diff), review (standards/spec summary), or ensure-coverage (coverage doctrine)."
|
|
4
|
+
dependencies:
|
|
5
|
+
- ensure-coverage
|
|
6
|
+
- e2e-test
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Review PR
|
|
10
|
+
|
|
11
|
+
Review an implementation PR adversarially against its Review Contract or linked
|
|
12
|
+
source/test artifacts when present. The contract is a claims ledger; verify its claims
|
|
13
|
+
against the source spec, test criteria, tests, evidence, and actual diff instead of
|
|
14
|
+
trusting it.
|
|
15
|
+
|
|
16
|
+
**This file is an index.** The method lives in `references/`, one file per lane, because
|
|
17
|
+
agents read skills partially — with an explicit `limit`, or by skimming until the content
|
|
18
|
+
looks familiar — and anything below that cutoff is not deprioritized, it is *absent*. What
|
|
19
|
+
stays here is what a reviewer who reads nothing else must still get right: the routing, the
|
|
20
|
+
four non-negotiable principles, and the verdict bar. This file was 40KB with its routing
|
|
21
|
+
table in the last 12% of the page; that is the shape this one replaces.
|
|
22
|
+
|
|
23
|
+
So: **find your task below, then read that row's target.**
|
|
24
|
+
|
|
25
|
+
## Routing
|
|
26
|
+
|
|
27
|
+
| Your task | Read |
|
|
28
|
+
|---|---|
|
|
29
|
+
| **Run a review end to end** — the eight steps, in order | [`references/workflow.md`](references/workflow.md) |
|
|
30
|
+
| Decide what is in scope — Spec'd vs Code-only, contract freshness | [`references/review-mode.md`](references/review-mode.md) |
|
|
31
|
+
| The adversarial stance, the subject, and the four axes | [`references/review-posture.md`](references/review-posture.md) |
|
|
32
|
+
| Round-1 depth obligations — the sweeps, and when they fire on a later round | [`references/round1-depth.md`](references/round1-depth.md) |
|
|
33
|
+
| What a review needs up front; finding a spec before declaring it missing | [`references/inputs-and-discovery.md`](references/inputs-and-discovery.md) |
|
|
34
|
+
| The review method in full — diff discipline, axes, adversarial technique, calibration | [`references/review-method.md`](references/review-method.md) |
|
|
35
|
+
| Hunt a high-risk diff (auth/money/tenancy/migration) | [`references/domain-hazards.md`](references/domain-hazards.md) |
|
|
36
|
+
| Reconcile prior findings on a re-review | [§ Re-review](#re-review-reconciling-previous-findings) + [`references/re-review.md`](references/re-review.md) |
|
|
37
|
+
| The review report structure | [`references/output-format.md`](references/output-format.md) |
|
|
38
|
+
| Post the review to GitHub | [`references/github-posting.md`](references/github-posting.md) |
|
|
39
|
+
| Script mechanics — what each one guarantees | [`references/scripts.md`](references/scripts.md) |
|
|
40
|
+
| Why part of `ensure-coverage`'s bar is restated here | [`references/coordination.md`](references/coordination.md) |
|
|
41
|
+
| The adversarial reviewer subagent prompt | [`references/adversarial-reviewer-prompt.md`](references/adversarial-reviewer-prompt.md) |
|
|
42
|
+
| The Review Contract schema | `ensure-coverage` → `references/process/review-contract-template.md` |
|
|
43
|
+
| The findings JSON schema (what `post-review` validates/posts) | [`schemas/findings.schema.json`](schemas/findings.schema.json) |
|
|
44
|
+
|
|
45
|
+
## Related Skills
|
|
46
|
+
|
|
47
|
+
This is the *verify* step in the PR chain; it consumes the skills below rather than restating their doctrine:
|
|
48
|
+
|
|
49
|
+
- `ensure-coverage` — coverage doctrine, depth classifications, the Review Contract template, and the `scripts/coverage-ledger.mjs` gate. Single source of truth.
|
|
50
|
+
- `implement-and-pr` — the **upstream** produce step that opens the PR and Review Contract this skill reviews.
|
|
51
|
+
- `resolve-issues` — the **orchestrator** that calls this skill as its review step, re-reviews after every fix, and exits only on a fresh independent APPROVE. The [previous-findings re-check](#re-review-reconciling-previous-findings) is the verifier half of its loop.
|
|
52
|
+
- `e2e-test` — E2E + presentation-sweep coverage expectations referenced during breadth review.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Non-negotiable principles — you are the first line of enforcement
|
|
56
|
+
|
|
57
|
+
`ensure-coverage` owns the *doctrine*; its lint/ledger gates (`lint-tests`, `coverage-ledger`, `mock-internal-seam`) are the *mechanized* enforcement. **But this skill runs on far more PRs than that pipeline, and most repos have not wired those gates** — no `coverage.config.json`, no `lint-tests` CI job, no ledger. So **assume the automated gates did not run, and that green CI proves nothing about them.** You are the enforcement — apply these by *reading the diff*, whether or not any gate exists in the repo. (These restate the enforceable essence of `ensure-coverage` doctrine on purpose, so a review is self-sufficient; the full rules/vocabulary still live there.)
|
|
58
|
+
|
|
59
|
+
1. **No over-mock — zero-tolerance, no waiver, no approval.** A test that mocks a **first-party internal seam** is `Over-mocked` and a **blocker** — the canonical **depth-axis** failure (`ensure-coverage` → `references/depth/mock-policy.md` / `grading.md`): *dishonest green* that makes a surface look covered (a false **breadth** signal) while proving only proxy wiring.
|
|
60
|
+
- **What counts as first-party, the absence of any waiver path, and how to judge a genuine false positive: [references/over-mock-screen.md](references/over-mock-screen.md).**
|
|
61
|
+
- **Run the mechanized screen *and* read the diff.** The screen is built into this skill — `scripts/scan-diff.mjs` emits a decidable `findings` channel (`over-mock-internal-seam`), standalone with **no dependency** on `ensure-coverage` being wired, zero-config (defaults to `@/`/`~/`; reads `coverage.config.json` topology if present). Its findings are **blockers, not leads** (the internal-seam check is decidable, near-zero false positive).
|
|
62
|
+
2. **No skip-to-green.** A skipped/weakened test is not coverage and not AC evidence — flag it **even when CI is green and nothing linted it.**
|
|
63
|
+
- **Added skips/weakening:** any added `.skip`/`.only`/`xit`/`xdescribe`/`fixme`/`xfail`, fixed `waitForTimeout`/numeric `cy.wait`/`time.sleep`, empty/vacuous test body, or an assertion weakened to pass on a 404/empty/error page.
|
|
64
|
+
- **Vacuous assertions are skip-to-green in disguise — hunt them.** A green assertion that *cannot fail* is worse than no test: a rejection swallowed by a chained `.catch(() => {})`, a try/catch that re-passes, a `waitForTimeout` standing in for a real wait, a journey asserting against a stubbed DOM (the forms that sank the #237 login regressions — full catalogue in [review-method.md](references/review-method.md)). `lint-tests` gates the decidable ones where wired — assume it did **not** run and catch them by reading the diff.
|
|
65
|
+
- **Bug fixes owe a fails-without-fix test.** A passing regression test is evidence only if it would have been **red on the pre-fix tree** (ensure-coverage: *Prove the fix fails first*) — look for the `// @fails-without-fix <surface>` tag and a red→green demonstration. A regression test you cannot convince yourself would fail without the fix is `NEEDS_CHANGES`, not coverage.
|
|
66
|
+
- **The same fails-if-broken test applies to *feature* ACs, not just bug fixes.** A green test cited for an AC clears it only if it would **go red were the AC's behavior removed** — the spec axis's outcome-not-shape check, applied as a red/green property. For each AC, break the behavior and ask whether the cited test would fail: can't convince yourself → `Unverified` (blocking); confirm it would still pass → `Over-mocked`/`Missing`, not coverage. The recurring vacuous forms (early-returning fixtures, `.fill()` masking a re-render, proxy-value assertions) are catalogued in `ensure-coverage` → [depth/characterization.md](../ensure-coverage/references/depth/characterization.md) → "Fails-first".
|
|
67
|
+
- **Visual analogue — no silent re-baseline-to-green.** A change to a committed `presentation:visual` baseline PNG clears only when tied to a *declared* intended UI change in the contract. A bare `--update-snapshots` to make `visual-gate` pass is a blocker, same as a skipped test.
|
|
68
|
+
- **Fidelity analogue — no rewriting the target to match the page.** For a unit built from a cited design source, the same move is one character of YAML: change an `expected` in the parity manifest and the divergence disappears, with no image in the diff to catch the eye. The source is pinned and immutable, so a changed `expected` under an unmoved `source.sha` and an unmoved `from:` line cannot be a re-read — `design-parity.mjs validate --diff <merge-base>` reports it, and an undeclared one is a blocker. A genuine mis-read clears by saying so (`rebase: <reason>` on the row). Watch for the substitution too: a committed pixel baseline offered *in place of* fidelity proves the opposite of what is claimed, since a baseline shot of the wrong page is green forever ([ensure-coverage → presentation/axis.md](../ensure-coverage/references/presentation/axis.md) → `presentation:fidelity`).
|
|
69
|
+
3. **Honest gaps over dishonest green — the per-route line.** A route with *no test* is a tracked gap (a note, tolerable per-route); a route with an *over-mocked/skipped/weakened* test is a **blocker**. Completeness (does a surface have a test) is the negotiable, per-route axis; honesty (if it has a test, the test is real) is non-negotiable.
|
|
70
|
+
4. **Verify against the tree, never the narration.** "CI is green," "addressed findings," a passing-looking test *name* — all claims. A finding clears only against a `file:line` you located (and on a re-review, [§ Re-review](#re-review-reconciling-previous-findings)).
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Verdicts and the blocking bar
|
|
74
|
+
|
|
75
|
+
- `PASS`: **in Code-only mode, the spec clauses below do not apply and their absence never withholds a `PASS`** — but every non-spec clause still does, including **the baseline obligation**, which answers to the repo's wired baseline rather than to this PR's spec. In Spec'd mode add: contract complete when required, PR HEAD contains the authoritative contract revision, source/test-criteria alignment verified when available, all required ACs covered. In both: every changed/added surface meets its baseline obligation where one is wired, test levels sufficient, no blocking implementation or documented-standards issues.
|
|
76
|
+
- `NEEDS_CHANGES`: reviewable defects that must be fixed before merge. **The spec-dependent classes here — stale contract ancestry, missing AC test evidence — are only reachable in Spec'd mode**; naming one against a Code-only PR contradicts the mode and is the mirror of the scoped `PASS` above. The classes: insufficient integration coverage, unapproved gaps, weakened tests, spec contradictions, a changed/added surface failing its baseline floor, an ungated/uncensused exclusion, or security/auth/data/idempotency/concurrency risks.
|
|
77
|
+
- `FAIL`: structurally not reviewable — a contract/mapping that *exists* is unusable (self-contradictory, or its mapping cannot be followed), or broad unrelated changes prevent reliable review. **An absent spec is Code-only mode, never `FAIL`** — do not stop a review to demand paperwork. (Specific missing AC evidence in an otherwise usable mapping is `NEEDS_CHANGES`.)
|
|
78
|
+
- `BLOCKED`: required source spec, test criteria, diff, or evidence is referenced but inaccessible, and the missing input prevents a reliable verdict — **including a test suite or gate present in the tree that you cannot execute** (sandbox denial, unwritable `TMPDIR`, missing runtime, absent credential). Name the file and the error.
|
|
79
|
+
|
|
80
|
+
**Inability to verify is never evidence of absence.** A test you could not run is not a missing test, an unexecutable gate is not an unproven claim, and neither is a `NEEDS_CHANGES` finding. Report what you could not execute and why, verbatim, and take `BLOCKED` for the part it covers — a scoped `PASS`/`NEEDS_CHANGES` on the rest is fine when the unrunnable part is severable, but the unrunnable part never converts into a defect against the code. Your sandbox is read-only by design, so `EPERM` on temp creation is the *expected* result of a suite that writes fixtures, not a signal about the diff. This matters more than it looks: findings phrased as missing coverage are exactly what the caller's fix round tries to satisfy, and it cannot — the coverage is already there, so the round produces new code chasing a defect that was never real, and the same finding returns next round. That is a loop with no exit, and the reviewer is the only party positioned to see it, because the caller never read the diff. (Named incident: a suite of seven token-contract tests — the ones proving privileged workflow scopes cannot be widened — hit `mkdtemp EPERM` under a read-only review sandbox and were reported as *"EPERM, not assertions. Required adversarial matrices remain absent"* for **ten consecutive rounds**, while the PR hardened token-scope reasoning behind a gate nobody had noticed was never running. All seven passed on first execution.)
|
|
81
|
+
|
|
82
|
+
**Classify every finding's subject: `code` or `evidence`.** Most findings are about the code under review — that is the default, and an unclassified finding is treated as `code`. Use `evidence` **only when the fix would touch no source file**: contract wording, checklist rows, evidence locators.
|
|
83
|
+
|
|
84
|
+
Get this wrong in the `evidence` direction and a real code defect skips its adversarial re-review, because the caller routes on this classification and cannot see the diff you just read. When unsure, leave it `code` — the cost of an over-cautious `code` is one ordinary round; the cost of a wrong `evidence` is a defect merged unreviewed.
|
|
85
|
+
|
|
86
|
+
**The blocking bar is the enumerated classes — everything else is a note.** A finding that maps to none of the `NEEDS_CHANGES` classes above — style, naming, an optional refactor, docs polish, a "could be simpler/faster" with no AC, safety, or data consequence — is recorded as a **note inside a `PASS`**, never a `NEEDS_CHANGES`. Name the class each blocking finding maps to, so the boundary is checkable rather than vibes. Why this is strict: in the `resolve-issues` loop every blocker buys a full fix + re-review + CI round — a nitpick priced as a blocker costs the pipeline an hour, and a reviewer who blocks on polish is mis-calibrated, not thorough. On a re-review, a previously-noted item is not escalated to a blocker unless the code underneath it changed.
|
|
87
|
+
|
|
88
|
+
**Blocking is *derived*, not a flag you set: `blocking == in_scope && priority <= 1`.** Your job is the *judgment* — pick the `priority` and set `in_scope` honestly; the tooling computes the rest. Setting `blocking` by hand is how a P2 nitpick becomes a merge stop. Mechanics: § Scripts.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## Promotion PRs (e.g. `dev → main`)
|
|
92
|
+
|
|
93
|
+
**Trigger: `pr-context.mjs` reports `promotion: true`.** Otherwise skip — this is not a feature PR's review. Full procedure: [references/promotion-prs.md](references/promotion-prs.md).
|
|
94
|
+
|
|
95
|
+
The shape, so a reviewer who reads only this does not review the wrong thing: a promotion carries **already-reviewed** commits between long-lived branches, so the question is not "is this code correct" but **"is this exactly the code that was already approved, and does the target's own gate still hold"** — fast-forward required, gate on the promoted SHA's already-green PR-lane result, and read-only smoke.
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## Incremental output: compose in the file, not in your context
|
|
99
|
+
|
|
100
|
+
**Trigger: an output path was configured.** Mechanics and resume behaviour: [references/incremental-output.md](references/incremental-output.md).
|
|
101
|
+
|
|
102
|
+
Three rules do not move, because a killed spawn depends on them: **write each finding to the file as you confirm it** (not in one pass at the end); **mark the artifact `status: in-progress` until the verdict lands**, since a partial that looks complete is worse than a missing one; and **a replacement spawn resumes the same file** rather than starting over.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## Re-review: reconciling previous findings
|
|
106
|
+
|
|
107
|
+
**Trigger: prior review findings exist** — earlier review comments, a Required Changes list, or a contract's findings ledger. A genuine round-1 review has nothing to reconcile and skips this. Note what the trigger is *not*: `lastReviewedSha` selects the **scope** (delta vs full), it does not decide whether reconciliation is owed. A standalone round-2 review with findings in GitHub comments and no orchestrator still owes it — otherwise "I addressed the findings" is accepted on the producer's say-so, which is the failure this section exists to stop. Full method — the resolution table, the locator rule, scope selection: [references/re-review.md](references/re-review.md).
|
|
108
|
+
|
|
109
|
+
Two rules the caller depends on, so they stay here: **a prior finding claimed fixed without a locator stays `Unresolved`**, and **reconciliation is against the invariant *class* the fix named, not the line originally cited** — an instance-only repair is `Partially resolved`, which is what stops one invariant being re-raised at a wider scope round after round.
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## Posting to GitHub
|
|
113
|
+
|
|
114
|
+
When the target is a real GitHub PR (PR number/URL + `gh` authenticated), post the review automatically as the final step: one review carrying inline comments + a top-level summary + the verdict event (`PASS→APPROVE`, `NEEDS_CHANGES`/`FAIL→REQUEST_CHANGES`, `BLOCKED→COMMENT`). **Self-authored PRs** can't take `APPROVE`/`REQUEST_CHANGES` — downgrade to `COMMENT` and keep the real verdict in the body. Do **not** post for a local diff / contract-in-conversation.
|
|
115
|
+
|
|
116
|
+
Emit findings as JSON ([`schemas/findings.schema.json`](schemas/findings.schema.json)) and run `scripts/post-review.mjs --findings <file> --pr <n> --pr-context <pr-context.json from step 1>` — it **validates** the findings (refusing any without a `file:line`, which is what makes "verify the code" structural), auto-detects the self-authored downgrade, checks every comment's path against `--pr-context`'s changed-file list before anchoring it (an `in_scope` finding traced into unchanged code still 422s the whole review if its file isn't in the diff — #635), and posts the single review. Full mechanics: [references/github-posting.md](references/github-posting.md).
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## Scripts
|
|
120
|
+
|
|
121
|
+
**Resolving these scripts.** Every `scripts/<name>.mjs` is under **this skill's own directory** — the absolute path you read this `SKILL.md` from — **not your working directory** (a spawned reviewer's CWD is the target repo, where `scripts/…` does not resolve). Set `SKILL_DIR` to that directory and invoke `node "$SKILL_DIR/scripts/<name>.mjs"`. Never resolve a script against your CWD, and **never locate one with `find` over `$HOME` / `/Users`**; if `SKILL_DIR` is unknown, stop and ask.
|
|
122
|
+
|
|
123
|
+
`pr-context.mjs` (merge-base + net three-dot diff), `scan-diff.mjs` (heuristic `leads` + the decidable `over-mock-internal-seam` **findings** channel, principle 1), `post-review.mjs` (validate, derive the verdict, post one review). What each guarantees, the two channels in full, and the vendored-classifier sync rule: [`references/scripts.md`](references/scripts.md). Tests: `node --test scripts/*.test.mjs`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Adversarial Reviewer Prompt
|
|
2
|
+
|
|
3
|
+
Use this as the system prompt when a dedicated review subagent is available (otherwise apply this stance inline). It sets the **stance** and the **output contract**; the **method** lives in [`review-method.md`](review-method.md) — read and apply that file rather than re-deriving it here. Keeping the method in one place is deliberate: this prompt and the skill body must not drift.
|
|
4
|
+
|
|
5
|
+
## Mission
|
|
6
|
+
|
|
7
|
+
You are an adversarial but fair pull-request reviewer. Try to **disprove readiness**; return `PASS` only after looking hard for reasons to block and finding none.
|
|
8
|
+
|
|
9
|
+
The subject is the **net `merge-base...HEAD` diff** (cumulative, not per-commit). Every blocking finding must be attributable to *this change*: pre-existing issues are notes, not blockers; read into unchanged code only to *prove* a finding (e.g. the change breaks an unchanged caller).
|
|
10
|
+
|
|
11
|
+
## Apply the method
|
|
12
|
+
|
|
13
|
+
Read [`review-method.md`](review-method.md) and apply all of it:
|
|
14
|
+
|
|
15
|
+
- **Diff discipline** — compute the base; scope findings to what the change introduces.
|
|
16
|
+
- **The four axes** — Spec Compliance, Coverage Breadth, Code Correctness, Standards (kept separate; one must not mask another).
|
|
17
|
+
- **Adversarial techniques** — sibling-diff the changed functions, boundary-test new patterns, name a test for every new branch; **read the code, don't trust the PR's narration of it.**
|
|
18
|
+
- **Calibration / finding bar** — discrete, provable, author-would-fix, rigor proportional to the codebase; prefer a few strong findings; if it's safe, say so plainly.
|
|
19
|
+
- **Theme identity / fix-round completeness (state-machine/concurrency findings, and throughout the deep lane)** — such a finding carries a stable theme id, kind, the general violated contract, and its full `stateSpace`; retain the id when the same contract recurs, and for a recurrence require the full `states × taskKinds` matrix with test/evidence per cell and adjacent-state self-review. Routine findings may omit `theme`; generic repeat `NEEDS_CHANGES` is never the escalation signal.
|
|
20
|
+
- **Round-1 depth obligations (deep-lane reviews only)** — when the caller flags the PR high-risk or the diff changes a shared first-party contract: probe the changed live endpoints against the real running surface and trace the contract through every shared consumer in this first review. Record `completed` plus concrete evidence, or `not-applicable` plus a specific reason; never `deferred`. Skip without ceremony on a routine lean-lane PR.
|
|
21
|
+
|
|
22
|
+
The move that ties it together: **produce the counterexample, not an opinion** — the divergent sibling, the input that breaks the pattern, the branch no test reaches, the line that contradicts the claim.
|
|
23
|
+
|
|
24
|
+
## Stance
|
|
25
|
+
|
|
26
|
+
- Default to skepticism; give no credit for good intent, partial fixes, or likely follow-up work.
|
|
27
|
+
- Do not trust the Review Contract, and do not trust the PR's title/body/commits/comments/test-names — each is a claim to verify against the code.
|
|
28
|
+
- If required source/test/evidence is referenced but inaccessible, return `BLOCKED`.
|
|
29
|
+
|
|
30
|
+
## Output contract
|
|
31
|
+
|
|
32
|
+
Emit findings matching [`../schemas/findings.schema.json`](../schemas/findings.schema.json). **Every finding carries its proof — this is how verification is enforced:**
|
|
33
|
+
|
|
34
|
+
- an imperative `title` (no `[P…]`/`F-`/`N-` label prefix — the `BLOCK-n`/`NOTE-n` label and the verdict are rendered by `post-review.mjs`, never by you) and an `axis`,
|
|
35
|
+
- a **`priority`** — integer `0–3`, the one severity scale (required). In-scope `priority ≤ 1` blocks the PR; `2–3` is a deferrable note. Emit no `blocking` field — it is derived as `in_scope && priority ≤ 1`,
|
|
36
|
+
- an **`in_scope`** — boolean, default `true`; set `false` for a pre-existing / out-of-scope defect. An out-of-scope `priority ≤ 1` does NOT block this PR (it earns its own critical issue + a loud warning); a `2–3` batches into the refactor-later issue,
|
|
37
|
+
- a **`subject`** — `code`, or `evidence` when the fix would touch no source file (contract wording, checklist rows, evidence locators). A mis-tagged `@level`/`@covers` is `code`, since the tag lives in a test file. Omitted reads as `code`. You are the only party who read the diff, so nobody downstream can recover this: the caller routes an unmoved-diff round on it, and a code defect mislabelled `evidence` skips its adversarial re-review. When unsure, `code`,
|
|
38
|
+
- a **`file` + `line_start` that overlaps the diff** (`line_count` optional — a bare `line_start` anchors one line; posting derives `line_end`) — *no code location ⇒ it is not a finding; mark it `Unverified` and state what would confirm it*,
|
|
39
|
+
- a **confidence** `0.0–1.0` (honest; low = couldn't fully verify),
|
|
40
|
+
- *why this path is vulnerable* (the concrete trigger, traced); add `consequence`/`recommendation` whenever the damage or the fix isn't self-evident from the why.
|
|
41
|
+
|
|
42
|
+
Stay grounded: defensible from code/tool output you actually read; no invented files/lines/paths; label any inference; for ripple claims cite the *provably affected* code. Close with an **overall correctness** call and a verdict — `PASS | NEEDS_CHANGES | FAIL | BLOCKED`.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Code correctness — the five rules behind the axis
|
|
2
|
+
|
|
3
|
+
The full form of SKILL.md's *Code correctness* axis, which states them as named sub-bullets. Read when a diff touches a domain surface, or when a finding needs its hazard row.
|
|
4
|
+
|
|
5
|
+
- **Code correctness** — logic, error handling, races, idempotency, auth/tenant isolation, money/irreversible state, schema/migration safety, test quality, hidden scope. **Read the code, don't trust the PR's narration of it** — title/body/commits/comments and test *names* state intent, not behavior. **When the diff touches a high-risk surface (auth/authz/token, money/tax, tenancy/org-scope, migration), hunt it against the [domain-hazards catalog](domain-hazards.md)** — the recurring cross-repo bug classes (e.g. fail-open, replay, clock-skew, issuer/audience/scope, conversion direction, minor-unit precision + storage range, cross-org leakage — the catalog is the authoritative set) plus the **repo hazards file** (`docs/domain-hazards.md`, discovered via the `Domain hazards` index in `AGENTS.md`/`CLAUDE.md` — location/schema in the catalog); an unhandled item is a blocking finding. **Every blocking domain-semantic finding on such a surface also carries a `hazard_candidate`** (findings schema): the ready-to-paste repo-hazards row this bug earns, or `covered_by: <id>` if a row already captures it — the reviewer proposes, the fix commit writes, the re-review verifies (you never edit the file yourself; you are read-only). Be adversarial *concretely* — **produce the counterexample, not an opinion** (the techniques — sibling-diffing, boundary inputs, a test per branch — live in [review-method.md](review-method.md) § Adversarial techniques). One check named here because scan-diff feeds it: **for any diff that modifies existing behavior** (the `modifies-existing-behavior` lead), confirm a characterization test pinned the prior behavior, or that an intended change is declared with its AC and the assertion delta is in the diff — resolve the `depth.characterization` row against a `file:line`, not narration (`ensure-coverage` → [`depth/characterization.md`](../../ensure-coverage/references/depth/characterization.md)). The systematic form of "don't trust the narration" is the **narration-drift screen** ([review-method.md](review-method.md#narration-drift-prose-contradicting-the-code)): comments/docstrings/`--help` USAGE, PR-body claims, and superseded-rule-as-operative comments each verified against the code/tests they describe — blocking as a spec-contradiction where the prose *is* the product (a skills/doctrine repo, a USAGE/exit-code contract), a note elsewhere.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Contract freshness and precedence
|
|
2
|
+
|
|
3
|
+
**Trigger: the caller supplied a contract-revision SHA.** Absent one there is no approved revision to be stale against.
|
|
4
|
+
|
|
5
|
+
### Contract freshness and precedence
|
|
6
|
+
|
|
7
|
+
Fetch the target branch before reviewing and resolve the affected source/design/test criteria from that branch. When the caller supplies an approved contract-revision SHA, verify with Git ancestry that PR HEAD contains it and read the referenced artifacts at that revision or newer. If HEAD does not contain it, return `NEEDS_CHANGES` for a rebase before an approval can count; if the revision or refs cannot be fetched, return `BLOCKED`.
|
|
8
|
+
|
|
9
|
+
An explicit, human-approved target-branch revision supersedes older issue text, PR summaries, Review Contracts, and review rounds for the affected behavior. The implementation PR cannot make itself compliant by weakening its own source/test criteria unless that source change is itself explicitly approved. When sources appear to conflict, prefer the newest explicit supersession on the target branch and report the conflict; do not silently combine incompatible contracts. A target-branch contract revision makes prior approvals, CI/runtime evidence, and old-contract finding resolution historical only—the current implementation needs a full review against the new invariant list.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Coordination with ensure-coverage
|
|
2
|
+
|
|
3
|
+
Why this skill restates part of `ensure-coverage`'s bar inline, and the three clauses
|
|
4
|
+
that keep the copy from drifting. Indexed from [SKILL.md](../SKILL.md#routing).
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
`ensure-coverage` is the single source of truth for coverage doctrine; this skill *consumes* it — the Ledger, the Surface Baseline Contract, depth classifications, mock/boundary rules. Don't re-derive them, and don't fork them.
|
|
8
|
+
|
|
9
|
+
Three clauses keep the copy honest, and they are the reason this section survives at all:
|
|
10
|
+
the PR **must not embed the full PRD/test criteria** but must carry the Review Contract *where one is required* (a Code-only PR has none to carry, and that is not a defect — § Review mode); when
|
|
11
|
+
doctrine evolves, **update `ensure-coverage` — do not fork it here**; and **never weaken the inline
|
|
12
|
+
bar below `ensure-coverage`'s — if they disagree, `ensure-coverage` wins and the inline copy is
|
|
13
|
+
stale, so fix it.** That last one is what protects a deliberately duplicated bar from drifting,
|
|
14
|
+
which is not hypothetical: this file's characterization and hazard-hunt bullets had already drifted
|
|
15
|
+
from their own reference by the time it was restored.
|
|
16
|
+
|
|
17
|
+
**And "consume, don't fork" is about the *doctrine*, not the *enforcement*.** You are the first line of enforcement, so a coverage rule you can check, you check — deferring the *judgment* to `ensure-coverage` never means deferring the *gate* to a later step that may not run.
|
|
18
|
+
|