@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,318 @@
|
|
|
1
|
+
# Expiry and stuck units
|
|
2
|
+
|
|
3
|
+
Expire an attempt at these limits. Never drop an expired unit from the spec.
|
|
4
|
+
|
|
5
|
+
**Count progress, not attempts: expire after 2 cycles without progress, and
|
|
6
|
+
never after a fixed number of cycles.** A fix cycle makes progress only when
|
|
7
|
+
its count reaches a new low, below every earlier cycle of the attempt; a
|
|
8
|
+
commit alone is not progress. Lows only fall, so the loop always ends.
|
|
9
|
+
Example: CI fails 5 tests, then 3, then 3, then 3: expire after the fourth
|
|
10
|
+
cycle. 3, 2, 3, 2 expires too: the second 2 is no new low. 5, 4, 3, 2, 1
|
|
11
|
+
never expires. A failing journey run, local or dispatched, counts as one
|
|
12
|
+
failing check, so count its furthest checkpoint instead (the last step its
|
|
13
|
+
log reports passing): login, store, charge, charge, charge expires;
|
|
14
|
+
login, store, charge, receipt keeps going. Checkpoints are finite, so this
|
|
15
|
+
loop ends too.
|
|
16
|
+
|
|
17
|
+
| Scope | Count that must reach a new low | Expire after |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Exploration | size-check problems plus empty units | 2 continuations without progress |
|
|
20
|
+
| Implement, validate, self-review | failing checks and tests | 2 fix cycles without progress |
|
|
21
|
+
| Warehouse canary | distinct errors | 2 attempts without progress; record a follow-up, never block |
|
|
22
|
+
| Review | open P0/P1 path rows | `review-verdict.mjs` verdict `handback` ([review.md](review.md#fix-loop)) |
|
|
23
|
+
| CI and merge | failing checks and tests; a failing journey run (local or `gh workflow run`) is one check, so it progresses when it passes a checkpoint no earlier run of the attempt passed | 2 fix-and-watch cycles without progress |
|
|
24
|
+
| Any worker the harness reports stuck, late, or at its ceiling | none: a resume [progresses](#retry-by-failure-mode) when it adds work the unit's PR needs (product code, tests, CI config, a fix of what blocks it) or meets another acceptance criterion; diagnostics and records alone are not progress | 2 resumes in a row that add neither |
|
|
25
|
+
|
|
26
|
+
Leave timing to the harness; never stop a worker still making progress.
|
|
27
|
+
|
|
28
|
+
### Retry by failure mode
|
|
29
|
+
|
|
30
|
+
**Name the failure mode before any retry, and respond to the mode, never with
|
|
31
|
+
the same attempt.** Record it as the block's `failureMode`.
|
|
32
|
+
|
|
33
|
+
| Mode | How it shows | Response | Attempts |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| `cap-hit` | the worker hit its context, output, or turn ceiling | resume in the kept workspace with only the remaining scope; split what still does not fit | while each resume makes progress (above) |
|
|
36
|
+
| `oom` | killed for memory or disk, or the host reserve is gone | rerun with smaller scope or fewer heavy jobs at once | 2 |
|
|
37
|
+
| `network` | EOF, TLS reset, 5xx, rate limit, runner offline: the same command passes elsewhere or later | rerun it unchanged at about 5, 15, then 45 minutes; then block the blocker unit as `external-blocker` | 3, then rechecked over time |
|
|
38
|
+
| `tool-error` | a tool crashes, the model refuses or drops its stream, the worker dies (`spawn-death`) | retry on another permitted model, or with another tool when the model is pinned | 2 |
|
|
39
|
+
| `denied` | the sandbox or harness refuses a command | one permission request through the harness, then a different permitted action that reaches the same outcome (never the same action by another channel or with a sandbox, hook, or setting turned off); with none, a handback step | 1 |
|
|
40
|
+
| `test-fail` | a test, check, or CI job fails on the change | find the cause and fix it ([Infrastructure failures](#infrastructure-failures) when it is not the change) | until 2 cycles without a new low |
|
|
41
|
+
| `stalled` | 2 cycles without a new low, or resumes that make no progress | change the strategy, the scope, or the model; never resend the brief | 1 replan |
|
|
42
|
+
| unknown | none of the above | retry once, then name the mode from what that run shows | 1 |
|
|
43
|
+
|
|
44
|
+
This table is the one retry ladder: the attempts here run inside a cycle, and the scheduler's
|
|
45
|
+
timed rechecks (below) start only after them. When a mode's attempts run out, abandon that
|
|
46
|
+
approach, not the unit and never the run: block the unit with its `blockedReason`, `failureMode`, and
|
|
47
|
+
`blockedAt`; the scheduler retries it over time (below) while every other
|
|
48
|
+
unit keeps going.
|
|
49
|
+
|
|
50
|
+
## Decide before you defer
|
|
51
|
+
|
|
52
|
+
**A unit stalled on a choice needs an answer, not another attempt.** Every
|
|
53
|
+
stop is one of two kinds: the work is not improving (the counts above), or it
|
|
54
|
+
waits on a choice: what the spec means, which design, which approach. A
|
|
55
|
+
retry, a resume with the same brief, or a deferral never makes a choice, so
|
|
56
|
+
none of them unblocks the unit.
|
|
57
|
+
|
|
58
|
+
- Workers report a choice in their result's `decisionNeeded`: the question,
|
|
59
|
+
the options, and a recommendation. A failure they can fix is not a choice.
|
|
60
|
+
- `review-verdict.mjs` returns `decide` when a spec finding comes back with
|
|
61
|
+
the same trigger and the same open paths; its decide file holds the
|
|
62
|
+
question ([review.md](review.md#fix-loop)).
|
|
63
|
+
- `next-actions.mjs`, invoked with [live capacity](implementation.md#live-capacity), prints `decide` for the unit until a `decisions` entry
|
|
64
|
+
whose `answers` names the question's file answers it; the unit takes no
|
|
65
|
+
other step until then, and in `rush-issues` the run cannot finish.
|
|
66
|
+
- Answer it with the [automatic answer](preflight.md#never-block-on-the-human). Then the unit's next step
|
|
67
|
+
follows: a resume or fix that carries the decision. That attempt always
|
|
68
|
+
runs, whatever the no-progress count; the ones after it count as usual.
|
|
69
|
+
- Defer a choice only when every answer loosens an acceptance criterion, a
|
|
70
|
+
required check, or a merge rule, or needs access the run does not have;
|
|
71
|
+
record that as the decision, with the reason. First trace each side of a
|
|
72
|
+
conflict to the human's criteria: a requirement that comes from how the
|
|
73
|
+
run chose to meet a criterion is a design choice the run can change.
|
|
74
|
+
- A recommendation to stay blocked, keep a candidate retained, or defer is
|
|
75
|
+
not an answer: answer the question beneath it (which way meets the
|
|
76
|
+
criterion); a limit that is not a [standing order](task-plan.md#standing-orders)
|
|
77
|
+
rules no way out.
|
|
78
|
+
Example: a worker recommended keeping a deploy-check unit blocked because
|
|
79
|
+
no permitted way could read the staging logs; the "no log access" limit
|
|
80
|
+
came from a split an earlier run filed and one denied command, so the
|
|
81
|
+
answer was to read the logs through the repository's documented CLI.
|
|
82
|
+
|
|
83
|
+
Example: #2533's fix worker returned "needs a boundary that proves the upload
|
|
84
|
+
body completed"; the run resumed it twice with the same brief and deferred
|
|
85
|
+
it. Deciding "verify by reading back the exact generation it wrote" was the
|
|
86
|
+
step that unblocked it. Likewise, a report job that held every row in memory
|
|
87
|
+
broke its 2 GB memory criterion; the criterion asked for the report, not
|
|
88
|
+
in-memory rows, so streaming the rows kept the limit and needed no human.
|
|
89
|
+
|
|
90
|
+
## Waits
|
|
91
|
+
|
|
92
|
+
**Every wait has a deadline; silence past it is a failure, not progress.**
|
|
93
|
+
Example: a worker ran from 08:16; its workspace last changed at 09:10, and
|
|
94
|
+
nothing was checked until the human asked at 11:19. It had been stuck for two
|
|
95
|
+
hours.
|
|
96
|
+
|
|
97
|
+
- Record `workerSince` when you start a worker. While any worker runs, keep
|
|
98
|
+
one heartbeat running (a background `sleep 1800`) so a completion notice
|
|
99
|
+
reaches you even when no worker finishes; on each notice read fresh capacity
|
|
100
|
+
and run `next-actions.mjs` with the [live capacity arguments](implementation.md#live-capacity).
|
|
101
|
+
When it prints only `wait`, keep the heartbeat and end the turn: the harness
|
|
102
|
+
wakes the run at the printed time.
|
|
103
|
+
- `check-worker` means the worker changed no workspace file for
|
|
104
|
+
`--quiet-minutes` (45 by default): read its latest output. Stuck: stop it
|
|
105
|
+
and take the `timeout-task` response. Still working (a long test run with
|
|
106
|
+
live output): let it run.
|
|
107
|
+
- A watcher that ends with nothing new (a queue `STALLED` with no failing
|
|
108
|
+
check) is a wait: restart it and report it in one line, or not at all.
|
|
109
|
+
|
|
110
|
+
### Reason codes
|
|
111
|
+
|
|
112
|
+
Record why a unit stopped in its `note`: `retry-explore`, `retry-implement`,
|
|
113
|
+
`retry-canary`, `retry-review`, `retry-ci`, `timeout-task`, `spawn-death`,
|
|
114
|
+
`rebase-conflict`, `external-blocker`, `human-decision`, `review-handback`.
|
|
115
|
+
**A unit stays `blocked` only with a `blockedReason` from this subset:**
|
|
116
|
+
`retry-explore`, `retry-implement`, `retry-review`, `retry-ci`,
|
|
117
|
+
`timeout-task`, `spawn-death` (each after its cycles without progress),
|
|
118
|
+
`external-blocker` (a blocker unit whose cause lies outside the run, such as
|
|
119
|
+
a shared runner outage or a provider fault: [Infrastructure failures](#infrastructure-failures) step 4),
|
|
120
|
+
`human-decision` (an item on the [human-only](#human-only) list, named as
|
|
121
|
+
`humanItem` 1–5 with `humanNeed`, what the human must do; without both,
|
|
122
|
+
`next-actions.mjs` reopens it),
|
|
123
|
+
`review-handback` (`review-verdict.mjs` verdict `handback`, or an awaited re-review that
|
|
124
|
+
timed out), and `size-hold` (`resolve-issues` only). `next-actions.mjs`,
|
|
125
|
+
invoked with [live capacity](implementation.md#live-capacity),
|
|
126
|
+
reopens any other block on its next call: a wait on another unit (it is
|
|
127
|
+
pending, as is a unit waiting on a blocker unit), or a size hold in a rush
|
|
128
|
+
run (split it).
|
|
129
|
+
Record `blockedAt` and `failureMode` with every block. A `retry-ci`,
|
|
130
|
+
`timeout-task`, `spawn-death`, or `external-blocker` block can clear by itself
|
|
131
|
+
(a runner, a provider, the network), so the run does not finish on it: `next-actions.mjs` prints `wait` until the next attempt is due
|
|
132
|
+
(30 minutes, then 2 hours, then 8 hours after `blockedAt`), then
|
|
133
|
+
`retry-blocked`: give the unit a fresh attempt on the current state (a blocker
|
|
134
|
+
unit reruns its recorded check, unchanged, and succeeds when it passes) and add
|
|
135
|
+
one to `autoRetries` (reset it when the unit lands or its `failureMode` changes). After 3
|
|
136
|
+
attempts the block is settled. `retry-implement` and `retry-review` fail for reasons that do
|
|
137
|
+
not clear by waiting: replan them once ([Retry by failure mode](#retry-by-failure-mode)), then
|
|
138
|
+
they settle. Example: shared CI runners went
|
|
139
|
+
offline; the run waited, retried, and merged once they returned, with no
|
|
140
|
+
"try again" from the human.
|
|
141
|
+
A reason code records why a unit stopped in this invocation; it never holds the
|
|
142
|
+
next one. Example: #1339 was `blocked` on a human-only question; the next
|
|
143
|
+
`/rush-issues` gets `unblock 1339` from `next-actions.mjs --resume` with
|
|
144
|
+
[fresh capacity arguments](implementation.md#live-capacity) and
|
|
145
|
+
resumes it in its kept workspace. A reopened review handback gets a fresh
|
|
146
|
+
full review of the same HEAD; `review-verdict.mjs` hands it back again only
|
|
147
|
+
if its finding recurs.
|
|
148
|
+
|
|
149
|
+
## Human-only
|
|
150
|
+
|
|
151
|
+
**Defer a blocker only when its fix is on this list; the run fixes
|
|
152
|
+
everything else.** Each item takes its automatic answer
|
|
153
|
+
([preflight.md](preflight.md#never-block-on-the-human)); a deferred one waits on its owning issue while the
|
|
154
|
+
rest ships.
|
|
155
|
+
|
|
156
|
+
1. A product, scope, or approval question the spec does not answer. How
|
|
157
|
+
the run proceeds (split, defer, retry, wait) is never one, whatever an
|
|
158
|
+
issue or note says ([preflight.md](preflight.md#never-block-on-the-human)).
|
|
159
|
+
2. A change that loosens a merge rule, a required check, branch protection,
|
|
160
|
+
or a CI workflow.
|
|
161
|
+
3. A change to a live or shared environment: staging or production data, a
|
|
162
|
+
runner or machine the run did not set up, another person's resource.
|
|
163
|
+
Creating new, isolated, test-only resources the run owns (a tunnel
|
|
164
|
+
hostname, a scratch service) is not one. Once the repository documents one for reuse, it is shared:
|
|
165
|
+
start and stop it, never delete it.
|
|
166
|
+
4. Product code outside the run's units.
|
|
167
|
+
5. Access the run does not have: a secret, an account, a device, a paid
|
|
168
|
+
service. A capability the machine has but a rule forbids is not item 5:
|
|
169
|
+
a rule that is not a [standing order](task-plan.md#standing-orders) does not hold;
|
|
170
|
+
a sandbox denial gets one permission request through the harness, then a
|
|
171
|
+
route around it. Example: reading the logs of a container the run itself
|
|
172
|
+
started needs no access the run lacks.
|
|
173
|
+
|
|
174
|
+
**Use what the machine already has before naming item 5.** Check the
|
|
175
|
+
installed CLIs and the accounts they are logged in to (`gh`, `gcloud`,
|
|
176
|
+
`wrangler`, `aws`), the environment, and the repository's docs, and put what
|
|
177
|
+
you checked in the blocker.
|
|
178
|
+
Example: a test needed a trusted HTTPS hostname. `wrangler` was already
|
|
179
|
+
logged in to the account owning the domains, so a run-owned tunnel hostname
|
|
180
|
+
was within reach: not item 5.
|
|
181
|
+
|
|
182
|
+
What the run or its workers created is the run's own: databases,
|
|
183
|
+
processes, ports, containers, emulators, files, branches, and draft PRs.
|
|
184
|
+
Retrying, resuming, cleaning up, and reviewing again are the run's too.
|
|
185
|
+
A missing token, handle, record, or permission note does not put a fix on
|
|
186
|
+
the list, and neither does a note or comment from an earlier invocation:
|
|
187
|
+
take every `unblock` that `next-actions.mjs --resume` with
|
|
188
|
+
[fresh capacity arguments](implementation.md#live-capacity) prints.
|
|
189
|
+
Example: a reviewer's timed-out test left its database and lost the
|
|
190
|
+
cleanup token; that is not on the list, so confirm the name and zero
|
|
191
|
+
sessions, drop it, and resume the reviewer. A required check that needs a
|
|
192
|
+
secret the repository lacks is item 5: hand it back.
|
|
193
|
+
|
|
194
|
+
## Respond by failure kind
|
|
195
|
+
|
|
196
|
+
Spawn no separate diagnosis worker for a known failure kind, and write no
|
|
197
|
+
diagnosis document; an unknown infrastructure failure gets one fix worker
|
|
198
|
+
([Infrastructure failures](#infrastructure-failures)). The failure kind
|
|
199
|
+
is already known from the reason code, the failing check, or
|
|
200
|
+
`review-verdict.mjs`; take its response, keep the branch, workspace, and
|
|
201
|
+
logs, and record one line, with the reason code, in the unit's plan row.
|
|
202
|
+
|
|
203
|
+
| Failure | Response |
|
|
204
|
+
|---|---|
|
|
205
|
+
| `timeout-task` or `spawn-death` | Resume in the kept workspace: commit what is there, then finish or report. Keep resuming while each resume makes [progress](#retry-by-failure-mode); after 2 in a row that add nothing, mark the unit `blocked` (`blockedReason: timeout-task` or `spawn-death`) and hand it back. A result with `decisionNeeded` is decided first ([Decide before you defer](#decide-before-you-defer)), and the resume that carries the decision always runs. Example: a fix worker loses its model stream twice but committed a fixture each time; start a third continuation. |
|
|
206
|
+
| Environment or infrastructure (a check cannot run: cache, emulator, runner, network, credentials) | See [Infrastructure failures](#infrastructure-failures). |
|
|
207
|
+
| Implement: a fix cycle without progress | Resume with the failing command and its output as the only target, using the escalation model. 2 cycles in a row without progress: `blocked` (`blockedReason: retry-implement`), deferred on its issue. |
|
|
208
|
+
| Review: `review-verdict.mjs` verdict `fix` | Follow its `action` ([review.md](review.md#fix-loop)). |
|
|
209
|
+
| Review: `review-verdict.mjs` verdict `handback` (`not-converging`) | Stop fixing; mark the unit `blocked` (`blockedReason: review-handback`) and defer the PR with its open findings on its issue. |
|
|
210
|
+
| Review: `review-verdict.mjs` verdict `decide`, or a worker's `decisionNeeded` | [Decide before you defer](#decide-before-you-defer). |
|
|
211
|
+
| CI: a fix cycle without progress | Treat the failing check as the failing test: the next fix worker runs on the escalation model with that check as its only target. 2 cycles in a row without progress: `blocked` (`blockedReason: retry-ci`), deferred on its issue. |
|
|
212
|
+
| Too big for one attempt | Resume in the kept workspace while each resume makes [progress](#retry-by-failure-mode); after 2 in a row that make none, draft a split in `<run>/splits/`, file it into the spec's tree, and run the slices the sync adds ([preflight.md](preflight.md#put-every-filed-issue-in-the-tree)). |
|
|
213
|
+
| A required proof the unit has no environment for yet | The unit builds it; see [Proof stays with its unit](#proof-stays-with-its-unit). |
|
|
214
|
+
| Dependency | Fix the edge; resume when runnable. |
|
|
215
|
+
| A capability the unit needs is missing and no unit builds it (a shared driver, fixture, or hook) | Build it inside the first unit that needs it; units that need it later get `dependsOn` on that unit. Only when that puts the unit past the size check's line limit, file it as its own issue beside them, with `blocked_by` on the units that use it, never on their parent issue. Example: three proof units each need a device-state reader: the first builds it, the other two depend on the first. |
|
|
216
|
+
| [Human-only](#human-only) blocker | Take its automatic answer ([preflight.md](preflight.md#never-block-on-the-human)); when that defers it, mark `blocked` (`blockedReason: human-decision`, its `humanItem` and `humanNeed`), keep the work, and record what is needed on its owning issue; never ship part of the unit. |
|
|
217
|
+
|
|
218
|
+
Continue in the kept workspace with the findings entry, never the old
|
|
219
|
+
transcript. Record a queue stall with the
|
|
220
|
+
provider pending as a wait and watch again. End the run only when
|
|
221
|
+
`next-actions.mjs`, invoked with [live capacity](implementation.md#live-capacity), prints `finish`, and never claim the spec complete.
|
|
222
|
+
|
|
223
|
+
## Proof stays with its unit
|
|
224
|
+
|
|
225
|
+
**A unit's browser and emulator proof is part of the unit: it runs in the
|
|
226
|
+
unit's workspace and lands in the unit's PR.** Keeping it there holds back nothing else: a dependency is met when
|
|
227
|
+
the parent's code is done ([implementation.md](implementation.md)), so
|
|
228
|
+
dependents start while the parent still proves itself; only the unit's own
|
|
229
|
+
merge waits for its proof.
|
|
230
|
+
|
|
231
|
+
- **No working suite or environment yet? The unit builds what its proof
|
|
232
|
+
needs**, with access the run already has (the run's local emulator, when
|
|
233
|
+
[its queue](implementation.md#scheduling) hands it over, a
|
|
234
|
+
disposable database, a container, a tunnel hostname), counted in its
|
|
235
|
+
lines like a missing prerequisite. When two or more units need the same
|
|
236
|
+
setup, the size check's split makes it a prefactor slice.
|
|
237
|
+
- **The environment fails? It is an
|
|
238
|
+
[infrastructure failure](#infrastructure-failures):** one bounded
|
|
239
|
+
investigation that fixes what the run can; a blocker issue only when the
|
|
240
|
+
cause stays unfound or its fix is human-only. The unit's journey waits on the
|
|
241
|
+
blocker with its draft PR and workspace kept; every other unit keeps
|
|
242
|
+
going.
|
|
243
|
+
- **Question the proof itself when building its environment would
|
|
244
|
+
cost more than the change:** infrastructure beyond one bounded setup,
|
|
245
|
+
the environment work held by the size check, or 2 environment attempts
|
|
246
|
+
that end without progress. Decide at the first of these, never after a
|
|
247
|
+
chain of workarounds, and take whichever ships the spec sooner at the
|
|
248
|
+
same bar: the unit waits on the blocker, or its PR ships at its coding
|
|
249
|
+
acceptance while the remaining proof stays open, recorded once as pending
|
|
250
|
+
on the issue that owns it; that issue is never reported done until the
|
|
251
|
+
proof passes. Only a human waives a check, by saying so.
|
|
252
|
+
Example: five interrupt-during-commit browser checks timed out on a slow
|
|
253
|
+
tunnel. The run tried HTTP/2, a VPN theory, then a Cloud Run test service
|
|
254
|
+
held at 5,382 lines, for about 46 hours; the human then waived the five
|
|
255
|
+
checks and the unit merged two hours later.
|
|
256
|
+
- Evidence only a real device gives (`proof.physical`) stays one pending
|
|
257
|
+
record at the release gate ([preflight.md](preflight.md#5-size-check)).
|
|
258
|
+
The release gate keeps only that and the integrated, cross-feature checks.
|
|
259
|
+
- Proof issues filed by earlier runs are units: run each as it stands,
|
|
260
|
+
depending on the unit whose code it proves.
|
|
261
|
+
Example: a fixture-pool bug (#72) stops the emulator journeys of #45
|
|
262
|
+
(Void) and #46 (Refund). File #72 as a blocker; #45 and #46 keep their
|
|
263
|
+
draft PRs and finish their journeys when #72 closes.
|
|
264
|
+
|
|
265
|
+
## Infrastructure failures
|
|
266
|
+
|
|
267
|
+
**Diagnose each infrastructure failure to its cause and fix it.** Never
|
|
268
|
+
wait for someone else to diagnose it.
|
|
269
|
+
|
|
270
|
+
"The same failure" means the same command failing with the same error.
|
|
271
|
+
Example: `./gradlew assembleDebug` fails with `Could not resolve
|
|
272
|
+
com.facebook.react` in unit A and again in unit C: one failure.
|
|
273
|
+
|
|
274
|
+
1. **Already recorded? Link it.**
|
|
275
|
+
Example: unit C hits the Gradle error that `decisions` already records
|
|
276
|
+
for unit A, so C waits on A's blocker issue.
|
|
277
|
+
2. **New? One fix worker on the unit that hit it (`workerKind: fix`) gets
|
|
278
|
+
the repository's documented limit (20 minutes when it has none)** to
|
|
279
|
+
reproduce it, find the cause, and fix what the run itself owns.
|
|
280
|
+
Once the log names the cause as something the run does not own (a
|
|
281
|
+
shared runner, GitHub's API, the network), it is a blocker only if it
|
|
282
|
+
lasts: rerun it with growing gaps (about 5, 15, then 45 minutes) while
|
|
283
|
+
other units keep shipping. Never rerun before the cause is named.
|
|
284
|
+
Example: checkout failed with `EACCES` on three shared runners at 20:30;
|
|
285
|
+
by 01:00 the directories were gone and the same PR merged unchanged.
|
|
286
|
+
Example: point Gradle at the run's private cache, pick a free port,
|
|
287
|
+
stop the run's own stuck emulator.
|
|
288
|
+
An open review `executionIncident` is the run's to fix
|
|
289
|
+
([result.md](../../better-review/references/result.md)).
|
|
290
|
+
3. **Cause found, fix outside the run? Apply it.** Record the cause and
|
|
291
|
+
its proof, the change, and what it touches in `decisions` and on the
|
|
292
|
+
blocker issue, then rerun the failed check at the same HEAD. A
|
|
293
|
+
[human-only](#human-only) fix takes its automatic answer instead
|
|
294
|
+
([preflight.md](preflight.md#never-block-on-the-human)).
|
|
295
|
+
Example: "BuildKit on runner `mac-2` cannot pull `docker/dockerfile:1.7`
|
|
296
|
+
because its registry mirror returns 404 (log line 212). Fix: drop the
|
|
297
|
+
mirror from `/etc/buildkit/buildkitd.toml` and restart buildkitd.
|
|
298
|
+
Proof: rerun `Admission CI` on #1388's HEAD." `mac-2` is a shared runner
|
|
299
|
+
(item 3), so this goes on the blocker issue and #1388 waits on it while
|
|
300
|
+
the rest ships. Never: "the runner custodian needs to provide resolution
|
|
301
|
+
evidence."
|
|
302
|
+
4. **Cause not found when that limit runs out? Make one blocker issue.**
|
|
303
|
+
File it with the command, the error, what was tried, and what is still
|
|
304
|
+
unknown (nothing else: [Filed text](preflight.md#filed-text)), or link the
|
|
305
|
+
repository's open issue for it. Record it in
|
|
306
|
+
`decisions`. Put it in the spec's tree beside the units it blocks, with
|
|
307
|
+
a `blocked_by` link on each of them, then sync
|
|
308
|
+
([preflight.md](preflight.md#put-every-filed-issue-in-the-tree)): it
|
|
309
|
+
becomes a unit the run can fix, and the units it affects wait on it, not
|
|
310
|
+
started (`pending`), never `blocked`. When its fix lies outside the run (a
|
|
311
|
+
shared runner, a provider, the network), block the blocker unit itself as
|
|
312
|
+
`external-blocker` with `blockedAt`, never `human-decision`: the outage may
|
|
313
|
+
end, so the run rechecks it over time instead of finishing.
|
|
314
|
+
5. **Hold back only the work it affects.**
|
|
315
|
+
Example: the emulator will not boot, so the Android units keep shipping
|
|
316
|
+
what they can prove, their emulator journeys wait on the blocker issue
|
|
317
|
+
inside their own units, and the backend units are
|
|
318
|
+
untouched.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Exploration
|
|
2
|
+
|
|
3
|
+
**One explorer per run, after the plan draft, records what sizes, orders, and
|
|
4
|
+
blocks the units: behaviors, missing prerequisites, proof, line estimates,
|
|
5
|
+
dependencies, contracts, and the questions that hold a unit.**
|
|
6
|
+
In a one-unit run, leave `contracts`, `dependsOn`, and `stacksOn` empty.
|
|
7
|
+
|
|
8
|
+
## Spawn
|
|
9
|
+
|
|
10
|
+
| Field | Value |
|
|
11
|
+
|---|---|
|
|
12
|
+
| Model | The explorer fill ([preflight.md](preflight.md#1-model-slots)) |
|
|
13
|
+
| Workspace | Read-only checkout of the provisional target; write only the findings directory |
|
|
14
|
+
| Task plan | Absolute `task-plan.json` path; its unit ids key the findings |
|
|
15
|
+
| Prior findings | Newest `.resolve-issues/rush/*/exploration/findings.json` for the same spec locator, if any |
|
|
16
|
+
| Deadline | 15 minutes, plus 1 minute per unit beyond 4 |
|
|
17
|
+
| Product code | Unchanged |
|
|
18
|
+
|
|
19
|
+
## Reuse first
|
|
20
|
+
|
|
21
|
+
**When prior findings exist, explore only the units whose evidence changed.**
|
|
22
|
+
Run, before spawning, and give the explorer its output:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node <skill-base-dir>/scripts/findings-reuse.mjs \
|
|
26
|
+
--prior <prior findings.json> --units <this run's unit ids, comma-separated>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- `reuse`: copy the entry unchanged, with the new `base`.
|
|
30
|
+
- `recheck`: re-explore the entry; its `changed` files are where to look.
|
|
31
|
+
- `new`: explore from scratch.
|
|
32
|
+
|
|
33
|
+
Example: a resumed run starts after earlier units merged `src/charge/`; only
|
|
34
|
+
the two units whose evidence names `src/charge/` are re-explored, the other
|
|
35
|
+
four are copied.
|
|
36
|
+
|
|
37
|
+
## Brief
|
|
38
|
+
|
|
39
|
+
1. **Scaffold, then save one unit at a time.** Keep an existing
|
|
40
|
+
`findings.json`; otherwise create it with `version: 2`, the `base` SHA,
|
|
41
|
+
and an empty entry per unit id. Write `slice` and `proof` before
|
|
42
|
+
`estimatedLines`, and `estimatedLines` last.
|
|
43
|
+
2. **Read only what sizing needs:** each unit's source and criteria from the
|
|
44
|
+
run directory, repository guidance, ADRs, and the code those point to.
|
|
45
|
+
Example: to learn whether the History list exists, open the History
|
|
46
|
+
route, not the whole app. Fetch external documents the spec names from
|
|
47
|
+
their source.
|
|
48
|
+
For a rollup (an open issue whose sub-issues all closed), size only the
|
|
49
|
+
criteria its closed sub-issues did not deliver; when none are left, say
|
|
50
|
+
so in its entry's `notes` and save no slice. The coordinator removes the
|
|
51
|
+
unit, records the issue in `excluded` ("nothing left: close it"), and
|
|
52
|
+
reruns the size check.
|
|
53
|
+
Example: held #40's prerequisite #41 merged; #40's own campaign
|
|
54
|
+
criteria remain, so size them. Epic #12's sub-issues all merged and
|
|
55
|
+
its criteria are theirs: nothing left.
|
|
56
|
+
3. **`behaviors`: each user-visible outcome the issue asks for, verifiable
|
|
57
|
+
on its own.** Fold a flow's errors, retries, recovery, and edge cases into
|
|
58
|
+
it. A prefactor or refactor has one behavior: its outcome.
|
|
59
|
+
Example: "the cashier pages through the log", not "add a cursor param".
|
|
60
|
+
**Never join two outcomes with "and".** Example: "the User edits their
|
|
61
|
+
Profile from Android and signs out on both surfaces" is two behaviors:
|
|
62
|
+
"the User edits their own Profile from Android" and "signing out on
|
|
63
|
+
either surface signs out both".
|
|
64
|
+
**Count outcomes, not cases: who may do an action and who is refused it
|
|
65
|
+
are one behavior.** Example: "admins can export" and "members cannot
|
|
66
|
+
export" are one behavior. Different actors or different actions stay
|
|
67
|
+
separate: "members open Apps" and "admins configure the workspace" are
|
|
68
|
+
two.
|
|
69
|
+
**Never count a criterion that only proves, documents, or re-checks
|
|
70
|
+
other criteria or existing behavior.** Example: "the regression suite
|
|
71
|
+
passes", "the README describes the flag", and "existing logins keep
|
|
72
|
+
working" are proof, docs, and a regression check.
|
|
73
|
+
4. **`prerequisites`: what the unit builds on but does not ask for, and is
|
|
74
|
+
missing.** Always present: `[]` when none. Mark each `missing` with where you looked, and `separate`:
|
|
75
|
+
`true` for a surface the issue does not name (new service or module,
|
|
76
|
+
migration, code moved to be shared), else `false`. Neither holds the
|
|
77
|
+
unit: the unit builds it, and its lines count in `estimatedLines`; a
|
|
78
|
+
`separate` one becomes a prefactor only if the unit is held for size. Add a `present` one
|
|
79
|
+
only when a worker would not find it alone, with file and line.
|
|
80
|
+
Never list the unit's own behavior. A prerequisite or suite that a unit
|
|
81
|
+
this one `dependsOn` builds is `present`, citing that unit.
|
|
82
|
+
Example: slice "submit and recover" depends on slice "backend
|
|
83
|
+
authority", so it records `{ "what": "backend authority", "status":
|
|
84
|
+
"present", "evidence": "built by unit 1650" }`.
|
|
85
|
+
Example: "Persist the Charge layout" is unit 1322's behavior, never its
|
|
86
|
+
missing prerequisite; "settings store module", absent from `app/`, is.
|
|
87
|
+
5. **`layers`:** the parts changed (`backend`, `web`, `android`, `shared`,
|
|
88
|
+
`migration`).
|
|
89
|
+
6. **`proof`:**
|
|
90
|
+
- `level`: the weakest the run can reach that shows the behaviors work:
|
|
91
|
+
`unit`, `database`, `browser`, or `emulator`.
|
|
92
|
+
- `suite` (`browser`/`emulator` only): the repository's end-to-end suite
|
|
93
|
+
for that kind of journey. Mark it `present` when it has run green on any
|
|
94
|
+
journey in CI or recently, citing that run, with a `check` command; mark
|
|
95
|
+
it `missing` only when none exists, the unit would build one, or its
|
|
96
|
+
recent runs are all red. For a unit that builds the suite, set the level
|
|
97
|
+
it reaches without it and omit `suite`.
|
|
98
|
+
- `local` (present suites): the command that runs the same journey as
|
|
99
|
+
`check`, off CI, on an owned emulator or a local browser. Workers
|
|
100
|
+
reproduce a failed journey with it before they push a fix; never a CI
|
|
101
|
+
dispatch (`gh workflow run`, `gh run rerun`). `check` may be one.
|
|
102
|
+
- `skill` (every suite, present or missing): the absolute `SKILL.md` path of the installed skill for this
|
|
103
|
+
kind of journey (an emulator journey: `android-foundation`; a browser
|
|
104
|
+
one: `e2e-test`), or `null` when none is installed.
|
|
105
|
+
Example: `check` dispatches the workflow input that runs the Charge
|
|
106
|
+
journey; `local` runs that Charge journey script on an owned emulator,
|
|
107
|
+
not the repository's default phone journey.
|
|
108
|
+
- Findings saved before `local` and `skill` existed are unfinished:
|
|
109
|
+
continue the explorer to add them, even when reusing the rest.
|
|
110
|
+
- `physical`: evidence only a real device gives; else empty.
|
|
111
|
+
|
|
112
|
+
- `groups` and `setups` (only when `slice.newProductBehaviorCount` is
|
|
113
|
+
0, a unit that only proves code already merged): one group per
|
|
114
|
+
independently runnable part of the proof, with `id`, `covers` (the
|
|
115
|
+
issue whose criteria it proves), `estimatedLines` (under 1,900), and
|
|
116
|
+
`setup` (the `setups` id it needs, or `null`); one setup per piece of
|
|
117
|
+
shared harness, with `id`, `what`, and `estimatedLines` (under 1,900). The size check
|
|
118
|
+
splits a held proof-only unit along them.
|
|
119
|
+
Example: a campaign's 25 scenario groups each cover one feature issue; 20
|
|
120
|
+
share "owned emulator, database, and fixture pool" (900 lines).
|
|
121
|
+
|
|
122
|
+
`level` is coding acceptance. Integrated acceptance the spec or repository
|
|
123
|
+
assigns to a later gate (a release device campaign, all-ABI or signed
|
|
124
|
+
builds, a cross-feature journey) goes in `handback`, naming its gate.
|
|
125
|
+
7. **`estimatedLines`: your honest estimate of changed source and test
|
|
126
|
+
lines,** excluding generated files and docs, including every missing
|
|
127
|
+
prerequisite. Do not pad it: the size check scales it by 1.3.
|
|
128
|
+
8. **`dependsOn` and `contracts`.** `dependsOn` lists the units whose
|
|
129
|
+
change this unit needs: code it calls, a schema or migration, seeded
|
|
130
|
+
data, a config key, a generated client. Needing the same environment,
|
|
131
|
+
device, or tool is not a dependency; the run's limits order those.
|
|
132
|
+
Example: a settings screen and a login screen both need the emulator;
|
|
133
|
+
neither depends on the other. Leave `stacksOn` empty: a shared surface
|
|
134
|
+
shows up at rebase (in `chain` mode, from the files each finished unit
|
|
135
|
+
changed), and the merge queue catches PRs that fail together.
|
|
136
|
+
Put each contract (export, signature, invariant) in the providing
|
|
137
|
+
unit's entry.
|
|
138
|
+
9. **`readFirst`: at most 3 paths to read first or copy the pattern of.**
|
|
139
|
+
Example: `scripts/inventory-legacy-lifecycle.ts` as the pattern for a new
|
|
140
|
+
inventory script.
|
|
141
|
+
10. **`notes`: at most 500 characters** of what the worker must know and
|
|
142
|
+
would not find quickly.
|
|
143
|
+
11. **`openQuestions`: only what a human must decide** (`kind`: `product`,
|
|
144
|
+
`scope`, or `approval`), assigned to the one unit that needs it. A
|
|
145
|
+
technical choice goes in the settling unit's `notes`.
|
|
146
|
+
Example: "must an admin direct-add create a pending membership?" is a
|
|
147
|
+
product question; "which cursor encoding?" is a note.
|
|
148
|
+
An issue that says its implementation is paused until resumed is an
|
|
149
|
+
`approval` question on its unit.
|
|
150
|
+
12. **`handback`:** proof the run cannot produce (live environments,
|
|
151
|
+
approvals, production releases or migrations, go/no-go).
|
|
152
|
+
|
|
153
|
+
Record what is there; never trim a list to pass the check.
|
|
154
|
+
|
|
155
|
+
## Output
|
|
156
|
+
|
|
157
|
+
`exploration/findings.json`:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"version": 2,
|
|
162
|
+
"base": "<SHA>",
|
|
163
|
+
"units": {
|
|
164
|
+
"<unit-id>": {
|
|
165
|
+
"notes": "Cursor must survive a refund reorder; keep page size 50.",
|
|
166
|
+
"slice": {
|
|
167
|
+
"behaviors": ["the cashier pages through the log"],
|
|
168
|
+
"prerequisites": [
|
|
169
|
+
{ "what": "cursor column", "status": "missing", "separate": false, "evidence": "not in db/schema.sql" }
|
|
170
|
+
],
|
|
171
|
+
"layers": ["backend", "web"],
|
|
172
|
+
"newProductBehaviorCount": 1
|
|
173
|
+
},
|
|
174
|
+
"proof": {
|
|
175
|
+
"level": "browser",
|
|
176
|
+
"suite": { "what": "Playwright e2e", "status": "present", "evidence": "e2e job green", "check": "pnpm exec playwright test e2e/smoke.spec.ts", "local": "pnpm exec playwright test e2e/smoke.spec.ts", "skill": "/home/dev/.claude/skills/e2e-test/SKILL.md" },
|
|
177
|
+
"physical": []
|
|
178
|
+
},
|
|
179
|
+
"estimatedLines": 900,
|
|
180
|
+
"contracts": ["core exports page(text, {cursor, limit})"],
|
|
181
|
+
"readFirst": ["packages/core/page.ts"],
|
|
182
|
+
"dependsOn": [],
|
|
183
|
+
"stacksOn": []
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"openQuestions": [{ "kind": "product", "unit": "<unit-id>", "text": "may a cashier see voided entries?" }],
|
|
187
|
+
"handback": [{ "what": "run the backfill on staging", "unit": "<unit-id>" }]
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Set `resolved: true` on a question once the human answers; the check ignores
|
|
192
|
+
it then.
|
|
193
|
+
|
|
194
|
+
## Completion
|
|
195
|
+
|
|
196
|
+
Confirm the findings exist, the model read-back matches, and no product source
|
|
197
|
+
changed. Never edit the findings yourself. Run the size check; on `exploration-unfinished` or
|
|
198
|
+
tool failures, continue the explorer with the errors. At the deadline, have it
|
|
199
|
+
save what it has and stop; continue it in the same directory for the units
|
|
200
|
+
still empty while size-check problems plus empty units reach new lows, then follow
|
|
201
|
+
[expire.md](expire.md). Never skip exploration;
|
|
202
|
+
reuse is not skipping.
|