@1aboveio/skills 0.0.0-stage → 1.0.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/README.md +30 -2
- package/bin/cli.mjs +14 -0
- package/bin/select-core.mjs +172 -0
- package/package.json +146 -4
- package/skills/app-dev/airflow/LICENSE +3 -0
- package/skills/app-dev/airflow/SKILL.md +199 -0
- package/skills/app-dev/airflow/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/LICENSE +3 -0
- package/skills/app-dev/android-foundation/SKILL.md +192 -0
- package/skills/app-dev/android-foundation/assets/android-ci-job.yml +217 -0
- package/skills/app-dev/android-foundation/references/ci.md +87 -0
- package/skills/app-dev/android-foundation/references/gotchas.md +221 -0
- package/skills/app-dev/android-foundation/references/setup.md +164 -0
- package/skills/app-dev/android-foundation/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/scripts/device-run.sh +176 -0
- package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +172 -0
- package/skills/app-dev/app-debug/LICENSE +3 -0
- package/skills/app-dev/app-debug/SKILL.md +110 -0
- package/skills/app-dev/app-debug/references/common-errors.md +128 -0
- package/skills/app-dev/app-debug/release-check.mjs +93 -0
- package/skills/app-dev/better-auth/LICENSE +3 -0
- package/skills/app-dev/better-auth/SKILL.md +598 -0
- package/skills/app-dev/better-auth/references/feishu-api.md +270 -0
- package/skills/app-dev/better-auth/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/LICENSE +3 -0
- package/skills/app-dev/data-catalog/SKILL.md +204 -0
- package/skills/app-dev/data-catalog/agents/openai.yaml +3 -0
- package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +75 -0
- package/skills/app-dev/data-catalog/references/field-definitions.md +116 -0
- package/skills/app-dev/data-catalog/references/format.md +121 -0
- package/skills/app-dev/data-catalog/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +36 -0
- package/skills/app-dev/data-catalog/scripts/data_catalog.py +1392 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +117 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +17 -0
- package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +571 -0
- package/skills/app-dev/ios-foundation/LICENSE +3 -0
- package/skills/app-dev/ios-foundation/SKILL.md +184 -0
- package/skills/app-dev/ios-foundation/references/setup.md +243 -0
- package/skills/app-dev/ios-foundation/release-check.mjs +93 -0
- package/skills/app-dev/monorepo/LICENSE +3 -0
- package/skills/app-dev/monorepo/SKILL.md +462 -0
- package/skills/app-dev/monorepo/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/LICENSE +3 -0
- package/skills/app-dev/nextjs-fullstack/SKILL.md +211 -0
- package/skills/app-dev/nextjs-fullstack/conventions.md +318 -0
- package/skills/app-dev/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/app-dev/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/app-dev/nextjs-fullstack/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/server-actions.md +409 -0
- package/skills/app-dev/prisma-setup/LICENSE +3 -0
- package/skills/app-dev/prisma-setup/SKILL.md +181 -0
- package/skills/app-dev/prisma-setup/nextjs.md +258 -0
- package/skills/app-dev/prisma-setup/release-check.mjs +93 -0
- package/skills/app-dev/prisma-setup/turborepo.md +301 -0
- package/skills/app-dev/pyspark/LICENSE +3 -0
- package/skills/app-dev/pyspark/SKILL.md +127 -0
- package/skills/app-dev/pyspark/assets/templates/etl.py +748 -0
- package/skills/app-dev/pyspark/assets/templates/utils/__init__.py +1 -0
- package/skills/app-dev/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
- package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +169 -0
- package/skills/app-dev/pyspark/references/etl-contract.md +129 -0
- package/skills/app-dev/pyspark/references/production-validation.md +131 -0
- package/skills/app-dev/pyspark/references/reconciliation.md +38 -0
- package/skills/app-dev/pyspark/references/transformation-design.md +190 -0
- package/skills/app-dev/pyspark/references/velocity-feature-calculation.md +193 -0
- package/skills/app-dev/pyspark/release-check.mjs +93 -0
- package/skills/app-dev/pyspark/scripts/spark_eventlog_summary.py +223 -0
- package/skills/app-dev/python-backend/LICENSE +3 -0
- package/skills/app-dev/python-backend/SKILL.md +325 -0
- package/skills/app-dev/python-backend/assets/uv-install.sh +48 -0
- package/skills/app-dev/python-backend/references/uv-installs.md +83 -0
- package/skills/app-dev/python-backend/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/LICENSE +3 -0
- package/skills/app-dev/shadcn/SKILL.md +120 -0
- package/skills/app-dev/shadcn/assets/shadcn-small.png +0 -0
- package/skills/app-dev/shadcn/assets/shadcn.png +0 -0
- package/skills/app-dev/shadcn/cli.md +411 -0
- package/skills/app-dev/shadcn/customization.md +224 -0
- package/skills/app-dev/shadcn/mcp.md +101 -0
- package/skills/app-dev/shadcn/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/app-dev/shadcn/rules/component-selection.md +67 -0
- package/skills/app-dev/shadcn/rules/composition.md +195 -0
- package/skills/app-dev/shadcn/rules/data-table.md +201 -0
- package/skills/app-dev/shadcn/rules/forms.md +255 -0
- package/skills/app-dev/shadcn/rules/icons.md +103 -0
- package/skills/app-dev/shadcn/rules/styling.md +167 -0
- package/skills/app-dev/zod-v4/LICENSE +3 -0
- package/skills/app-dev/zod-v4/SKILL.md +286 -0
- package/skills/app-dev/zod-v4/release-check.mjs +93 -0
- package/skills/cicd/cloud-build/LICENSE +3 -0
- package/skills/cicd/cloud-build/SKILL.md +707 -0
- package/skills/cicd/cloud-build/release-check.mjs +93 -0
- package/skills/cicd/cloud-debug/LICENSE +3 -0
- package/skills/cicd/cloud-debug/SKILL.md +315 -0
- package/skills/cicd/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd/cloud-debug/release-check.mjs +93 -0
- package/skills/cicd/cloud-deploy/LICENSE +3 -0
- package/skills/cicd/cloud-deploy/SKILL.md +230 -0
- package/skills/cicd/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd/cloud-deploy/release-check.mjs +93 -0
- package/skills/cicd/docker/LICENSE +3 -0
- package/skills/cicd/docker/SKILL.md +151 -0
- package/skills/cicd/docker/release-check.mjs +93 -0
- package/skills/cicd/github-actions/LICENSE +3 -0
- package/skills/cicd/github-actions/SKILL.md +111 -0
- package/skills/cicd/github-actions/references/audit-profile-optimize.md +150 -0
- package/skills/cicd/github-actions/references/ci-case-studies.md +141 -0
- package/skills/cicd/github-actions/references/conditional-ci.md +214 -0
- package/skills/cicd/github-actions/references/debugging.md +13 -0
- package/skills/cicd/github-actions/references/pipeline.md +87 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +33 -0
- package/skills/cicd/github-actions/references/runners.md +253 -0
- package/skills/cicd/github-actions/references/security.md +29 -0
- package/skills/cicd/github-actions/references/speed-and-audit.md +115 -0
- package/skills/cicd/github-actions/references/two-pass-reading.md +92 -0
- package/skills/cicd/github-actions/release-check.mjs +93 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit-core.mjs +612 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.mjs +4 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +637 -0
- package/skills/cicd/github-flow/LICENSE +3 -0
- package/skills/cicd/github-flow/SKILL.md +123 -0
- package/skills/cicd/github-flow/references/ci-conventions.md +14 -0
- package/skills/cicd/github-flow/release-check.mjs +93 -0
- package/skills/cicd/github-flow/scripts/flow-core.mjs +105 -0
- package/skills/cicd/github-flow/scripts/flow.mjs +81 -0
- package/skills/cicd/github-flow/scripts/flow.test.mjs +114 -0
- package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +117 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.mjs +49 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +108 -0
- package/skills/cicd/google-cloud/LICENSE +3 -0
- package/skills/cicd/google-cloud/SKILL.md +119 -0
- package/skills/cicd/google-cloud/references/gcs.md +469 -0
- package/skills/cicd/google-cloud/references/iam.md +451 -0
- package/skills/cicd/google-cloud/references/project.md +349 -0
- package/skills/cicd/google-cloud/references/secrets.md +336 -0
- package/skills/cicd/google-cloud/references/vpc.md +312 -0
- package/skills/cicd/google-cloud/release-check.mjs +93 -0
- package/skills/cicd/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd/mergify/LICENSE +3 -0
- package/skills/cicd/mergify/SKILL.md +102 -0
- package/skills/cicd/mergify/assets/templates/mergify.yml +215 -0
- package/skills/cicd/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd/mergify/references/branch-protection.md +282 -0
- package/skills/cicd/mergify/references/configuration.md +274 -0
- package/skills/cicd/mergify/references/diagnosis.md +109 -0
- package/skills/cicd/mergify/references/stacks.md +84 -0
- package/skills/cicd/mergify/references/traps.md +119 -0
- package/skills/cicd/mergify/references/watch-contract.md +274 -0
- package/skills/cicd/mergify/release-check.mjs +93 -0
- package/skills/cicd/mergify/scripts/audit-core.mjs +208 -0
- package/skills/cicd/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd/mergify/scripts/audit.test.mjs +201 -0
- package/skills/cicd/mergify/scripts/entrypoints.test.mjs +106 -0
- package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +30 -0
- package/skills/cicd/mergify/scripts/stack-push-core.mjs +258 -0
- package/skills/cicd/mergify/scripts/stack-push.mjs +4 -0
- package/skills/cicd/mergify/scripts/stack-push.test.mjs +233 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +1065 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +1826 -0
- package/skills/cicd/podman/LICENSE +3 -0
- package/skills/cicd/podman/SKILL.md +71 -0
- package/skills/cicd/podman/agents/openai.yaml +4 -0
- package/skills/cicd/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd/podman/references/troubleshooting.md +98 -0
- package/skills/cicd/podman/release-check.mjs +93 -0
- package/skills/content/article-review/LICENSE +3 -0
- package/skills/content/article-review/SKILL.md +66 -0
- package/skills/content/article-review/references/report-format.md +68 -0
- package/skills/content/article-review/references/template-guide.md +79 -0
- package/skills/content/article-review/references/template-wechat-payments.md +125 -0
- package/skills/content/article-review/release-check.mjs +93 -0
- package/skills/content/article-to-image/LICENSE +3 -0
- package/skills/content/article-to-image/SKILL.md +91 -0
- package/skills/content/article-to-image/references/formats.md +53 -0
- package/skills/content/article-to-image/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/LICENSE +3 -0
- package/skills/content/flowchart-svg/SKILL.md +43 -0
- package/skills/content/flowchart-svg/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/scripts/export_png.sh +8 -0
- package/skills/content/image-gen/LICENSE +3 -0
- package/skills/content/image-gen/SKILL.md +192 -0
- package/skills/content/image-gen/release-check.mjs +93 -0
- package/skills/content/image-gen/scripts/credentials.mjs +217 -0
- package/skills/content/image-gen/scripts/credentials.test.mjs +212 -0
- package/skills/content/image-gen/scripts/generate.mjs +240 -0
- package/skills/content/image-gen/scripts/options.mjs +293 -0
- package/skills/content/image-gen/scripts/options.test.mjs +245 -0
- package/skills/content/mermaid/LICENSE +3 -0
- package/skills/content/mermaid/SKILL.md +635 -0
- package/skills/content/mermaid/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/LICENSE +3 -0
- package/skills/content/wechat-article-writer/SKILL.md +92 -0
- package/skills/content/wechat-article-writer/references/style-selector.md +133 -0
- package/skills/content/wechat-article-writer/references/writing-rules.md +152 -0
- package/skills/content/wechat-article-writer/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/templates/wechat-comparison.md +52 -0
- package/skills/content/wechat-article-writer/templates/wechat-howto.md +51 -0
- package/skills/content/wechat-article-writer/templates/wechat-insight.md +50 -0
- package/skills/content/wechat-article-writer/templates/wechat-pitfall.md +52 -0
- package/skills/content/wechat-publisher/LICENSE +3 -0
- package/skills/content/wechat-publisher/SKILL.md +171 -0
- package/skills/content/wechat-publisher/references/api.md +105 -0
- package/skills/content/wechat-publisher/references/layout-rules.md +57 -0
- package/skills/content/wechat-publisher/references/wechat-safe-template.html +86 -0
- package/skills/content/wechat-publisher/release-check.mjs +93 -0
- package/skills/content/wechat-publisher/scripts/md_to_wechat_html.py +194 -0
- package/skills/content/wechat-publisher/scripts/publish.py +239 -0
- package/skills/content/wechat-search/LICENSE +3 -0
- package/skills/content/wechat-search/SKILL.md +211 -0
- package/skills/content/wechat-search/release-check.mjs +93 -0
- package/skills/content/wechat-search/scripts/start-chrome.sh +83 -0
- package/skills/content/xai-search/LICENSE +3 -0
- package/skills/content/xai-search/SKILL.md +79 -0
- package/skills/content/xai-search/release-check.mjs +93 -0
- package/skills/content/xai-search/scripts/xai_search.sh +187 -0
- package/skills/content/xai-search/tests/smoke_test.sh +36 -0
- package/skills/core/distill-writing/LICENSE +3 -0
- package/skills/core/distill-writing/SKILL.md +74 -0
- package/skills/core/distill-writing/references/extraction.md +95 -0
- package/skills/core/distill-writing/references/updating.md +46 -0
- package/skills/core/distill-writing/release-check.mjs +93 -0
- package/skills/core/doc-to-md/LICENSE +3 -0
- package/skills/core/doc-to-md/SKILL.md +78 -0
- package/skills/core/doc-to-md/release-check.mjs +93 -0
- package/skills/core/doc-to-md/scripts/convert.py +157 -0
- package/skills/core/editorial-review/LICENSE +3 -0
- package/skills/core/editorial-review/SKILL.md +79 -0
- package/skills/core/editorial-review/references/checklist.md +94 -0
- package/skills/core/editorial-review/release-check.mjs +93 -0
- package/skills/core/house-style/LICENSE +3 -0
- package/skills/core/house-style/SKILL.md +33 -0
- package/skills/core/house-style/references/defaults.md +66 -0
- package/skills/core/house-style/references/rules.md +267 -0
- package/skills/core/house-style/references/sources.md +27 -0
- package/skills/core/house-style/references/style-en.md +131 -0
- package/skills/core/house-style/references/style-zh.md +141 -0
- package/skills/core/house-style/references/terminology-zh.md +223 -0
- package/skills/core/house-style/release-check.mjs +93 -0
- package/skills/core/house-style/templates/brd.md +103 -0
- package/skills/core/house-style/templates/commercial-proposal.md +93 -0
- package/skills/core/house-style/templates/compliance-policy.md +109 -0
- package/skills/core/house-style/templates/gap-analysis.md +105 -0
- package/skills/core/house-style/templates/general.md +63 -0
- package/skills/core/house-style/templates/integration-guide.md +98 -0
- package/skills/core/house-style/templates/prd.md +81 -0
- package/skills/core/house-style/templates/risk-operations-procedure.md +94 -0
- package/skills/core/house-style/templates/technical-spec.md +96 -0
- package/skills/core/polish-cn/LICENSE +3 -0
- package/skills/core/polish-cn/SKILL.md +102 -0
- package/skills/core/polish-cn/references/brief.md +93 -0
- package/skills/core/polish-cn/references/models.md +76 -0
- package/skills/core/polish-cn/release-check.mjs +93 -0
- package/skills/core/polish-cn/scripts/polish-cn.test.mjs +244 -0
- package/skills/core/polish-cn/scripts/polish_blocks.py +489 -0
- package/skills/core/reg-parser/LICENSE +3 -0
- package/skills/core/reg-parser/SKILL.md +212 -0
- package/skills/core/reg-parser/references/checklist-schema.md +223 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
- package/skills/core/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
- package/skills/core/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
- package/skills/core/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
- package/skills/core/reg-parser/references/mandates/visa-vars.md +205 -0
- package/skills/core/reg-parser/release-check.mjs +93 -0
- package/skills/core/reg-parser/scripts/compare_checklist.py +230 -0
- package/skills/core/reg-parser/scripts/dump_checklist.py +361 -0
- package/skills/core/reg-parser/scripts/preprocess-mandate.sh +187 -0
- package/skills/core/reg-parser/scripts/reg-parser.test.mjs +165 -0
- package/skills/core/reg-parser/scripts/test_quarantine.sh +105 -0
- package/skills/core/reg-parser/scripts/validate_checklist.py +563 -0
- package/skills/core/reg-parser/scripts/validate_mandate.py +273 -0
- package/skills/core/terminology/LICENSE +3 -0
- package/skills/core/terminology/SKILL.md +62 -0
- package/skills/core/terminology/references/format.md +50 -0
- package/skills/core/terminology/references/init.md +32 -0
- package/skills/core/terminology/release-check.mjs +93 -0
- package/skills/core/write-doc/LICENSE +3 -0
- package/skills/core/write-doc/SKILL.md +141 -0
- package/skills/core/write-doc/references/bilingual.md +60 -0
- package/skills/core/write-doc/release-check.mjs +93 -0
- package/skills/engineering/better-review/LICENSE +3 -0
- package/skills/engineering/better-review/SKILL.md +249 -0
- package/skills/engineering/better-review/agents/openai.yaml +9 -0
- package/skills/engineering/better-review/references/domain-hazards.md +53 -0
- package/skills/engineering/better-review/references/passes.md +147 -0
- package/skills/engineering/better-review/references/result.md +151 -0
- package/skills/engineering/better-review/release-check.mjs +93 -0
- package/skills/engineering/better-review/scripts/pr-context.mjs +212 -0
- package/skills/engineering/better-review/scripts/pr-context.test.mjs +168 -0
- package/skills/engineering/better-review/scripts/rereview-scope.mjs +503 -0
- package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +587 -0
- package/skills/engineering/better-review/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/better-review/scripts/scan-diff.test.mjs +414 -0
- package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +96 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +98 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +24 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +73 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +144 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +25 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +290 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +104 -0
- package/skills/engineering/e2e-test/references/reviewing.md +41 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +51 -0
- package/skills/engineering/e2e-test/release-check.mjs +93 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +106 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +117 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +69 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +98 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +147 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +71 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +59 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +82 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +76 -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 +11 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +597 -0
- package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +68 -0
- package/skills/engineering/engineering-runtime/release-check.mjs +93 -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/invocation-policy.mjs +187 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +95 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +79 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +288 -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/required-check-plan.test.mjs +96 -0
- package/skills/engineering/engineering-runtime/scripts/review-completion.mjs +56 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +595 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +189 -0
- package/skills/engineering/engineering-runtime/scripts/yaml-mapping.mjs +18 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +129 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +92 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +85 -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 +19 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +57 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +39 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +44 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +110 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +35 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +64 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +27 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +56 -0
- package/skills/engineering/ensure-coverage/release-check.mjs +93 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +67 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +140 -0
- package/skills/engineering/ensure-coverage/scripts/README.md +99 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +182 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +96 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +105 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +47 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +137 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +86 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +674 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +447 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +552 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +282 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +289 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/golden-path/LICENSE +3 -0
- package/skills/engineering/golden-path/SKILL.md +230 -0
- package/skills/engineering/golden-path/agents/openai.yaml +3 -0
- package/skills/engineering/golden-path/assets/golden-paths.example.json +57 -0
- package/skills/engineering/golden-path/references/contract.md +239 -0
- package/skills/engineering/golden-path/references/migration.md +111 -0
- package/skills/engineering/golden-path/release-check.mjs +93 -0
- package/skills/engineering/golden-path/scripts/golden-path-core.mjs +1779 -0
- package/skills/engineering/golden-path/scripts/golden-path.mjs +6 -0
- package/skills/engineering/golden-path/scripts/golden-path.test.mjs +1457 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +19 -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/discover-models.test.mjs +363 -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/harness-runtime.test.mjs +967 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +829 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/model-catalog.test.mjs +366 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +408 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/harness-runtime/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +250 -0
- package/skills/engineering/resolve-issues/agents/openai.yaml +9 -0
- package/skills/engineering/resolve-issues/plugin-hooks.json +17 -0
- package/skills/engineering/resolve-issues/references/canary.md +28 -0
- package/skills/engineering/resolve-issues/references/ci.md +105 -0
- package/skills/engineering/resolve-issues/references/done.md +25 -0
- package/skills/engineering/resolve-issues/references/dropbox.md +90 -0
- package/skills/engineering/resolve-issues/references/expire.md +318 -0
- package/skills/engineering/resolve-issues/references/exploration.md +202 -0
- package/skills/engineering/resolve-issues/references/implementation.md +303 -0
- package/skills/engineering/resolve-issues/references/preflight.md +445 -0
- package/skills/engineering/resolve-issues/references/review.md +228 -0
- package/skills/engineering/resolve-issues/references/shared-modules.md +44 -0
- package/skills/engineering/resolve-issues/references/task-plan.md +264 -0
- package/skills/engineering/resolve-issues/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +364 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +280 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.mjs +473 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +346 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +88 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.mjs +384 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +264 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +135 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.mjs +162 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +107 -0
- package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +14 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +149 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +856 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +915 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +269 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +156 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +736 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +448 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.mjs +185 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +217 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +91 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +509 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +1060 -0
- package/skills/engineering/resolve-issues/scripts/size-check.mjs +492 -0
- package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +458 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +215 -0
- package/skills/engineering/resolve-release/agents/openai.yaml +8 -0
- package/skills/engineering/resolve-release/flows/cloud-run-canary.md +13 -0
- package/skills/engineering/resolve-release/flows/cloud-run.md +7 -0
- package/skills/engineering/resolve-release/flows/root-tag-npm.md +13 -0
- package/skills/engineering/resolve-release/flows/workspace-npm.md +22 -0
- package/skills/engineering/resolve-release/references/canary.md +51 -0
- package/skills/engineering/resolve-release/references/candidate.md +41 -0
- package/skills/engineering/resolve-release/references/cut.md +131 -0
- package/skills/engineering/resolve-release/references/dark-launch.md +66 -0
- package/skills/engineering/resolve-release/references/flows.md +150 -0
- package/skills/engineering/resolve-release/references/preflight.md +154 -0
- package/skills/engineering/resolve-release/references/prepared-metadata.md +260 -0
- package/skills/engineering/resolve-release/references/promotion.md +82 -0
- package/skills/engineering/resolve-release/references/publish.md +232 -0
- package/skills/engineering/resolve-release/references/workspace-npm.md +103 -0
- package/skills/engineering/resolve-release/release-check.mjs +93 -0
- package/skills/engineering/resolve-release/scripts/apply.mjs +212 -0
- package/skills/engineering/resolve-release/scripts/apply.test.mjs +99 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.mjs +134 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +100 -0
- package/skills/engineering/resolve-release/scripts/flow.mjs +500 -0
- package/skills/engineering/resolve-release/scripts/flow.test.mjs +340 -0
- package/skills/engineering/resolve-release/scripts/green-head.mjs +231 -0
- package/skills/engineering/resolve-release/scripts/green-head.test.mjs +101 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.mjs +138 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +426 -0
- package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +317 -0
- package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +291 -0
- package/skills/engineering/resolve-release/scripts/plan.mjs +806 -0
- package/skills/engineering/resolve-release/scripts/plan.test.mjs +428 -0
- package/skills/engineering/rush-issues/LICENSE +3 -0
- package/skills/engineering/rush-issues/SKILL.md +58 -0
- package/skills/engineering/rush-issues/agents/openai.yaml +8 -0
- package/skills/engineering/rush-issues/rehydrate.mjs +10 -0
- package/skills/engineering/rush-issues/release-check.mjs +93 -0
- package/skills/engineering/rush-release/LICENSE +3 -0
- package/skills/engineering/rush-release/SKILL.md +35 -0
- package/skills/engineering/rush-release/agents/openai.yaml +8 -0
- package/skills/engineering/rush-release/release-check.mjs +93 -0
- package/skills/engineering/test-quality/LICENSE +3 -0
- package/skills/engineering/test-quality/SKILL.md +79 -0
- package/skills/engineering/test-quality/references/audit.md +80 -0
- package/skills/engineering/test-quality/references/lint.md +24 -0
- package/skills/engineering/test-quality/references/principles.md +143 -0
- package/skills/engineering/test-quality/references/testing-conventions.md +9 -0
- package/skills/engineering/test-quality/release-check.mjs +93 -0
- package/skills/engineering/test-quality/scripts/lint-tests.mjs +574 -0
- package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +591 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +117 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.mjs +17 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +104 -0
- package/skills/risk-compliance/compliance-audit/LICENSE +3 -0
- package/skills/risk-compliance/compliance-audit/SKILL.md +439 -0
- package/skills/risk-compliance/compliance-audit/references/findings-schema.md +293 -0
- package/skills/risk-compliance/compliance-audit/references/normalization-rules.md +45 -0
- package/skills/risk-compliance/compliance-audit/references/vars-checklist.md +1068 -0
- package/skills/risk-compliance/compliance-audit/references/vars-findings-schema.md +398 -0
- package/skills/risk-compliance/compliance-audit/release-check.mjs +93 -0
- package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +14 -0
- package/skills/risk-compliance/compliance-audit/scripts/export_tracker_xlsx.py +221 -0
- package/skills/risk-compliance/compliance-audit/scripts/reconcile_tracker.py +458 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_export_tracker_xlsx.py +97 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_validate_tracker.py +157 -0
- package/skills/risk-compliance/compliance-audit/scripts/validate_tracker.py +829 -0
- package/skills/risk-compliance/contract-compare/LICENSE +3 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +199 -0
- package/skills/risk-compliance/contract-compare/references/comparison-dimensions.md +209 -0
- package/skills/risk-compliance/contract-compare/release-check.mjs +93 -0
- package/skills/risk-compliance/contract-review/LICENSE +3 -0
- package/skills/risk-compliance/contract-review/SKILL.md +240 -0
- package/skills/risk-compliance/contract-review/references/review-criteria.md +223 -0
- package/skills/risk-compliance/contract-review/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/LICENSE +3 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +160 -0
- package/skills/risk-compliance/doc-authenticity/agents/openai.yaml +8 -0
- package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +12 -0
- package/skills/risk-compliance/doc-authenticity/references/agreement.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/bank-statement.md +150 -0
- package/skills/risk-compliance/doc-authenticity/references/forensic-signals.md +157 -0
- package/skills/risk-compliance/doc-authenticity/references/image-signals.md +114 -0
- package/skills/risk-compliance/doc-authenticity/references/invoice.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/issuer-profiles.md +86 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict-and-report.md +95 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict.schema.json +81 -0
- package/skills/risk-compliance/doc-authenticity/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/scripts/image_forensics.py +294 -0
- package/skills/risk-compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_codes.py +224 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +212 -0
- package/skills/risk-compliance/fraud-analysis/LICENSE +3 -0
- package/skills/risk-compliance/fraud-analysis/SKILL.md +114 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md +41 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/first-party-fraud.md +44 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +27 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/bank-transfer.md +24 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +30 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/feature-engineering.md +158 -0
- package/skills/risk-compliance/fraud-analysis/references/mechanisms/account-takeover.md +36 -0
- package/skills/risk-compliance/fraud-analysis/references/report-rationale.md +45 -0
- package/skills/risk-compliance/fraud-analysis/references/report-template.md +190 -0
- package/skills/risk-compliance/fraud-analysis/references/review-checklist.md +175 -0
- package/skills/risk-compliance/fraud-analysis/references/taxonomy.md +79 -0
- package/skills/risk-compliance/fraud-analysis/references/terminology.md +108 -0
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +175 -0
- package/skills/risk-compliance/fraud-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +180 -0
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +30 -0
- package/skills/risk-compliance/payment-analysis/references/chargebacks.md +208 -0
- package/skills/risk-compliance/payment-analysis/references/chinese-polish.md +51 -0
- package/skills/risk-compliance/payment-analysis/references/event-layers.md +127 -0
- package/skills/risk-compliance/payment-analysis/references/fx.md +59 -0
- package/skills/risk-compliance/payment-analysis/references/journey.md +79 -0
- package/skills/risk-compliance/payment-analysis/references/metrics.md +67 -0
- package/skills/risk-compliance/payment-analysis/references/report-template.md +119 -0
- package/skills/risk-compliance/payment-analysis/references/terminology.md +95 -0
- package/skills/risk-compliance/payment-analysis/references/visualization.md +56 -0
- package/skills/risk-compliance/payment-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/report-writing/LICENSE +3 -0
- package/skills/risk-compliance/report-writing/SKILL.md +220 -0
- package/skills/risk-compliance/report-writing/references/audit-report-template.md +121 -0
- package/skills/risk-compliance/report-writing/references/external-assessment-template.md +167 -0
- package/skills/risk-compliance/report-writing/references/management-report-template.md +145 -0
- package/skills/risk-compliance/report-writing/references/vars-report-template.md +224 -0
- package/skills/risk-compliance/report-writing/release-check.mjs +93 -0
- package/skills/risk-compliance/similar-domain/LICENSE +3 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +203 -0
- package/skills/risk-compliance/similar-domain/references/entities.md +67 -0
- package/skills/risk-compliance/similar-domain/references/fingerprints.md +134 -0
- package/skills/risk-compliance/similar-domain/references/pivots.md +82 -0
- package/skills/risk-compliance/similar-domain/references/report-template.md +93 -0
- package/skills/risk-compliance/similar-domain/references/scoring.md +130 -0
- package/skills/risk-compliance/similar-domain/references/terminology.md +41 -0
- package/skills/risk-compliance/similar-domain/references/workflow.md +85 -0
- package/skills/risk-compliance/similar-domain/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/LICENSE +3 -0
- package/skills/risk-compliance/tld-detection/SKILL.md +245 -0
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +9 -0
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +55 -0
- package/skills/risk-compliance/tld-detection/references/clean.md +51 -0
- package/skills/risk-compliance/tld-detection/references/clustering.md +235 -0
- package/skills/risk-compliance/tld-detection/references/decision.md +189 -0
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +232 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +272 -0
- package/skills/risk-compliance/tld-detection/references/streams.md +141 -0
- package/skills/risk-compliance/tld-detection/references/terminology.md +95 -0
- package/skills/risk-compliance/tld-detection/references/workflow.md +95 -0
- package/skills/risk-compliance/tld-detection/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +390 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +650 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +134 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_streams.py +520 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-actions
|
|
3
|
+
description: "Author, review, audit, profile, optimize, or debug GitHub Actions workflows (.github/workflows/*.yml): run-history audits, job and step timing, resource bottlenecks, before/after comparisons, conditional CI by changed path, the one required gate check, PR and merge-queue lanes, sharding, workers, caching, self-hosted runners, timeouts, concurrency, permissions and action pinning, post-deploy verification, npm publishing. Use for 'set up CI', 'CI is slow', 'profile CI', 'optimize our pipeline', 'audit CI for redundant or wasted jobs', 'why is this check stuck expected or never started', 'harden this workflow', or 'browser not found on the runner'. NOT for pushing, opening, or merging a PR, or writing CI conventions into CONTRIBUTING.md (github-flow), queue rules or a check unmet inside Mergify (mergify), Playwright config and specs (e2e-test), cloudbuild.yaml or Cloud Run deploys (cloud-build), or which gates a repo must prove (ensure-coverage)."
|
|
4
|
+
release-version: 0.36.0
|
|
5
|
+
---
|
|
6
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
|
+
# GitHub Actions
|
|
8
|
+
|
|
9
|
+
GitHub Actions verifies; Cloud Build builds and deploys. No workflow deploys to GCP.
|
|
10
|
+
|
|
11
|
+
## Workflow
|
|
12
|
+
|
|
13
|
+
For an existing pipeline, use **inspect -> fix -> verify**:
|
|
14
|
+
[inspect-fix-verify guidance](references/audit-profile-optimize.md). Inspect only enough
|
|
15
|
+
source and representative runs to choose an optimization, implement it for fix/optimize
|
|
16
|
+
requests, and verify proportionately. For optimization, start with successful-run timing,
|
|
17
|
+
not the first red job. Keep required checks unchanged. Audit-only requests stay
|
|
18
|
+
read-only; the CLI itself never edits workflows. No report files, evidence tables, run
|
|
19
|
+
archives, or full-history audit are required unless requested or useful to the task.
|
|
20
|
+
Close out with changes, verification, and remaining blockers. Optional examples:
|
|
21
|
+
[ci-case-studies.md](references/ci-case-studies.md).
|
|
22
|
+
Steps 2-7 below describe new workflows or an authorized redesign, not mandatory
|
|
23
|
+
replacement of an established pipeline during an audit or performance-only change.
|
|
24
|
+
|
|
25
|
+
1. **Profile first.** Use `scripts/ci-run-audit.mjs --profile-run <id>` on a representative
|
|
26
|
+
successful run. First inspect job/step timings and a compact job graph (names, `needs`,
|
|
27
|
+
conditions, runners); then read the bottleneck job and its invoked scripts. Locate
|
|
28
|
+
relevant policy sections instead of loading every CI document. Expand for parallelism,
|
|
29
|
+
repeated setup, placement, or unnecessary work; use failures when they explain latency
|
|
30
|
+
or block valid measurement. No justified optimization is a valid outcome, not a reason
|
|
31
|
+
to invent one.
|
|
32
|
+
-> [audit-profile-optimize.md](references/audit-profile-optimize.md)
|
|
33
|
+
Command template -> [two-pass-reading.md](references/two-pass-reading.md)
|
|
34
|
+
2. **Write one `ci.yml`** from the template: `changes` → area jobs → `gate`.
|
|
35
|
+
→ [conditional-ci.md](references/conditional-ci.md)
|
|
36
|
+
3. **Pick the queue** (none, Mergify, GitHub native) and wire its trigger.
|
|
37
|
+
→ [pipeline.md](references/pipeline.md#merge-queue-optional-pick-one)
|
|
38
|
+
4. **Require only `gate`** in branch protection and the queue.
|
|
39
|
+
→ [pipeline.md](references/pipeline.md#the-one-required-check)
|
|
40
|
+
5. **Place jobs on runners**: canonical labels, fork guard, slot-sized parallelism.
|
|
41
|
+
→ [runners.md](references/runners.md)
|
|
42
|
+
6. **Harden**: permissions, pins, inputs through `env:`. → [security.md](references/security.md)
|
|
43
|
+
7. **Add post-deploy and scheduled lanes** if the repo deploys or publishes.
|
|
44
|
+
→ [post-deploy-and-publishing.md](references/post-deploy-and-publishing.md)
|
|
45
|
+
8. **Verify**: `actionlint`; one PR per area runs only that area's jobs; timings meet the SLA.
|
|
46
|
+
Failures → [debugging.md](references/debugging.md)
|
|
47
|
+
|
|
48
|
+
## Principles
|
|
49
|
+
|
|
50
|
+
**Conditional CI**
|
|
51
|
+
- Make CI conditional by default. Trigger backend and frontend jobs by path; skip docs and
|
|
52
|
+
non-runtime configs.
|
|
53
|
+
- Put no `paths:` on the workflow. Filter inside a `changes` job.
|
|
54
|
+
- For a new design require one `gate` with `if: always()`. During optimization,
|
|
55
|
+
preserve existing required names unless changing that contract is authorized.
|
|
56
|
+
- Keep live external-service canaries off PRs; bound unavoidable dependency downloads.
|
|
57
|
+
|
|
58
|
+
**Speed**
|
|
59
|
+
- Run each check once per tree: with a merge queue, no `push: main` or scheduled gate
|
|
60
|
+
rerun, and each heavy check in one lane. Never skip validation of a changed queue
|
|
61
|
+
tree. Build once, fan out.
|
|
62
|
+
- Cache downloads: runner-local stores on self-hosted, `actions/cache` on GitHub-hosted.
|
|
63
|
+
Once downloads are local, the remaining time is repeated work: profile before caching.
|
|
64
|
+
- Keep one type-check gate and one lint gate; turn off the type check and lint inside
|
|
65
|
+
framework builds in other jobs.
|
|
66
|
+
- Shard E2E.
|
|
67
|
+
- Bound test workers by the slot quota, memory and fixture isolation. Set the count
|
|
68
|
+
explicitly and measure; never auto-detect host cores inside a container.
|
|
69
|
+
- Parallelize unit tests across cores.
|
|
70
|
+
- Put disposable Postgres on a size-bounded tmpfs by default. Disable durability only
|
|
71
|
+
when measured and the tests do not require persistence/recovery semantics.
|
|
72
|
+
- Screenshot and trace only failed tests.
|
|
73
|
+
- Give every job `timeout-minutes`; it is the only hang limit, since the queue sets none.
|
|
74
|
+
|
|
75
|
+
**Merge queue (Mergify)**
|
|
76
|
+
- Open one PR per issue. Enqueue ready PRs together, in one batch.
|
|
77
|
+
- Load the pnpm lockfile once, at admission. Skip the re-load in the queue only with a repo
|
|
78
|
+
command for it, and never when the batch changed `pnpm-lock.yaml`.
|
|
79
|
+
|
|
80
|
+
**SLA** (excluding E2E)
|
|
81
|
+
- Mergify: PR admission < 2 min; merge queue < 5 min.
|
|
82
|
+
- Without Mergify: total PR CI < 7 min.
|
|
83
|
+
|
|
84
|
+
**Security**
|
|
85
|
+
- Set `permissions: contents: read` at the top.
|
|
86
|
+
- SHA-pin third-party actions.
|
|
87
|
+
- Pass `${{ }}` to shell through `env:`.
|
|
88
|
+
- Fail on a missing secret.
|
|
89
|
+
|
|
90
|
+
**Lanes**
|
|
91
|
+
- Test the deployed revision after deploy, never a local build.
|
|
92
|
+
- Alert on every scheduled or non-PR failure.
|
|
93
|
+
- Never let an AI review be the only gate, or auto-pass it on timeout.
|
|
94
|
+
|
|
95
|
+
## References
|
|
96
|
+
|
|
97
|
+
| Read | When |
|
|
98
|
+
|---|---|
|
|
99
|
+
| [audit-profile-optimize.md](references/audit-profile-optimize.md) | Profile the bottleneck, optimize its execution path, verify; expand only as needed |
|
|
100
|
+
| [ci-case-studies.md](references/ci-case-studies.md) | Anonymized CI improvements, measured results, failed experiments and evidence caveats |
|
|
101
|
+
| [conditional-ci.md](references/conditional-ci.md) | Template; path, event, or queue conditions |
|
|
102
|
+
| [pipeline.md](references/pipeline.md) | Lanes, merge queue options, the required check, workflow layout |
|
|
103
|
+
| [speed-and-audit.md](references/speed-and-audit.md) | CI audit, caching, timeouts, concurrency, workers, Postgres |
|
|
104
|
+
| [runners.md](references/runners.md) | Self-hosted fleet |
|
|
105
|
+
| [security.md](references/security.md) | Hardening a workflow |
|
|
106
|
+
| [post-deploy-and-publishing.md](references/post-deploy-and-publishing.md) | Post-deploy verification, npm publishing |
|
|
107
|
+
| [debugging.md](references/debugging.md) | Failed run, missing check, stuck job |
|
|
108
|
+
|
|
109
|
+
**Hand-offs:** what to prove → `ensure-coverage`; Playwright → `e2e-test`; build and deploy →
|
|
110
|
+
`cloud-build` / `cloud-deploy`; queue config and a stuck queued PR → `mergify`; push, PR,
|
|
111
|
+
merge, and CI conventions in `CONTRIBUTING.md` → `github-flow`.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Inspect, fix, verify
|
|
2
|
+
|
|
3
|
+
Use this loop for an existing pipeline. Optimization is the default focus: reduce
|
|
4
|
+
required-check latency or runner consumption while preserving validation, not fix every
|
|
5
|
+
red job or produce an investigation report. For fix/optimize requests, carry through
|
|
6
|
+
implementation and verification within the requested scope. Audit/review-only requests
|
|
7
|
+
stay read-only.
|
|
8
|
+
The CLI only inspects runs; it never edits workflows.
|
|
9
|
+
|
|
10
|
+
Keep required checks and their meaning intact. Use enough measurements to choose and
|
|
11
|
+
verify a fix, but do not require evidence tables, report files, saved run archives, or
|
|
12
|
+
before/after collections. Persist them only when requested or useful for replay or a
|
|
13
|
+
long-running investigation. Optional examples: [ci-case-studies.md](ci-case-studies.md).
|
|
14
|
+
|
|
15
|
+
## 1. Profile first, read the bottleneck
|
|
16
|
+
|
|
17
|
+
Start with a representative successful run in the lane being optimized. Identify the
|
|
18
|
+
required-check critical path and its longest phases, including prerequisite waits and
|
|
19
|
+
setup. For runner-consumption work, identify repeated or unnecessary execution even if
|
|
20
|
+
it is off the critical path. Compare a slow successful run when needed; inspect failed
|
|
21
|
+
runs when retries/infrastructure failures contribute to latency or prevent a valid
|
|
22
|
+
baseline. For an explicit bug-fix request, start with the relevant failure instead.
|
|
23
|
+
|
|
24
|
+
Read in two passes. First combine job/step timings with a compact workflow map: job
|
|
25
|
+
names, `needs`, conditions, and runners. Then read the chosen bottleneck job's exact
|
|
26
|
+
configuration and invoked commands. For a large workflow or run payload, extract those
|
|
27
|
+
fields/sections before printing it; do not dump the whole file and rely on truncation.
|
|
28
|
+
Expand to other jobs and the required-check/queue contract only when a dependency or
|
|
29
|
+
proposed optimization requires it, including parallelism, repeated setup, or placement.
|
|
30
|
+
Use the [two-pass command example](two-pass-reading.md) to filter before printing.
|
|
31
|
+
|
|
32
|
+
Honor mandatory repository/domain reading instructions. For other policy documents,
|
|
33
|
+
search headings/keywords for the applicable ADR or CI convention and read that section
|
|
34
|
+
plus necessary context. Do not load every CI document, superseded ADR, or historical
|
|
35
|
+
timing reference by default. Read selectors/reducers when the proposed change affects
|
|
36
|
+
them. Do not turn every optimization into a comprehensive contract review. Use only the
|
|
37
|
+
relevant items of this internal checklist:
|
|
38
|
+
|
|
39
|
+
- Changed paths select the jobs/specs that actually validate them; shared harness inputs
|
|
40
|
+
reach their consumers, and unknown paths select broader checks.
|
|
41
|
+
- Intentional skips remain intentional; unexpected skips and incomplete artifacts fail.
|
|
42
|
+
- Required reducers preserve producer failures at the intended failure boundary.
|
|
43
|
+
- Checkout identity, check names, timeouts, cleanup, and execution permissions remain valid.
|
|
44
|
+
|
|
45
|
+
Inspect the current source revision, not a stale checkout. Compare runs from the same
|
|
46
|
+
lane and comparable change class; do not assume historical runs used current workflows:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
gh run list --repo owner/repo --workflow ci.yml --limit 10 \
|
|
50
|
+
--json databaseId,event,headSha,conclusion,createdAt,url
|
|
51
|
+
node "$SKILL_DIR/scripts/ci-run-audit.mjs" --repo owner/repo --profile-run 123456 --json
|
|
52
|
+
# Only when a failure is relevant:
|
|
53
|
+
gh run view 123456 --repo owner/repo --log-failed
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Read the slow phase's timing and relevant command, not just a job's red/green status.
|
|
57
|
+
Stop investigating once a useful optimization and bounded change are clear. If no defect
|
|
58
|
+
or worthwhile optimization is established, say so and stop; do not prescribe tuning or
|
|
59
|
+
another measurement campaign by default. Expand history only for an unresolved symptom,
|
|
60
|
+
redundancy question, or an explicitly requested audit:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
node "$SKILL_DIR/scripts/ci-run-audit.mjs" --repo owner/repo --runs 60
|
|
64
|
+
# Optional replay, not a required deliverable:
|
|
65
|
+
node "$SKILL_DIR/scripts/ci-run-audit.mjs" --repo owner/repo --runs 60 --save runs.json
|
|
66
|
+
node "$SKILL_DIR/scripts/ci-run-audit.mjs" --from runs.json --json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
History collection hydrates every requested run; it does not filter by workflow/change
|
|
70
|
+
class. Split PR, queue, scheduled/manual, success, failure, skip, attempt, and runner
|
|
71
|
+
cohorts as relevant. Do not combine unrelated workflows by a shared job name. A failed
|
|
72
|
+
install is not a slow test; a rerun is not an independent code state.
|
|
73
|
+
|
|
74
|
+
Use audit signals as leads: correlated failures can be a reducer/shared setup failure,
|
|
75
|
+
not redundant coverage; zero catches do not justify removing a rare security/money
|
|
76
|
+
check. `--ignore-job <regex>` can exclude roll-ups from analysis, not substantive tests.
|
|
77
|
+
API head-tree matches do not establish the tested checkout or authorize gate reuse.
|
|
78
|
+
Step-name setup/work labels are heuristic; missing timestamps are not zero.
|
|
79
|
+
Job-created-to-start is a scheduling interval, not necessarily runner contention.
|
|
80
|
+
|
|
81
|
+
If a single step hides the cause, add minimal timing around the relevant phases only
|
|
82
|
+
(download/link, database readiness, compile, or browser journey). Preserve command exit
|
|
83
|
+
codes, signals, stdout/stderr, and cleanup. Diagnostics must not change the test verdict.
|
|
84
|
+
Never expose secrets or private connection strings. For suspected resource contention,
|
|
85
|
+
inspect actual cgroup quota, throttling, memory/OOM, and I/O; host core count is not the
|
|
86
|
+
slot allotment. Do not collect unrelated resource data by default.
|
|
87
|
+
|
|
88
|
+
## 2. Fix one concrete cause
|
|
89
|
+
|
|
90
|
+
Prioritize by the requested objective: required-check latency, runner consumption, or
|
|
91
|
+
reliability. Separate blocked/missing validation, test assertions, infrastructure delays,
|
|
92
|
+
and reporting-only failures. A failed timing upload with passing required gates is not
|
|
93
|
+
automatically the first optimization; establish its impact before diverting the task.
|
|
94
|
+
If broken validation prevents a meaningful baseline, repair that blocker within scope
|
|
95
|
+
before comparing performance. Do not expand into unrelated product bugs.
|
|
96
|
+
|
|
97
|
+
Choose the smallest justified code/config change. If the cause belongs to a shared
|
|
98
|
+
gateway or runner, hand off to its owner rather than patching unrelated repository code.
|
|
99
|
+
Shorter retries can reduce failure latency without improving successful-run performance
|
|
100
|
+
or reliability; do not present faster failure as a speedup or raise timeouts as a fix.
|
|
101
|
+
|
|
102
|
+
Separate a candidate from a ready patch. Visible setup cost does not prove caching pays
|
|
103
|
+
off; observed start delay does not identify its cause. If one unresolved fact determines
|
|
104
|
+
the choice, check that fact within scope or name the single missing check and stop. For
|
|
105
|
+
example, compare cache transfer cost with install time, or distinguish a concurrency
|
|
106
|
+
mutex from runner availability. Do not turn a candidate into a patch or another broad
|
|
107
|
+
investigation. No justified change remains a valid outcome.
|
|
108
|
+
|
|
109
|
+
| Bottleneck | Candidate change | Safeguard |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| Unrelated suites run | path/spec selection; classify before heavy service setup | shared dependencies fan out; unknowns run broader checks; preserve required names |
|
|
112
|
+
| Many tiny setup-heavy jobs | combine compatible checks or overlap independent commands | preserve each exit status and the required-check contract |
|
|
113
|
+
| Repeated or unreliable dependency work | local download store, working gateway, bounded downloads | frozen/hash-verified installs; no credentials in logs |
|
|
114
|
+
| Ineffective cache | remove expensive transfer or cache downloads only | compare transfer cost with install/build savings |
|
|
115
|
+
| CPU oversubscription | quota-sized workers and balanced shards | check memory, throttling, and fixture isolation; do not copy fleet worker counts |
|
|
116
|
+
| Scratch DB disk cost | size-bounded tmpfs (default); optional durability reduction | measure benefit; never weaken persistence/recovery tests; respect memory budget |
|
|
117
|
+
| Slow test-DB preparation | one session for the prepare scripts, parallel independent ones, or a snapshot keyed on schema+prepare inputs | tmpfs alone does not fix round-trip-bound SQL; the snapshot key covers every input |
|
|
118
|
+
| Same check in every job (type check, lint, lockfile policy) | one standalone gate; turn the copy off in builds; run policy checks only when their inputs change | keep the single gate required; never drop the check from CI |
|
|
119
|
+
| Slow/silent failures | inner timeout and retained partial diagnostics | outer headroom; cleanup always; incomplete validation never passes |
|
|
120
|
+
| Main repeats queue proof | remove the `push: main` / gate `schedule:` trigger | the queue ran the exact tree; keep deploy and post-deploy workflows |
|
|
121
|
+
|
|
122
|
+
Do not suppress gates, drop tests without replacement validation, add
|
|
123
|
+
`continue-on-error`, or raise timeouts merely to make CI look healthy. Changed queue
|
|
124
|
+
trees still need validation. For selectors, test behavior across affected/shared paths,
|
|
125
|
+
docs, rename preimages, deletions, unknowns, malformed metadata, and unexpected skips
|
|
126
|
+
as relevant to the change. Tests should not merely restate workflow YAML.
|
|
127
|
+
|
|
128
|
+
## 3. Verify proportionately
|
|
129
|
+
|
|
130
|
+
Run affected script tests and `actionlint` after workflow edits. For selectors/reducers,
|
|
131
|
+
include the missed path or failure boundary that motivated the fix. Inspect a comparable
|
|
132
|
+
PR/queue run when available; do not dispatch extra workflows outside the requested scope.
|
|
133
|
+
For performance changes, compare the formerly slow phase under comparable lane, runner,
|
|
134
|
+
and cache conditions. Expand the sample only when needed to decide whether the change
|
|
135
|
+
helps. Check that it did not move the bottleneck or increase shared runner contention.
|
|
136
|
+
|
|
137
|
+
Close out briefly: what changed, what was verified, and remaining blockers. A useful run
|
|
138
|
+
link or timing is enough; no mandatory report template or archive. State when CI or live
|
|
139
|
+
remeasurement was unavailable. Distinguish a static risk from a reproduced failure and
|
|
140
|
+
an expected improvement from a measured one. Small samples do not prove fleet tail
|
|
141
|
+
latency or sustained speedup. Keep or revert according to the task's objective.
|
|
142
|
+
|
|
143
|
+
## Boundaries
|
|
144
|
+
|
|
145
|
+
- Queue membership, dequeue causes and evidence-reuse rules: `mergify`.
|
|
146
|
+
- Which journeys must remain release-blocking: `golden-path` / `ensure-coverage`.
|
|
147
|
+
- Playwright specs and fixtures: `e2e-test`.
|
|
148
|
+
- Fleet quota, gateway injection and persistent stores: fleet owner;
|
|
149
|
+
[runners.md](runners.md) describes the interface, not permission to reconfigure hosts.
|
|
150
|
+
- Cloud Build deployment or promotion: `cloud-build` / `cloud-deploy`.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# CI case studies: two anonymized repositories
|
|
2
|
+
|
|
3
|
+
Historical audit of two repositories, using remote default-branch source, change history,
|
|
4
|
+
PR reports and native GitHub jobs/logs. Local checkouts were stale and were not changed.
|
|
5
|
+
These examples inform [audit-profile-optimize.md](audit-profile-optimize.md); they do
|
|
6
|
+
not authorize changing another repository's required proof or copying private endpoints.
|
|
7
|
+
|
|
8
|
+
Repository names, organizations, URLs, commit hashes, PR/run identifiers and exact
|
|
9
|
+
calendar dates are omitted. Original audit records remain outside the distributed skill;
|
|
10
|
+
no identifying source map is included here. Review follow-up fixes and reversions, not just
|
|
11
|
+
the first optimization commit. No benchmarks, browser journeys, timeout drills or live
|
|
12
|
+
ruleset/IAM checks were rerun for this audit.
|
|
13
|
+
|
|
14
|
+
**Superseded (2026-10-10):** where these studies weigh reusing queue evidence on main, the
|
|
15
|
+
decided answer is to drop the `push: main` rerun entirely, not to reuse evidence
|
|
16
|
+
(`mergify` skill, "The Queue Run Is The Integration Run").
|
|
17
|
+
|
|
18
|
+
## Evidence vocabulary
|
|
19
|
+
|
|
20
|
+
- **Live observation:** native timestamps, check results or inspected logs. Different
|
|
21
|
+
batches/scopes/hosts are not a controlled before/after comparison.
|
|
22
|
+
- **Controlled benchmark:** attributed to the change author's recorded experiment;
|
|
23
|
+
not independently reproduced in this audit. Include resource limits/sample counts.
|
|
24
|
+
- **Replay/model:** historical path selection, estimated shard loads or fleet simulation.
|
|
25
|
+
Useful for choosing an experiment, not an achieved speedup.
|
|
26
|
+
- **Configuration:** implemented mechanism, without isolated performance measurement.
|
|
27
|
+
|
|
28
|
+
## Repository A: multi-area application
|
|
29
|
+
|
|
30
|
+
Changes across several consecutive optimization iterations:
|
|
31
|
+
|
|
32
|
+
| Improvement | Reusable practice | Evidence and constraint |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| Affected-area functional selection, dedicated browser selection, helper correction | Select product areas plus importer/helper dependencies; retain app-shell coverage and strict reducers | **Live:** two queue runs used one rather than five functional shards. Unknown/shared inputs and >=60% modeled suite cost run full. Unmeasured tests get 5s, not zero. Missing selection flags and unexpected skipped jobs fail. Parser coverage is not a complete runtime dependency graph. |
|
|
35
|
+
| Curated golden-path selection, following engine migration | Check executable test selection after replacing machinery; file tags alone can run excess tests | **Author benchmark:** 76 -> 39 tests, 409.3s -> 262.6s; all 21 queue-local paths ALIVE. CI gain is not isolated. Missing/skipped paths cannot pass; this does not prove a deployed environment. |
|
|
36
|
+
| Retained timeout diagnostics | Write logs directly to a retained bind mount before termination | **Configuration:** EXIT traps may never copy logs after a timeout. Existing `!cancelled()` uploads do not guarantee evidence after whole-job cancellation or runner loss. |
|
|
37
|
+
| Prisma mirror restoration and unified gateway | Route downloads consistently; keep pinned/frozen/checksum verification | **Author probe:** pinned 8.9-MB engine downloaded in ~2s with matching checksum. No end-to-end gain isolated. LAN routing/HTTP trust is fleet-specific; Cloud Build is a different environment. |
|
|
38
|
+
| One owner for deploy-tooling checks | Move a repeated suite with complementary, tested execution-profile conditions | **Historical cost:** 46-107s in PostgreSQL. Queue/manual policy owns the suite; main/diagnostic PostgreSQL retains it when policy is absent. Every profile still has an owner and required verdict. |
|
|
39
|
+
| 8-CPU quotas and two unit shards, rollback to four workers | Reduce repeated setup, then tune workers under actual quota and fixture constraints | **Author failure analysis:** six workers had 3 failures/28 jobs, four had 0/8. Current unit matrix is two shards x four workers. This is not a universal worker count; browser fixtures still require one worker. |
|
|
40
|
+
| Overlapping policy checks and test-only timeout reduction | Start independent commands together; explicitly await each result | **Author benchmark:** timeout test 30.2s -> 2.3s; tooling ~80s -> ~51s. Missing/unreadable status fails. Timeout override can only shorten collection; uncertainty still conservatively builds. |
|
|
41
|
+
| Full same-tree queue evidence reuse on main | Reuse only exact-tree, complete, trusted latest-attempt proof | **Live:** one main run skipped disposable PostgreSQL/full functional work but refreshed external checks. Missing evidence reruns. Scoped `N/M` jobs cannot satisfy the full numbered-shard evidence contract. |
|
|
42
|
+
| Duration-balanced shards | Deterministic longest-processing-time assignment from measured medians; refresh unknown timings | **Model:** ~160s test load/shard. Full jobs still varied 281-495s in one full-suite run; setup and scheduling remain separate costs. Empty/mismatched suite listings fail. |
|
|
43
|
+
| Request long-lane runners first | Explore scheduling contention before adding execution workers | **Simulation only:** a 15s head start and wider smoke dispatch were modeled to improve queue latency. FIFO is not guaranteed; a later shard still waited 350s. Do not copy sleeps as a proven fix. |
|
|
44
|
+
|
|
45
|
+
### What the live sample proves
|
|
46
|
+
|
|
47
|
+
Listed 60 recent CI runs; hydrated 14 selected first-attempt runs (seven queue, four
|
|
48
|
+
admission, three main) and inspected five failure logs. Gate timestamps were checked
|
|
49
|
+
against the matching check suite. Clock: run creation -> applicable required gate,
|
|
50
|
+
not last `updated_at` or time waiting inside Mergify.
|
|
51
|
+
|
|
52
|
+
| Observation | Interpretation |
|
|
53
|
+
|---|---|
|
|
54
|
+
| Scoped A / scoped B: 3.6-4.0 functional job-minutes versus 24.3-36.3 across five earlier full runs | Confirmed workload reduction across different batches, not controlled latency savings. |
|
|
55
|
+
| Their gates took 7m41s / 13m29s | PostgreSQL / golden-path case lifecycle became the remaining critical jobs. Smaller workload need not shorten the gate. |
|
|
56
|
+
| Four admission gates: 5m16s-7m45s; six of seven queue gates >10m | Above repository targets in this sample, but not its official last-20-run p90. Its browser-inclusive budget differs from this skill's generic budget. |
|
|
57
|
+
| Both following main runs executed the full disposable suites | Scoped queue evidence correctly did not authorize broad main reuse. This shifts some detection after merge; it is an explicit coverage-policy tradeoff, not proof of selector completeness. |
|
|
58
|
+
| Latest audited main failed database timestamp ordering, UI presentation checks, and external authentication | Verified failure signatures, not diagnosed causes or proof the optimizations caused regressions. No sustained reliability win established. |
|
|
59
|
+
|
|
60
|
+
**Remaining decisions:** validate selector recall and reconcile broad-before-merge policy
|
|
61
|
+
with scoping; investigate current failures; collect a full SLA window; drill timeout
|
|
62
|
+
artifacts. Main concurrency permits cancelling older validation, unlike this skill's
|
|
63
|
+
default policy. Do not transfer that exception without deciding which exact-SHA evidence
|
|
64
|
+
must be retained. Preserve the repository's budget contract and engine evidence boundary.
|
|
65
|
+
|
|
66
|
+
## Repository B: authenticated web application
|
|
67
|
+
|
|
68
|
+
Changes across several consecutive optimization iterations:
|
|
69
|
+
|
|
70
|
+
| Improvement | Reusable practice | Evidence and constraint |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| Affected-path lanes | Independently select schema, unit/integration/release, migration, Smoke and authenticated work | **Replay:** schema selected 8/18 validation-relevant commits; release 5/18. Projected savings only. The implementation's shared-tooling diff correctly ran all lanes. Unknown/invalid evidence selects all; preserve existing required names and strict verdicts. |
|
|
73
|
+
| Shared golden-path engine | Replace duplicate gate machinery with a versioned contract and target profiles | **Configuration/correctness:** `run` may return zero with failed paths; `verdict` is blocking. Deployed profiles stay read-only and correlate the candidate SHA; queue-local seed credentials are not deployment proof. |
|
|
74
|
+
| Consistent dependency gateway | Configure package-manager bootstrap and rewrite explicit lockfile tarball hosts | **Configuration:** a registry variable alone need not reroute pinned tarballs. Preserve frozen fetch/offline install and Prisma checksums. Private gateway addresses are not portable defaults. |
|
|
75
|
+
| Verified docs-only queue skip | Diff the whole speculative batch, including new branch creation and later pushes | **Historical replay**, not newly measured live skip savings. Require exact checkout, unique supported base and rename preimages. Runtime-served Markdown still validates. Invalid evidence runs all; detector/verdict jobs explicitly install Node. |
|
|
76
|
+
| Worker cap and pinned image reuse | Bound Next workers instead of trusting host CPU visibility; inspect immutable images before pulling | **Controlled author ABBA benchmark:** cold build mean 85.681s -> 73.051s (14.7%); local image inspect <1s versus pull 4s. Authenticated browser workers remain one/shard because fixtures are shared. |
|
|
77
|
+
| Next startup/resource profiler | Measure launch/banner/compile/TypeScript/exit and cgroup deltas before choosing a fix | **Instrumentation:** controlled startup was 0.55-0.64s; lazy-config experiment did not help. Preserve output/status/signals; bound parsing and label unavailable counters. Cgroup deltas include the enclosing build, not each phase independently. |
|
|
78
|
+
| tmpfs PostgreSQL and phase timing | Separate image, launch, readiness and cleanup; use bounded scratch storage | **Controlled author benchmark:** 13.5s disk -> 1.8s tmpfs, two samples each. Durability-off added no demonstrated startup benefit, so Smoke/schema retained default durability. Disposable targets only; tmpfs counts toward memory limits. |
|
|
79
|
+
| Remove healthy-path probes/build archives | Measure cache transfer/hit eligibility and successful-install diagnostic overhead | **Controlled author benchmark:** warm install 7.793s -> 4.142s (46.9%). Retain failure-only diagnostics/retries/status. Cross-batch archive eligibility was ineffective. Compiler caching persisted a generated secret canary in plaintext: audit contents, not only speed. |
|
|
80
|
+
| Owned four-way integration shards | Parallelize inside a job with a private migrated/seeded database per process | **Controlled author benchmark, 8 CPU/16 GiB:** durable serial 323.6s; tmpfs serial 214.6s; final sharded 75.2s including setup/cleanup. Explicit disposable loopback targets, atomic durable ownership, bounded connections and signal cleanup prevent deleting the base/foreign database. |
|
|
81
|
+
|
|
82
|
+
### What the live sample proves
|
|
83
|
+
|
|
84
|
+
Hydrated 15 selected run/job payloads and four logs. Elapsed here is creation -> final
|
|
85
|
+
job completion, not official required-gate latency; these samples are not fleet p50/p90.
|
|
86
|
+
|
|
87
|
+
| Observation | Interpretation |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Latest PR CI 8m12s versus prior PR 4m45s; unit jobs 236s/235s | Similar execution, different wait. After detection, newest jobs waited ~128-149s to start. Different trees/load: do not attribute this to path selection. |
|
|
90
|
+
| Latest authenticated queue 9m13s; builds 45-129s | Repeated setup/build and browser work both matter. Critical shard pre-banner 20.254s versus concurrent Smoke 2.343s exposes variability, not its cause. |
|
|
91
|
+
| Queue Smoke job 213s; main Smoke 169s, the same Git tree | Confirmed repeated execution. Repository B's policy still requires both: reuse is a decision, not an implemented optimization here. |
|
|
92
|
+
| Post-deploy 9m50s; deployment poll 317s; smoke execution 18s | Optimizing browser execution alone misses the main wait. Preserve exact-SHA deployed-candidate correlation independently of queue proof. |
|
|
93
|
+
| An earlier CI run, Smoke and authenticated jobs failed at Prisma generation | Inspected logs show mirror checksum-download `socket hang up`. Shared infrastructure failure is not redundant coverage or necessarily a test flake; later green samples do not prove permanent remediation. |
|
|
94
|
+
|
|
95
|
+
**Remaining decisions:** profile variable startup/dispatch, validate narrow-path skips,
|
|
96
|
+
decide whether main reuse is compatible with policy, and investigate dependency
|
|
97
|
+
reliability. Repository guide cache/proxy text was stale relative to executable source.
|
|
98
|
+
Build-once/fan-out across authenticated shards needs an artifact/environment/secret
|
|
99
|
+
review, not a mechanical cache change. Required job names differ from the skill's
|
|
100
|
+
single-gate design: preserve them during a performance-only change.
|
|
101
|
+
|
|
102
|
+
## Repositories C and D: monorepos on a warm LAN fleet
|
|
103
|
+
|
|
104
|
+
A later measured audit of two pnpm monorepos on self-hosted runners with a LAN package
|
|
105
|
+
proxy and persistent per-slot stores. **Live observation** from step timings and install
|
|
106
|
+
logs; fixes were proposed from these numbers, not yet remeasured.
|
|
107
|
+
|
|
108
|
+
| Finding | Reusable practice |
|
|
109
|
+
|---|---|
|
|
110
|
+
| Installs 4–19 s; install logs showed warm store reuse in most jobs | Downloads were solved; remaining time was repeated work. Profile before adding caches |
|
|
111
|
+
| Framework build type-checked in 5 test shards (49 s each) plus the build job (22 s); the incremental `tsc` gate took ~5 s | One type-check gate; CI-only flag off in builds; check the gate's tsconfig covers the same files |
|
|
112
|
+
| Lockfile policy check 35–41 s, ~80% of install | Run when the lockfile or policy inputs change from a verified base |
|
|
113
|
+
| Service `--health-interval 10s` cost ~15 s per job | Poll every 1–2 s, retries preserving the total timeout |
|
|
114
|
+
| 27–49 s of sequential SQL prepare scripts in 13 jobs, database already on tmpfs | Round-trip bound: batch, parallelize or snapshot |
|
|
115
|
+
| Per-build SHA `ARG` above `pnpm install` missed the 54 s install cache every build | Declare per-build args after installs (`docker` skill) |
|
|
116
|
+
|
|
117
|
+
## Transferable rules
|
|
118
|
+
|
|
119
|
+
1. List cheaply; hydrate representative successful runs. Inspect a failing outlier only
|
|
120
|
+
when it explains delay or blocks measurement. Snapshots are optional when requested
|
|
121
|
+
or useful for replay; expand for distributions rather than claiming p90 from a small sample.
|
|
122
|
+
2. Report separate gate, scheduling, execution and runner-minute clocks. Label setup
|
|
123
|
+
heuristics and cumulative milestones. Neither is a CPU profile or Mergify queue wait.
|
|
124
|
+
3. Bound workers by actual quotas and fixture isolation; measure setup before adding
|
|
125
|
+
shards. Unknown tests need nonzero estimates. Review failed experiments and reversions.
|
|
126
|
+
4. Omission, relocation and reuse each need a fail-closed contract: complete selected
|
|
127
|
+
checks, one suite owner, exact provenance and fresh environment-sensitive evidence.
|
|
128
|
+
5. Keep diagnostics subordinate to command correctness and outside disposable processes.
|
|
129
|
+
Test missing status, timeout, unexpected skip and cleanup ownership, not YAML strings.
|
|
130
|
+
6. Judge caches by net cost, cross-run eligibility and secret safety. A frozen install
|
|
131
|
+
remains required even with a local store or gateway; addresses/trust stay fleet-owned.
|
|
132
|
+
7. Optimize an evidenced bottleneck, then remeasure equivalent cohorts. Configuration,
|
|
133
|
+
simulated savings and same-tree repeats are not authority to weaken required gates.
|
|
134
|
+
|
|
135
|
+
## Evidence provenance
|
|
136
|
+
|
|
137
|
+
Identifying citations are intentionally excluded from this anonymized reference. The
|
|
138
|
+
original audit used source snapshots, change reports and selected native CI jobs/logs.
|
|
139
|
+
Benchmark figures remain author-reported, not independently reproduced; live samples
|
|
140
|
+
remain observations across different batches. These examples are historical lessons,
|
|
141
|
+
not verifiable gate receipts or a substitute for collecting evidence in the target repo.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Conditional CI
|
|
2
|
+
|
|
3
|
+
> Read when: running jobs only for some changed paths (backend / frontend), events, or the
|
|
4
|
+
> merge queue.
|
|
5
|
+
|
|
6
|
+
## Workflow
|
|
7
|
+
|
|
8
|
+
1. Run the workflow on every `pull_request` (Mergify's queue drafts arrive this way too) and
|
|
9
|
+
on `workflow_dispatch`. Put no `paths:` on it. Add `push: main` only in a repo without a
|
|
10
|
+
merge queue; with one, the queue run already tested the exact tree (`mergify` skill,
|
|
11
|
+
"The Queue Run Is The Integration Run").
|
|
12
|
+
2. Add a `changes` job with `dorny/paths-filter`: one filter per area (`backend`,
|
|
13
|
+
`frontend`), shared files (lockfile, root config, `ci.yml`) anchored into each area. Leave
|
|
14
|
+
docs and non-runtime configs out of every filter.
|
|
15
|
+
3. Give each area job `needs: changes` and `if: needs.changes.outputs.<area> == 'true'`.
|
|
16
|
+
4. Run network-dependent canaries only on demand: `if: github.event_name == 'workflow_dispatch'`.
|
|
17
|
+
A recurring canary goes in its own scheduled workflow, never as a scheduled rerun of `gate`.
|
|
18
|
+
5. Run slow suites only in the queue: `if: startsWith(github.head_ref, 'mergify/merge-queue/')`.
|
|
19
|
+
6. Add one `gate` job: `if: always()`, `needs:` every job, allow a skip only when that job's
|
|
20
|
+
condition was false. Require only `gate`.
|
|
21
|
+
7. Before merging, open one PR per area and confirm only that area's jobs run and `gate` passes.
|
|
22
|
+
|
|
23
|
+
## Template
|
|
24
|
+
|
|
25
|
+
Runners are GitHub-hosted for brevity; on the self-hosted fleet use the labels and fork guard
|
|
26
|
+
in [runners.md](runners.md).
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
name: CI
|
|
30
|
+
|
|
31
|
+
on:
|
|
32
|
+
pull_request:
|
|
33
|
+
workflow_dispatch: # the canary; no push: main or schedule: rerun of the gate
|
|
34
|
+
|
|
35
|
+
permissions:
|
|
36
|
+
contents: read
|
|
37
|
+
|
|
38
|
+
concurrency:
|
|
39
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
40
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
41
|
+
|
|
42
|
+
jobs:
|
|
43
|
+
changes:
|
|
44
|
+
if: github.event_name == 'pull_request'
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
timeout-minutes: 5
|
|
47
|
+
permissions:
|
|
48
|
+
contents: read
|
|
49
|
+
pull-requests: read
|
|
50
|
+
outputs:
|
|
51
|
+
backend: ${{ steps.filter.outputs.backend }}
|
|
52
|
+
frontend: ${{ steps.filter.outputs.frontend }}
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
- id: filter
|
|
56
|
+
uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
|
|
57
|
+
with:
|
|
58
|
+
filters: |
|
|
59
|
+
shared: &shared
|
|
60
|
+
- 'package.json'
|
|
61
|
+
- 'pnpm-lock.yaml'
|
|
62
|
+
- '.github/workflows/ci.yml'
|
|
63
|
+
backend:
|
|
64
|
+
- *shared
|
|
65
|
+
- 'apps/api/**'
|
|
66
|
+
- 'packages/db/**'
|
|
67
|
+
frontend:
|
|
68
|
+
- *shared
|
|
69
|
+
- 'apps/web/**'
|
|
70
|
+
- 'packages/ui/**'
|
|
71
|
+
|
|
72
|
+
backend:
|
|
73
|
+
needs: changes
|
|
74
|
+
if: needs.changes.outputs.backend == 'true'
|
|
75
|
+
runs-on: ubuntu-latest
|
|
76
|
+
timeout-minutes: 15
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
- uses: ./.github/actions/setup
|
|
80
|
+
- run: pnpm --filter api test
|
|
81
|
+
|
|
82
|
+
frontend:
|
|
83
|
+
needs: changes
|
|
84
|
+
if: needs.changes.outputs.frontend == 'true'
|
|
85
|
+
strategy:
|
|
86
|
+
fail-fast: false
|
|
87
|
+
matrix:
|
|
88
|
+
shard: [1, 2, 3]
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
timeout-minutes: 20
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v4
|
|
93
|
+
- uses: ./.github/actions/setup
|
|
94
|
+
- env:
|
|
95
|
+
SHARD: ${{ matrix.shard }}
|
|
96
|
+
run: pnpm --filter web exec playwright test --shard="$SHARD/3"
|
|
97
|
+
|
|
98
|
+
e2e-full:
|
|
99
|
+
needs: changes
|
|
100
|
+
if: >-
|
|
101
|
+
startsWith(github.head_ref, 'mergify/merge-queue/') &&
|
|
102
|
+
(needs.changes.outputs.backend == 'true' || needs.changes.outputs.frontend == 'true')
|
|
103
|
+
runs-on: ubuntu-latest
|
|
104
|
+
timeout-minutes: 30
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@v4
|
|
107
|
+
- uses: ./.github/actions/setup
|
|
108
|
+
- run: pnpm test:e2e:full
|
|
109
|
+
|
|
110
|
+
canary:
|
|
111
|
+
if: github.event_name == 'workflow_dispatch'
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
timeout-minutes: 15
|
|
114
|
+
permissions:
|
|
115
|
+
contents: read
|
|
116
|
+
issues: write
|
|
117
|
+
steps:
|
|
118
|
+
- uses: actions/checkout@v4
|
|
119
|
+
- uses: ./.github/actions/setup
|
|
120
|
+
- env:
|
|
121
|
+
EXTERNAL_NETWORK: '1'
|
|
122
|
+
run: node --test test/*.canary.mjs
|
|
123
|
+
- if: failure()
|
|
124
|
+
env:
|
|
125
|
+
GH_TOKEN: ${{ github.token }}
|
|
126
|
+
run: |
|
|
127
|
+
gh issue create --repo "$GITHUB_REPOSITORY" \
|
|
128
|
+
--title "CI canary failed on $GITHUB_REF_NAME" \
|
|
129
|
+
--body "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"
|
|
130
|
+
|
|
131
|
+
gate:
|
|
132
|
+
if: always() && github.event_name == 'pull_request'
|
|
133
|
+
needs: [changes, backend, frontend, e2e-full]
|
|
134
|
+
runs-on: ubuntu-latest
|
|
135
|
+
timeout-minutes: 2
|
|
136
|
+
steps:
|
|
137
|
+
- env:
|
|
138
|
+
CHANGES: ${{ needs.changes.result }}
|
|
139
|
+
BACKEND: ${{ needs.changes.outputs.backend }}
|
|
140
|
+
FRONTEND: ${{ needs.changes.outputs.frontend }}
|
|
141
|
+
IN_QUEUE: ${{ startsWith(github.head_ref, 'mergify/merge-queue/') }}
|
|
142
|
+
BACKEND_RESULT: ${{ needs.backend.result }}
|
|
143
|
+
FRONTEND_RESULT: ${{ needs.frontend.result }}
|
|
144
|
+
E2E_FULL_RESULT: ${{ needs.e2e-full.result }}
|
|
145
|
+
run: |
|
|
146
|
+
set -uo pipefail
|
|
147
|
+
fail=0
|
|
148
|
+
# check <job> <result> <expected to run: true|false>
|
|
149
|
+
check() {
|
|
150
|
+
case "$2" in
|
|
151
|
+
success) echo "ok $1" ;;
|
|
152
|
+
skipped) if [ "$3" != true ]; then echo "skip $1"
|
|
153
|
+
else echo "::error::$1 skipped but its paths changed"; fail=1; fi ;;
|
|
154
|
+
*) echo "::error::$1: $2"; fail=1 ;;
|
|
155
|
+
esac
|
|
156
|
+
}
|
|
157
|
+
code=false
|
|
158
|
+
if [ "$BACKEND" = true ] || [ "$FRONTEND" = true ]; then code=true; fi
|
|
159
|
+
full=false
|
|
160
|
+
if [ "$IN_QUEUE" = true ] && [ "$code" = true ]; then full=true; fi
|
|
161
|
+
[ "$CHANGES" = success ] || { echo "::error::changes: $CHANGES"; exit 1; }
|
|
162
|
+
check backend "$BACKEND_RESULT" "$BACKEND"
|
|
163
|
+
check frontend "$FRONTEND_RESULT" "$FRONTEND"
|
|
164
|
+
check e2e-full "$E2E_FULL_RESULT" "$full"
|
|
165
|
+
exit "$fail"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Shared setup, `.github/actions/setup/action.yml`:
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
name: setup
|
|
172
|
+
description: Node, pnpm, and dependencies
|
|
173
|
+
runs:
|
|
174
|
+
using: composite
|
|
175
|
+
steps:
|
|
176
|
+
- uses: actions/setup-node@v4
|
|
177
|
+
with:
|
|
178
|
+
node-version: '22'
|
|
179
|
+
- shell: bash
|
|
180
|
+
run: corepack enable
|
|
181
|
+
- shell: bash
|
|
182
|
+
run: pnpm install --frozen-lockfile
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Principles
|
|
186
|
+
|
|
187
|
+
- Condition jobs, never the workflow or the required check.
|
|
188
|
+
- Require exactly one check, `gate`. Never rename it without updating the queue config.
|
|
189
|
+
- Give `gate` `if: always()`. Fail it on `failure`, `cancelled`, a failed `changes` job, or a
|
|
190
|
+
skip whose condition was true.
|
|
191
|
+
- Run a job only when a rule matches it. Write the rules; add a path to a filter when it should
|
|
192
|
+
trigger a job.
|
|
193
|
+
- Anchor shared files (lockfile, root config, `ci.yml`) into every area they affect.
|
|
194
|
+
- Compare outputs with `== 'true'`.
|
|
195
|
+
- Condition by event before condition by path.
|
|
196
|
+
- Keep network fetches off the PR lane. Name those tests `*.canary.*`; require an opt-in env
|
|
197
|
+
var to run them; open an issue when they fail.
|
|
198
|
+
- Add extra queue-only suites for work too slow for every PR push. Avoid redundant
|
|
199
|
+
suites, but still prove a changed combined queue tree; a PR's earlier pass alone is
|
|
200
|
+
not that proof. Preserve existing required checks when optimizing an established repo.
|
|
201
|
+
- Discover tests by glob, never by hand list. Fail on an empty selection.
|
|
202
|
+
- Pass expressions to shell through `env:`. Never inline `${{ }}` in `run:`.
|
|
203
|
+
- SHA-pin third-party actions.
|
|
204
|
+
|
|
205
|
+
## Review checklist
|
|
206
|
+
|
|
207
|
+
- [ ] No `paths:` / `paths-ignore:` on the workflow
|
|
208
|
+
- [ ] `gate` is the only required check, with `if: always()`, and checks every job it needs
|
|
209
|
+
- [ ] Each area job's `if:` names its filter output with `== 'true'`
|
|
210
|
+
- [ ] Shared files are in every affected filter
|
|
211
|
+
- [ ] Network jobs skip PRs and alert on failure
|
|
212
|
+
- [ ] With a merge queue: no `push: main` or `schedule:` rerun of the gate
|
|
213
|
+
- [ ] Each queue-only job runs something PR jobs don't
|
|
214
|
+
- [ ] One PR per area confirmed only that area's jobs ran
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Debugging
|
|
2
|
+
|
|
3
|
+
> Read when: a run failed, a check never started, or a job is stuck queued.
|
|
4
|
+
|
|
5
|
+
- Failed run: `gh run view <id> --log-failed`; list with `gh run list -w ci.yml -b <branch>`.
|
|
6
|
+
- **Check "expected" forever** → the workflow never started: path filter, missing
|
|
7
|
+
`merge_group` trigger, draft skip, or a renamed job. Not a test failure.
|
|
8
|
+
- **Queued job never starts** → no runner matches the label set (typo, retired label) or all
|
|
9
|
+
slots are busy: `gh api repos/{owner}/{repo}/actions/runners`.
|
|
10
|
+
- **Skipped and treated as failure** → the gate's allowed-skip rule. Read the gate step output.
|
|
11
|
+
- Queue/dequeue questions → `mergify` skill; `gh pr checks` can't see a dequeue.
|
|
12
|
+
- Validate locally: `actionlint` for syntax and expression mistakes; `act` for simple jobs
|
|
13
|
+
(not for self-hosted or service-container jobs).
|