@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,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resolve-release
|
|
3
|
+
description: "Slash/explicit-only (/resolve-release). Full GitHub Flow release from main: freeze the latest CI-green trunk SHA, write the changelog, choose SemVer, merge the metadata cut through a verified PR, publish npm artifacts, or validate a Cloud Run candidate at 0% and expose it fully or as a canary. Asks its choices once at preflight (exposure full|canary, dark launch on|off, project-flow questions), follows a release flow (a predefined flow shipped with the skill, or the project's .release/flow.md extending one), then runs unattended. /rush-release is its no-questions shortcut. Do not auto-select. Use only on explicit user/orchestrator invoke. NOT for GitFlow/release-branch promotion and NOT for implementing a spec (resolve-issues)."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
metadata:
|
|
6
|
+
workflow-role: coordinator
|
|
7
|
+
release-version: 0.36.0
|
|
8
|
+
---
|
|
9
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
10
|
+
# Resolve release
|
|
11
|
+
|
|
12
|
+
Cut a **GitHub Flow** release from **main**. Freeze one already-green trunk
|
|
13
|
+
SHA, write a metadata-only version cut on that parent, merge it through a
|
|
14
|
+
verified PR, and publish. When the human explicitly approved keeping an unused
|
|
15
|
+
final version after a failed RC, the cut stage can instead verify already-merged
|
|
16
|
+
prepared metadata without writing another cut. A tag-driven repository tags the
|
|
17
|
+
verified release source; a package-scoped dispatcher owns its own tags. For Cloud Run, validate one
|
|
18
|
+
candidate at 0% and expose it **fully** (0% -> 100%) or as a **canary**
|
|
19
|
+
(0% -> declared steps -> 100%). With **dark launch** on, features that ship
|
|
20
|
+
behind a default-off flag are listed in the plan and must still read off after
|
|
21
|
+
the release.
|
|
22
|
+
|
|
23
|
+
The skeleton below is fixed. What varies is chosen once at preflight or read
|
|
24
|
+
from the project's stored flow; after preflight the run asks nothing.
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
preflight (main + publisher + release flow)
|
|
28
|
+
-> choices: exposure, dark launch, flow questions (full mode asks; shortcut never does)
|
|
29
|
+
-> latest CI-green HEAD on main
|
|
30
|
+
-> changelog + SemVer plan (show as a record, write the receipt)
|
|
31
|
+
-> create + deliver metadata cut OR verify human-approved prepared metadata
|
|
32
|
+
-> root-tag npm: final tag -> watch publish
|
|
33
|
+
-> workspace npm: dispatch each package -> verify registry, provenance, tag
|
|
34
|
+
-> Cloud Run: rc tag -> candidate at 0% -> validate -> full or canary exposure
|
|
35
|
+
-> verify live (+ dark flags off) -> final tag
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This file is the workflow and index. Read the linked procedure immediately
|
|
39
|
+
before its stage; do not invent an unlinked substitute.
|
|
40
|
+
|
|
41
|
+
| Stage / concern | Procedure |
|
|
42
|
+
|---|---|
|
|
43
|
+
| Trunk, publisher, version files, choices | [references/preflight.md](references/preflight.md) |
|
|
44
|
+
| Release flows: predefined (`flows/`), project (`.release/flow.md`), `extends` | [references/flows.md](references/flows.md) |
|
|
45
|
+
| Independently versioned npm workspaces with a package-scoped dispatch publisher | [references/workspace-npm.md](references/workspace-npm.md) |
|
|
46
|
+
| Latest CI-green HEAD | [references/candidate.md](references/candidate.md) |
|
|
47
|
+
| Changelog, SemVer, file bump, commit | [references/cut.md](references/cut.md) |
|
|
48
|
+
| Human-approved reuse after a failed RC (no new metadata cut) | [references/prepared-metadata.md](references/prepared-metadata.md) |
|
|
49
|
+
| Tag, push, watch publisher | [references/publish.md](references/publish.md) |
|
|
50
|
+
| Cloud Run 0% -> 100%, verification, rollback | [references/promotion.md](references/promotion.md) |
|
|
51
|
+
| Canary exposure (0% -> steps -> 100%) | [references/canary.md](references/canary.md) |
|
|
52
|
+
| Dark launch (flags ship off, stay off) | [references/dark-launch.md](references/dark-launch.md) |
|
|
53
|
+
|
|
54
|
+
Run every script as
|
|
55
|
+
`node <skillsRoot>/resolve-release/scripts/<name>.mjs …` with the absolute skill
|
|
56
|
+
root this file was loaded from. A CWD-relative `scripts/…` path resolves in the
|
|
57
|
+
target repo and will not find these files.
|
|
58
|
+
|
|
59
|
+
## Modes
|
|
60
|
+
|
|
61
|
+
| | Full mode (`/resolve-release`) | Shortcut mode (`/rush-release`) |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| Exposure | `full` or `canary` | always `full` |
|
|
64
|
+
| Dark launch | `on` or `off` | always `off` |
|
|
65
|
+
| Release flow | project flow, else `--flow <name>`, else none | same, with exposure full and dark off |
|
|
66
|
+
| Questions | once, at preflight, only for unresolved choices | none, ever |
|
|
67
|
+
|
|
68
|
+
Precedence for every choice: **invocation option > release flow > preflight
|
|
69
|
+
answer**. Full-mode options: `--exposure full|canary`, `--canary-steps 10,50`,
|
|
70
|
+
`--hold-minutes N`, `--dark on|off`, `--save-flow`; both modes accept
|
|
71
|
+
`--flow <predefined>` when the project has no flow of its own. Shortcut mode accepts none of
|
|
72
|
+
these; it refuses and points to `/resolve-release` when one is passed, when the
|
|
73
|
+
flow's `required` lists canary or dark, or when a flow question has no default.
|
|
74
|
+
|
|
75
|
+
## Run invariants
|
|
76
|
+
|
|
77
|
+
- Trunk is `main`. Another default branch is a different workflow.
|
|
78
|
+
- The candidate is the newest SHA on `main` with green CI evidence for its
|
|
79
|
+
exact tree — not "the tip looks fine" and not a commit that is still pending.
|
|
80
|
+
- For an approved `metadata.mode: reuse-prepared` plan, the new frozen CI-green
|
|
81
|
+
main SHA is the RC/final source. Historical metadata cut/merge SHAs remain
|
|
82
|
+
separate provenance. Follow [prepared-metadata.md](references/prepared-metadata.md)
|
|
83
|
+
for mandatory provider/review/notes verification, a fresh distinct receipt and
|
|
84
|
+
no metadata-write permissions; never reuse the failed attempt's authority.
|
|
85
|
+
- For a newly created cut, its parent is that frozen SHA. Do not rebase, merge, or cherry-pick
|
|
86
|
+
later `main` onto the cut branch; the provider merge is a separate identity.
|
|
87
|
+
- Never publish an off-main cut. Use the configured queue when one exists;
|
|
88
|
+
otherwise require the repository's PR checks and permitted merge method.
|
|
89
|
+
Verify its exact merged SHA is reachable from `origin/main` and its Git tree
|
|
90
|
+
equals the approved cut tree (for reused metadata, require historical cut/merge
|
|
91
|
+
equality and the new source gates in `prepared-metadata.md`). Any post-freeze trunk content requires a new
|
|
92
|
+
plan; an unconfigured queue is not release evidence.
|
|
93
|
+
- Tags are immutable release identities: `vMAJOR.MINOR.PATCH` for root-tag
|
|
94
|
+
releases, or package-scoped names when the publisher owns tagging. Do not
|
|
95
|
+
move, delete, or force-push a remote tag.
|
|
96
|
+
- A Cloud Run release uses one immutable `vMAJOR.MINOR.PATCH-rc.N` tag to build
|
|
97
|
+
the candidate at 0%. The final tag is created only after that exact candidate
|
|
98
|
+
serves 100% and passes live verification; it must not trigger another deploy.
|
|
99
|
+
- Questions happen only in full mode's preflight choice step, and only for
|
|
100
|
+
choices (exposure, canary steps and hold, dark launch, flow `ask:` items) —
|
|
101
|
+
never for detected facts, never for authorization. The invocation plus those
|
|
102
|
+
answers authorizes the listed branch/commit, metadata PR delivery, candidate
|
|
103
|
+
build, conditional traffic shifts, rollback, final tag, optional GitHub
|
|
104
|
+
Release, and publisher watch as one operation. Show the complete plan before
|
|
105
|
+
the first mutation so the user can interrupt, then proceed. Do not ask cut,
|
|
106
|
+
merge, RC, exposure-step, tag, finalization, or publish questions, and do not
|
|
107
|
+
ask "shall I proceed".
|
|
108
|
+
- Before the first mutation, write `.git/<invoked-skill>-authorization.json`
|
|
109
|
+
(`rush-release-authorization.json` or `resolve-release-authorization.json`;
|
|
110
|
+
prepared-metadata reuse instead exclusively creates a fresh receipt at the
|
|
111
|
+
distinct path in [prepared-metadata.md](references/prepared-metadata.md)).
|
|
112
|
+
Bind the repository, SHA, version, tags, mode, separate mutations, gate
|
|
113
|
+
coordinates, freshness, the invocation time as the authorization time, expiry,
|
|
114
|
+
and permission status; record `authorizedBy: invocation`. Full mode also
|
|
115
|
+
records `choices` (with their sources), and any run with a release flow
|
|
116
|
+
records `flowSha256`; a normal-cut shortcut run without a flow writes exactly the
|
|
117
|
+
original receipt. Resume and callbacks act only on the receipt's exact plan.
|
|
118
|
+
Never store secrets or reconstruct the plan from chat.
|
|
119
|
+
- Preflight facts are detected, not confirmed by the user. Every non-choice has
|
|
120
|
+
a deterministic default (SemVer from conventional commits, the derived
|
|
121
|
+
changelog, every changed package); a value the user stated at invocation wins.
|
|
122
|
+
If the plan's frozen SHA, version/tag, metadata diff, publisher, choices, or
|
|
123
|
+
outward actions later change, record one replacement plan, show it, and
|
|
124
|
+
continue under the same invocation. Hand back only when no valid plan exists,
|
|
125
|
+
never to ask permission.
|
|
126
|
+
- On callback or resume, re-read the receipt, provider evidence, live
|
|
127
|
+
coordinates, and the release flow's hash. Exact matches become `executable`,
|
|
128
|
+
then `consumed` immediately before mutation. Otherwise record `invalidated` or
|
|
129
|
+
`failed` and do nothing. Never infer one permission from another or replay a
|
|
130
|
+
consumed permission.
|
|
131
|
+
- A pre-exposure failure is a hand-back with production untouched. A known
|
|
132
|
+
post-exposure failure (including a dark flag found on) automatically restores
|
|
133
|
+
and verifies the recorded incumbent. Ambiguous production state is a stop for
|
|
134
|
+
operator recovery.
|
|
135
|
+
- The cut is metadata only (changelog + version identity files). Refuse a
|
|
136
|
+
cut that changes product code.
|
|
137
|
+
- Turning a flag on is never part of a release. A release flow can fill slots
|
|
138
|
+
and add steps; it cannot change this skeleton, these invariants, or the
|
|
139
|
+
manual-only invocation of either mode.
|
|
140
|
+
|
|
141
|
+
## Workflow
|
|
142
|
+
|
|
143
|
+
### 1. Preflight and choices
|
|
144
|
+
|
|
145
|
+
Load and validate the release flow, verify `main` is the trunk, detect npm
|
|
146
|
+
and/or the staged Cloud Run contract, and identify whether version/publish
|
|
147
|
+
authority is at the root or per workspace. Then resolve the choices with
|
|
148
|
+
`flow.mjs resolve`: full mode asks the returned questions once, shortcut mode
|
|
149
|
+
takes the preset and refuses what it cannot answer. Details:
|
|
150
|
+
[preflight.md](references/preflight.md), [flows.md](references/flows.md).
|
|
151
|
+
|
|
152
|
+
For a package-scoped dispatch publisher, follow [workspace-npm.md](references/workspace-npm.md)
|
|
153
|
+
from candidate selection through final verification. Do not run the root-tag
|
|
154
|
+
candidate/plan/apply scripts on a private monorepo root or synthesize a `v*`
|
|
155
|
+
tag for a workflow that publishes only by package dispatch.
|
|
156
|
+
|
|
157
|
+
### 2. Candidate (root-tag / Cloud Run)
|
|
158
|
+
|
|
159
|
+
Fetch `origin/main` and pick the newest green SHA. Freeze it. Details:
|
|
160
|
+
[candidate.md](references/candidate.md).
|
|
161
|
+
|
|
162
|
+
### 3. Plan and record (root-tag / Cloud Run)
|
|
163
|
+
|
|
164
|
+
Derive the changelog and SemVer bump from `baselineTag..frozenSHA`, unless the
|
|
165
|
+
human explicitly approved the prepared-metadata route. That route passes
|
|
166
|
+
`--prepared-metadata <file>`, preserves the unused version with `bump: none`, and
|
|
167
|
+
reads notes from the reviewed new target, not from the old attempt. For Cloud
|
|
168
|
+
Run, pass `--cloud-run` so the plan also identifies the next unused RC tag. With
|
|
169
|
+
dark launch on for a new cut, pass the listed flags with `--dark-flags`; reuse
|
|
170
|
+
instead verifies the notes already reviewed in the target
|
|
171
|
+
([dark-launch.md](references/dark-launch.md)). Show SHA, bump, version, tags,
|
|
172
|
+
files, publisher, choices, notes, and every outward action, write the receipt,
|
|
173
|
+
and proceed. Details: [cut.md](references/cut.md).
|
|
174
|
+
|
|
175
|
+
### 4. Cut (root-tag / Cloud Run)
|
|
176
|
+
|
|
177
|
+
Choose one route. For a normal cut, run the flow's `before-cut` steps, then
|
|
178
|
+
branch from the frozen SHA, apply the changelog and version files, and commit;
|
|
179
|
+
keep the diff metadata-only. For `reuse-prepared`, perform all mandatory
|
|
180
|
+
[prepared-metadata.md](references/prepared-metadata.md) checks and output its
|
|
181
|
+
verified source and evidence bindings without `apply`, metadata writes, cut
|
|
182
|
+
hooks or a new PR.
|
|
183
|
+
|
|
184
|
+
### 5. Merge and publish (root-tag / Cloud Run)
|
|
185
|
+
|
|
186
|
+
Push the cut ref, merge its PR using the repository's delivery policy, and
|
|
187
|
+
verify the exact merged SHA on `main`. The verified-prepared route skips that
|
|
188
|
+
new PR delivery and converges here using its new frozen target as the release
|
|
189
|
+
source, not its historical metadata merge. A root-tag artifact release pushes the
|
|
190
|
+
final tag and watches npm. A v2 `pre-tag` npm reuse attempt has no RC and must
|
|
191
|
+
first pass the fresh read-only registry-absence and final-ref gates described in
|
|
192
|
+
[publish.md](references/publish.md#node-pre-tag-registry-gate). This does not
|
|
193
|
+
recover an artifact attempt whose immutable final tag already exists.
|
|
194
|
+
A staged Cloud Run release pushes its RC tag, executes
|
|
195
|
+
[promotion.md](references/promotion.md) (with [canary.md](references/canary.md)
|
|
196
|
+
for canary exposure), and creates the final tag only after live verification.
|
|
197
|
+
Details: [publish.md](references/publish.md).
|
|
198
|
+
|
|
199
|
+
## Done
|
|
200
|
+
|
|
201
|
+
Success is the planned version tagged at the verified release source on `main`
|
|
202
|
+
(the newly frozen target for reuse) and
|
|
203
|
+
visible on the remote. npm must report the version when selected. Cloud Run
|
|
204
|
+
must report the exact candidate serving 100%, the incumbent at 0%, an ALIVE
|
|
205
|
+
`prod-active` verdict, and — with dark launch on — every dark flag reading off.
|
|
206
|
+
Hand back the cut SHA, merged SHA, RC/final tags, changelog excerpt, choices,
|
|
207
|
+
publisher and traffic evidence, and the merged metadata PR. For reuse also
|
|
208
|
+
hand back the new release source, both notes digests, historical metadata
|
|
209
|
+
identities, fresh receipt path and mandatory verification outputs. With `--save-flow`,
|
|
210
|
+
open the flow PR after the release ([flows.md](references/flows.md)).
|
|
211
|
+
On final handoff, close the run in the harness: mark the goal complete
|
|
212
|
+
(`update_goal` with `complete`), which also releases the workflow, whether the
|
|
213
|
+
release is done or hands back a blocker; never pause it for a reply. A blocker's
|
|
214
|
+
handoff names what failed, its evidence, and what a rerun needs; a later
|
|
215
|
+
invocation picks it up.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Resolve Release"
|
|
3
|
+
short_description: "Slash/explicit-only GitHub Flow release: full or canary exposure, dark launch, project flow"
|
|
4
|
+
|
|
5
|
+
policy:
|
|
6
|
+
# Codex counterpart to SKILL.md disable-model-invocation: true.
|
|
7
|
+
# Keeps $resolve-release / explicit invoke while blocking description-based selection.
|
|
8
|
+
allow_implicit_invocation: false
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Cloud Run service built from an RC tag at 0% traffic, validated, then exposed through canary steps before 100%
|
|
3
|
+
route: cloud-run
|
|
4
|
+
exposure: canary
|
|
5
|
+
canary:
|
|
6
|
+
steps: [10, 50]
|
|
7
|
+
holdMinutes: 15
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Cloud Run release (canary exposure)
|
|
11
|
+
|
|
12
|
+
A project extending this flow sets `canary.healthCheck` to its read-only
|
|
13
|
+
command that judges each hold; without it the canary is refused.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: One version for the repository, published by pushing a vX.Y.Z tag (for example a single npm package)
|
|
3
|
+
route: root-tag
|
|
4
|
+
exposure: n/a
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Root-tag npm release
|
|
8
|
+
|
|
9
|
+
## before-cut
|
|
10
|
+
- run the repository's documented verify command on the frozen SHA
|
|
11
|
+
|
|
12
|
+
## after-publish
|
|
13
|
+
- `npm view <package>@<version> version` prints the planned version
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Independently versioned npm workspaces, published one package at a time by a package-scoped dispatch workflow that owns its tags
|
|
3
|
+
route: workspace-npm
|
|
4
|
+
changelog: package-scoped
|
|
5
|
+
registry: https://registry.npmjs.org/
|
|
6
|
+
exposure: n/a
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Workspace npm release
|
|
10
|
+
|
|
11
|
+
A project extending this flow names its `publisher` (workflow and package input)
|
|
12
|
+
and any `packages` to exclude or publish last.
|
|
13
|
+
|
|
14
|
+
## before-cut
|
|
15
|
+
- run the repository's documented verify command on the frozen SHA
|
|
16
|
+
- `npm publish --dry-run -w <workspace> --registry=<registry>` for each selected package
|
|
17
|
+
|
|
18
|
+
## after-publish
|
|
19
|
+
- `npm view <package> version --registry=<registry>` prints the planned version
|
|
20
|
+
|
|
21
|
+
## hand-back-if
|
|
22
|
+
- a selected package has never been published on npm (a trusted-publishing first publish needs a human npm login)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Canary exposure
|
|
2
|
+
|
|
3
|
+
> Read when: exposure is `canary` and the Cloud Run candidate has passed its 0% validation in [promotion.md](promotion.md).
|
|
4
|
+
|
|
5
|
+
A canary moves a slice of real traffic to the candidate, holds, judges it, and
|
|
6
|
+
widens, before the final 100% shift. It replaces only the single shift in
|
|
7
|
+
[promotion.md](promotion.md) section 3; binding, 0% validation, live
|
|
8
|
+
verification, and failure routing are unchanged. Full mode only — the shortcut
|
|
9
|
+
never runs this.
|
|
10
|
+
|
|
11
|
+
## Preconditions
|
|
12
|
+
|
|
13
|
+
Preflight recorded, from the repository and never improvised:
|
|
14
|
+
|
|
15
|
+
- `steps`: strictly increasing percentages below 100 (for example `10, 50`);
|
|
16
|
+
- `holdMinutes`: how long each step holds before it is judged;
|
|
17
|
+
- `healthCheck`: a read-only repository command that judges a hold, run against
|
|
18
|
+
the live service with the candidate serving that step's share;
|
|
19
|
+
- the exact command that splits traffic between the candidate revision and the
|
|
20
|
+
recorded incumbent by percentage, per service, in dependency order.
|
|
21
|
+
|
|
22
|
+
A missing item is a refusal at preflight, before anything is tagged.
|
|
23
|
+
|
|
24
|
+
## Sequence
|
|
25
|
+
|
|
26
|
+
For each step `p` in order:
|
|
27
|
+
|
|
28
|
+
1. Re-read candidate identity and traffic. Require the candidate at the
|
|
29
|
+
previous step's share (0% for the first) and the incumbent holding the rest;
|
|
30
|
+
anything else is ambiguous state.
|
|
31
|
+
2. Consume that step's traffic-shift permission, then split every affected
|
|
32
|
+
service to candidate `p%` / incumbent `(100-p)%` in dependency order. Read
|
|
33
|
+
traffic back after each command.
|
|
34
|
+
3. Hold `holdMinutes` with one background wait — no foreground polling.
|
|
35
|
+
4. Run `healthCheck`. Require a passing, read-only result stamped for this
|
|
36
|
+
step. Record step, share, start/end, and the verdict.
|
|
37
|
+
|
|
38
|
+
After the last step passes, perform the full 100% shift exactly as
|
|
39
|
+
[promotion.md](promotion.md) section 3 describes, then section 4's live
|
|
40
|
+
verification. Only that state permits the final tag.
|
|
41
|
+
|
|
42
|
+
## Failure
|
|
43
|
+
|
|
44
|
+
- A failed split or health check at any step is a known post-exposure failure:
|
|
45
|
+
restore every service to its recorded incumbent at 100% in reverse dependency
|
|
46
|
+
order, restore durable processing, and verify incumbent 100%, candidate 0%,
|
|
47
|
+
and `prod-active` ALIVE before hand-back.
|
|
48
|
+
- A traffic reading that matches neither the planned step nor the incumbent is
|
|
49
|
+
ambiguous: stop all writes and hand back the last known-good evidence.
|
|
50
|
+
- Never skip a step, lengthen or shorten a hold, retry a failed step, or widen
|
|
51
|
+
past a failed judgment. A new attempt is a new plan with a new RC tag.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Candidate
|
|
2
|
+
|
|
3
|
+
> Read when: picking the SHA to freeze; how CI evidence is checked per exact tree and why a pending tip is never a candidate.
|
|
4
|
+
|
|
5
|
+
This picker is for root-tag and staged Cloud Run releases. For independently
|
|
6
|
+
versioned npm workspaces with a package-scoped dispatcher, use the exact-tree
|
|
7
|
+
PR-CI candidate gate in [workspace-npm.md](workspace-npm.md); a PR-only CI
|
|
8
|
+
repository need not have checks on the merge commit itself.
|
|
9
|
+
|
|
10
|
+
The release candidate is the newest commit that is on `main` and already green.
|
|
11
|
+
The current tip is eligible only when that exact SHA is green.
|
|
12
|
+
|
|
13
|
+
## Procedure
|
|
14
|
+
|
|
15
|
+
1. Fetch `origin/main`.
|
|
16
|
+
2. Walk first-parent history of `origin/main`, newest first.
|
|
17
|
+
3. Run the picker:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
node <skillsRoot>/resolve-release/scripts/green-head.mjs --trunk main --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
4. Freeze `candidateSha` from the JSON. Do not keep walking after a green SHA
|
|
24
|
+
in the hope of a "nicer" commit.
|
|
25
|
+
5. If the script exits 1 (`no-green-head`), stop. Repair CI or wait; do not
|
|
26
|
+
release a pending or failed SHA, and do not treat "no checks configured" as
|
|
27
|
+
green.
|
|
28
|
+
|
|
29
|
+
## Why freeze
|
|
30
|
+
|
|
31
|
+
`main` keeps moving. The changelog, the bump, and the tag all describe one
|
|
32
|
+
commit. If a later commit lands while you write notes, including it would ship
|
|
33
|
+
code that never passed this candidate check.
|
|
34
|
+
|
|
35
|
+
The frozen SHA is normally the **parent of the cut**, not yet the tag. Version
|
|
36
|
+
files still need a metadata commit on top; that child is what gets tagged
|
|
37
|
+
([cut.md](cut.md)). For explicitly approved prepared-metadata reuse, this newly
|
|
38
|
+
frozen SHA is instead the release source itself: the metadata is already in
|
|
39
|
+
its reviewed tree. All exact-tree CI/main gates still apply; old cut/merge/RC
|
|
40
|
+
identities are provenance, never substitutes for this target's green evidence
|
|
41
|
+
([prepared-metadata.md](prepared-metadata.md)).
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Cut
|
|
2
|
+
|
|
3
|
+
> Read when: turning the frozen SHA into the plan record and the metadata-only version commit (root-tag and Cloud Run routes).
|
|
4
|
+
|
|
5
|
+
This root-tag cut does not bump independently versioned npm workspaces. For
|
|
6
|
+
package-scoped dispatch publishing, use [workspace-npm.md](workspace-npm.md).
|
|
7
|
+
|
|
8
|
+
Turn the frozen SHA into a versioned commit without taking later trunk commits
|
|
9
|
+
along for the ride. The cut stage has two routes: the normal create-and-deliver
|
|
10
|
+
procedure below, or, only with explicit human keep-version/reuse approval,
|
|
11
|
+
[verify already-prepared metadata](prepared-metadata.md). A `metadata.mode:
|
|
12
|
+
reuse-prepared` plan follows that reference's mandatory checks and fresh receipt
|
|
13
|
+
rules instead of section 3: no `apply`, new metadata commit, empty PR or cut
|
|
14
|
+
write permissions. Both routes converge on the existing publish stage.
|
|
15
|
+
|
|
16
|
+
## 1. Plan
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
node <skillsRoot>/resolve-release/scripts/plan.mjs --sha <candidateSha> --json \
|
|
20
|
+
> /tmp/release-plan.json
|
|
21
|
+
# Add --cloud-run when preflight selected cloud-run-staged.
|
|
22
|
+
# Add --dark-flags <list.json> when dark launch is on (dark-launch.md).
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The plan names `baselineTag`, `currentVersion`, `bump`, `reason`,
|
|
26
|
+
`nextVersion`, final `tag`, optional `candidateTag`, `changelogMarkdown`, and
|
|
27
|
+
`versionFiles`; with dark launch on, also `darkFlags` and a `### Shipped dark`
|
|
28
|
+
changelog section. Without `--dark-flags` the plan is byte-for-byte what the
|
|
29
|
+
shortcut has always produced.
|
|
30
|
+
|
|
31
|
+
For approved reuse, add `--prepared-metadata <file>` with the versioned schema
|
|
32
|
+
in [prepared-metadata.md](prepared-metadata.md). Its `--sha` is the newly frozen
|
|
33
|
+
CI-green main target; its `bump` is `none`. The notes are read and digested from
|
|
34
|
+
that target's reviewed version section, never rendered as a new cut. Its
|
|
35
|
+
historical notes digest and cut/merge/previous-attempt identities remain
|
|
36
|
+
separate. Local planner success does not establish provider CI or PR status.
|
|
37
|
+
|
|
38
|
+
Before showing the plan, use `git ls-remote --tags origin` to prove the proposed
|
|
39
|
+
candidate and final tags are both unused remotely. Local tag discovery chooses
|
|
40
|
+
the next RC ordinal; remote absence is the collision authority.
|
|
41
|
+
|
|
42
|
+
SemVer (0.x treats breaking as minor unless the invocation asks for strict):
|
|
43
|
+
|
|
44
|
+
| Content since baseline | Bump |
|
|
45
|
+
|---|---|
|
|
46
|
+
| breaking (`feat!:`, `BREAKING CHANGE:`) | major (minor under 0.x) |
|
|
47
|
+
| `feat:` | minor |
|
|
48
|
+
| otherwise | patch |
|
|
49
|
+
|
|
50
|
+
Changelog entries come from conventional-commit subjects in
|
|
51
|
+
`baselineTag..candidateSha` (or the recent first-parent log when there is no
|
|
52
|
+
tag). Keep an existing `## [Unreleased]` body — derived entries merge with it,
|
|
53
|
+
they do not replace it.
|
|
54
|
+
|
|
55
|
+
## 2. Record the plan
|
|
56
|
+
|
|
57
|
+
Show the frozen SHA, proposed version/tag(s), bump reason, changelog, version
|
|
58
|
+
files, publisher/deployment mode, and the complete outward-action sequence: create the cut
|
|
59
|
+
branch/commit, push it, deliver its metadata PR through the queue, push the
|
|
60
|
+
immutable tag(s), validate and conditionally promote Cloud Run when applicable,
|
|
61
|
+
create a GitHub Release when required, and watch the publisher. Full mode also
|
|
62
|
+
shows the resolved choices (exposure, canary steps and hold, dark launch and its
|
|
63
|
+
flags, flow answers), and any run with a release flow shows its steps per stage.
|
|
64
|
+
This is a record, not a question: the invocation (plus full mode's preflight
|
|
65
|
+
answers) already authorized the entire sequence. Do not ask whether to proceed.
|
|
66
|
+
Every non-choice has a deterministic default: the bump from the table above,
|
|
67
|
+
the derived changelog merged with `## [Unreleased]`, the next unused tags. A
|
|
68
|
+
bump or notes the user stated at invocation win, as long as the bump is still
|
|
69
|
+
SemVer.
|
|
70
|
+
|
|
71
|
+
Do not create a branch, edit files, or tag before the plan is shown and the
|
|
72
|
+
receipt below is written; after that, proceed through publication without
|
|
73
|
+
asking cut, merge, RC, exposure, tag, finalization, or publish questions.
|
|
74
|
+
Repository/provider checks are gates the orchestrator evaluates, not reasons to
|
|
75
|
+
ask the human to confirm facts. When the frozen SHA, version/tag, metadata
|
|
76
|
+
diff, publisher, or outward actions change, replace the whole plan, show the
|
|
77
|
+
replacement, and continue under the same invocation. A retry or resume of the
|
|
78
|
+
unchanged plan inherits the original receipt.
|
|
79
|
+
|
|
80
|
+
For reuse, show only the applicable action sequence: verify prepared metadata
|
|
81
|
+
and the new source, publish, and promote if applicable. Show both notes digests,
|
|
82
|
+
new source, historical provenance and previous receipt digest; do not list cut
|
|
83
|
+
writes or PR delivery as permissions. Follow the distinct exclusive receipt
|
|
84
|
+
path and required stage outputs in [prepared-metadata.md](prepared-metadata.md),
|
|
85
|
+
not the normal fixed-path receipt below. Never read or reset the old receipt.
|
|
86
|
+
|
|
87
|
+
Before the first mutation, write `.git/<invoked-skill>-authorization.json` with
|
|
88
|
+
`authorizedBy: invocation` and the invocation time as the authorization time.
|
|
89
|
+
Record the plan coordinates, predicates, expiry, and separate candidate,
|
|
90
|
+
traffic-shift, rollback, final-tag, and GitHub Release permissions. A canary
|
|
91
|
+
records one traffic-shift permission per step. Full mode adds `choices` and
|
|
92
|
+
their `sources`; a run with a release flow adds `flowSha256`.
|
|
93
|
+
Start each permission as `pending-conditions`. Add later coordinates only from
|
|
94
|
+
the named provider evidence; once added, they are immutable. Plan drift
|
|
95
|
+
invalidates the receipt. Store no secrets, callback URLs, or protected data.
|
|
96
|
+
|
|
97
|
+
## 3. Apply and commit
|
|
98
|
+
|
|
99
|
+
Branch from the frozen SHA only:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git switch -c release/<tag> <candidateSha>
|
|
103
|
+
jq -r '.changelogMarkdown' /tmp/release-plan.json | \
|
|
104
|
+
node <skillsRoot>/resolve-release/scripts/apply.mjs \
|
|
105
|
+
--version <nextVersion> --date <YYYY-MM-DD> \
|
|
106
|
+
--changelog-section - --json
|
|
107
|
+
git add -- <paths from apply>
|
|
108
|
+
git commit -m "chore(release): <nextVersion>"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`apply.mjs` requires the recorded plan's `changelogMarkdown` on stdin, writes
|
|
112
|
+
that section, and bumps the discovered identity files. It refuses a missing or
|
|
113
|
+
empty changelog section rather than silently replacing the plan with a bare
|
|
114
|
+
version heading. When the plan names `skills/distribution/manifest.json`, it
|
|
115
|
+
delegates to `distribution.mjs version-cut`; that operation updates the repository
|
|
116
|
+
release identity, stamps it and the generated release checker into every active
|
|
117
|
+
first-party skill, and regenerates deterministic artifacts. If any step fails it
|
|
118
|
+
restores every touched file.
|
|
119
|
+
If the invocation supplied notes, write that markdown to stdin instead of the
|
|
120
|
+
raw plan field.
|
|
121
|
+
|
|
122
|
+
Then:
|
|
123
|
+
|
|
124
|
+
- Diff must be metadata only. If product code changed, reset and stop.
|
|
125
|
+
- `git rev-parse HEAD^` must equal the frozen SHA.
|
|
126
|
+
- Do not rebase onto a newer `main`, merge `main` in, or squash onto a moved
|
|
127
|
+
tip. Any of those would tag commits this candidate check never saw.
|
|
128
|
+
|
|
129
|
+
The cut SHA is `HEAD` after the commit. It is the immutable PR-head identity;
|
|
130
|
+
the release identity is the provider's verified merged SHA on `main`.
|
|
131
|
+
Proceed to [publish.md](publish.md).
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Dark launch
|
|
2
|
+
|
|
3
|
+
> Read when: dark launch is `on` — listing the flags that ship off in this release, adding them to the plan and changelog, and proving they are still off after it.
|
|
4
|
+
|
|
5
|
+
Dark launch separates **shipping code** from **exposing behavior**: a new
|
|
6
|
+
feature merges behind a feature flag whose default is off, the release puts
|
|
7
|
+
the code live, and turning the flag on is a later, separate decision. A release
|
|
8
|
+
never turns a flag on. Full mode only — the shortcut runs with dark launch off.
|
|
9
|
+
|
|
10
|
+
## Flag registry
|
|
11
|
+
|
|
12
|
+
The repository declares one registry file (JSON or YAML), named by the flow's
|
|
13
|
+
`flagRegistry` or `--flag-registry`:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{ "flags": { "bulk-refunds": { "default": false, "description": "Bulk refunds" } } }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Every flag has a `default`. Off means `false`, `0`, `"off"`, `"false"`, or
|
|
20
|
+
`"disabled"`. The repository also documents a read-only command that reports
|
|
21
|
+
each flag's **live** value in production (Cloud Run); without it, the live check
|
|
22
|
+
cannot run and dark launch is refused at preflight for Cloud Run.
|
|
23
|
+
|
|
24
|
+
## 1. List the flags shipping dark
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
node <skillsRoot>/resolve-release/scripts/dark-flags.mjs list \
|
|
28
|
+
--registry <path> --base <baselineTag> --sha <candidateSha> --json > /tmp/dark-flags.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
A flag ships dark when it is in the registry at the candidate but not at the
|
|
32
|
+
baseline, or when a commit in the range carries a `Dark-Launch: <flag>`
|
|
33
|
+
trailer. Exit 1 — a trailer naming an unregistered flag, or a dark flag whose
|
|
34
|
+
default is not off — is a pre-cut hand-back: the release would expose
|
|
35
|
+
behavior it claims to hide.
|
|
36
|
+
|
|
37
|
+
## 2. Plan and changelog
|
|
38
|
+
|
|
39
|
+
Pass the list to the plan:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node <skillsRoot>/resolve-release/scripts/plan.mjs --sha <candidateSha> --json \
|
|
43
|
+
--dark-flags /tmp/dark-flags.json [--cloud-run] > /tmp/release-plan.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The plan gains `darkFlags` and a `### Shipped dark` changelog section, one line
|
|
47
|
+
per flag. The SemVer bump is unchanged: the code did ship. Show the flags in the
|
|
48
|
+
plan record and record them in the receipt.
|
|
49
|
+
|
|
50
|
+
## 3. Verify they stayed off
|
|
51
|
+
|
|
52
|
+
After the release is live (Cloud Run: in [promotion.md](promotion.md)'s live
|
|
53
|
+
verification, before the final tag), read each flag's live value with the
|
|
54
|
+
repository command into `{ "<flag>": <value> }`, then:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node <skillsRoot>/resolve-release/scripts/dark-flags.mjs check \
|
|
58
|
+
--flags /tmp/dark-flags.json --observed /tmp/dark-flags-live.json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
A flag that is on, or has no reading, is a failed live check: roll back per
|
|
62
|
+
[promotion.md](promotion.md) section 5 and hand back. Do not turn the flag off
|
|
63
|
+
yourself — that is an operator decision outside the release.
|
|
64
|
+
|
|
65
|
+
For npm routes there is no live service; step 1's default-off check is the
|
|
66
|
+
proof, and the published package carries the registry as shipped.
|