@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,237 @@
|
|
|
1
|
+
# Mergify configuration template.
|
|
2
|
+
#
|
|
3
|
+
# Copy to the repository root as `.mergify.yml`, then replace every <PLACEHOLDER>
|
|
4
|
+
# and work through the TODOs. Validate before committing:
|
|
5
|
+
#
|
|
6
|
+
# mergify config validate
|
|
7
|
+
# mergify config simulate https://github.com/<owner>/<repo>/pull/<n>
|
|
8
|
+
#
|
|
9
|
+
# Shape of this template:
|
|
10
|
+
# - enqueue is HYBRID: AUTO on ready + review-PASS, MANUAL (`@mergifyio queue`) otherwise
|
|
11
|
+
# - batch mode, batch_size 3
|
|
12
|
+
# - update_method: rebase (head-freshness intent; see the note on it below)
|
|
13
|
+
# - one CI gate, defined once and asserted in three places
|
|
14
|
+
# - queue-only merges, with the admin escape hatch routed THROUGH Mergify
|
|
15
|
+
#
|
|
16
|
+
# Queue-only merges are half configured here and half in ruleset.json:
|
|
17
|
+
# its `update` rule makes Mergify the only actor that may write to the branch,
|
|
18
|
+
# so the admin escape hatch cannot be "merge it by hand" — it has to be
|
|
19
|
+
# something Mergify performs. That is the `pull_request_rules` block at the end.
|
|
20
|
+
|
|
21
|
+
shared:
|
|
22
|
+
# ---------------------------------------------------------------------------
|
|
23
|
+
# THE GATE. Define your CI requirement exactly ONCE here and reference it by
|
|
24
|
+
# anchor everywhere else, so the queue-entry gate, the queue-merge gate and the
|
|
25
|
+
# GitHub-required merge protection can never drift apart.
|
|
26
|
+
#
|
|
27
|
+
# TODO: replace `<ci-check-name>` with the GitHub check-run / status name.
|
|
28
|
+
#
|
|
29
|
+
# If that check is path-filtered in your workflow (`on.pull_request.paths`), a
|
|
30
|
+
# bare `check-success` is UNSATISFIABLE on a PR that touches none of those
|
|
31
|
+
# paths — the check is not failing, it is *absent*, and the PR sits in the
|
|
32
|
+
# queue forever. Wrap it in an `or` with the exemption, as shown, and list the
|
|
33
|
+
# workflow's own path so a workflow-only PR cannot ride through the gate's
|
|
34
|
+
# blind spot. Keep this list in step with the workflow's `paths:` filter.
|
|
35
|
+
#
|
|
36
|
+
# If your check runs on every PR (no `paths:` filter), delete the `or` and the
|
|
37
|
+
# `and` block and leave just `- check-success = <ci-check-name>`.
|
|
38
|
+
gate: &gate
|
|
39
|
+
or:
|
|
40
|
+
- check-success = <ci-check-name>
|
|
41
|
+
- and:
|
|
42
|
+
- -files ~= ^<gated-path>/
|
|
43
|
+
- -files ~= ^\.github/workflows/<workflow-file>\.yml$
|
|
44
|
+
|
|
45
|
+
# Optional second gate that runs ONLY on the queue's own batch branches
|
|
46
|
+
# (`mergify/merge-queue/…`), never on an ordinary PR — e.g. a repeat-run flake
|
|
47
|
+
# sweep that is only worth paying for once per batch. Same absent-vs-failing
|
|
48
|
+
# trap applies, so it is written the same way.
|
|
49
|
+
#
|
|
50
|
+
# TODO: delete this whole anchor and its use below if you have no batch-only job.
|
|
51
|
+
queue_gate: &queue_gate
|
|
52
|
+
or:
|
|
53
|
+
- check-success = <ci-check-name>-queue
|
|
54
|
+
- and:
|
|
55
|
+
- -files ~= ^<gated-path>/
|
|
56
|
+
- -files ~= ^\.github/workflows/<workflow-file>\.yml$
|
|
57
|
+
|
|
58
|
+
queue_rules:
|
|
59
|
+
- name: default
|
|
60
|
+
# Where GitHub branch-protection / ruleset requirements get injected.
|
|
61
|
+
# queue (default) — injected into BOTH queue-entry and merge conditions
|
|
62
|
+
# merge — injected only while merging
|
|
63
|
+
#
|
|
64
|
+
# Use `merge` when a Mergify-published check is itself REQUIRED by the
|
|
65
|
+
# ruleset: that check deliberately fails before the PR is in the queue, and
|
|
66
|
+
# with the default `queue` mode it would block the very enqueue step that
|
|
67
|
+
# makes it pass.
|
|
68
|
+
branch_protection_injection_mode: merge
|
|
69
|
+
|
|
70
|
+
# ---- Step 1: what a PR must satisfy to ENTER the queue --------------------
|
|
71
|
+
# `-draft` is deliberately ABSENT here, and from merge_conditions below.
|
|
72
|
+
# Enqueue is manual, so draft state is not the hold-back lever — nothing queues
|
|
73
|
+
# a draft by accident, and a draft condition that IS present shows up as a lone
|
|
74
|
+
# unmet condition on a PR nobody expected to be held. Do not add it back
|
|
75
|
+
# without reading the next paragraph.
|
|
76
|
+
#
|
|
77
|
+
# What the absence costs, stated plainly so it is a choice and not a surprise:
|
|
78
|
+
# GitHub cannot merge a draft pull request. A draft that gets enqueued anyway
|
|
79
|
+
# is admitted, rides a full batch CI run, reaches the front and fails at the
|
|
80
|
+
# merge call — taking the batch's innocent PRs through that failure with it.
|
|
81
|
+
# Marking a queued PR as draft also no longer pulls it out of the queue;
|
|
82
|
+
# use `@mergifyio dequeue` for that.
|
|
83
|
+
queue_conditions:
|
|
84
|
+
- base = <main-branch>
|
|
85
|
+
- *gate
|
|
86
|
+
|
|
87
|
+
# ---- Step 2: what must hold to MERGE from the front of the queue ----------
|
|
88
|
+
# Not redundant with step 1: Mergify tests the batch merged WITH its base
|
|
89
|
+
# here — a tree that existed when no individual PR's CI ran.
|
|
90
|
+
merge_conditions:
|
|
91
|
+
- *gate
|
|
92
|
+
- *queue_gate
|
|
93
|
+
|
|
94
|
+
# ---- BATCH MODE ----------------------------------------------------------
|
|
95
|
+
# Test up to 3 PRs as one CI run — this skill's default. The key must be
|
|
96
|
+
# explicit: unset, `batch_size` silently runs at Mergify's built-in default of
|
|
97
|
+
# 1 (no batching), so this line is what turns batching on. Mergify groups a batch by
|
|
98
|
+
# relationship (stacks together, then similar scopes/directories), not raw
|
|
99
|
+
# queue order. A red batch is bisected by Mergify, so innocent PRs are not
|
|
100
|
+
# discarded; only the culprit is dequeued.
|
|
101
|
+
#
|
|
102
|
+
# REQUIRED GitHub setting: "Require branches to be up to date before merging"
|
|
103
|
+
# must be DISABLED on the protected branch. Batches cannot merge with it on.
|
|
104
|
+
batch_size: 3
|
|
105
|
+
|
|
106
|
+
# How long to hold the gate open for a batch to fill. This is a straight
|
|
107
|
+
# latency tax on a LONE PR — Mergify waits the full window before giving up
|
|
108
|
+
# on company. Keep it short where PRs usually arrive one at a time.
|
|
109
|
+
batch_max_wait_time: 30 seconds
|
|
110
|
+
|
|
111
|
+
# Bound on how many times a failing batch may be split to isolate the
|
|
112
|
+
# culprit. Each split is another CI run. With batch_size 3 a single bad PR
|
|
113
|
+
# is normally found in ~2 splits; this only caps the pathological case.
|
|
114
|
+
batch_max_failure_resolution_attempts: 10
|
|
115
|
+
|
|
116
|
+
# ---- HEAD FRESHNESS ------------------------------------------------------
|
|
117
|
+
# `update_method` applies ONLY to in-place checks, and in-place checks are
|
|
118
|
+
# enabled only when max_parallel_checks == 1 AND every queue has
|
|
119
|
+
# batch_size == 1 AND every queue CI is single-step (no extra
|
|
120
|
+
# merge_conditions). With batch_size 3 it is therefore inert today: head
|
|
121
|
+
# freshness comes from the queue branch, which Mergify builds as
|
|
122
|
+
# base + batch and runs CI against.
|
|
123
|
+
#
|
|
124
|
+
# It is kept here deliberately so that dropping to batch_size 1 does not
|
|
125
|
+
# silently change update behaviour. To rebase the PR BRANCH ITSELF while
|
|
126
|
+
# batching, use the `update`/`rebase` action or `@mergifyio update`
|
|
127
|
+
# (see the skill's "Enforce head" section) — not this option.
|
|
128
|
+
update_method: rebase
|
|
129
|
+
|
|
130
|
+
merge_method: merge
|
|
131
|
+
|
|
132
|
+
merge_queue:
|
|
133
|
+
# Parallel speculative checks. Batch splits are tested in parallel during
|
|
134
|
+
# bisection, so a red batch resolves in roughly log time. There is nothing to
|
|
135
|
+
# gain from more parallel checks than a batch can split into.
|
|
136
|
+
max_parallel_checks: 3
|
|
137
|
+
|
|
138
|
+
merge_protections_settings:
|
|
139
|
+
# check-runs is what a GitHub branch ruleset can mark REQUIRED.
|
|
140
|
+
reporting_method: check-runs
|
|
141
|
+
post_comment: true
|
|
142
|
+
|
|
143
|
+
# ENQUEUE: AUTO on ready + review-PASS, MANUAL otherwise. A PR auto-queues the
|
|
144
|
+
# moment it is `-draft` (ready), has >=1 approval with no open change request,
|
|
145
|
+
# and the CI gate is green; short of that it waits for a human `@mergifyio queue`.
|
|
146
|
+
# The manual hatch always works — `@mergifyio queue` ignores these conditions,
|
|
147
|
+
# and `merge_conditions` gate on CI only — so a hand-queued PR merges on green
|
|
148
|
+
# without a review. `-draft` lives HERE, not in queue_conditions/merge_conditions
|
|
149
|
+
# (see the `-draft` note below).
|
|
150
|
+
#
|
|
151
|
+
# Do NOT use the deprecated `auto_merge: true` or `queue_rules[].autoqueue`.
|
|
152
|
+
# For fully MANUAL enqueue instead, delete this block and say so in a comment
|
|
153
|
+
# (an omitted key reads as an oversight and someone will "fix" it back).
|
|
154
|
+
auto_merge_conditions:
|
|
155
|
+
- "-draft"
|
|
156
|
+
- "#approved-reviews-by >= 1"
|
|
157
|
+
- "#changes-requested-reviews-by = 0"
|
|
158
|
+
- *gate
|
|
159
|
+
|
|
160
|
+
merge_protections:
|
|
161
|
+
# Republish the gate as a Mergify check-run so a GitHub ruleset has one stable
|
|
162
|
+
# check name to require — one that is GREEN (not absent) on an exempt PR, so
|
|
163
|
+
# requiring it cannot strand a docs-only PR.
|
|
164
|
+
#
|
|
165
|
+
# NEVER write `success_conditions: [queue-name = default]` here to "force all
|
|
166
|
+
# merges through the queue". Merge-protection conditions are injected into the
|
|
167
|
+
# queue's ENTRY conditions, while the ruleset requires the resulting check
|
|
168
|
+
# BEFORE entry — entry then waits on a check that cannot go green until after
|
|
169
|
+
# entry, and the repository deadlocks. `branch_protection_injection_mode:
|
|
170
|
+
# merge` does not prevent this; it governs GitHub-side injection, not
|
|
171
|
+
# Mergify's own merge_protections. Queue-only merges are enforced by the
|
|
172
|
+
# GitHub ruleset's `update` rule instead — see ruleset.json.
|
|
173
|
+
- name: <ci-check-name> (or exempt) before merge
|
|
174
|
+
description: >-
|
|
175
|
+
The CI gate, asserted as a required merge protection. Green when
|
|
176
|
+
<ci-check-name> succeeded, or when the PR touches no gated path (so the
|
|
177
|
+
job was never created) — never absent, so a ruleset can require it.
|
|
178
|
+
if:
|
|
179
|
+
- base = <main-branch>
|
|
180
|
+
success_conditions:
|
|
181
|
+
- *gate
|
|
182
|
+
|
|
183
|
+
# ---------------------------------------------------------------------------
|
|
184
|
+
# ADMIN ESCAPE HATCHES — both routed through Mergify.
|
|
185
|
+
#
|
|
186
|
+
# With the `update` rule in ruleset.json, Mergify is the only actor allowed to
|
|
187
|
+
# write to the protected branch. So "an admin merges it by hand" is no longer
|
|
188
|
+
# possible, and the escape hatch has to be an action Mergify takes. There are
|
|
189
|
+
# two, and they are NOT interchangeable.
|
|
190
|
+
# ---------------------------------------------------------------------------
|
|
191
|
+
|
|
192
|
+
# ESCAPE HATCH 1 (preferred): jump the line, keep the tests.
|
|
193
|
+
# The PR still enters the queue and still has to pass CI — it just stops waiting
|
|
194
|
+
# behind everything else. This covers the overwhelming majority of "this is
|
|
195
|
+
# urgent" cases and costs nothing in safety, so reach for it first.
|
|
196
|
+
priority_rules:
|
|
197
|
+
- name: urgent — front of the queue
|
|
198
|
+
conditions:
|
|
199
|
+
- label = urgent
|
|
200
|
+
priority: high
|
|
201
|
+
|
|
202
|
+
# ESCAPE HATCH 2 (break glass): skip the queue entirely.
|
|
203
|
+
# Merges immediately, WITHOUT the queue and WITHOUT the batch's CI run. This is
|
|
204
|
+
# the lever that can put a broken commit on the protected branch, so treat the
|
|
205
|
+
# label as the audited artifact: Mergify records the merge, and GitHub records
|
|
206
|
+
# who applied the label.
|
|
207
|
+
#
|
|
208
|
+
# GitHub cannot restrict who applies a label, and Mergify's `sender-permission`
|
|
209
|
+
# attribute only works for COMMANDS (`@mergifyio …`), not label events — so this
|
|
210
|
+
# rule cannot be technically limited to admins. It is a convention backed by an
|
|
211
|
+
# audit trail, not an enforced permission. If that is not good enough for you,
|
|
212
|
+
# delete this rule and let a genuine emergency go through the OrganizationAdmin
|
|
213
|
+
# bypass in ruleset.json instead, which GitHub does enforce and does audit.
|
|
214
|
+
#
|
|
215
|
+
# TODO: delete this whole rule if you would rather have no queue-skip at all.
|
|
216
|
+
pull_request_rules:
|
|
217
|
+
- name: emergency merge — skips the queue, use only when the queue cannot run
|
|
218
|
+
conditions:
|
|
219
|
+
- base = <main-branch>
|
|
220
|
+
- label = emergency-merge
|
|
221
|
+
- -draft
|
|
222
|
+
actions:
|
|
223
|
+
merge:
|
|
224
|
+
method: merge
|
|
225
|
+
comment:
|
|
226
|
+
message: >-
|
|
227
|
+
Merged via the `emergency-merge` label — this bypassed the merge queue
|
|
228
|
+
and its CI run. Please confirm the branch is healthy.
|
|
229
|
+
|
|
230
|
+
# Who may enqueue. Defaults are `sender-permission >= write` for `queue` and
|
|
231
|
+
# `dequeue`; tighten to `admin` if enqueueing should itself be a privileged act.
|
|
232
|
+
#
|
|
233
|
+
# TODO: delete this block to keep the defaults.
|
|
234
|
+
commands_restrictions:
|
|
235
|
+
queue:
|
|
236
|
+
conditions:
|
|
237
|
+
- sender-permission >= write
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "default",
|
|
3
|
+
"target": "branch",
|
|
4
|
+
"enforcement": "active",
|
|
5
|
+
"conditions": {
|
|
6
|
+
"ref_name": {
|
|
7
|
+
"include": ["~DEFAULT_BRANCH"],
|
|
8
|
+
"exclude": []
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"rules": [
|
|
12
|
+
{ "type": "deletion" },
|
|
13
|
+
{ "type": "non_fast_forward" },
|
|
14
|
+
{
|
|
15
|
+
"type": "update",
|
|
16
|
+
"parameters": {
|
|
17
|
+
"update_allows_fetch_and_merge": true
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "required_status_checks",
|
|
22
|
+
"parameters": {
|
|
23
|
+
"strict_required_status_checks_policy": false,
|
|
24
|
+
"do_not_enforce_on_create": false,
|
|
25
|
+
"required_status_checks": [
|
|
26
|
+
{
|
|
27
|
+
"context": "Mergify Merge Protections",
|
|
28
|
+
"integration_id": 10562
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"bypass_actors": [
|
|
35
|
+
{
|
|
36
|
+
"actor_id": 10562,
|
|
37
|
+
"actor_type": "Integration",
|
|
38
|
+
"bypass_mode": "always"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"actor_id": 1,
|
|
42
|
+
"actor_type": "OrganizationAdmin",
|
|
43
|
+
"bypass_mode": "always"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# Branch Protection: the GitHub ruleset
|
|
2
|
+
|
|
3
|
+
Everything GitHub-side that makes the Mergify queue binding. Read this when
|
|
4
|
+
**setting up or changing branch protection** — not needed to debug a stuck PR.
|
|
5
|
+
|
|
6
|
+
Contents:
|
|
7
|
+
|
|
8
|
+
- [Who enforces what](#who-enforces-what) — the bypass-scope problem, and
|
|
9
|
+
what GitHub enforces vs what Mergify enforces
|
|
10
|
+
- [What the rules do](#what-the-rules-do)
|
|
11
|
+
- [Applying it](#applying-it) · [Dry-run first](#dry-run-first) · [Bypass actors](#bypass-actors)
|
|
12
|
+
- [Enforcing queue-only merges](#enforcing-queue-only-merges) — the `update` rule,
|
|
13
|
+
what it breaks, the admin escape hatch, and how to verify
|
|
14
|
+
|
|
15
|
+
### Who enforces what
|
|
16
|
+
|
|
17
|
+
One ruleset, and it is worth being exact about what it does and does not do —
|
|
18
|
+
this is the part most likely to be misread.
|
|
19
|
+
|
|
20
|
+
**Bypass is granted per *ruleset*, never per rule.** `bypass_actors` sits on the
|
|
21
|
+
ruleset; individual rules have no bypass field. An actor that bypasses one rule
|
|
22
|
+
bypasses *every* rule in that ruleset.
|
|
23
|
+
|
|
24
|
+
That matters because the `update` rule permits only bypass actors to write to the
|
|
25
|
+
branch, so Mergify **must** be a bypass actor or it cannot merge at all. Which
|
|
26
|
+
means Mergify also bypasses `required_status_checks` in the same ruleset. So the
|
|
27
|
+
division of labour is:
|
|
28
|
+
|
|
29
|
+
| Concern | Enforced by |
|
|
30
|
+
|---|---|
|
|
31
|
+
| Nobody but Mergify writes to the branch | **GitHub** — the `update` rule |
|
|
32
|
+
| A red PR does not merge | **Mergify** — `merge_conditions` in `.mergify.yml` |
|
|
33
|
+
| Branch not deleted or force-pushed | **GitHub** — but admins bypass |
|
|
34
|
+
|
|
35
|
+
CI *is* enforced. Just by Mergify, not by GitHub. That is a real property, not a
|
|
36
|
+
gap: the queue will not merge a PR whose `*gate` is red.
|
|
37
|
+
|
|
38
|
+
**Why not split into two rulesets so GitHub checks Mergify too?** It was
|
|
39
|
+
considered and rejected. You can put `required_status_checks` in a second ruleset
|
|
40
|
+
that Mergify does not bypass — but the check being required is
|
|
41
|
+
`Mergify Merge Protections`, whose pass/fail is computed from `*gate` in
|
|
42
|
+
`.mergify.yml`. Weaken the gate and that check goes green along with it, so the
|
|
43
|
+
second ruleset does not actually verify anything independently. It costs a second
|
|
44
|
+
object to manage and buys almost nothing.
|
|
45
|
+
|
|
46
|
+
If you genuinely want GitHub-side CI enforcement independent of `.mergify.yml`,
|
|
47
|
+
the missing piece is not a second ruleset — it is a CI job that **always reports**
|
|
48
|
+
(no `paths:` filter, or an always-run job that reports success when no gated path
|
|
49
|
+
changed). Require that job directly, in a ruleset Mergify does not bypass. Until
|
|
50
|
+
the job always reports, GitHub cannot require it without stranding path-exempt
|
|
51
|
+
PRs, which is the whole reason the Mergify check exists as an intermediary.
|
|
52
|
+
|
|
53
|
+
### Then why keep `required_status_checks` at all?
|
|
54
|
+
|
|
55
|
+
With `update` active it gates nobody: non-bypass users cannot write regardless,
|
|
56
|
+
and Mergify and admins bypass. It earns its place as a **backstop** — if the
|
|
57
|
+
`update` rule is ever removed or the ruleset stops targeting the branch, the
|
|
58
|
+
required check immediately becomes load-bearing again and ordinary users are
|
|
59
|
+
still gated. Keep it, but do not mistake it for something that constrains
|
|
60
|
+
Mergify's merges. It does not.
|
|
61
|
+
|
|
62
|
+
### What the rules do
|
|
63
|
+
|
|
64
|
+
| Rule | Why |
|
|
65
|
+
|------|-----|
|
|
66
|
+
| `deletion` | Nobody deletes the protected branch. |
|
|
67
|
+
| `non_fast_forward` | No force-push. The queue's whole model assumes base history only moves forward. |
|
|
68
|
+
| `required_status_checks` → `Mergify Merge Protections` | The one required check. **Require Mergify's check-run, not the raw CI job** — see below. |
|
|
69
|
+
| `strict_required_status_checks_policy: false` | **Mandatory with `batch_size > 1`.** This is GitHub's "Require branches to be up to date before merging"; batches cannot merge with it on. |
|
|
70
|
+
| `update` | **Only bypass actors may write to the branch.** This is what makes the queue mandatory — see [Enforcing Queue-Only Merges](#enforcing-queue-only-merges). Read that section first; it blocks CI bots too. |
|
|
71
|
+
|
|
72
|
+
**Require the Mergify check, not the CI job.** `integration_id: 10562` is
|
|
73
|
+
Mergify's GitHub App, and pinning it means only Mergify can publish the check —
|
|
74
|
+
another app cannot spoof the context name. The raw CI job is the wrong thing to
|
|
75
|
+
require because it is *absent*, not failing, on a path-exempt PR, and a ruleset
|
|
76
|
+
cannot tell "skipped" from "missing". It would strand exactly those PRs. Mergify's
|
|
77
|
+
check-run carries the same exemption logic and is always produced, so it is
|
|
78
|
+
green-or-red but never missing.
|
|
79
|
+
|
|
80
|
+
Verify Mergify's app id rather than trusting this document:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
gh api /apps/mergify --jq '{id, slug, name}' # → 10562
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Applying it
|
|
87
|
+
|
|
88
|
+
`gh ruleset` is **read-only** (`list` / `view` / `check`). Creating and updating
|
|
89
|
+
goes through `gh api`.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Repository-level
|
|
93
|
+
gh api -X POST /repos/<owner>/<repo>/rulesets --input ruleset.json
|
|
94
|
+
|
|
95
|
+
# Update an existing one (find the id with: gh ruleset list)
|
|
96
|
+
gh api -X PUT /repos/<owner>/<repo>/rulesets/<id> --input ruleset.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Consider applying it once with `"enforcement": "evaluate"` first (see
|
|
100
|
+
[Dry-run first](#dry-run-first)) — the `update` rule is the one most likely to
|
|
101
|
+
block something you forgot about.
|
|
102
|
+
|
|
103
|
+
**Org-level** rulesets cover many repos at once and need one extra condition —
|
|
104
|
+
otherwise the payload is identical:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# add to conditions: "repository_name": {"include": ["~ALL"], "exclude": []}
|
|
108
|
+
gh api -X POST /orgs/<org>/rulesets --input ruleset.json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
An org-level ruleset **cannot be edited from the repository**, only viewed. If
|
|
112
|
+
`gh ruleset list` shows `source_type: Organization`, take changes to the org.
|
|
113
|
+
|
|
114
|
+
### Dry-run first
|
|
115
|
+
|
|
116
|
+
Set `"enforcement": "evaluate"` instead of `"active"` to have GitHub record what
|
|
117
|
+
*would* have been blocked without blocking it. Apply, let a few PRs land, then
|
|
118
|
+
read the evaluations:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
gh api '/repos/<owner>/<repo>/rulesets/rule-suites?per_page=20' \
|
|
122
|
+
--jq '.[] | {actor_name, ref, result, pushed_at}'
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`result` is `pass` / `fail` / `bypass`. Flip to `"active"` once it reads the way
|
|
126
|
+
you expect. The template ships as `"active"` deliberately — a template left in
|
|
127
|
+
`evaluate` and forgotten is an unprotected branch that looks protected.
|
|
128
|
+
|
|
129
|
+
### Bypass actors
|
|
130
|
+
|
|
131
|
+
| `actor_type` | `actor_id` | Note |
|
|
132
|
+
|---|---|---|
|
|
133
|
+
| `Integration` | app id (Mergify = `10562`, GitHub Actions = `15368`) | |
|
|
134
|
+
| `OrganizationAdmin` | `1` | `actor_id` is ignored for this type; `null` also works |
|
|
135
|
+
| `RepositoryRole` | `5` = repository admin | Other role ids are not officially documented — copy them from an existing ruleset |
|
|
136
|
+
| `Team` | team id | |
|
|
137
|
+
| `DeployKey` | `null` | |
|
|
138
|
+
|
|
139
|
+
`bypass_mode` is one of:
|
|
140
|
+
|
|
141
|
+
| Mode | Behaviour |
|
|
142
|
+
|---|---|
|
|
143
|
+
| `always` | Bypasses everywhere, **and writes an audit-log entry** |
|
|
144
|
+
| `pull_request` | May bypass only through a PR (branch rulesets only) |
|
|
145
|
+
| `exempt` | Rules are not evaluated for this actor at all — **no audit entry** |
|
|
146
|
+
|
|
147
|
+
Prefer `always` over `exempt` for anything you want a record of. `exempt` is the
|
|
148
|
+
quieter setting and that is exactly its problem on a break-glass path.
|
|
149
|
+
|
|
150
|
+
Discover ids you don't know by reading a ruleset that already has the actor you
|
|
151
|
+
want:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
gh api /repos/<owner>/<repo>/rulesets/<id> --jq '.bypass_actors'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Note that `bypass_actors` is only returned if you have write access to the
|
|
158
|
+
ruleset — an empty list may mean "no permission", not "no bypasses".
|
|
159
|
+
|
|
160
|
+
## Enforcing Queue-Only Merges
|
|
161
|
+
|
|
162
|
+
Requiring a status check does **not** get you this. Once the check goes green,
|
|
163
|
+
anyone with write access can press "Merge pull request" and the queue never sees
|
|
164
|
+
the PR. To make the queue mandatory you need the ruleset's **`update`** rule:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{ "type": "update", "parameters": { "update_allows_fetch_and_merge": true } }
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
GitHub calls this "Restrict updates": *only users with bypass permission can push
|
|
171
|
+
to matching branches*. A PR merge is a write to the branch, so with `update` on
|
|
172
|
+
the default branch and **only Mergify (plus the admin break-glass) bypassing**,
|
|
173
|
+
Mergify becomes the only thing that routinely puts a commit on `main`. The merge
|
|
174
|
+
button fails for everyone else. That is the enforcement — nothing in
|
|
175
|
+
`.mergify.yml` can do it.
|
|
176
|
+
|
|
177
|
+
`update_allows_fetch_and_merge` covers a fork's branch pulling from its upstream,
|
|
178
|
+
which does not apply to a protected default branch either way; `true` matches
|
|
179
|
+
GitHub's UI default.
|
|
180
|
+
|
|
181
|
+
### What this breaks, and you must fix
|
|
182
|
+
|
|
183
|
+
`update` blocks **every** non-bypass writer, not just humans clicking merge.
|
|
184
|
+
Before enabling it, inventory anything that pushes to the protected branch and
|
|
185
|
+
add it as a bypass actor, or it silently starts failing:
|
|
186
|
+
|
|
187
|
+
- release automation that commits a version bump or CHANGELOG
|
|
188
|
+
- `actions/github-script` or bots pushing back to `main`
|
|
189
|
+
- tag-and-push release jobs
|
|
190
|
+
- anything using the default `GITHUB_TOKEN` to push
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# does anything push to the protected branch?
|
|
194
|
+
grep -rnE 'git push|peter-evans/create-pull-request|github-script' .github/workflows/
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
A GitHub Actions push needs `{"actor_type": "Integration", "actor_id": 15368}`
|
|
198
|
+
(GitHub Actions app) as a bypass actor. Verify with `gh api /apps/github-actions --jq .id`.
|
|
199
|
+
|
|
200
|
+
### The admin escape hatch, routed through Mergify
|
|
201
|
+
|
|
202
|
+
Once Mergify is the only writer, "an admin merges it by hand" no longer exists.
|
|
203
|
+
The escape hatch has to be something *Mergify* performs. The template ships two,
|
|
204
|
+
and they are not interchangeable:
|
|
205
|
+
|
|
206
|
+
| | Lever | Skips CI? | Enforced? |
|
|
207
|
+
|---|---|---|---|
|
|
208
|
+
| **1. Jump the line** | `priority_rules` + `urgent` label | No — still queued and tested | n/a |
|
|
209
|
+
| **2. Break glass** | `pull_request_rules` merge action + `emergency-merge` label | **Yes** | Convention + audit trail only |
|
|
210
|
+
| **3. Lockout escape** | `OrganizationAdmin` bypass in the ruleset | Yes | Yes, by GitHub |
|
|
211
|
+
|
|
212
|
+
**Reach for (1) first.** Most "this is urgent" is impatience with the queue, not
|
|
213
|
+
a need to skip testing. Priority costs nothing in safety.
|
|
214
|
+
|
|
215
|
+
**(2) cannot be limited to admins**, and you should know that before relying on
|
|
216
|
+
it. GitHub cannot restrict who applies a label, and Mergify's `sender-permission`
|
|
217
|
+
attribute only works for `@mergifyio …` **commands**, not label events. So the
|
|
218
|
+
rule is a convention with an audit trail — GitHub records who applied the label,
|
|
219
|
+
Mergify records and comments on the merge — not an enforced permission. There is
|
|
220
|
+
no `@mergifyio merge` command to gate instead; the command set is `queue`,
|
|
221
|
+
`dequeue`, `requeue`, `rebase`, `refresh`, `update`, `squash`, `backport`, `copy`.
|
|
222
|
+
|
|
223
|
+
**Keep (3).** If Mergify is the only actor allowed to write to `main` and Mergify
|
|
224
|
+
has an outage, the repository is frozen — nobody can merge anything, including
|
|
225
|
+
the fix. `OrganizationAdmin` bypass is the way out. Use `bypass_mode: always`,
|
|
226
|
+
not `exempt`: `always` writes a bypass entry to the audit log, `exempt` skips the
|
|
227
|
+
rules without recording anything. For a break-glass path you want the record.
|
|
228
|
+
|
|
229
|
+
Drop the `OrganizationAdmin` entry only if you consciously accept the lockout
|
|
230
|
+
risk. Do not drop it by accident.
|
|
231
|
+
|
|
232
|
+
You can also tighten who may enqueue at all — `queue` and `dequeue` default to
|
|
233
|
+
`sender-permission >= write`:
|
|
234
|
+
|
|
235
|
+
```yaml
|
|
236
|
+
commands_restrictions:
|
|
237
|
+
queue:
|
|
238
|
+
conditions:
|
|
239
|
+
- sender-permission >= admin
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Verify it actually enforces
|
|
243
|
+
|
|
244
|
+
The JSON looking right is not evidence, and the two failure directions need
|
|
245
|
+
separate tests. Prove the **allowed** path first — a ruleset strict enough to
|
|
246
|
+
block humans can also block Mergify if a bypass id is wrong, and you would rather
|
|
247
|
+
discover that before you can no longer merge the fix.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
gh ruleset list --repo <owner>/<repo> # both rulesets present? whose are they?
|
|
251
|
+
gh ruleset check main # confirm both apply to this branch
|
|
252
|
+
|
|
253
|
+
# 1. the allowed path still works
|
|
254
|
+
# enqueue a PR with `@mergifyio queue`, then:
|
|
255
|
+
mergify queue show <PR> -v # watch it through to merge
|
|
256
|
+
|
|
257
|
+
# 2. the blocked path is blocked
|
|
258
|
+
gh pr create --title "ruleset probe" --body "do not merge"
|
|
259
|
+
gh pr merge <PR> --merge # MUST fail for a non-bypass user
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Expect a rejection naming the ruleset. **If it merges anyway**, the usual causes,
|
|
263
|
+
in order: you are a bypass actor yourself (org admins are — test with a non-admin
|
|
264
|
+
account); the ruleset is not targeting the branch (`gh ruleset check main`); or
|
|
265
|
+
`update` was left out of the queue-only ruleset, in which case the required check
|
|
266
|
+
is the only gate and a green check lets anyone merge.
|
|
267
|
+
|
|
268
|
+
Audit what has been landing and by whom:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
gh api '/repos/<owner>/<repo>/rulesets/rule-suites?per_page=30' \
|
|
272
|
+
--jq '.[] | select(.result != "pass") | {actor_name, result, pushed_at}'
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
`result: bypass` rows are the escape hatches being used. If they are routine,
|
|
276
|
+
the queue is too slow or too strict — fix that rather than normalising bypass.
|
|
277
|
+
|