@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
package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"discoveredConditions": ["pre-enqueue-alive-needs-future-queue-evidence"],
|
|
4
|
+
"conditions": [
|
|
5
|
+
{
|
|
6
|
+
"id": "pre-enqueue-alive-needs-future-queue-evidence",
|
|
7
|
+
"phase": "synthetic-queue-head-execution",
|
|
8
|
+
"subjectKind": "synthetic-queue-head-sha",
|
|
9
|
+
"producer": "mergify-queue",
|
|
10
|
+
"provider": "mergify",
|
|
11
|
+
"acquisitionOperation": "read-synthetic-queue-checks",
|
|
12
|
+
"consumingTransition": "authorize-enqueue",
|
|
13
|
+
"failureBehavior": "block-transition"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"discoveredConditions": [
|
|
4
|
+
"pr-head-checks",
|
|
5
|
+
"queue-admission",
|
|
6
|
+
"synthetic-queue-execution",
|
|
7
|
+
"target-branch-delivery"
|
|
8
|
+
],
|
|
9
|
+
"conditions": [
|
|
10
|
+
{
|
|
11
|
+
"id": "pr-head-checks",
|
|
12
|
+
"phase": "pr-head-authorization",
|
|
13
|
+
"subjectKind": "pr-head-sha",
|
|
14
|
+
"producer": "github-actions",
|
|
15
|
+
"provider": "github",
|
|
16
|
+
"acquisitionOperation": "read-exact-pr-head-checks",
|
|
17
|
+
"consumingTransition": "authorize-enqueue",
|
|
18
|
+
"failureBehavior": "block-transition"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "queue-admission",
|
|
22
|
+
"phase": "queue-admission",
|
|
23
|
+
"subjectKind": "pr-head-sha",
|
|
24
|
+
"producer": "resolve-issues-orchestrator",
|
|
25
|
+
"provider": "resolve-issues",
|
|
26
|
+
"acquisitionOperation": "evaluate-enqueue-eligibility",
|
|
27
|
+
"consumingTransition": "enqueue",
|
|
28
|
+
"failureBehavior": "block-transition"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "synthetic-queue-execution",
|
|
32
|
+
"phase": "synthetic-queue-head-execution",
|
|
33
|
+
"subjectKind": "synthetic-queue-head-sha",
|
|
34
|
+
"producer": "mergify-queue",
|
|
35
|
+
"provider": "mergify",
|
|
36
|
+
"acquisitionOperation": "read-synthetic-queue-checks",
|
|
37
|
+
"consumingTransition": "record-queue-execution",
|
|
38
|
+
"failureBehavior": "mark-delivery-unproven"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "target-branch-delivery",
|
|
42
|
+
"phase": "target-branch-ancestry",
|
|
43
|
+
"subjectKind": "merge-commit-sha",
|
|
44
|
+
"producer": "target-branch",
|
|
45
|
+
"provider": "git",
|
|
46
|
+
"acquisitionOperation": "fetch-target-and-check-ancestry",
|
|
47
|
+
"consumingTransition": "finalize-delivery",
|
|
48
|
+
"failureBehavior": "mark-delivery-unproven"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"incident": "consumer-product-repo#830",
|
|
3
|
+
"componentId": "tax-production",
|
|
4
|
+
"highRisk": true,
|
|
5
|
+
"units": [
|
|
6
|
+
{ "id": "#831", "headSha": "8318318318318318318318318318318318318318", "preliminaryRounds": 2 },
|
|
7
|
+
{ "id": "#832", "headSha": "8328328328328328328328328328328328328328", "preliminaryRounds": 3 },
|
|
8
|
+
{ "id": "#833", "headSha": "8338338338338338338338338338338338338338", "preliminaryRounds": 4 },
|
|
9
|
+
{ "id": "#834", "headSha": "8348348348348348348348348348348348348348", "preliminaryRounds": 3 },
|
|
10
|
+
{ "id": "#835", "headSha": "8358358358358358358358358358358358358358", "preliminaryRounds": 2 },
|
|
11
|
+
{ "id": "#836", "headSha": "8368368368368368368368368368368368368368", "preliminaryRounds": 3 },
|
|
12
|
+
{ "id": "#837", "headSha": "8378378378378378378378378378378378378378", "preliminaryRounds": 3 },
|
|
13
|
+
{ "id": "#838", "headSha": "8388388388388388388388388388388388388388", "preliminaryRounds": 6 }
|
|
14
|
+
],
|
|
15
|
+
"historicalFullReviews": 8,
|
|
16
|
+
"expectedTerminalFullReviews": 1
|
|
17
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_source": "Captured verbatim from the GitHub REST API on 2026-08-16 against this repository. `incident` is the #1081 head ee5dd91a211d85f3158cbc4da8537b0cb1aee2d8; `postFix` is 284d6ca6c97d13479abe9011a4c2288f6e318852, the merge that fixed it. Trimmed to the fields head-check-set.mjs reads, and no value is invented. The one field dropped rather than trimmed is `html_url`: it names the private repository in every entry, which this package must not publish (package-audit disclosure:private-repository), and nothing classifies on it.",
|
|
3
|
+
"incident": {
|
|
4
|
+
"headSha": "ee5dd91a211d85f3158cbc4da8537b0cb1aee2d8",
|
|
5
|
+
"checkRuns": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Mergify Merge Protections",
|
|
8
|
+
"status": "completed",
|
|
9
|
+
"conclusion": "neutral",
|
|
10
|
+
"app": {
|
|
11
|
+
"slug": "mergify"
|
|
12
|
+
},
|
|
13
|
+
"check_suite": {
|
|
14
|
+
"id": 86459201578
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "skill-script-tests-queue",
|
|
19
|
+
"status": "completed",
|
|
20
|
+
"conclusion": "skipped",
|
|
21
|
+
"app": {
|
|
22
|
+
"slug": "github-actions"
|
|
23
|
+
},
|
|
24
|
+
"check_suite": {
|
|
25
|
+
"id": 86459211379
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "skill-script-tests",
|
|
30
|
+
"status": "completed",
|
|
31
|
+
"conclusion": "success",
|
|
32
|
+
"app": {
|
|
33
|
+
"slug": "github-actions"
|
|
34
|
+
},
|
|
35
|
+
"check_suite": {
|
|
36
|
+
"id": 86459211379
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "Mergify Merge Queue",
|
|
41
|
+
"status": "completed",
|
|
42
|
+
"conclusion": "neutral",
|
|
43
|
+
"app": {
|
|
44
|
+
"slug": "mergify"
|
|
45
|
+
},
|
|
46
|
+
"check_suite": {
|
|
47
|
+
"id": 86459201578
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"statuses": [],
|
|
52
|
+
"actionsRuns": [
|
|
53
|
+
{
|
|
54
|
+
"id": 31871939947,
|
|
55
|
+
"name": "Skill gates",
|
|
56
|
+
"path": ".github/workflows/skill-gates.yml",
|
|
57
|
+
"event": "pull_request",
|
|
58
|
+
"status": "completed",
|
|
59
|
+
"conclusion": "success",
|
|
60
|
+
"head_sha": "ee5dd91a211d85f3158cbc4da8537b0cb1aee2d8",
|
|
61
|
+
"check_suite_id": 86459211379,
|
|
62
|
+
"run_started_at": "2026-08-15T07:26:09Z",
|
|
63
|
+
"updated_at": "2026-08-15T07:32:49Z",
|
|
64
|
+
"pull_requests": [],
|
|
65
|
+
"jobCount": 2
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": 31871936796,
|
|
69
|
+
"name": ".github/workflows/release-package.yml",
|
|
70
|
+
"path": ".github/workflows/release-package.yml",
|
|
71
|
+
"event": "push",
|
|
72
|
+
"status": "completed",
|
|
73
|
+
"conclusion": "failure",
|
|
74
|
+
"head_sha": "ee5dd91a211d85f3158cbc4da8537b0cb1aee2d8",
|
|
75
|
+
"check_suite_id": 86459203727,
|
|
76
|
+
"run_started_at": "2026-08-15T07:26:05Z",
|
|
77
|
+
"updated_at": "2026-08-15T07:26:05Z",
|
|
78
|
+
"pull_requests": [],
|
|
79
|
+
"jobCount": 0
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": 31871936392,
|
|
83
|
+
"name": ".github/workflows/bootstrap-package.yml",
|
|
84
|
+
"path": ".github/workflows/bootstrap-package.yml",
|
|
85
|
+
"event": "push",
|
|
86
|
+
"status": "completed",
|
|
87
|
+
"conclusion": "failure",
|
|
88
|
+
"head_sha": "ee5dd91a211d85f3158cbc4da8537b0cb1aee2d8",
|
|
89
|
+
"check_suite_id": 86459202731,
|
|
90
|
+
"run_started_at": "2026-08-15T07:26:04Z",
|
|
91
|
+
"updated_at": "2026-08-15T07:26:04Z",
|
|
92
|
+
"pull_requests": [],
|
|
93
|
+
"jobCount": 0
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"postFix": {
|
|
98
|
+
"headSha": "284d6ca6c97d13479abe9011a4c2288f6e318852",
|
|
99
|
+
"checkRuns": [
|
|
100
|
+
{
|
|
101
|
+
"name": "skill-script-tests-queue",
|
|
102
|
+
"status": "completed",
|
|
103
|
+
"conclusion": "skipped",
|
|
104
|
+
"app": {
|
|
105
|
+
"slug": "github-actions"
|
|
106
|
+
},
|
|
107
|
+
"check_suite": {
|
|
108
|
+
"id": 86509201805
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "test-runner",
|
|
113
|
+
"status": "completed",
|
|
114
|
+
"conclusion": "success",
|
|
115
|
+
"app": {
|
|
116
|
+
"slug": "github-actions"
|
|
117
|
+
},
|
|
118
|
+
"check_suite": {
|
|
119
|
+
"id": 86509201866
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "skill-script-tests",
|
|
124
|
+
"status": "completed",
|
|
125
|
+
"conclusion": "success",
|
|
126
|
+
"app": {
|
|
127
|
+
"slug": "github-actions"
|
|
128
|
+
},
|
|
129
|
+
"check_suite": {
|
|
130
|
+
"id": 86509201805
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"statuses": [],
|
|
135
|
+
"actionsRuns": [
|
|
136
|
+
{
|
|
137
|
+
"id": 31893819954,
|
|
138
|
+
"name": "Test Self-Hosted Runner",
|
|
139
|
+
"path": ".github/workflows/test-self-hosted.yml",
|
|
140
|
+
"event": "push",
|
|
141
|
+
"status": "completed",
|
|
142
|
+
"conclusion": "success",
|
|
143
|
+
"head_sha": "284d6ca6c97d13479abe9011a4c2288f6e318852",
|
|
144
|
+
"check_suite_id": 86509201866,
|
|
145
|
+
"run_started_at": "2026-08-15T15:49:50Z",
|
|
146
|
+
"updated_at": "2026-08-15T15:50:21Z",
|
|
147
|
+
"pull_requests": [],
|
|
148
|
+
"jobCount": 1
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": 31893819933,
|
|
152
|
+
"name": "Skill gates",
|
|
153
|
+
"path": ".github/workflows/skill-gates.yml",
|
|
154
|
+
"event": "push",
|
|
155
|
+
"status": "completed",
|
|
156
|
+
"conclusion": "success",
|
|
157
|
+
"head_sha": "284d6ca6c97d13479abe9011a4c2288f6e318852",
|
|
158
|
+
"check_suite_id": 86509201805,
|
|
159
|
+
"run_started_at": "2026-08-15T15:49:50Z",
|
|
160
|
+
"updated_at": "2026-08-15T15:56:45Z",
|
|
161
|
+
"pull_requests": [],
|
|
162
|
+
"jobCount": 2
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Durable cross-run gate-value observations. The manifest remains run-local resume state;
|
|
2
|
+
// this append-only series survives it and is the only evidence retirement may use.
|
|
3
|
+
import fs from 'node:fs'
|
|
4
|
+
import os from 'node:os'
|
|
5
|
+
import path from 'node:path'
|
|
6
|
+
|
|
7
|
+
import { gateAudit, GATE_RETIREMENT_MINIMUM_RUNS } from './fix-rounds.mjs'
|
|
8
|
+
|
|
9
|
+
const nonEmpty = (value) => typeof value === 'string' && value.trim().length > 0
|
|
10
|
+
|
|
11
|
+
export function gateValueDir(env = process.env) {
|
|
12
|
+
if (nonEmpty(env?.RESOLVER_GATE_VALUE_DIR)) return env.RESOLVER_GATE_VALUE_DIR.replace(/\/+$/, '')
|
|
13
|
+
if (nonEmpty(env?.RESOLVER_RUN_DIR)) return path.join(env.RESOLVER_RUN_DIR.replace(/\/+$/, ''), 'gate-value')
|
|
14
|
+
const state = nonEmpty(env?.XDG_STATE_HOME)
|
|
15
|
+
? env.XDG_STATE_HOME.replace(/\/+$/, '')
|
|
16
|
+
: path.join(os.homedir(), '.local', 'state')
|
|
17
|
+
return path.join(state, 'resolver-gate-value')
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function gateValuePaths(env = process.env) {
|
|
21
|
+
const dir = gateValueDir(env)
|
|
22
|
+
return { dir, index: path.join(dir, 'index.jsonl') }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function gateRetirementMinimumRuns(env = process.env) {
|
|
26
|
+
const configured = Number(env?.RESOLVER_GATE_RETIREMENT_MIN_RUNS)
|
|
27
|
+
return Number.isSafeInteger(configured) && configured > 0 ? configured : GATE_RETIREMENT_MINIMUM_RUNS
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function gateValueObservation(manifest, now = new Date()) {
|
|
31
|
+
return {
|
|
32
|
+
observedAt: now.toISOString(),
|
|
33
|
+
runSlug: nonEmpty(manifest?.runSlug) ? manifest.runSlug : null,
|
|
34
|
+
gateValue: gateAudit(manifest),
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// A diagnostic save never fails the run. The returned error keeps an unwritten series
|
|
39
|
+
// distinguishable from a successful zero-value observation.
|
|
40
|
+
export function saveGateValueObservation(manifest, env = process.env, now = new Date()) {
|
|
41
|
+
const paths = gateValuePaths(env)
|
|
42
|
+
try {
|
|
43
|
+
fs.mkdirSync(paths.dir, { recursive: true })
|
|
44
|
+
fs.appendFileSync(paths.index, `${JSON.stringify(gateValueObservation(manifest, now))}\n`)
|
|
45
|
+
return { saved: true, paths, error: null }
|
|
46
|
+
} catch (error) {
|
|
47
|
+
return { saved: false, paths, error: error?.message ?? String(error) }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function readGateValueSeries(env = process.env) {
|
|
52
|
+
const { index } = gateValuePaths(env)
|
|
53
|
+
if (!fs.existsSync(index)) return []
|
|
54
|
+
let text
|
|
55
|
+
try {
|
|
56
|
+
text = fs.readFileSync(index, 'utf8')
|
|
57
|
+
} catch (error) {
|
|
58
|
+
return [{ unreadable: true, reason: `series read failed: ${error?.message ?? String(error)}` }]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const latest = new Map()
|
|
62
|
+
const unreadable = []
|
|
63
|
+
for (const [lineIndex, line] of text.split('\n').entries()) {
|
|
64
|
+
if (!line.trim()) continue
|
|
65
|
+
try {
|
|
66
|
+
const observation = JSON.parse(line)
|
|
67
|
+
if (!observation || typeof observation !== 'object' || !nonEmpty(observation.runSlug) || !Array.isArray(observation.gateValue)) {
|
|
68
|
+
unreadable.push({ lineIndex, unreadable: true, reason: `malformed series row ${lineIndex + 1}` })
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
latest.set(observation.runSlug, { lineIndex, ...observation })
|
|
72
|
+
} catch (error) {
|
|
73
|
+
unreadable.push({ lineIndex, unreadable: true, reason: `unreadable series row ${lineIndex + 1}: ${error?.message ?? String(error)}` })
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [...latest.values(), ...unreadable]
|
|
77
|
+
.sort((a, b) => a.lineIndex - b.lineIndex)
|
|
78
|
+
.map(({ lineIndex, ...observation }) => observation)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function auditGateValue(manifest, options = {}) {
|
|
82
|
+
const env = options.env ?? process.env
|
|
83
|
+
const persisted = options.persist === false
|
|
84
|
+
? null
|
|
85
|
+
: saveGateValueObservation(manifest, env, options.now ?? new Date())
|
|
86
|
+
const series = readGateValueSeries(env)
|
|
87
|
+
if (persisted && !persisted.saved) series.push({ unreadable: true, reason: `current gate-value observation was not saved: ${persisted.error}` })
|
|
88
|
+
return gateAudit(manifest, {
|
|
89
|
+
series,
|
|
90
|
+
minimumObservationRuns: gateRetirementMinimumRuns(env),
|
|
91
|
+
})
|
|
92
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// The routing table that used to be `SKILL.md`'s Reference Map — 24 rows and 3.6KB of the
|
|
2
|
+
// always-loaded file, spent on a lookup nobody reads start to finish.
|
|
3
|
+
//
|
|
4
|
+
// WHY IT MOVED. SKILL.md is the one file loaded into every run's context, so every byte in it is
|
|
5
|
+
// paid on every run whether or not it is used. A 24-row "when you need X, read Y" table is
|
|
6
|
+
// consulted *situationally* — you want one row, when you already know what you are doing next.
|
|
7
|
+
// That is the shape of a query, not of doctrine, and it is the only section of SKILL.md that was
|
|
8
|
+
// pure lookup data. The phase-routing table stayed behind: it is read once at the start and is
|
|
9
|
+
// what makes a truncated read survivable.
|
|
10
|
+
//
|
|
11
|
+
// WHAT DID NOT MOVE, AND WHY THAT MATTERS. A table in context is *passively* available; a command
|
|
12
|
+
// must be *actively* invoked. So this trade is only safe because `run-state.mjs guide` is named in
|
|
13
|
+
// SKILL.md itself, near the top of what survives a partial read. If that pointer is ever dropped,
|
|
14
|
+
// this file becomes unreachable and the routing silently stops existing — which is why
|
|
15
|
+
// `guide-index.test.mjs` pins both the pointer and the reachability of every destination.
|
|
16
|
+
|
|
17
|
+
export const GUIDE = [
|
|
18
|
+
{ need: 'run the pre-flight gate — its seven steps, and which chapter owns each', targets: [{ label: 'references/pre-flight.md', path: 'references/pre-flight.md' }] },
|
|
19
|
+
{ need: 'settle both model slots (discovery, tiering, the reviewer default)', targets: [{ label: 'references/pre-flight-model-slots.md', path: 'references/pre-flight-model-slots.md' }] },
|
|
20
|
+
{ need: 'settle the merge path (`deliveryMode` + `queueProvider`) at pre-flight', targets: [{ label: '`scripts/detect-delivery-mode.mjs`', path: 'scripts/detect-delivery-mode.mjs' }] },
|
|
21
|
+
{ need: 'settle where the run writes code (`shared` vs its own worktree)', targets: [{ label: '`scripts/detect-workspace-mode.mjs`', path: 'scripts/detect-workspace-mode.mjs' }] },
|
|
22
|
+
{ need: 'record interference, schedule concurrent units, or reap their workspaces', targets: [{ label: 'references/interference.md', path: 'references/interference.md' }, { label: '`run-state.mjs runnable`', path: 'scripts/run-state.mjs' }, { label: '`scripts/workspaces.mjs`', path: 'scripts/workspaces.mjs' }] },
|
|
23
|
+
{ need: 'get this run\'s delivery flow and its exact enqueue/read/nudge/dequeue commands', targets: [{ label: '`run-state.mjs delivery-flow`', path: 'scripts/run-state.mjs' }] },
|
|
24
|
+
{ need: 'report the plan before building, or progress **every time a unit leaves the loop** (the trigger: [loop.md](references/loop.md#3--fix-then-loop))', targets: [{ label: '`run-state.mjs plan`/`progress`', path: 'scripts/run-state.mjs' }, { label: 'renderers', path: 'scripts/report.mjs' }] },
|
|
25
|
+
{ need: 'route a round that corrects a claim, not the code', targets: [{ label: 'references/evidence-lane.md', path: 'references/evidence-lane.md' }] },
|
|
26
|
+
{ need: 'find out **why** this run kept buying evidence rounds — and whether to run a screen or build one', targets: [{ label: '`run-state.mjs evidence-audit`', path: 'scripts/run-state.mjs' }] },
|
|
27
|
+
{ need: 'honour the leaf-spawn contract on a spawn — **render it** rather than compose it', targets: [{ label: '`run-state.mjs spawn-contract`', path: 'scripts/run-state.mjs' }, { label: 'references/spawn-contract.md', path: 'references/spawn-contract.md' }] },
|
|
28
|
+
{ need: 'deliver a merge-ready component (enqueue, watch, dequeue routing)', targets: [{ label: 'references/delivery.md', path: 'references/delivery.md' }] },
|
|
29
|
+
{ need: 'wait out an enqueued PR without spending foreground turns', targets: [{ label: '`scripts/watch-delivery.mjs`', path: 'scripts/watch-delivery.mjs' }] },
|
|
30
|
+
{ need: 'preserve terminal provider facts while coherence blocks delivery, then reconcile them', targets: [{ label: 'references/terminal-evidence-journal.md', path: 'references/terminal-evidence-journal.md' }, { label: '`scripts/terminal-evidence-journal.mjs`', path: 'scripts/terminal-evidence-journal.mjs' }, { label: '`run-state.mjs reconcile-terminal-evidence`', path: 'scripts/run-state.mjs' }] },
|
|
31
|
+
{ need: 'diagnose a stuck unit / answer a fired circuit-breaker', targets: [{ label: 'references/breaker.md', path: 'references/breaker.md' }, { label: '`run-state.mjs diagnose-breaker`', path: 'scripts/run-state.mjs' }] },
|
|
32
|
+
{ need: 'run a high-risk unit\'s deep protocol (hazard hunt, round-1 depth, theme-complete fixes)', targets: [{ label: 'references/high-risk.md', path: 'references/high-risk.md' }] },
|
|
33
|
+
{ need: 'fan a stage out via the Workflow harness', targets: [{ label: 'references/fan-out.md', path: 'references/fan-out.md' }] },
|
|
34
|
+
{ need: 'run the epic integration gate', targets: [{ label: 'references/integration-gate.md', path: 'references/integration-gate.md' }, { label: '`scripts/combine-and-verify.mjs`', path: 'scripts/combine-and-verify.mjs' }] },
|
|
35
|
+
{ need: '**pick up a dead session\'s run** — find it, then see what it was waiting on', targets: [{ label: '`run-state.mjs list`', path: 'scripts/run-state.mjs' }, { label: '`run-state.mjs resume <slug>`', path: 'scripts/run-state.mjs' }] },
|
|
36
|
+
{ need: 'finalize and render the correctness handoff', targets: [{ label: '`run-state.mjs finalize`', path: 'scripts/run-state.mjs' }, { label: 'references/finalization.md', path: 'references/finalization.md' }] },
|
|
37
|
+
{ need: 'run an optional, non-blocking profile diagnostic', targets: [{ label: '`run-state.mjs postmortem`', path: 'scripts/run-state.mjs' }, { label: 'references/postmortem.md', path: 'references/postmortem.md' }] },
|
|
38
|
+
{ need: 'persist/resume run state', targets: [{ label: 'references/run-state.md', path: 'references/run-state.md' }] },
|
|
39
|
+
{ need: 'classify a model at pre-flight', targets: [{ label: 'references/model-catalog.md', path: 'references/model-catalog.md' }] },
|
|
40
|
+
{ need: 'know the bar any step must serve — the four guarantees in full', targets: [{ label: 'references/guarantees.md', path: 'references/guarantees.md' }] },
|
|
41
|
+
{ need: 'know **why** a rule exists — its incident, measurement, or audit', targets: [{ label: 'references/why.md', path: 'references/why.md' }] },
|
|
42
|
+
{ need: 'edit this skill, or grade a transcript', targets: [{ label: 'references/regression-checklist.md', path: 'references/regression-checklist.md' }] },
|
|
43
|
+
{ need: 'test this skill from a scratch copy (mutation testing, sandboxing)', targets: [{ label: 'references/sandboxed-testing.md', path: 'references/sandboxed-testing.md' }] },
|
|
44
|
+
{ need: 'turn issues into scheduled units — the decomposition, design and scope gates', targets: [{ label: 'references/intake.md', path: 'references/intake.md' }] },
|
|
45
|
+
{ need: 'run a unit through produce -> review ∥ CI -> fix, and record each round', targets: [{ label: 'references/loop.md', path: 'references/loop.md' }] },
|
|
46
|
+
{ need: 'scope a component and decide what ships together', targets: [{ label: 'references/deliverables.md', path: 'references/deliverables.md' }] },
|
|
47
|
+
{ need: 'gate CI on the exact reviewed head', targets: [{ label: 'references/exact-head-ci.md', path: 'references/exact-head-ci.md' }] },
|
|
48
|
+
{ need: 'record the pre-flight answers, settle autonomy, prepare the checkout', targets: [{ label: 'references/pre-flight-recording-and-checkout.md', path: 'references/pre-flight-recording-and-checkout.md' }] },
|
|
49
|
+
]
|
|
50
|
+
// Match on the need text and on the destination paths, because a caller knows either "what I am
|
|
51
|
+
// trying to do" or "the file I half-remember". Ranked, not filtered: an empty result is a worse
|
|
52
|
+
// answer than a weak one, so a query that matches nothing falls back to the full list.
|
|
53
|
+
export function guideLookup(query) {
|
|
54
|
+
const q = String(query ?? '').toLowerCase().trim()
|
|
55
|
+
if (!q) return { query: '', matches: GUIDE }
|
|
56
|
+
const terms = q.split(/\s+/).filter(Boolean)
|
|
57
|
+
const scored = GUIDE.map((row) => {
|
|
58
|
+
const hay = (row.need + ' ' + row.targets.map((t) => `${t.label} ${t.path}`).join(' ')).toLowerCase()
|
|
59
|
+
return { row, score: terms.reduce((n, t) => n + (hay.includes(t) ? 1 : 0), 0) }
|
|
60
|
+
}).filter((s) => s.score > 0).sort((a, b) => b.score - a.score)
|
|
61
|
+
return { query: q, matches: scored.map((s) => s.row), fellBack: scored.length === 0 }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function renderGuide(result) {
|
|
65
|
+
const out = []
|
|
66
|
+
if (result.fellBack) out.push(`no row matches ${JSON.stringify(result.query)} — showing all ${GUIDE.length}:`, '')
|
|
67
|
+
const rows = result.fellBack ? GUIDE : result.matches
|
|
68
|
+
for (const row of rows) {
|
|
69
|
+
out.push(` ${row.need}`)
|
|
70
|
+
for (const t of row.targets) out.push(` ${t.path}`)
|
|
71
|
+
}
|
|
72
|
+
return out.join('\n')
|
|
73
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// head-check-set — ask the SET question about a head SHA, not the NAME question.
|
|
2
|
+
//
|
|
3
|
+
// node head-check-set.mjs collect --repository owner/name --head <40-sha>
|
|
4
|
+
// [--plan required-check-plan.json]
|
|
5
|
+
// [--out head-check-set.json] [--markdown] [--strict]
|
|
6
|
+
// node head-check-set.mjs report <head-check-set.json>
|
|
7
|
+
// node head-check-set.mjs validate <head-check-set.json> --head <40-sha>
|
|
8
|
+
//
|
|
9
|
+
// The classification is pure and lives in engineering-runtime/head-check-set.mjs, which
|
|
10
|
+
// carries the incident (#1081) and the reason all three channels are read. This file is
|
|
11
|
+
// only the `gh` boundary and the CLI around it.
|
|
12
|
+
//
|
|
13
|
+
// EXIT CODES, and the line this tool does not cross. `collect` exits 1 when a REQUIRED
|
|
14
|
+
// check is red or never ran — the state the existing merge-admission contract already
|
|
15
|
+
// blocks on — and 0 otherwise, INCLUDING when an undeclared check is red. That is
|
|
16
|
+
// deliberate and is acceptance criterion 4 of #1082: whether a non-required red check
|
|
17
|
+
// should stop a merge is a policy decision belonging to the human and to `.mergify.yml`,
|
|
18
|
+
// and a reporting script that silently changed what merges would be a worse defect than
|
|
19
|
+
// the one it fixes. `--strict` opts in to exiting 1 on undeclared red; it is off by
|
|
20
|
+
// default and nothing in the loop passes it.
|
|
21
|
+
//
|
|
22
|
+
// The plan is OPTIONAL. Without one, nothing is required: the report degrades to a pure
|
|
23
|
+
// observation of the SHA rather than pretending every red is undeclared, and `collect`
|
|
24
|
+
// can then only exit 0 or 2.
|
|
25
|
+
|
|
26
|
+
import fs from 'node:fs'
|
|
27
|
+
import { execFileSync } from 'node:child_process'
|
|
28
|
+
import { isMainModule } from '../../engineering-runtime/scripts/main-module.mjs'
|
|
29
|
+
import {
|
|
30
|
+
blocksOnRequiredSet,
|
|
31
|
+
classifyHeadCheckSet,
|
|
32
|
+
renderHeadCheckSet,
|
|
33
|
+
validateHeadCheckSetArtifact,
|
|
34
|
+
} from '../../engineering-runtime/scripts/head-check-set.mjs'
|
|
35
|
+
|
|
36
|
+
export { blocksOnRequiredSet, classifyHeadCheckSet, renderHeadCheckSet, validateHeadCheckSetArtifact }
|
|
37
|
+
|
|
38
|
+
const nonEmpty = (value) => typeof value === 'string' && value.trim().length > 0
|
|
39
|
+
const SHA = /^[0-9a-f]{40}$/i
|
|
40
|
+
|
|
41
|
+
const DEFAULT_BOUNDARY = Object.freeze({
|
|
42
|
+
ghJson(args) {
|
|
43
|
+
const text = execFileSync('gh', args, { encoding: 'utf8', maxBuffer: 32 * 1024 * 1024 }).trim()
|
|
44
|
+
return text ? JSON.parse(text) : null
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The three channels, read at one SHA.
|
|
50
|
+
*
|
|
51
|
+
* Each is a separate call because each is a separate GitHub concept, and the third is
|
|
52
|
+
* the only one where a workflow GitHub refused to parse leaves a trace — it produces no
|
|
53
|
+
* check-run to be red. Job counts cost one call per run and are what make that trace
|
|
54
|
+
* nameable rather than merely red.
|
|
55
|
+
*/
|
|
56
|
+
export function collectHeadCheckSet({ repository, headSha, plan = null, now }, boundary = DEFAULT_BOUNDARY) {
|
|
57
|
+
const api = (path) => boundary.ghJson(['api', `repos/${repository}/${path}`])
|
|
58
|
+
const slurped = (path, key) => {
|
|
59
|
+
const pages = boundary.ghJson(['api', '--paginate', '--slurp', `repos/${repository}/${path}`]) || []
|
|
60
|
+
return pages.flatMap((page) => page?.[key] || [])
|
|
61
|
+
}
|
|
62
|
+
const checkRuns = slurped(`commits/${headSha}/check-runs?per_page=100`, 'check_runs')
|
|
63
|
+
const statuses = api(`commits/${headSha}/status?per_page=100`)?.statuses || []
|
|
64
|
+
const actionsRuns = slurped(`actions/runs?head_sha=${headSha}&per_page=100`, 'workflow_runs').map((run) => {
|
|
65
|
+
// `total_count` on the jobs endpoint, not the length of a page: a run with zero jobs
|
|
66
|
+
// and a run whose first page we failed to read must not both read as zero.
|
|
67
|
+
let jobCount = null
|
|
68
|
+
try {
|
|
69
|
+
const jobs = api(`actions/runs/${run.id}/jobs?per_page=1`)
|
|
70
|
+
if (Number.isInteger(jobs?.total_count)) jobCount = jobs.total_count
|
|
71
|
+
} catch {
|
|
72
|
+
jobCount = null
|
|
73
|
+
}
|
|
74
|
+
return { ...run, jobCount }
|
|
75
|
+
})
|
|
76
|
+
return classifyHeadCheckSet({
|
|
77
|
+
repository,
|
|
78
|
+
headSha,
|
|
79
|
+
checkRuns,
|
|
80
|
+
statuses,
|
|
81
|
+
actionsRuns,
|
|
82
|
+
plan,
|
|
83
|
+
...(now ? { collectedAt: now } : {}),
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function parseArgs(argv) {
|
|
88
|
+
const options = {}
|
|
89
|
+
const positional = []
|
|
90
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
91
|
+
const arg = argv[index]
|
|
92
|
+
if (arg === '--repository') options.repository = argv[++index]
|
|
93
|
+
else if (arg === '--head') options.headSha = argv[++index]
|
|
94
|
+
else if (arg === '--plan') options.plan = argv[++index]
|
|
95
|
+
else if (arg === '--out' || arg === '-o') options.out = argv[++index]
|
|
96
|
+
else if (arg === '--markdown') options.markdown = true
|
|
97
|
+
else if (arg === '--strict') options.strict = true
|
|
98
|
+
else if (arg === '--help' || arg === '-h') options.help = true
|
|
99
|
+
else if (arg.startsWith('--')) throw new Error(`unknown argument ${arg}`)
|
|
100
|
+
else positional.push(arg)
|
|
101
|
+
}
|
|
102
|
+
return { command: positional[0], file: positional[1], options }
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const USAGE = 'usage: head-check-set collect --repository owner/name --head <40-sha> [--plan plan.json] [--out out.json] [--markdown] [--strict]'
|
|
106
|
+
+ ' | report <artifact.json> | validate <artifact.json> --head <40-sha>'
|
|
107
|
+
|
|
108
|
+
export function runCli(argv, boundary = DEFAULT_BOUNDARY) {
|
|
109
|
+
let parsed
|
|
110
|
+
try { parsed = parseArgs(argv) } catch (error) { console.error(`head-check-set: ${error.message}`); return 2 }
|
|
111
|
+
const { command, file, options } = parsed
|
|
112
|
+
if (options.help || command === 'help' || command === undefined) { console.log(USAGE); return options.help || command === 'help' ? 0 : 2 }
|
|
113
|
+
|
|
114
|
+
if (command === 'collect') {
|
|
115
|
+
if (!nonEmpty(options.repository) || !/^[^/\s]+\/[^/\s]+$/.test(options.repository)) { console.error('head-check-set collect requires --repository owner/name'); return 2 }
|
|
116
|
+
if (!nonEmpty(options.headSha) || !SHA.test(options.headSha)) { console.error('head-check-set collect requires --head <full 40-character commit SHA>'); return 2 }
|
|
117
|
+
let plan = null
|
|
118
|
+
try {
|
|
119
|
+
if (options.plan) plan = JSON.parse(fs.readFileSync(options.plan, 'utf8'))
|
|
120
|
+
} catch (error) { console.error(`head-check-set: ${String(error.message || error)}`); return 2 }
|
|
121
|
+
let artifact
|
|
122
|
+
try {
|
|
123
|
+
artifact = collectHeadCheckSet({ repository: options.repository, headSha: options.headSha, plan }, boundary)
|
|
124
|
+
} catch (error) { console.error(`head-check-set: ${String(error.message || error)}`); return 2 }
|
|
125
|
+
const rendered = options.markdown ? renderHeadCheckSet(artifact) : `${JSON.stringify(artifact, null, 2)}\n`
|
|
126
|
+
if (options.out) fs.writeFileSync(options.out, rendered.endsWith('\n') ? rendered : `${rendered}\n`)
|
|
127
|
+
else console.log(rendered.replace(/\n$/, ''))
|
|
128
|
+
// Reported on stderr so that stdout stays exactly the artifact a pipe consumes.
|
|
129
|
+
console.error(`head-check-set: ${artifact.summary.outcome} at ${artifact.headSha} — ${artifact.summary.counts.requiredRed} required red, ${artifact.summary.counts.undeclaredRed} undeclared red, ${artifact.summary.counts.neverRan} never ran, ${artifact.summary.counts.startupFailures} zero-job workflow run(s)`)
|
|
130
|
+
for (const failure of artifact.signatures.startupFailures) {
|
|
131
|
+
console.error(`head-check-set: run ${failure.runId} "${failure.name}" completed ${failure.conclusion} having executed ZERO jobs${failure.nameEqualsPath ? ' — its name equals its file path, corroborating a workflow GitHub refused to parse' : ''}`)
|
|
132
|
+
}
|
|
133
|
+
for (const entry of artifact.partition.undeclaredRed) {
|
|
134
|
+
console.error(`head-check-set: UNDECLARED RED (not required, not gated here): ${entry.name} [${entry.source}] ${entry.conclusion ?? entry.status}`)
|
|
135
|
+
}
|
|
136
|
+
if (blocksOnRequiredSet(artifact)) return 1
|
|
137
|
+
return options.strict && artifact.partition.undeclaredRed.length ? 1 : 0
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (command === 'report') {
|
|
141
|
+
if (!file) { console.error('head-check-set report <artifact.json>'); return 2 }
|
|
142
|
+
console.log(renderHeadCheckSet(JSON.parse(fs.readFileSync(file, 'utf8'))))
|
|
143
|
+
return 0
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (command === 'validate') {
|
|
147
|
+
if (!file || !nonEmpty(options.headSha)) { console.error('head-check-set validate <artifact.json> --head <40-sha>'); return 2 }
|
|
148
|
+
const artifact = JSON.parse(fs.readFileSync(file, 'utf8'))
|
|
149
|
+
const verdict = validateHeadCheckSetArtifact(artifact, { expectedHeadSha: options.headSha })
|
|
150
|
+
if (verdict.ok) console.log(`head-check-set: valid ${artifact.summary.outcome} artifact at ${options.headSha}`)
|
|
151
|
+
else verdict.errors.forEach((error) => console.error(`error: ${error}`))
|
|
152
|
+
return verdict.ok ? 0 : 1
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
console.error(USAGE)
|
|
156
|
+
return 2
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (isMainModule(import.meta.url)) process.exit(runCli(process.argv.slice(2)))
|