@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,312 @@
|
|
|
1
|
+
# VPC Configuration
|
|
2
|
+
|
|
3
|
+
VPC networks, subnets, and firewall rules for GCP infrastructure.
|
|
4
|
+
|
|
5
|
+
## Network Operations
|
|
6
|
+
|
|
7
|
+
### List Networks
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# All networks in project
|
|
11
|
+
gcloud compute networks list
|
|
12
|
+
|
|
13
|
+
# With details
|
|
14
|
+
gcloud compute networks list --format="table(name,subnetMode,autoCreateSubnetworks)"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Create Network
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Custom subnet mode (recommended)
|
|
21
|
+
gcloud compute networks create $NAME \
|
|
22
|
+
--subnet-mode=custom \
|
|
23
|
+
--mtu=1460 \
|
|
24
|
+
--bgp-routing-mode=regional
|
|
25
|
+
|
|
26
|
+
# Legacy (auto-create subnets)
|
|
27
|
+
gcloud compute networks create $NAME \
|
|
28
|
+
--subnet-mode=legacy \
|
|
29
|
+
--auto-create-subnetworks
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Delete Network
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
gcloud compute networks delete $NAME
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Subnet Operations
|
|
41
|
+
|
|
42
|
+
### List Subnets
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# All subnets in region
|
|
46
|
+
gcloud compute networks subnets list --region=us-central1
|
|
47
|
+
|
|
48
|
+
# In specific network
|
|
49
|
+
gcloud compute networks subnets list \
|
|
50
|
+
--filter="network:$NETWORK" \
|
|
51
|
+
--region=us-central1
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Create Subnet
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
gcloud compute networks subnets create $SUBNET \
|
|
58
|
+
--network=$NETWORK \
|
|
59
|
+
--region=us-central1 \
|
|
60
|
+
--range=$IP_RANGE \
|
|
61
|
+
--purpose=REGIONAL_MANAGED_PROXY \
|
|
62
|
+
--enable-flow-logs \
|
|
63
|
+
--logging-flow-sampling=0.5 \
|
|
64
|
+
--logging-metadata=include-all
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Describe Subnet
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
gcloud compute networks subnets describe $SUBNET \
|
|
71
|
+
--region=us-central1 \
|
|
72
|
+
--format="yaml(ipCidrRange,purpose,privateIpGoogleAccess,secondaryIpRanges)"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Cloud Run with VPC
|
|
78
|
+
|
|
79
|
+
### Deploy Cloud Run with VPC
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
gcloud run deploy $SERVICE \
|
|
83
|
+
--image=$IMAGE \
|
|
84
|
+
--region=us-central1 \
|
|
85
|
+
--network=$NETWORK \
|
|
86
|
+
--subnet=$SUBNET
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Update Existing Service VPC
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
gcloud run services update $SERVICE \
|
|
93
|
+
--region=us-central1 \
|
|
94
|
+
--network=$NETWORK \
|
|
95
|
+
--subnet=$SUBNET
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Cloud Run Job with VPC
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
gcloud run jobs create $JOB \
|
|
102
|
+
--image=$IMAGE \
|
|
103
|
+
--region=us-central1 \
|
|
104
|
+
--network=$NETWORK \
|
|
105
|
+
--subnet=$SUBNET
|
|
106
|
+
|
|
107
|
+
# Update existing job
|
|
108
|
+
gcloud run jobs update $JOB \
|
|
109
|
+
--region=us-central1 \
|
|
110
|
+
--network=$NETWORK \
|
|
111
|
+
--subnet=$SUBNET
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Cloud SQL Connection Standard
|
|
117
|
+
|
|
118
|
+
**1Above standard:** Connect via direct VPC + private IP. Do NOT use Cloud SQL Auth Proxy (`--add-cloudsql-instances`).
|
|
119
|
+
|
|
120
|
+
### Connection string format
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
postgresql://<user>:<password>@<PRIVATE_IP>:5432/<database>?sslmode=no-verify&connect_timeout=5
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Cloud SQL instance private IPs (GCP project: cosmic-heaven-479306-v5)
|
|
127
|
+
|
|
128
|
+
| Instance | Private IP |
|
|
129
|
+
|----------|------------|
|
|
130
|
+
| ai-dev | 10.58.0.11 |
|
|
131
|
+
|
|
132
|
+
### Cloud Run deploy flags
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
--network=default \
|
|
136
|
+
--subnet=default \
|
|
137
|
+
--vpc-egress=private-ranges-only
|
|
138
|
+
# Do NOT add: --add-cloudsql-instances
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Why sslmode=no-verify?
|
|
142
|
+
|
|
143
|
+
`ai-dev` has `requireSsl: true` + `TRUSTED_CLIENT_CERTIFICATE_REQUIRED`.
|
|
144
|
+
`sslmode=no-verify` encrypts the connection without requiring client certificates — consistent with all existing services (a1-research-dev, etc.).
|
|
145
|
+
|
|
146
|
+
### Reference service
|
|
147
|
+
|
|
148
|
+
Check `a1-research-dev` DATABASE_URL in Secret Manager as the canonical example.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## VPC Connectors (Serverless VPC Access)
|
|
153
|
+
|
|
154
|
+
### Create VPC Connector
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
gcloud compute networks vpc-access connectors create $CONNECTOR \
|
|
158
|
+
--region=us-central1 \
|
|
159
|
+
--network=$NETWORK \
|
|
160
|
+
--range=$IP_RANGE
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### List VPC Connectors
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
gcloud compute networks vpc-access connectors list --region=us-central1
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Use Connector with Cloud Run
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
gcloud run services update $SERVICE \
|
|
173
|
+
--region=us-central1 \
|
|
174
|
+
--vpc-connector=$CONNECTOR
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Firewall Rules
|
|
180
|
+
|
|
181
|
+
### List Firewall Rules
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# All rules
|
|
185
|
+
gcloud compute firewall-rules list
|
|
186
|
+
|
|
187
|
+
# For specific network
|
|
188
|
+
gcloud compute firewall-rules list --filter="network:$NETWORK"
|
|
189
|
+
|
|
190
|
+
# With details
|
|
191
|
+
gcloud compute firewall-rules describe $RULE
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Create Firewall Rule
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Allow SSH from anywhere (dev only)
|
|
198
|
+
gcloud compute firewall-rules create allow-ssh \
|
|
199
|
+
--network=$NETWORK \
|
|
200
|
+
--allow=tcp:22 \
|
|
201
|
+
--source-ranges=0.0.0.0/0 \
|
|
202
|
+
--target-tags=$TAG
|
|
203
|
+
|
|
204
|
+
# Allow internal traffic
|
|
205
|
+
gcloud compute firewall-rules create allow-internal \
|
|
206
|
+
--network=$NETWORK \
|
|
207
|
+
--allow=tcp,udp,icmp \
|
|
208
|
+
--source-ranges=$IP_RANGE \
|
|
209
|
+
--direction=INGRESS
|
|
210
|
+
|
|
211
|
+
# Allow health checks
|
|
212
|
+
gcloud compute firewall-rules create allow-health-check \
|
|
213
|
+
--network=$NETWORK \
|
|
214
|
+
--allow=tcp:80,tcp:443 \
|
|
215
|
+
--source-ranges=35.191.0.0/16,130.211.0.0/22 \
|
|
216
|
+
--target-tags=$TAG
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Private Google Access
|
|
222
|
+
|
|
223
|
+
### Check if Subnet Has Private Google Access
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
gcloud compute networks subnets describe $SUBNET \
|
|
227
|
+
--region=us-central1 \
|
|
228
|
+
--format="value(privateIpGoogleAccess)"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Enable Private Google Access on Subnet
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
gcloud compute networks subnets describe $SUBNET \
|
|
235
|
+
--region=us-central1 \
|
|
236
|
+
--set-private-ip-google-access
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Shared VPC (Host Project)
|
|
242
|
+
|
|
243
|
+
### List Shared VPC Networks
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
gcloud compute shared-vpc list-host-projects
|
|
247
|
+
gcloud compute networks list --project=$HOST_PROJECT
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Enable Shared VPC on Service Project
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
gcloud compute projects enable-shared-vpc $SERVICE_PROJECT
|
|
254
|
+
|
|
255
|
+
# Attach service project to host
|
|
256
|
+
gcloud compute shared-vpc associated-projects add $SERVICE_PROJECT \
|
|
257
|
+
--host-project=$HOST_PROJECT
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## VPC Peering
|
|
263
|
+
|
|
264
|
+
### Create VPC Peering
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# From network A
|
|
268
|
+
gcloud compute networks peerings create $PEERING_NAME \
|
|
269
|
+
--network=$NETWORK_A \
|
|
270
|
+
--peer-project=$PROJECT_B \
|
|
271
|
+
--peer-network=$NETWORK_B \
|
|
272
|
+
--export-custom-routes \
|
|
273
|
+
--import-custom-routes
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### List Peerings
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
gcloud compute networks peerings list --network=$NETWORK
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Useful Queries
|
|
285
|
+
|
|
286
|
+
### Find Subnet by IP Range
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
gcloud compute networks subnets list \
|
|
290
|
+
--filter="ipCidrRange:$IP_RANGE" \
|
|
291
|
+
--regions=us-central1
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Find Resources Using Specific Network
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# Cloud Run services
|
|
298
|
+
gcloud run services list \
|
|
299
|
+
--filter="metadata.annotations.run.googleapis.com/network-name:$NETWORK"
|
|
300
|
+
|
|
301
|
+
# Cloud Run jobs
|
|
302
|
+
gcloud run jobs list \
|
|
303
|
+
--filter="metadata.annotations.run.googleapis.com/network-name:$NETWORK"
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Check VPC Flow Logs Status
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
gcloud compute networks subnets describe $SUBNET \
|
|
310
|
+
--region=us-central1 \
|
|
311
|
+
--format="value(logConfig.enable)"
|
|
312
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
|
|
8
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
const WEEK_MS = 7 * DAY_MS;
|
|
10
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
|
|
12
|
+
function readJson(path, fallback = {}) {
|
|
13
|
+
try { return JSON.parse(readFileSync(path, 'utf8')); } catch { return fallback; }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function frontmatterValue(text, key) {
|
|
17
|
+
const frontmatter = /^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? '';
|
|
18
|
+
const match = new RegExp('^' + key + ':\\s*([^\\n]+)$', 'm').exec(frontmatter);
|
|
19
|
+
return match?.[1].trim().replace(/^['"]|['"]$/g, '') ?? null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function repositoryOf(source) {
|
|
23
|
+
const value = String(source ?? '').trim();
|
|
24
|
+
const match = /^(?:git@github\.com:|https:\/\/github\.com\/)?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+?)(?:\.git)?$/.exec(value);
|
|
25
|
+
return match?.[1] ?? null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function stableVersion(value) {
|
|
29
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(String(value ?? '').trim());
|
|
30
|
+
return match ? match.slice(1).map(Number) : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function newer(left, right) {
|
|
34
|
+
for (let index = 0; index < 3; index += 1) {
|
|
35
|
+
if (left[index] !== right[index]) return left[index] > right[index];
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function writeCache(path, value) {
|
|
41
|
+
try {
|
|
42
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
43
|
+
writeFileSync(path, JSON.stringify(value));
|
|
44
|
+
} catch { /* A read-only cache must not block skill use. */ }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function main(now = Date.now()) {
|
|
48
|
+
if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
|
|
49
|
+
const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
|
|
50
|
+
const name = frontmatterValue(skill, 'name');
|
|
51
|
+
const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
|
|
52
|
+
if (!name || !localVersion) return;
|
|
53
|
+
|
|
54
|
+
const lock = readJson(join(process.env.HOME || homedir(), '.agents', '.skill-lock.json'));
|
|
55
|
+
const entry = lock.skills?.[name];
|
|
56
|
+
const repository = repositoryOf(entry?.sourceUrl || entry?.source);
|
|
57
|
+
if (!repository) return;
|
|
58
|
+
|
|
59
|
+
const cacheRoot = process.env.XDG_CACHE_HOME || join(process.env.HOME || homedir(), '.cache');
|
|
60
|
+
const cachePath = join(cacheRoot, '1aboveio-skills', 'release-check.json');
|
|
61
|
+
const all = readJson(cachePath);
|
|
62
|
+
const cache = all[repository] && typeof all[repository] === 'object' ? all[repository] : {};
|
|
63
|
+
|
|
64
|
+
if (!cache.lastCheck || now - cache.lastCheck >= DAY_MS) {
|
|
65
|
+
const result = spawnSync('gh', ['api', 'repos/' + repository + '/releases/latest', '--jq', '.tag_name'], {
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
68
|
+
timeout: 1500,
|
|
69
|
+
});
|
|
70
|
+
cache.lastCheck = now;
|
|
71
|
+
if (result.status === 0 && stableVersion(result.stdout)) cache.latestTag = result.stdout.trim();
|
|
72
|
+
else delete cache.latestTag;
|
|
73
|
+
all[repository] = cache;
|
|
74
|
+
writeCache(cachePath, all);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const latestVersion = stableVersion(cache.latestTag);
|
|
78
|
+
if (!latestVersion || !newer(latestVersion, localVersion)) return;
|
|
79
|
+
if (cache.notifiedTag === cache.latestTag && cache.notifiedAt && now - cache.notifiedAt < WEEK_MS) return;
|
|
80
|
+
|
|
81
|
+
cache.notifiedTag = cache.latestTag;
|
|
82
|
+
cache.notifiedAt = now;
|
|
83
|
+
all[repository] = cache;
|
|
84
|
+
writeCache(cachePath, all);
|
|
85
|
+
const command = `npx skills@1.5.23 add '${repository}#${cache.latestTag}' --global --agent universal claude-code --skill ${name} --yes`;
|
|
86
|
+
process.stdout.write(
|
|
87
|
+
`UPDATE_AVAILABLE: A newer 1AboveIO skills release (${cache.latestTag}) is available; this skill is `
|
|
88
|
+
+ `v${localVersion.join('.')}. Ask once whether to refresh ${name}. On approval run \`${command}\`. `
|
|
89
|
+
+ 'The refreshed instructions apply next session. Either way, continue the current task and do not ask again this session.\n',
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try { main(); } catch { /* Update checks are advisory and always fail silent. */ }
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Create Service Account with Standard Roles
|
|
3
|
+
# Usage: ./create-sa.sh [sa-name] [display-name] [roles...]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SA_NAME="${1:-my-sa}"
|
|
8
|
+
DISPLAY_NAME="${2:-$SA_NAME}"
|
|
9
|
+
PROJECT_ID="${PROJECT_ID:-your-project-id}"
|
|
10
|
+
|
|
11
|
+
# Optional roles (default: cloudsql.client, secretmanager.secretAccessor)
|
|
12
|
+
shift 2
|
|
13
|
+
ROLES=("${@:-roles/cloudsql.client roles/secretmanager.secretAccessor)}")
|
|
14
|
+
|
|
15
|
+
SA_EMAIL="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
|
|
16
|
+
|
|
17
|
+
echo "Creating Service Account: $SA_NAME"
|
|
18
|
+
echo "Email: $SA_EMAIL"
|
|
19
|
+
echo "Roles: ${ROLES[*]}"
|
|
20
|
+
|
|
21
|
+
# Create SA
|
|
22
|
+
gcloud iam service-accounts create "$SA_NAME" \
|
|
23
|
+
--display-name="$DISPLAY_NAME" \
|
|
24
|
+
--project=$PROJECT_ID
|
|
25
|
+
|
|
26
|
+
# Grant roles
|
|
27
|
+
for ROLE in "${ROLES[@]}"; do
|
|
28
|
+
echo "Granting $ROLE..."
|
|
29
|
+
gcloud projects add-iam-policy-binding $PROJECT_ID \
|
|
30
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
31
|
+
--role="$ROLE"
|
|
32
|
+
done
|
|
33
|
+
|
|
34
|
+
echo ""
|
|
35
|
+
echo "Service Account created successfully!"
|
|
36
|
+
echo "Email: $SA_EMAIL"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Project: ${PROJECT_ID:-your-project-id}
|
|
3
|
+
# Region: us-central1
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Colors for output
|
|
8
|
+
RED='\033[0;31m'
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
NC='\033[0m'
|
|
12
|
+
|
|
13
|
+
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|
14
|
+
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
15
|
+
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
16
|
+
|
|
17
|
+
# Configuration
|
|
18
|
+
PROJECT_ID="${PROJECT_ID:-your-project-id}"
|
|
19
|
+
PROJECT_NUMBER="${PROJECT_NUMBER:-your-project-number}"
|
|
20
|
+
REGION="us-central1"
|
|
21
|
+
|
|
22
|
+
# Set project
|
|
23
|
+
gcloud config set project $PROJECT_ID
|
|
24
|
+
|
|
25
|
+
# Validate project
|
|
26
|
+
if ! gcloud projects describe $PROJECT_ID &>/dev/null; then
|
|
27
|
+
log_error "Project $PROJECT_ID not accessible"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
log_info "Project $PROJECT_ID configured successfully"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Grant IAP Access to Service Account
|
|
3
|
+
# Usage: ./grant-iap-access.sh [service-account-email] [backend-service-name]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SA_EMAIL="${1:-e2e-runner@${PROJECT_ID:-your-project-id}.iam.gserviceaccount.com}"
|
|
8
|
+
BACKEND_SERVICE="${2:-my-backend-service}"
|
|
9
|
+
PROJECT_ID="${PROJECT_ID:-your-project-id}"
|
|
10
|
+
|
|
11
|
+
echo "Granting IAP access to: $SA_EMAIL"
|
|
12
|
+
echo "Backend service: $BACKEND_SERVICE"
|
|
13
|
+
|
|
14
|
+
# Grant IAP access on backend service
|
|
15
|
+
gcloud iap web add-iam-policy-binding \
|
|
16
|
+
--project=$PROJECT_ID \
|
|
17
|
+
--resource-type=backend-services \
|
|
18
|
+
--service=$BACKEND_SERVICE \
|
|
19
|
+
--member="serviceAccount:$SA_EMAIL" \
|
|
20
|
+
--role="roles/iap.httpsResourceAccessor"
|
|
21
|
+
|
|
22
|
+
echo ""
|
|
23
|
+
echo "IAP access granted successfully!"
|
|
24
|
+
echo ""
|
|
25
|
+
echo "Next: Use signed JWT to access IAP-protected service:"
|
|
26
|
+
echo ""
|
|
27
|
+
cat << 'EOF'
|
|
28
|
+
SERVICE_URL="https://${BACKEND_SERVICE}-${HASH}-uc.a.run.app"
|
|
29
|
+
SIGNER_SA="signer-sa@${PROJECT_ID}.iam.gserviceaccount.com"
|
|
30
|
+
|
|
31
|
+
NOW="$(date +%s)"
|
|
32
|
+
cat > /tmp/iap-jwt.json <<JSON
|
|
33
|
+
{"iss":"${SIGNER_SA}","sub":"${SIGNER_SA}","aud":"${SERVICE_URL}/*","iat":${NOW},"exp":$((NOW+600))}
|
|
34
|
+
JSON
|
|
35
|
+
|
|
36
|
+
gcloud iam service-accounts sign-jwt /tmp/iap-jwt.json /tmp/iap-jwt.jwt \
|
|
37
|
+
--iam-account="${SIGNER_SA}"
|
|
38
|
+
|
|
39
|
+
TOKEN="$(cat /tmp/iap-jwt.jwt)"
|
|
40
|
+
curl -i "${SERVICE_URL}/" -H "Authorization: Bearer ${TOKEN}"
|
|
41
|
+
EOF
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup Secrets for Service
|
|
3
|
+
# Usage: ./setup-secrets.sh [service-name]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SERVICE_NAME="${1:-my-service}"
|
|
8
|
+
PROJECT_ID="${PROJECT_ID:-your-project-id}"
|
|
9
|
+
ENVIRONMENTS=("dev" "staging" "prod")
|
|
10
|
+
|
|
11
|
+
for ENV in "${ENVIRONMENTS[@]}"; do
|
|
12
|
+
SECRET_NAME="${SERVICE_NAME}-database-url-${ENV}"
|
|
13
|
+
|
|
14
|
+
echo "Creating secret: $SECRET_NAME"
|
|
15
|
+
|
|
16
|
+
# Create secret (ignore if exists)
|
|
17
|
+
gcloud secrets create "$SECRET_NAME" \
|
|
18
|
+
--replication-policy="automatic" \
|
|
19
|
+
--project=$PROJECT_ID 2>/dev/null || true
|
|
20
|
+
|
|
21
|
+
# Add version placeholder (user should update with actual value)
|
|
22
|
+
echo -n "postgresql://user:pass@host/${SERVICE_NAME}-${ENV}" | \
|
|
23
|
+
gcloud secrets versions add "$SECRET_NAME" \
|
|
24
|
+
--data-file=- \
|
|
25
|
+
--project=$PROJECT_ID
|
|
26
|
+
done
|
|
27
|
+
|
|
28
|
+
# Create shared secret key
|
|
29
|
+
SHARED_SECRET="${SERVICE_NAME}-shared-secret"
|
|
30
|
+
echo "Creating shared secret: $SHARED_SECRET"
|
|
31
|
+
|
|
32
|
+
gcloud secrets create "$SHARED_SECRET" \
|
|
33
|
+
--replication-policy="automatic" \
|
|
34
|
+
--project=$PROJECT_ID 2>/dev/null || true
|
|
35
|
+
|
|
36
|
+
# Generate random key
|
|
37
|
+
openssl rand -hex 32 | \
|
|
38
|
+
gcloud secrets versions add "$SHARED_SECRET" \
|
|
39
|
+
--data-file=- \
|
|
40
|
+
--project=$PROJECT_ID
|
|
41
|
+
|
|
42
|
+
echo ""
|
|
43
|
+
echo "Secrets created successfully!"
|
|
44
|
+
echo ""
|
|
45
|
+
echo "Grant access to Cloud Run SA:"
|
|
46
|
+
echo " gcloud secrets add-iam-policy-binding ${SERVICE_NAME}-database-url-dev \\"
|
|
47
|
+
echo " --member=\"serviceAccount:${PROJECT_ID}-run@developer.gserviceaccount.com\" \\"
|
|
48
|
+
echo " --role=\"roles/secretmanager.secretAccessor\""
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mergify
|
|
3
|
+
description: "Mergify merge queue and stacked PRs (`mergify stack`): config, rules, queue status, delivery. Use whenever a merge queue or stack is involved, including plain asks ('watch #123 till it merges', 'where is #412 in the queue', 'push this stack'): `gh pr view`/`gh pr checks` cannot see a dequeue; use `mergify queue show` and the bundled watcher. Also: a hook saying 'use mergify stack push', a missing Change-Id; authoring or debugging `.mergify.yml`, queue rules, merge protections, batch size, the ruleset making merges queue-only; enqueue policy (`@mergifyio queue` vs `auto_merge_conditions`); a push dequeuing a queued PR; bypass actors; freezing a branch. Failures: a PR stuck, queued but never merging, or merged unqueued; CI green on GitHub but unmet in Mergify; a batch going red or bisecting; a queue check missing rather than failing. Outranks the vendor mergify-* skills. NOT for pushing a PR in a repo without stack hooks (github-flow), workflow YAML (github-actions), or GCP deploy pipelines (cloud-deploy)."
|
|
4
|
+
release-version: 0.36.0
|
|
5
|
+
---
|
|
6
|
+
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
|
+
# Mergify Merge Queue
|
|
8
|
+
|
|
9
|
+
Default setup: hybrid enqueue (auto when ready + approved + `gate` green; `@mergifyio queue`
|
|
10
|
+
otherwise), batches of 3 with a 10-second wait, one required `gate` check, queue-only merges
|
|
11
|
+
through the ruleset, no checks timeout, no CI rerun on push to `main`, and
|
|
12
|
+
[stack-ready](references/configuration.md#stack-ready): Mergify's ruleset bypass `exempt` for GitHub-native stacks.
|
|
13
|
+
Requires mergify CLI **2026.10.5 or newer** ([stacks.md](references/stacks.md#cli-version)).
|
|
14
|
+
|
|
15
|
+
**Find your task below, then read that row's target.** This page routes; the references act.
|
|
16
|
+
|
|
17
|
+
## Routing
|
|
18
|
+
|
|
19
|
+
| Your task | Read | The rule you must not miss |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **Get an open or just-pushed PR merged** | [`references/watch-contract.md`](references/watch-contract.md#enqueue-before-you-watch) | Enqueue, *then* watch — the watch never enqueues, so a watch started on a PR nothing will enqueue can only end `STALLED`. A push to an already-queued PR dequeues it (`pull-request-updated`): the verdict is stale, re-validate before re-enqueuing. Several ready at once? Enqueue them together — next row. |
|
|
22
|
+
| **Deliver several ready PRs at once (a stack, an epic's units, a burst)** | [`references/watch-contract.md`](references/watch-contract.md#batch-delivery--enqueue-the-whole-ready-set-together) | Enqueue the whole ready set **together**, then watch: PRs riding one batch cost one CI run, and a red batch bisects to the culprit while the rest carry on. "If possible" is the point — a lone PR, or stragglers still waiting on review/CI/conflict, never hold the batch window open. |
|
|
23
|
+
| **Push, open, or update a PR in a stack repo** (hook says "Use 'mergify stack push'", `Change-Id` missing) | [`references/stacks.md`](references/stacks.md) | Push with `scripts/stack-push.mjs`. One commit = one PR; amend to fix. Never `--no-verify`. |
|
|
24
|
+
| A stacked PR gets no CI, conflicts after its parent lands, or is dequeued "could not be retargeted onto … `main`" | [`references/configuration.md`](references/configuration.md#stack-ready), then [`references/traps.md`](references/traps.md) | Make the repo stack-ready (native stacks: Mergify's ruleset bypass `exempt`; `Depends-On` stacks also need PR CI on every base, commits kept, auto-delete head branches); then `mergify stack push --force-rebase` for a stuck tip. |
|
|
25
|
+
| Author or change `.mergify.yml` | [`references/configuration.md`](references/configuration.md) | [Rule 1](#rule-1--fetch-the-docs-before-writing-config): never write config from memory; finish with `validate` **and** `simulate`. |
|
|
26
|
+
| **Watch a PR through the queue** | [`references/watch-contract.md`](references/watch-contract.md) | **[Rule 2](#rule-2--never-hand-roll-a-watcher): run the bundled watcher, never hand-roll one.** A watch observes a *progression*, not one state. |
|
|
27
|
+
| **The queue feels slow, or is it worth it?** | [`references/diagnosis.md`](references/diagnosis.md#measuring-a-slow-queue) | Measure first-try merge rate and same-SHA requeues from the event log, then fix the flaky queue check. Never move a queue-only check onto the PR lane, and never rerun CI on push to `main` ([rules](references/configuration.md#the-queue-run-is-the-integration-run)). |
|
|
28
|
+
| Check status — "where is my PR?", "why is it stuck?" | [`references/diagnosis.md`](references/diagnosis.md#querying-pr-and-queue-status) | `mergify queue show <number> -v` names the single blocking condition (bare number, never a URL; the CLI takes `--repository <owner/repo>`, never `--repo`; the bundled watcher below takes `--repo`); nothing else in the toolchain does. `gh pr checks` is CI truth, never queue truth. |
|
|
29
|
+
| A PR merged without ever being queued | [`references/branch-protection.md`](references/branch-protection.md) | Make the queue mandatory with the ruleset's `update` rule; a required status check alone does not. |
|
|
30
|
+
| Set up, audit, freeze, or protect a branch | [`references/configuration.md`](references/configuration.md#setup-checklist), then [`references/branch-protection.md`](references/branch-protection.md) | Bypass is granted per *ruleset*, never per rule — so Mergify bypasses the required check too. |
|
|
31
|
+
| A batch keeps going red, bisects, or hangs on a check | [`references/traps.md`](references/traps.md) | An *absent* check reads as permanently unmet. That is not the same as failing. |
|
|
32
|
+
| Something broke and you want the known landmines | [`references/traps.md`](references/traps.md) | Each one has been hit in production; skim it before debugging from first principles. |
|
|
33
|
+
|
|
34
|
+
**Templates** — both required. The `.mergify.yml` decides what the queue *does*;
|
|
35
|
+
the ruleset is what stops anyone bypassing the queue entirely.
|
|
36
|
+
|
|
37
|
+
- [`assets/templates/mergify.yml`](assets/templates/mergify.yml) — copy to the
|
|
38
|
+
repo root as `.mergify.yml` and fill in the placeholders.
|
|
39
|
+
- [`assets/templates/ruleset.json`](assets/templates/ruleset.json) — the GitHub
|
|
40
|
+
branch ruleset that makes the queue mandatory.
|
|
41
|
+
|
|
42
|
+
**Scripts** — run these rather than reimplementing what they do:
|
|
43
|
+
|
|
44
|
+
| Script | Use |
|
|
45
|
+
|---|---|
|
|
46
|
+
| [`scripts/watch-pr-delivery.mjs`](scripts/watch-pr-delivery.mjs) | Watch an enqueued PR to a terminal verdict. See [Rule 2](#rule-2--never-hand-roll-a-watcher). Also profiles the CI it waited on and warns when one job runs over 5 minutes ([CI profile](references/watch-contract.md#ci-profile)). |
|
|
47
|
+
| [`scripts/stack-push.mjs`](scripts/stack-push.mjs) | Push a stack: `--trunk origin/main`, PR bodies kept, PR numbers reported, `--enqueue` for the whole set. See [stacks.md](references/stacks.md). |
|
|
48
|
+
| [`scripts/audit.mjs`](scripts/audit.mjs) | Audit a `.mergify.yml` and its workflows against this skill's defaults — the shape `config validate` cannot check. |
|
|
49
|
+
|
|
50
|
+
## Non-Negotiable Rules
|
|
51
|
+
|
|
52
|
+
### Rule 1 — Fetch the docs before writing config
|
|
53
|
+
|
|
54
|
+
Never write `.mergify.yml` from memory:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
curl -s https://docs.mergify.com/mergify-configuration-schema.json -o /tmp/mergify-schema.json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Pages: `https://docs.mergify.com/merge-queue/rules`, `/merge-queue/batches`,
|
|
61
|
+
`/merge-protections/setup`, `/commands`; index at `https://docs.mergify.com/llms.txt`.
|
|
62
|
+
Finish with both:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
mergify config validate # schema
|
|
66
|
+
mergify config simulate https://github.com/<owner>/<repo>/pull/<n> # behaviour
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Rule 2 — Never hand-roll a watcher
|
|
70
|
+
|
|
71
|
+
Watch a PR through the queue only with the bundled watcher; never poll `gh pr view` yourself.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
node ~/.agents/skills/mergify/scripts/watch-pr-delivery.mjs --repo <owner/repo> --pr <number>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- Enqueue first; the watch never enqueues.
|
|
78
|
+
- When it ends, read the last log line (`{"ciProfileSummary":true,…}`), not just the exit code,
|
|
79
|
+
and pass any slow job to the user.
|
|
80
|
+
- State machine, labels, dequeue reasons: [`references/watch-contract.md`](references/watch-contract.md).
|
|
81
|
+
|
|
82
|
+
### Rule 3 — Enqueue the whole ready set together
|
|
83
|
+
|
|
84
|
+
When several PRs against the same base are ready (a stack, an epic's units, a burst), enqueue
|
|
85
|
+
them all in one pass, then watch them together. Never enqueue serially. Never hold a ready PR
|
|
86
|
+
for a straggler, except a `resolve-issues` chain line: enqueue only its deepest PR. A stack:
|
|
87
|
+
`scripts/stack-push.mjs --enqueue`. Grouping rules:
|
|
88
|
+
[`references/watch-contract.md`](references/watch-contract.md#batch-delivery--enqueue-the-whole-ready-set-together).
|
|
89
|
+
|
|
90
|
+
## Related Skills
|
|
91
|
+
|
|
92
|
+
- [github-flow](../github-flow/SKILL.md) — delivers a change in every flow; calls this skill to
|
|
93
|
+
enqueue and watch in the merge-queue flow
|
|
94
|
+
- [github-actions](../github-actions/SKILL.md) — the CI workflows the queue gates on
|
|
95
|
+
- [cloud-debug](../cloud-debug/SKILL.md) — when a Cloud Build job is failing
|
|
96
|
+
- [resolve-issues](../../engineering/resolve-issues/SKILL.md) (and its `rush-issues` shortcut) — consumes this skill's delivery
|
|
97
|
+
watch contract when it delivers merge-ready PRs through Mergify
|
|
98
|
+
- `mergify-config`, `mergify-merge-queue`, `mergify-merge-protections`, `mergify-ci`,
|
|
99
|
+
`mergify-stack` (vendor plugin skills) — reference for raw CLI invocation. They document
|
|
100
|
+
*how to call* the commands; this skill decides *what the config should say* and owns the
|
|
101
|
+
GitHub-side enforcement. On any conflict, this skill wins.
|
|
102
|
+
|