@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.
Files changed (633) hide show
  1. package/README.md +30 -2
  2. package/bin/cli.mjs +14 -0
  3. package/bin/select-core.mjs +172 -0
  4. package/package.json +146 -4
  5. package/skills/app-dev/airflow/LICENSE +3 -0
  6. package/skills/app-dev/airflow/SKILL.md +199 -0
  7. package/skills/app-dev/airflow/release-check.mjs +93 -0
  8. package/skills/app-dev/android-foundation/LICENSE +3 -0
  9. package/skills/app-dev/android-foundation/SKILL.md +192 -0
  10. package/skills/app-dev/android-foundation/assets/android-ci-job.yml +217 -0
  11. package/skills/app-dev/android-foundation/references/ci.md +87 -0
  12. package/skills/app-dev/android-foundation/references/gotchas.md +221 -0
  13. package/skills/app-dev/android-foundation/references/setup.md +164 -0
  14. package/skills/app-dev/android-foundation/release-check.mjs +93 -0
  15. package/skills/app-dev/android-foundation/scripts/device-run.sh +176 -0
  16. package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +172 -0
  17. package/skills/app-dev/app-debug/LICENSE +3 -0
  18. package/skills/app-dev/app-debug/SKILL.md +110 -0
  19. package/skills/app-dev/app-debug/references/common-errors.md +128 -0
  20. package/skills/app-dev/app-debug/release-check.mjs +93 -0
  21. package/skills/app-dev/better-auth/LICENSE +3 -0
  22. package/skills/app-dev/better-auth/SKILL.md +598 -0
  23. package/skills/app-dev/better-auth/references/feishu-api.md +270 -0
  24. package/skills/app-dev/better-auth/release-check.mjs +93 -0
  25. package/skills/app-dev/data-catalog/LICENSE +3 -0
  26. package/skills/app-dev/data-catalog/SKILL.md +204 -0
  27. package/skills/app-dev/data-catalog/agents/openai.yaml +3 -0
  28. package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +75 -0
  29. package/skills/app-dev/data-catalog/references/field-definitions.md +116 -0
  30. package/skills/app-dev/data-catalog/references/format.md +121 -0
  31. package/skills/app-dev/data-catalog/release-check.mjs +93 -0
  32. package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +36 -0
  33. package/skills/app-dev/data-catalog/scripts/data_catalog.py +1392 -0
  34. package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +117 -0
  35. package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +17 -0
  36. package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +571 -0
  37. package/skills/app-dev/ios-foundation/LICENSE +3 -0
  38. package/skills/app-dev/ios-foundation/SKILL.md +184 -0
  39. package/skills/app-dev/ios-foundation/references/setup.md +243 -0
  40. package/skills/app-dev/ios-foundation/release-check.mjs +93 -0
  41. package/skills/app-dev/monorepo/LICENSE +3 -0
  42. package/skills/app-dev/monorepo/SKILL.md +462 -0
  43. package/skills/app-dev/monorepo/release-check.mjs +93 -0
  44. package/skills/app-dev/nextjs-fullstack/LICENSE +3 -0
  45. package/skills/app-dev/nextjs-fullstack/SKILL.md +211 -0
  46. package/skills/app-dev/nextjs-fullstack/conventions.md +318 -0
  47. package/skills/app-dev/nextjs-fullstack/frontend-conventions.md +61 -0
  48. package/skills/app-dev/nextjs-fullstack/nextjs16.md +287 -0
  49. package/skills/app-dev/nextjs-fullstack/release-check.mjs +93 -0
  50. package/skills/app-dev/nextjs-fullstack/server-actions.md +409 -0
  51. package/skills/app-dev/prisma-setup/LICENSE +3 -0
  52. package/skills/app-dev/prisma-setup/SKILL.md +181 -0
  53. package/skills/app-dev/prisma-setup/nextjs.md +258 -0
  54. package/skills/app-dev/prisma-setup/release-check.mjs +93 -0
  55. package/skills/app-dev/prisma-setup/turborepo.md +301 -0
  56. package/skills/app-dev/pyspark/LICENSE +3 -0
  57. package/skills/app-dev/pyspark/SKILL.md +127 -0
  58. package/skills/app-dev/pyspark/assets/templates/etl.py +748 -0
  59. package/skills/app-dev/pyspark/assets/templates/utils/__init__.py +1 -0
  60. package/skills/app-dev/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
  61. package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +169 -0
  62. package/skills/app-dev/pyspark/references/etl-contract.md +129 -0
  63. package/skills/app-dev/pyspark/references/production-validation.md +131 -0
  64. package/skills/app-dev/pyspark/references/reconciliation.md +38 -0
  65. package/skills/app-dev/pyspark/references/transformation-design.md +190 -0
  66. package/skills/app-dev/pyspark/references/velocity-feature-calculation.md +193 -0
  67. package/skills/app-dev/pyspark/release-check.mjs +93 -0
  68. package/skills/app-dev/pyspark/scripts/spark_eventlog_summary.py +223 -0
  69. package/skills/app-dev/python-backend/LICENSE +3 -0
  70. package/skills/app-dev/python-backend/SKILL.md +325 -0
  71. package/skills/app-dev/python-backend/assets/uv-install.sh +48 -0
  72. package/skills/app-dev/python-backend/references/uv-installs.md +83 -0
  73. package/skills/app-dev/python-backend/release-check.mjs +93 -0
  74. package/skills/app-dev/shadcn/LICENSE +3 -0
  75. package/skills/app-dev/shadcn/SKILL.md +120 -0
  76. package/skills/app-dev/shadcn/assets/shadcn-small.png +0 -0
  77. package/skills/app-dev/shadcn/assets/shadcn.png +0 -0
  78. package/skills/app-dev/shadcn/cli.md +411 -0
  79. package/skills/app-dev/shadcn/customization.md +224 -0
  80. package/skills/app-dev/shadcn/mcp.md +101 -0
  81. package/skills/app-dev/shadcn/release-check.mjs +93 -0
  82. package/skills/app-dev/shadcn/rules/base-vs-radix.md +323 -0
  83. package/skills/app-dev/shadcn/rules/component-selection.md +67 -0
  84. package/skills/app-dev/shadcn/rules/composition.md +195 -0
  85. package/skills/app-dev/shadcn/rules/data-table.md +201 -0
  86. package/skills/app-dev/shadcn/rules/forms.md +255 -0
  87. package/skills/app-dev/shadcn/rules/icons.md +103 -0
  88. package/skills/app-dev/shadcn/rules/styling.md +167 -0
  89. package/skills/app-dev/zod-v4/LICENSE +3 -0
  90. package/skills/app-dev/zod-v4/SKILL.md +286 -0
  91. package/skills/app-dev/zod-v4/release-check.mjs +93 -0
  92. package/skills/cicd/cloud-build/LICENSE +3 -0
  93. package/skills/cicd/cloud-build/SKILL.md +707 -0
  94. package/skills/cicd/cloud-build/release-check.mjs +93 -0
  95. package/skills/cicd/cloud-debug/LICENSE +3 -0
  96. package/skills/cicd/cloud-debug/SKILL.md +315 -0
  97. package/skills/cicd/cloud-debug/references/build-failures.md +238 -0
  98. package/skills/cicd/cloud-debug/references/deploy-failures.md +376 -0
  99. package/skills/cicd/cloud-debug/references/pipeline-failures.md +378 -0
  100. package/skills/cicd/cloud-debug/release-check.mjs +93 -0
  101. package/skills/cicd/cloud-deploy/LICENSE +3 -0
  102. package/skills/cicd/cloud-deploy/SKILL.md +230 -0
  103. package/skills/cicd/cloud-deploy/references/config-templates.md +257 -0
  104. package/skills/cicd/cloud-deploy/release-check.mjs +93 -0
  105. package/skills/cicd/docker/LICENSE +3 -0
  106. package/skills/cicd/docker/SKILL.md +151 -0
  107. package/skills/cicd/docker/release-check.mjs +93 -0
  108. package/skills/cicd/github-actions/LICENSE +3 -0
  109. package/skills/cicd/github-actions/SKILL.md +111 -0
  110. package/skills/cicd/github-actions/references/audit-profile-optimize.md +150 -0
  111. package/skills/cicd/github-actions/references/ci-case-studies.md +141 -0
  112. package/skills/cicd/github-actions/references/conditional-ci.md +214 -0
  113. package/skills/cicd/github-actions/references/debugging.md +13 -0
  114. package/skills/cicd/github-actions/references/pipeline.md +87 -0
  115. package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +33 -0
  116. package/skills/cicd/github-actions/references/runners.md +253 -0
  117. package/skills/cicd/github-actions/references/security.md +29 -0
  118. package/skills/cicd/github-actions/references/speed-and-audit.md +115 -0
  119. package/skills/cicd/github-actions/references/two-pass-reading.md +92 -0
  120. package/skills/cicd/github-actions/release-check.mjs +93 -0
  121. package/skills/cicd/github-actions/scripts/ci-run-audit-core.mjs +612 -0
  122. package/skills/cicd/github-actions/scripts/ci-run-audit.mjs +4 -0
  123. package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +637 -0
  124. package/skills/cicd/github-flow/LICENSE +3 -0
  125. package/skills/cicd/github-flow/SKILL.md +123 -0
  126. package/skills/cicd/github-flow/references/ci-conventions.md +14 -0
  127. package/skills/cicd/github-flow/release-check.mjs +93 -0
  128. package/skills/cicd/github-flow/scripts/flow-core.mjs +105 -0
  129. package/skills/cicd/github-flow/scripts/flow.mjs +81 -0
  130. package/skills/cicd/github-flow/scripts/flow.test.mjs +114 -0
  131. package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +117 -0
  132. package/skills/cicd/github-flow/scripts/persist-conventions.mjs +49 -0
  133. package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +108 -0
  134. package/skills/cicd/google-cloud/LICENSE +3 -0
  135. package/skills/cicd/google-cloud/SKILL.md +119 -0
  136. package/skills/cicd/google-cloud/references/gcs.md +469 -0
  137. package/skills/cicd/google-cloud/references/iam.md +451 -0
  138. package/skills/cicd/google-cloud/references/project.md +349 -0
  139. package/skills/cicd/google-cloud/references/secrets.md +336 -0
  140. package/skills/cicd/google-cloud/references/vpc.md +312 -0
  141. package/skills/cicd/google-cloud/release-check.mjs +93 -0
  142. package/skills/cicd/google-cloud/scripts/create-sa.sh +36 -0
  143. package/skills/cicd/google-cloud/scripts/gcp-config.sh +31 -0
  144. package/skills/cicd/google-cloud/scripts/grant-iap.sh +41 -0
  145. package/skills/cicd/google-cloud/scripts/setup-secrets.sh +48 -0
  146. package/skills/cicd/mergify/LICENSE +3 -0
  147. package/skills/cicd/mergify/SKILL.md +102 -0
  148. package/skills/cicd/mergify/assets/templates/mergify.yml +215 -0
  149. package/skills/cicd/mergify/assets/templates/ruleset.json +46 -0
  150. package/skills/cicd/mergify/references/branch-protection.md +282 -0
  151. package/skills/cicd/mergify/references/configuration.md +274 -0
  152. package/skills/cicd/mergify/references/diagnosis.md +109 -0
  153. package/skills/cicd/mergify/references/stacks.md +84 -0
  154. package/skills/cicd/mergify/references/traps.md +119 -0
  155. package/skills/cicd/mergify/references/watch-contract.md +274 -0
  156. package/skills/cicd/mergify/release-check.mjs +93 -0
  157. package/skills/cicd/mergify/scripts/audit-core.mjs +208 -0
  158. package/skills/cicd/mergify/scripts/audit.mjs +4 -0
  159. package/skills/cicd/mergify/scripts/audit.test.mjs +201 -0
  160. package/skills/cicd/mergify/scripts/entrypoints.test.mjs +106 -0
  161. package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +30 -0
  162. package/skills/cicd/mergify/scripts/stack-push-core.mjs +258 -0
  163. package/skills/cicd/mergify/scripts/stack-push.mjs +4 -0
  164. package/skills/cicd/mergify/scripts/stack-push.test.mjs +233 -0
  165. package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +1065 -0
  166. package/skills/cicd/mergify/scripts/watch-pr-delivery.mjs +4 -0
  167. package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +1826 -0
  168. package/skills/cicd/podman/LICENSE +3 -0
  169. package/skills/cicd/podman/SKILL.md +71 -0
  170. package/skills/cicd/podman/agents/openai.yaml +4 -0
  171. package/skills/cicd/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
  172. package/skills/cicd/podman/assets/templates/podman-service-override.conf +3 -0
  173. package/skills/cicd/podman/references/compose-compatibility.md +70 -0
  174. package/skills/cicd/podman/references/networking-and-ports.md +74 -0
  175. package/skills/cicd/podman/references/rootless-services-and-sockets.md +156 -0
  176. package/skills/cicd/podman/references/troubleshooting.md +98 -0
  177. package/skills/cicd/podman/release-check.mjs +93 -0
  178. package/skills/content/article-review/LICENSE +3 -0
  179. package/skills/content/article-review/SKILL.md +66 -0
  180. package/skills/content/article-review/references/report-format.md +68 -0
  181. package/skills/content/article-review/references/template-guide.md +79 -0
  182. package/skills/content/article-review/references/template-wechat-payments.md +125 -0
  183. package/skills/content/article-review/release-check.mjs +93 -0
  184. package/skills/content/article-to-image/LICENSE +3 -0
  185. package/skills/content/article-to-image/SKILL.md +91 -0
  186. package/skills/content/article-to-image/references/formats.md +53 -0
  187. package/skills/content/article-to-image/release-check.mjs +93 -0
  188. package/skills/content/flowchart-svg/LICENSE +3 -0
  189. package/skills/content/flowchart-svg/SKILL.md +43 -0
  190. package/skills/content/flowchart-svg/release-check.mjs +93 -0
  191. package/skills/content/flowchart-svg/scripts/export_png.sh +8 -0
  192. package/skills/content/image-gen/LICENSE +3 -0
  193. package/skills/content/image-gen/SKILL.md +192 -0
  194. package/skills/content/image-gen/release-check.mjs +93 -0
  195. package/skills/content/image-gen/scripts/credentials.mjs +217 -0
  196. package/skills/content/image-gen/scripts/credentials.test.mjs +212 -0
  197. package/skills/content/image-gen/scripts/generate.mjs +240 -0
  198. package/skills/content/image-gen/scripts/options.mjs +293 -0
  199. package/skills/content/image-gen/scripts/options.test.mjs +245 -0
  200. package/skills/content/mermaid/LICENSE +3 -0
  201. package/skills/content/mermaid/SKILL.md +635 -0
  202. package/skills/content/mermaid/release-check.mjs +93 -0
  203. package/skills/content/wechat-article-writer/LICENSE +3 -0
  204. package/skills/content/wechat-article-writer/SKILL.md +92 -0
  205. package/skills/content/wechat-article-writer/references/style-selector.md +133 -0
  206. package/skills/content/wechat-article-writer/references/writing-rules.md +152 -0
  207. package/skills/content/wechat-article-writer/release-check.mjs +93 -0
  208. package/skills/content/wechat-article-writer/templates/wechat-comparison.md +52 -0
  209. package/skills/content/wechat-article-writer/templates/wechat-howto.md +51 -0
  210. package/skills/content/wechat-article-writer/templates/wechat-insight.md +50 -0
  211. package/skills/content/wechat-article-writer/templates/wechat-pitfall.md +52 -0
  212. package/skills/content/wechat-publisher/LICENSE +3 -0
  213. package/skills/content/wechat-publisher/SKILL.md +171 -0
  214. package/skills/content/wechat-publisher/references/api.md +105 -0
  215. package/skills/content/wechat-publisher/references/layout-rules.md +57 -0
  216. package/skills/content/wechat-publisher/references/wechat-safe-template.html +86 -0
  217. package/skills/content/wechat-publisher/release-check.mjs +93 -0
  218. package/skills/content/wechat-publisher/scripts/md_to_wechat_html.py +194 -0
  219. package/skills/content/wechat-publisher/scripts/publish.py +239 -0
  220. package/skills/content/wechat-search/LICENSE +3 -0
  221. package/skills/content/wechat-search/SKILL.md +211 -0
  222. package/skills/content/wechat-search/release-check.mjs +93 -0
  223. package/skills/content/wechat-search/scripts/start-chrome.sh +83 -0
  224. package/skills/content/xai-search/LICENSE +3 -0
  225. package/skills/content/xai-search/SKILL.md +79 -0
  226. package/skills/content/xai-search/release-check.mjs +93 -0
  227. package/skills/content/xai-search/scripts/xai_search.sh +187 -0
  228. package/skills/content/xai-search/tests/smoke_test.sh +36 -0
  229. package/skills/core/distill-writing/LICENSE +3 -0
  230. package/skills/core/distill-writing/SKILL.md +74 -0
  231. package/skills/core/distill-writing/references/extraction.md +95 -0
  232. package/skills/core/distill-writing/references/updating.md +46 -0
  233. package/skills/core/distill-writing/release-check.mjs +93 -0
  234. package/skills/core/doc-to-md/LICENSE +3 -0
  235. package/skills/core/doc-to-md/SKILL.md +78 -0
  236. package/skills/core/doc-to-md/release-check.mjs +93 -0
  237. package/skills/core/doc-to-md/scripts/convert.py +157 -0
  238. package/skills/core/editorial-review/LICENSE +3 -0
  239. package/skills/core/editorial-review/SKILL.md +79 -0
  240. package/skills/core/editorial-review/references/checklist.md +94 -0
  241. package/skills/core/editorial-review/release-check.mjs +93 -0
  242. package/skills/core/house-style/LICENSE +3 -0
  243. package/skills/core/house-style/SKILL.md +33 -0
  244. package/skills/core/house-style/references/defaults.md +66 -0
  245. package/skills/core/house-style/references/rules.md +267 -0
  246. package/skills/core/house-style/references/sources.md +27 -0
  247. package/skills/core/house-style/references/style-en.md +131 -0
  248. package/skills/core/house-style/references/style-zh.md +141 -0
  249. package/skills/core/house-style/references/terminology-zh.md +223 -0
  250. package/skills/core/house-style/release-check.mjs +93 -0
  251. package/skills/core/house-style/templates/brd.md +103 -0
  252. package/skills/core/house-style/templates/commercial-proposal.md +93 -0
  253. package/skills/core/house-style/templates/compliance-policy.md +109 -0
  254. package/skills/core/house-style/templates/gap-analysis.md +105 -0
  255. package/skills/core/house-style/templates/general.md +63 -0
  256. package/skills/core/house-style/templates/integration-guide.md +98 -0
  257. package/skills/core/house-style/templates/prd.md +81 -0
  258. package/skills/core/house-style/templates/risk-operations-procedure.md +94 -0
  259. package/skills/core/house-style/templates/technical-spec.md +96 -0
  260. package/skills/core/polish-cn/LICENSE +3 -0
  261. package/skills/core/polish-cn/SKILL.md +102 -0
  262. package/skills/core/polish-cn/references/brief.md +93 -0
  263. package/skills/core/polish-cn/references/models.md +76 -0
  264. package/skills/core/polish-cn/release-check.mjs +93 -0
  265. package/skills/core/polish-cn/scripts/polish-cn.test.mjs +244 -0
  266. package/skills/core/polish-cn/scripts/polish_blocks.py +489 -0
  267. package/skills/core/reg-parser/LICENSE +3 -0
  268. package/skills/core/reg-parser/SKILL.md +212 -0
  269. package/skills/core/reg-parser/references/checklist-schema.md +223 -0
  270. package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
  271. package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
  272. package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
  273. package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
  274. package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
  275. package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
  276. package/skills/core/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
  277. package/skills/core/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
  278. package/skills/core/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
  279. package/skills/core/reg-parser/references/mandates/visa-vars.md +205 -0
  280. package/skills/core/reg-parser/release-check.mjs +93 -0
  281. package/skills/core/reg-parser/scripts/compare_checklist.py +230 -0
  282. package/skills/core/reg-parser/scripts/dump_checklist.py +361 -0
  283. package/skills/core/reg-parser/scripts/preprocess-mandate.sh +187 -0
  284. package/skills/core/reg-parser/scripts/reg-parser.test.mjs +165 -0
  285. package/skills/core/reg-parser/scripts/test_quarantine.sh +105 -0
  286. package/skills/core/reg-parser/scripts/validate_checklist.py +563 -0
  287. package/skills/core/reg-parser/scripts/validate_mandate.py +273 -0
  288. package/skills/core/terminology/LICENSE +3 -0
  289. package/skills/core/terminology/SKILL.md +62 -0
  290. package/skills/core/terminology/references/format.md +50 -0
  291. package/skills/core/terminology/references/init.md +32 -0
  292. package/skills/core/terminology/release-check.mjs +93 -0
  293. package/skills/core/write-doc/LICENSE +3 -0
  294. package/skills/core/write-doc/SKILL.md +141 -0
  295. package/skills/core/write-doc/references/bilingual.md +60 -0
  296. package/skills/core/write-doc/release-check.mjs +93 -0
  297. package/skills/engineering/better-review/LICENSE +3 -0
  298. package/skills/engineering/better-review/SKILL.md +249 -0
  299. package/skills/engineering/better-review/agents/openai.yaml +9 -0
  300. package/skills/engineering/better-review/references/domain-hazards.md +53 -0
  301. package/skills/engineering/better-review/references/passes.md +147 -0
  302. package/skills/engineering/better-review/references/result.md +151 -0
  303. package/skills/engineering/better-review/release-check.mjs +93 -0
  304. package/skills/engineering/better-review/scripts/pr-context.mjs +212 -0
  305. package/skills/engineering/better-review/scripts/pr-context.test.mjs +168 -0
  306. package/skills/engineering/better-review/scripts/rereview-scope.mjs +503 -0
  307. package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +587 -0
  308. package/skills/engineering/better-review/scripts/scan-diff.mjs +365 -0
  309. package/skills/engineering/better-review/scripts/scan-diff.test.mjs +414 -0
  310. package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +96 -0
  311. package/skills/engineering/e2e-test/LICENSE +3 -0
  312. package/skills/engineering/e2e-test/SKILL.md +98 -0
  313. package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +24 -0
  314. package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
  315. package/skills/engineering/e2e-test/references/authoring/playwright-config.md +73 -0
  316. package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +144 -0
  317. package/skills/engineering/e2e-test/references/ci-integration.md +25 -0
  318. package/skills/engineering/e2e-test/references/ci-playwright-container.md +290 -0
  319. package/skills/engineering/e2e-test/references/presentation-sweep.md +104 -0
  320. package/skills/engineering/e2e-test/references/reviewing.md +41 -0
  321. package/skills/engineering/e2e-test/references/route-manifest.md +51 -0
  322. package/skills/engineering/e2e-test/release-check.mjs +93 -0
  323. package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
  324. package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
  325. package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +106 -0
  326. package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
  327. package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +117 -0
  328. package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
  329. package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +69 -0
  330. package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
  331. package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +98 -0
  332. package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +147 -0
  333. package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +71 -0
  334. package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
  335. package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +59 -0
  336. package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +82 -0
  337. package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +76 -0
  338. package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
  339. package/skills/engineering/engineering-runtime/LICENSE +3 -0
  340. package/skills/engineering/engineering-runtime/SKILL.md +11 -0
  341. package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
  342. package/skills/engineering/engineering-runtime/coherence/workflow.json +597 -0
  343. package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +68 -0
  344. package/skills/engineering/engineering-runtime/release-check.mjs +93 -0
  345. package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
  346. package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
  347. package/skills/engineering/engineering-runtime/scripts/invocation-policy.mjs +187 -0
  348. package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +95 -0
  349. package/skills/engineering/engineering-runtime/scripts/main-module.mjs +79 -0
  350. package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +288 -0
  351. package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
  352. package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
  353. package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
  354. package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
  355. package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +96 -0
  356. package/skills/engineering/engineering-runtime/scripts/review-completion.mjs +56 -0
  357. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +595 -0
  358. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +189 -0
  359. package/skills/engineering/engineering-runtime/scripts/yaml-mapping.mjs +18 -0
  360. package/skills/engineering/ensure-coverage/LICENSE +3 -0
  361. package/skills/engineering/ensure-coverage/SKILL.md +129 -0
  362. package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +92 -0
  363. package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +85 -0
  364. package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
  365. package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
  366. package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
  367. package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +19 -0
  368. package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
  369. package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +57 -0
  370. package/skills/engineering/ensure-coverage/references/depth/test-smells.md +39 -0
  371. package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +44 -0
  372. package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +110 -0
  373. package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +35 -0
  374. package/skills/engineering/ensure-coverage/references/presentation/axis.md +64 -0
  375. package/skills/engineering/ensure-coverage/references/process/audit-mode.md +27 -0
  376. package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
  377. package/skills/engineering/ensure-coverage/references/process/test-strategy.md +56 -0
  378. package/skills/engineering/ensure-coverage/release-check.mjs +93 -0
  379. package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +67 -0
  380. package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +140 -0
  381. package/skills/engineering/ensure-coverage/scripts/README.md +99 -0
  382. package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +182 -0
  383. package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +96 -0
  384. package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +105 -0
  385. package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +47 -0
  386. package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +137 -0
  387. package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +86 -0
  388. package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +674 -0
  389. package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +447 -0
  390. package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
  391. package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +552 -0
  392. package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +282 -0
  393. package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +289 -0
  394. package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
  395. package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +119 -0
  396. package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
  397. package/skills/engineering/golden-path/LICENSE +3 -0
  398. package/skills/engineering/golden-path/SKILL.md +230 -0
  399. package/skills/engineering/golden-path/agents/openai.yaml +3 -0
  400. package/skills/engineering/golden-path/assets/golden-paths.example.json +57 -0
  401. package/skills/engineering/golden-path/references/contract.md +239 -0
  402. package/skills/engineering/golden-path/references/migration.md +111 -0
  403. package/skills/engineering/golden-path/release-check.mjs +93 -0
  404. package/skills/engineering/golden-path/scripts/golden-path-core.mjs +1779 -0
  405. package/skills/engineering/golden-path/scripts/golden-path.mjs +6 -0
  406. package/skills/engineering/golden-path/scripts/golden-path.test.mjs +1457 -0
  407. package/skills/engineering/harness-runtime/LICENSE +3 -0
  408. package/skills/engineering/harness-runtime/SKILL.md +19 -0
  409. package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
  410. package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
  411. package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
  412. package/skills/engineering/harness-runtime/contracts.md +15 -0
  413. package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
  414. package/skills/engineering/harness-runtime/discover-models.test.mjs +363 -0
  415. package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
  416. package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
  417. package/skills/engineering/harness-runtime/harness-runtime.test.mjs +967 -0
  418. package/skills/engineering/harness-runtime/index.mjs +767 -0
  419. package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +829 -0
  420. package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
  421. package/skills/engineering/harness-runtime/model-catalog.test.mjs +366 -0
  422. package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
  423. package/skills/engineering/harness-runtime/references/model-catalog-seed.json +408 -0
  424. package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
  425. package/skills/engineering/harness-runtime/release-check.mjs +93 -0
  426. package/skills/engineering/resolve-issues/LICENSE +3 -0
  427. package/skills/engineering/resolve-issues/SKILL.md +250 -0
  428. package/skills/engineering/resolve-issues/agents/openai.yaml +9 -0
  429. package/skills/engineering/resolve-issues/plugin-hooks.json +17 -0
  430. package/skills/engineering/resolve-issues/references/canary.md +28 -0
  431. package/skills/engineering/resolve-issues/references/ci.md +105 -0
  432. package/skills/engineering/resolve-issues/references/done.md +25 -0
  433. package/skills/engineering/resolve-issues/references/dropbox.md +90 -0
  434. package/skills/engineering/resolve-issues/references/expire.md +318 -0
  435. package/skills/engineering/resolve-issues/references/exploration.md +202 -0
  436. package/skills/engineering/resolve-issues/references/implementation.md +303 -0
  437. package/skills/engineering/resolve-issues/references/preflight.md +445 -0
  438. package/skills/engineering/resolve-issues/references/review.md +228 -0
  439. package/skills/engineering/resolve-issues/references/shared-modules.md +44 -0
  440. package/skills/engineering/resolve-issues/references/task-plan.md +264 -0
  441. package/skills/engineering/resolve-issues/release-check.mjs +93 -0
  442. package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +364 -0
  443. package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +280 -0
  444. package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
  445. package/skills/engineering/resolve-issues/scripts/dropbox.mjs +473 -0
  446. package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +346 -0
  447. package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +98 -0
  448. package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +88 -0
  449. package/skills/engineering/resolve-issues/scripts/github-reviews.mjs +384 -0
  450. package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +264 -0
  451. package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +135 -0
  452. package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +79 -0
  453. package/skills/engineering/resolve-issues/scripts/issue-tree.mjs +162 -0
  454. package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +107 -0
  455. package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +14 -0
  456. package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
  457. package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +149 -0
  458. package/skills/engineering/resolve-issues/scripts/next-actions.mjs +856 -0
  459. package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +915 -0
  460. package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +269 -0
  461. package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +156 -0
  462. package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +736 -0
  463. package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +448 -0
  464. package/skills/engineering/resolve-issues/scripts/ready-check.mjs +185 -0
  465. package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +217 -0
  466. package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +98 -0
  467. package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +91 -0
  468. package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +509 -0
  469. package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +1060 -0
  470. package/skills/engineering/resolve-issues/scripts/size-check.mjs +492 -0
  471. package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +458 -0
  472. package/skills/engineering/resolve-release/LICENSE +3 -0
  473. package/skills/engineering/resolve-release/SKILL.md +215 -0
  474. package/skills/engineering/resolve-release/agents/openai.yaml +8 -0
  475. package/skills/engineering/resolve-release/flows/cloud-run-canary.md +13 -0
  476. package/skills/engineering/resolve-release/flows/cloud-run.md +7 -0
  477. package/skills/engineering/resolve-release/flows/root-tag-npm.md +13 -0
  478. package/skills/engineering/resolve-release/flows/workspace-npm.md +22 -0
  479. package/skills/engineering/resolve-release/references/canary.md +51 -0
  480. package/skills/engineering/resolve-release/references/candidate.md +41 -0
  481. package/skills/engineering/resolve-release/references/cut.md +131 -0
  482. package/skills/engineering/resolve-release/references/dark-launch.md +66 -0
  483. package/skills/engineering/resolve-release/references/flows.md +150 -0
  484. package/skills/engineering/resolve-release/references/preflight.md +154 -0
  485. package/skills/engineering/resolve-release/references/prepared-metadata.md +260 -0
  486. package/skills/engineering/resolve-release/references/promotion.md +82 -0
  487. package/skills/engineering/resolve-release/references/publish.md +232 -0
  488. package/skills/engineering/resolve-release/references/workspace-npm.md +103 -0
  489. package/skills/engineering/resolve-release/release-check.mjs +93 -0
  490. package/skills/engineering/resolve-release/scripts/apply.mjs +212 -0
  491. package/skills/engineering/resolve-release/scripts/apply.test.mjs +99 -0
  492. package/skills/engineering/resolve-release/scripts/dark-flags.mjs +134 -0
  493. package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +100 -0
  494. package/skills/engineering/resolve-release/scripts/flow.mjs +500 -0
  495. package/skills/engineering/resolve-release/scripts/flow.test.mjs +340 -0
  496. package/skills/engineering/resolve-release/scripts/green-head.mjs +231 -0
  497. package/skills/engineering/resolve-release/scripts/green-head.test.mjs +101 -0
  498. package/skills/engineering/resolve-release/scripts/npm-version-absence.mjs +138 -0
  499. package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +426 -0
  500. package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +659 -0
  501. package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +317 -0
  502. package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +291 -0
  503. package/skills/engineering/resolve-release/scripts/plan.mjs +806 -0
  504. package/skills/engineering/resolve-release/scripts/plan.test.mjs +428 -0
  505. package/skills/engineering/rush-issues/LICENSE +3 -0
  506. package/skills/engineering/rush-issues/SKILL.md +58 -0
  507. package/skills/engineering/rush-issues/agents/openai.yaml +8 -0
  508. package/skills/engineering/rush-issues/rehydrate.mjs +10 -0
  509. package/skills/engineering/rush-issues/release-check.mjs +93 -0
  510. package/skills/engineering/rush-release/LICENSE +3 -0
  511. package/skills/engineering/rush-release/SKILL.md +35 -0
  512. package/skills/engineering/rush-release/agents/openai.yaml +8 -0
  513. package/skills/engineering/rush-release/release-check.mjs +93 -0
  514. package/skills/engineering/test-quality/LICENSE +3 -0
  515. package/skills/engineering/test-quality/SKILL.md +79 -0
  516. package/skills/engineering/test-quality/references/audit.md +80 -0
  517. package/skills/engineering/test-quality/references/lint.md +24 -0
  518. package/skills/engineering/test-quality/references/principles.md +143 -0
  519. package/skills/engineering/test-quality/references/testing-conventions.md +9 -0
  520. package/skills/engineering/test-quality/release-check.mjs +93 -0
  521. package/skills/engineering/test-quality/scripts/lint-tests.mjs +574 -0
  522. package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +591 -0
  523. package/skills/engineering/test-quality/scripts/mock-policy-config.mjs +176 -0
  524. package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +119 -0
  525. package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +117 -0
  526. package/skills/engineering/test-quality/scripts/persist-conventions.mjs +17 -0
  527. package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +104 -0
  528. package/skills/risk-compliance/compliance-audit/LICENSE +3 -0
  529. package/skills/risk-compliance/compliance-audit/SKILL.md +439 -0
  530. package/skills/risk-compliance/compliance-audit/references/findings-schema.md +293 -0
  531. package/skills/risk-compliance/compliance-audit/references/normalization-rules.md +45 -0
  532. package/skills/risk-compliance/compliance-audit/references/vars-checklist.md +1068 -0
  533. package/skills/risk-compliance/compliance-audit/references/vars-findings-schema.md +398 -0
  534. package/skills/risk-compliance/compliance-audit/release-check.mjs +93 -0
  535. package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +14 -0
  536. package/skills/risk-compliance/compliance-audit/scripts/export_tracker_xlsx.py +221 -0
  537. package/skills/risk-compliance/compliance-audit/scripts/reconcile_tracker.py +458 -0
  538. package/skills/risk-compliance/compliance-audit/scripts/test_export_tracker_xlsx.py +97 -0
  539. package/skills/risk-compliance/compliance-audit/scripts/test_validate_tracker.py +157 -0
  540. package/skills/risk-compliance/compliance-audit/scripts/validate_tracker.py +829 -0
  541. package/skills/risk-compliance/contract-compare/LICENSE +3 -0
  542. package/skills/risk-compliance/contract-compare/SKILL.md +199 -0
  543. package/skills/risk-compliance/contract-compare/references/comparison-dimensions.md +209 -0
  544. package/skills/risk-compliance/contract-compare/release-check.mjs +93 -0
  545. package/skills/risk-compliance/contract-review/LICENSE +3 -0
  546. package/skills/risk-compliance/contract-review/SKILL.md +240 -0
  547. package/skills/risk-compliance/contract-review/references/review-criteria.md +223 -0
  548. package/skills/risk-compliance/contract-review/release-check.mjs +93 -0
  549. package/skills/risk-compliance/doc-authenticity/LICENSE +3 -0
  550. package/skills/risk-compliance/doc-authenticity/SKILL.md +160 -0
  551. package/skills/risk-compliance/doc-authenticity/agents/openai.yaml +8 -0
  552. package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +12 -0
  553. package/skills/risk-compliance/doc-authenticity/references/agreement.md +66 -0
  554. package/skills/risk-compliance/doc-authenticity/references/bank-statement.md +150 -0
  555. package/skills/risk-compliance/doc-authenticity/references/forensic-signals.md +157 -0
  556. package/skills/risk-compliance/doc-authenticity/references/image-signals.md +114 -0
  557. package/skills/risk-compliance/doc-authenticity/references/invoice.md +66 -0
  558. package/skills/risk-compliance/doc-authenticity/references/issuer-profiles.md +86 -0
  559. package/skills/risk-compliance/doc-authenticity/references/verdict-and-report.md +95 -0
  560. package/skills/risk-compliance/doc-authenticity/references/verdict.schema.json +81 -0
  561. package/skills/risk-compliance/doc-authenticity/release-check.mjs +93 -0
  562. package/skills/risk-compliance/doc-authenticity/scripts/image_forensics.py +294 -0
  563. package/skills/risk-compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
  564. package/skills/risk-compliance/doc-authenticity/scripts/validate_codes.py +224 -0
  565. package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
  566. package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +212 -0
  567. package/skills/risk-compliance/fraud-analysis/LICENSE +3 -0
  568. package/skills/risk-compliance/fraud-analysis/SKILL.md +114 -0
  569. package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md +41 -0
  570. package/skills/risk-compliance/fraud-analysis/references/archetypes/first-party-fraud.md +44 -0
  571. package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +27 -0
  572. package/skills/risk-compliance/fraud-analysis/references/contexts/bank-transfer.md +24 -0
  573. package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +30 -0
  574. package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +20 -0
  575. package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +20 -0
  576. package/skills/risk-compliance/fraud-analysis/references/feature-engineering.md +158 -0
  577. package/skills/risk-compliance/fraud-analysis/references/mechanisms/account-takeover.md +36 -0
  578. package/skills/risk-compliance/fraud-analysis/references/report-rationale.md +45 -0
  579. package/skills/risk-compliance/fraud-analysis/references/report-template.md +190 -0
  580. package/skills/risk-compliance/fraud-analysis/references/review-checklist.md +175 -0
  581. package/skills/risk-compliance/fraud-analysis/references/taxonomy.md +79 -0
  582. package/skills/risk-compliance/fraud-analysis/references/terminology.md +108 -0
  583. package/skills/risk-compliance/fraud-analysis/references/workflow.md +175 -0
  584. package/skills/risk-compliance/fraud-analysis/release-check.mjs +93 -0
  585. package/skills/risk-compliance/payment-analysis/LICENSE +3 -0
  586. package/skills/risk-compliance/payment-analysis/SKILL.md +180 -0
  587. package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +30 -0
  588. package/skills/risk-compliance/payment-analysis/references/chargebacks.md +208 -0
  589. package/skills/risk-compliance/payment-analysis/references/chinese-polish.md +51 -0
  590. package/skills/risk-compliance/payment-analysis/references/event-layers.md +127 -0
  591. package/skills/risk-compliance/payment-analysis/references/fx.md +59 -0
  592. package/skills/risk-compliance/payment-analysis/references/journey.md +79 -0
  593. package/skills/risk-compliance/payment-analysis/references/metrics.md +67 -0
  594. package/skills/risk-compliance/payment-analysis/references/report-template.md +119 -0
  595. package/skills/risk-compliance/payment-analysis/references/terminology.md +95 -0
  596. package/skills/risk-compliance/payment-analysis/references/visualization.md +56 -0
  597. package/skills/risk-compliance/payment-analysis/release-check.mjs +93 -0
  598. package/skills/risk-compliance/report-writing/LICENSE +3 -0
  599. package/skills/risk-compliance/report-writing/SKILL.md +220 -0
  600. package/skills/risk-compliance/report-writing/references/audit-report-template.md +121 -0
  601. package/skills/risk-compliance/report-writing/references/external-assessment-template.md +167 -0
  602. package/skills/risk-compliance/report-writing/references/management-report-template.md +145 -0
  603. package/skills/risk-compliance/report-writing/references/vars-report-template.md +224 -0
  604. package/skills/risk-compliance/report-writing/release-check.mjs +93 -0
  605. package/skills/risk-compliance/similar-domain/LICENSE +3 -0
  606. package/skills/risk-compliance/similar-domain/SKILL.md +203 -0
  607. package/skills/risk-compliance/similar-domain/references/entities.md +67 -0
  608. package/skills/risk-compliance/similar-domain/references/fingerprints.md +134 -0
  609. package/skills/risk-compliance/similar-domain/references/pivots.md +82 -0
  610. package/skills/risk-compliance/similar-domain/references/report-template.md +93 -0
  611. package/skills/risk-compliance/similar-domain/references/scoring.md +130 -0
  612. package/skills/risk-compliance/similar-domain/references/terminology.md +41 -0
  613. package/skills/risk-compliance/similar-domain/references/workflow.md +85 -0
  614. package/skills/risk-compliance/similar-domain/release-check.mjs +93 -0
  615. package/skills/risk-compliance/tld-detection/LICENSE +3 -0
  616. package/skills/risk-compliance/tld-detection/SKILL.md +245 -0
  617. package/skills/risk-compliance/tld-detection/agents/openai.yaml +9 -0
  618. package/skills/risk-compliance/tld-detection/references/chinese-polish.md +55 -0
  619. package/skills/risk-compliance/tld-detection/references/clean.md +51 -0
  620. package/skills/risk-compliance/tld-detection/references/clustering.md +235 -0
  621. package/skills/risk-compliance/tld-detection/references/decision.md +189 -0
  622. package/skills/risk-compliance/tld-detection/references/fx-conversion.md +232 -0
  623. package/skills/risk-compliance/tld-detection/references/report-template.md +272 -0
  624. package/skills/risk-compliance/tld-detection/references/streams.md +141 -0
  625. package/skills/risk-compliance/tld-detection/references/terminology.md +95 -0
  626. package/skills/risk-compliance/tld-detection/references/workflow.md +95 -0
  627. package/skills/risk-compliance/tld-detection/release-check.mjs +93 -0
  628. package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +390 -0
  629. package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +14 -0
  630. package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +650 -0
  631. package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +14 -0
  632. package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +134 -0
  633. package/skills/risk-compliance/tld-detection/tests/test_detect_streams.py +520 -0
@@ -0,0 +1,274 @@
1
+ # Mergify Configuration
2
+
3
+ The settings this skill opinionates, and the checklist that puts them in
4
+ place. Governed by [Rule 1](../SKILL.md#rule-1--fetch-the-docs-before-writing-config):
5
+ fetch the schema before writing any of it, and finish with `validate` **and**
6
+ `simulate`.
7
+
8
+ ## The Four Settings
9
+
10
+ ### 1. Enqueue — auto on ready + review-PASS, manual otherwise
11
+
12
+ A PR **auto-enqueues** the moment it is ready, a review has passed, and CI is
13
+ green. Short of that it stays held, and a human enqueues it by hand with
14
+ `@mergifyio queue`.
15
+
16
+ **How:** set `merge_protections_settings.auto_merge_conditions` to that AND-list.
17
+ Its *presence* enables conditional auto-merge; the conditions scope *which* PRs.
18
+ The manual path is not a second setting — `@mergifyio queue` queues a PR
19
+ regardless of `auto_merge_conditions`, and `merge_conditions` gate on CI only
20
+ (never review), so a hand-queued PR still merges on green without a review.
21
+
22
+ ```yaml
23
+ merge_protections_settings:
24
+ reporting_method: check-runs
25
+ post_comment: true
26
+ # AUTO-enqueue only a ready PR whose review passed; everything else waits for a
27
+ # human `@mergifyio queue`. "review PASS" = ≥1 approval and no open change request.
28
+ # `-draft` belongs HERE (don't auto-queue a draft), but stays OUT of
29
+ # queue_conditions/merge_conditions — see the `-draft` note further down.
30
+ auto_merge_conditions:
31
+ - "-draft"
32
+ - "#approved-reviews-by >= 1"
33
+ - "#changes-requested-reviews-by = 0"
34
+ - *gate
35
+ ```
36
+
37
+ Why this is the default and not bare-manual: scoping auto-merge to a *passed
38
+ review* keeps the routine case one-click-free **without** letting an unreviewed
39
+ PR ride in — the failure a review gate exists to stop. It also avoids the mirror
40
+ failure: the retired "auto-queue every non-draft PR" form had no review arm, so a
41
+ green-but-unreviewed PR merged and a reviewer requesting changes could lose the
42
+ race to the queue. The review arm is the point; the manual hatch (above) covers
43
+ the "land it without waiting" case.
44
+
45
+ **To go fully manual instead** (queueing the only entry), omit
46
+ `auto_merge_conditions` entirely and say so in a comment — an omitted key reads as
47
+ an oversight and someone will "fix" it back.
48
+
49
+ Do **not** use `merge_protections_settings.auto_merge: true` or
50
+ `queue_rules[].autoqueue: true` — both are deprecated.
51
+
52
+ Developers enqueue by commenting `@mergifyio queue`, or by ticking the checkbox
53
+ Mergify renders in its queue status comment (`merge_queue.queue_controls_comment`,
54
+ default `true`). Mergify acknowledges a command with a 👍 reaction; **no 👍 means
55
+ the command was not processed**, which is a different problem from a PR that
56
+ failed its conditions.
57
+
58
+ ### 2 & 3. Batch mode, size 3
59
+
60
+ ```yaml
61
+ queue_rules:
62
+ - name: default
63
+ batch_size: 3
64
+ batch_max_wait_time: 10 seconds
65
+ batch_max_failure_resolution_attempts: 10
66
+ merge_queue:
67
+ max_parallel_checks: 3
68
+ ```
69
+
70
+ **The default this skill ships is `batch_size: 3`** — written explicitly, never
71
+ assumed: an unset `batch_size` silently runs the queue at Mergify's built-in
72
+ default of 1, i.e. no batching, so the key being present is the act that turns
73
+ batching on. With it set, Mergify does not simply test "the next three in the
74
+ queue": priority and
75
+ queue order seed a batch, **stacks always stay together**, and similarity (shared
76
+ scopes, then changed directories, then queue time) fills the remaining slots.
77
+ Related PRs enqueued together reliably ride one batch — that is how the queue
78
+ collects a delivery — while unrelated ones may split, deliberately, so one PR's
79
+ failure cannot drag unrelated work into a bisection. When a batch goes red,
80
+ Mergify **bisects** it — splitting and retesting until it isolates the culprit,
81
+ then dequeuing only that PR. Innocent PRs stay in the queue. `max_parallel_checks`
82
+ caps how many splits run at once, so match it to `batch_size`; more is wasted.
83
+
84
+ `batch_max_wait_time` is the knob that decides how eagerly the queue collects a
85
+ batch, and it is a straight latency tax on a **lone** PR — Mergify waits the full
86
+ window before giving up on company. Where PRs arrive one at a time, keep it at
87
+ seconds, not minutes. Where delivery is bursty — an epic landing a stack, a set
88
+ of related PRs expected together — a longer window (a few minutes) buys the batch
89
+ (N PRs, one CI run) at the cost of a slightly slower lone PR. Set it from how PRs
90
+ actually arrive, not from either extreme.
91
+
92
+ The default is **10 seconds**, not 0. A coordinated enqueue (`stack-push.mjs
93
+ --enqueue`, an epic's units) lands its PRs within seconds, and those were most
94
+ of the batches a two-week audit of seven repos found (27 formed in the wait
95
+ window, 18 behind a running check, 2026-09-27 → 10-10). At 0 the first PR of a
96
+ burst starts alone: with `max_parallel_checks > 1` the rest each start their
97
+ own check (more CI runs), and with `max_parallel_checks: 1` they wait out the
98
+ first PR's whole run before batching (slower). PRs that pile up behind a
99
+ running check still batch at any window.
100
+
101
+ **Two hard requirements:**
102
+
103
+ - GitHub branch protection **"Require branches to be up to date before merging"
104
+ must be DISABLED.** Batches cannot merge with it on — the original PRs are not
105
+ up to date by GitHub's reckoning even though the batch was tested against base.
106
+ This is the single most common reason a batched queue never merges anything.
107
+ - Batching disables **in-place checks**. In-place is only active when all three
108
+ hold: `max_parallel_checks == 1`, every queue has `batch_size == 1`, *and*
109
+ every queue CI is single-step (no extra `merge_conditions` — either empty or
110
+ identical to `queue_conditions`). A second queue-only check in
111
+ `merge_conditions` fails the third condition even at `batch_size 1`. Everything
112
+ downstream of that (below) follows from it.
113
+
114
+ Revisit the size from evidence, not taste: if batches go red often enough that
115
+ bisection is the normal path, the changes are less independent than assumed and
116
+ 3 is too wide.
117
+
118
+ ### 4. Enforce head (freshness against base)
119
+
120
+ ```yaml
121
+ queue_rules:
122
+ - name: default
123
+ update_method: rebase # rebase | merge
124
+ ```
125
+
126
+ **Read this before relying on it.** `update_method` governs how a PR is updated
127
+ with its base branch **when the check is done in place** — and in-place checks
128
+ are off whenever `batch_size > 1`. Under `batch_size: 3` the option is inert.
129
+
130
+ That is not a gap. With batching, Mergify builds a **queue branch** of
131
+ `base + batch` and runs CI there, so what gets tested is always fresh against
132
+ base by construction. The PR's own branch simply is not what gets tested.
133
+
134
+ Keep `update_method: rebase` in the config anyway, so dropping to `batch_size: 1`
135
+ does not silently change behaviour — but comment it, or the next reader will
136
+ believe it is doing work it is not.
137
+
138
+ **If you need the PR branch itself kept fresh** (e.g. contributors run local
139
+ checks against it), that is a separate lever:
140
+
141
+ | Want | Use |
142
+ |------|-----|
143
+ | Fresh tree under test | Nothing — the queue branch already gives you this |
144
+ | Rebase the PR branch, on demand | `@mergifyio update` or `@mergifyio rebase` comment |
145
+ | Rebase the PR branch, automatically | a `pull_request_rules` entry with the `update` or `rebase` action |
146
+ | Fresh head at enqueue time | `#commits-behind = 0` in `queue_conditions` (blocks entry rather than fixing it) |
147
+
148
+ Automatic updating fights the queue — every update retriggers the PR's CI — so
149
+ prefer on-demand unless you have a reason.
150
+
151
+ ## The Queue Run Is The Integration Run
152
+
153
+ Rules settled by the 2026-10-10 audit of seven repos (Mergify event log,
154
+ 2026-09-27 → 10-10). Each one is a one-liner; the example is the shape to copy.
155
+
156
+ - **Run each heavy check once, in the queue only.** Never copy a queue-only
157
+ check (authenticated E2E, integration, smoke) onto the PR lane to "catch it
158
+ earlier": that runs it twice and lengthens integration. Make it reliable
159
+ instead. Example: identity's `Queue authenticated validation` stays on
160
+ `mergify/merge-queue/**` only; its flakes were fixed in the test, not moved.
161
+ - **Never skip the tests on the queue branch.** A queue lane that reports green
162
+ without testing turns the queue into a slow merge button. Example (kyc, the
163
+ anti-pattern): `if [[ "$HEAD_REF" == mergify/merge-queue/* ]]; then echo
164
+ skip=true` — the queue ran 1.4 min against 10.6 min on PRs, and main CI then
165
+ failed 7 of 16 times.
166
+ - **Do not rerun CI on push to the base branch.** The queue already tested the
167
+ exact tree that lands there, and the `update` rule makes the queue the only
168
+ way in. Drop `push: branches: [main]` from test workflows and drop nightly
169
+ `schedule:` reruns of the gate; keep deploy and post-deploy workflows, which
170
+ do work the queue cannot. Do not build verdict-reuse machinery to make the
171
+ main run cheap — remove the trigger. Example (ai #1687, identity #1222,
172
+ a1 #387): `on: { pull_request: , workflow_dispatch: }`. Keep a `schedule:`
173
+ only for a different job, such as a weekly full-history security scan.
174
+ - **Size `max_parallel_checks` to the runners, not to `batch_size`.** On a
175
+ shared self-hosted pool, one batch can fill the pool; a second speculative
176
+ batch only queues for runners and slows every shard. Example: identity keeps
177
+ `max_parallel_checks: 1` because one batch runs ~10 jobs on ~13 org-wide
178
+ runners and shard waits already reached p90 197 s.
179
+ - **Fix a flaky queue check; retry only as a dated stopgap.** Each flaky
180
+ failure costs a full queue run plus a re-enqueue. `max_checks_retries: 1`
181
+ re-runs a failed batch once before splitting or dequeuing; set it only with a
182
+ comment listing the flakes being fixed and saying to return it to 0. Example:
183
+ fmm-express #1541.
184
+ - **Set no checks timeout.** `checks_timeout` defaults to `auto` (p95 of recent
185
+ queue runs plus a margin). On a busy shared runner pool, a run that is only
186
+ waiting for runners crosses it, and Mergify dequeues and bisects PRs whose
187
+ checks would pass. Set `checks_timeout: null` on every queue rule; a hung job
188
+ is ended by its own `timeout-minutes`. Example (2026-10-10): fmm-express at 35
189
+ min and skyee at auto ~43 min dequeued green PRs while waiting for runners.
190
+
191
+ ## Stack-ready
192
+
193
+ **A GitHub-native stack needs only Mergify's ruleset bypass `exempt`
194
+ ([branch-protection.md](branch-protection.md)).** GitHub runs a native stack's
195
+ PR CI as if each PR targets the stack base, and Mergify rebases a survivor
196
+ itself after a partial landing, so a `branches: [main]` filter and a squash
197
+ queue both work. Native stacks are the `mergify stack push` default and what
198
+ `resolve-issues` `stack` mode builds (`gh stack link`).
199
+ Example (stack-sandbox, 2026-10-20): a `[main]`-filtered workflow ran on every
200
+ PR of a three-PR native stack, and a squash queue landed it whole, then
201
+ partially with the top PR red.
202
+
203
+ **A `Depends-On` stack (`--no-github-native`, or a push GitHub refused to
204
+ register), or a `resolve-issues` chain, needs three more settings:**
205
+
206
+ - **Run PR CI on every base.** On every workflow behind a required check, use
207
+ `on: { pull_request: }` with no `branches:` filter, or `branches: ["**"]`. A
208
+ filter to the base branch never runs on a PR based on another PR's branch,
209
+ so the stack gets no CI until each parent merges. Example (2026-10-16):
210
+ fmm-express (`test.yml`, `android.yml`) and identity (`ci.yml`) filtered to
211
+ `[main]`.
212
+ - **Merge with commits kept.** `merge_method: merge-batch` with
213
+ `batch_size: 3`, or `merge` at batch size 1. `squash` and `rebase` rewrite
214
+ the commits a child PR is built on, so it conflicts once its parent lands.
215
+ Example: kyc's `default` queue squashed.
216
+ - **Auto-delete head branches** (setup step 8), so `Depends-On` stack survivors retarget.
217
+
218
+ `audit.mjs` reports the first two as notes (`merge-method`, `stacked-pr-ci`),
219
+ never warnings; it reads `.github/workflows` beside the config, or
220
+ `--workflows <dir>`. It cannot tell which workflows run a required check, so it
221
+ notes any base-filtered `pull_request` trigger.
222
+
223
+ ## Setup Checklist
224
+
225
+ 1. Fetch the schema and the relevant doc pages.
226
+ 2. Copy `assets/templates/mergify.yml` → `.mergify.yml`; replace placeholders.
227
+ 3. Remove `push: branches: [<base>]` and gate-rerun `schedule:` triggers from test
228
+ workflows ([The Queue Run Is The Integration Run](#the-queue-run-is-the-integration-run)).
229
+ Name the CI roll-up job in the `gate` anchor. It must report on every PR (no workflow
230
+ `paths:`; `github-actions` skill). Path-filtered workflow you can't fix: add the `or`
231
+ exemption and list the workflow file's own path ([traps.md](traps.md)).
232
+ 4. `mergify config validate`.
233
+ 5. `mergify config simulate <PR-URL>` against a real PR; with an exemption, use a PR
234
+ that hits the exempt path.
235
+ 6. **Audit against this skill's default:**
236
+ `node ~/.agents/skills/mergify/scripts/audit.mjs --file .mergify.yml`.
237
+ (Absolute, like the watcher above: you run this from the repo being audited, where a
238
+ CWD-relative `scripts/…` does not resolve.)
239
+ It checks the shape `config validate` can't — [stack-ready](#stack-ready) notes (commits
240
+ kept, CI on stacked PRs, for `Depends-On` stacks), enqueue policy (hybrid vs the retired
241
+ indiscriminate auto-queue), `branch_protection_injection_mode: merge`, the
242
+ define-once/assert-many gate anchor, `-draft` misplaced in queue/merge
243
+ conditions, and batch mode actually on (`batch_size: 3` — this skill's
244
+ default; an unset `batch_size` runs at Mergify's built-in 1, so batching
245
+ silently off is a real state). It **abstains** rather than guess, so a `?` means "check by hand," not
246
+ "fine." `--json` for machine output; exits non-zero on any warn (`--allow-warn` to
247
+ downgrade). Runs on the committed `.mergify.yml`, so it fits a pre-merge check.
248
+ 7. Confirm Mergify's app id: `gh api /apps/mergify --jq .id`.
249
+ 8. **Enable GitHub "Automatically delete head branches"** before relying on
250
+ stacked PRs in the merge queue:
251
+ `gh api repos/<owner>/<repo> -X PATCH -f delete_branch_on_merge=true`.
252
+ With this off, survivors of a stack dequeue with "could not be retargeted
253
+ onto the queue base branch" after a parent merges — see
254
+ [`traps.md`](traps.md). Confirm: `gh api repos/<owner>/<repo> --jq .delete_branch_on_merge`.
255
+ 9. `gh ruleset list` — if a ruleset already covers this branch, fold these rules
256
+ into it (**PUT**) rather than stacking a second one. Overlapping rulesets are
257
+ additive and the most restrictive wins, which is a confusing way to be blocked.
258
+ 10. Inventory anything that pushes to the protected branch — the `update` rule
259
+ will block it. Add each as a bypass actor (GitHub Actions = `15368`):
260
+ `grep -rnE 'git push|create-pull-request|github-script' .github/workflows/`
261
+ 11. Apply `assets/templates/ruleset.json`. Dry-run with
262
+ `"enforcement": "evaluate"` first if you want to see what it would block —
263
+ read the results from `rule-suites`.
264
+ 12. Prove the allowed path **before** the blocked one: enqueue a PR with
265
+ `@mergifyio queue`, confirm the 👍, and watch `mergify queue show <number> -v`
266
+ through to merge. A ruleset strict enough to block humans can also block
267
+ Mergify if a bypass id is wrong, and you would rather learn that while you
268
+ can still merge the fix.
269
+ 13. Now prove the blocked path: open a throwaway PR and try to merge it without
270
+ enqueuing, as a non-bypass user. GitHub must refuse, naming the ruleset.
271
+ 14. Decide the escape hatches: keep `priority_rules` (jump the line), and either
272
+ keep or delete the `emergency-merge` rule (skips CI, cannot be limited to
273
+ admins). Keep the `OrganizationAdmin` bypass either way — it is the only way
274
+ back in if Mergify has an outage.
@@ -0,0 +1,109 @@
1
+ # Diagnosing A Stuck PR
2
+
3
+ Two tools, two different questions — and when they disagree, the disagreement is
4
+ itself the diagnosis. For watching a PR through to merge (a different job, with
5
+ its own rules) see [`watch-contract.md`](watch-contract.md).
6
+
7
+ ## Querying PR and Queue Status
8
+
9
+ ### Mergify's own view — why a PR is or isn't moving
10
+
11
+ ```bash
12
+ mergify queue status # all batches + waiting PRs
13
+ mergify queue status --branch main # one branch
14
+ mergify queue status --json # parseable
15
+ mergify queue show <number> # one PR: position, priority, CI state
16
+ mergify queue show <number> -v # + full checks table and conditions tree
17
+ mergify queue show <number> --json
18
+ ```
19
+
20
+ `queue show` takes the bare PR number: `2399`, never a URL or `#2399`. Outside
21
+ the repo's checkout, add `--repository <owner/repo>` (or `-r`); `--repo` and
22
+ `-R` do not exist.
23
+ Example: `mergify queue show 2399 --repository 1aboveio/agentier --json`.
24
+
25
+ `mergify queue show <number> -v` is the one to reach for. The conditions tree shows
26
+ which conditions are met and **which single one is blocking** — that is the
27
+ answer to "why is this stuck", and nothing else in the toolchain reports it.
28
+
29
+ Queue states worth recognising:
30
+
31
+ | State | Meaning |
32
+ |-------|---------|
33
+ | `waiting_for_batch` | Queued, not yet picked into a batch |
34
+ | `waiting_for_previous_batches` | Blocked on an earlier batch |
35
+ | `preparing` / `running` | Batch is being set up / running CI |
36
+ | `bisecting` | Batch failed; splitting to find the culprit |
37
+ | `failed` | CI failed for this batch |
38
+ | `waiting_for_merge` | CI passed, waiting on GitHub |
39
+ | `waiting_schedule` | Outside the configured merge schedule |
40
+ | `frozen` | Queue is paused |
41
+
42
+ ### GitHub's view — the raw checks and merge state
43
+
44
+ ```bash
45
+ gh pr checks <PR> # check-run table, exit 1 if any failed
46
+ gh pr checks <PR> --watch # block until they settle
47
+ gh pr view <PR> --json state,isDraft,mergeable,mergeStateStatus,statusCheckRollup
48
+ gh pr view <PR> --json labels --jq '.labels[].name' # queued / dequeued labels
49
+ ```
50
+
51
+ Mergify labels a PR `queued` on entry and `dequeued` on removal
52
+ (`merge_queue.queued_label` / `dequeued_label`). These are **lifecycle** signals,
53
+ not a cheap membership check — what they mean depends on what you saw before
54
+ them, which is why reading them is the watcher's job and not a one-off `gh`
55
+ call. See [`watch-contract.md`](watch-contract.md).
56
+
57
+ ### Which one to ask
58
+
59
+ Use **both, in this order** — they answer different questions and disagreeing
60
+ answers are themselves the diagnosis:
61
+
62
+ 1. `mergify queue show <number> -v` — is it in the queue, and what condition blocks it?
63
+ 2. `gh pr checks <PR>` — is the underlying CI actually green?
64
+
65
+ A check that is **green in GitHub but unmet in Mergify** means the condition
66
+ names the wrong check. A check that is **absent** (never created, e.g. filtered
67
+ out by the workflow's `paths:`) reads as permanently unmet — see the trap below.
68
+
69
+ ### Pause / resume
70
+
71
+ ```bash
72
+ mergify queue pause --reason "production incident — halting merges"
73
+ mergify queue unpause
74
+ ```
75
+
76
+ Pausing does not cancel running CI; it stops new merges. The reason is visible
77
+ to everyone in `queue status`. Add `--yes-i-am-sure` in scripts.
78
+
79
+
80
+ ## Measuring A Slow Queue
81
+
82
+ Measure before tuning. Mergify's event log answers "is the queue slow, and why"
83
+ per repo; `gh pr checks` cannot.
84
+
85
+ ```bash
86
+ curl -s -H "Authorization: Bearer $(gh auth token)" \
87
+ "https://api.mergify.com/v1/repos/<owner>/<repo>/logs?per_page=100&received_from=<ISO date>"
88
+ # follow the `Link: rel="next"` header to page
89
+ ```
90
+
91
+ Events to use: `action.queue.enter` / `leave` (`metadata.queued_at`,
92
+ `dequeue_code`, `merged`, `pull_request_head_sha`, `unsuccessful_checks`) and
93
+ `action.queue.checks_start` / `checks_end` (`speculative_check_pull_request`:
94
+ `pull_request_numbers`, `checks_started_at`, `checks_ended_at`,
95
+ `checks_conclusion`).
96
+
97
+ Compute, per repo:
98
+
99
+ | Metric | Healthy | Points at |
100
+ |---|---|---|
101
+ | First-try merge rate | ≥ 85 % | Below it: queue-only checks failing |
102
+ | `CHECKS_FAILED` later merged with the **same head SHA** | ≈ 0 | Flaky or infra failure — fix the check ([configuration.md](configuration.md#the-queue-run-is-the-integration-run)) |
103
+ | Time in queue minus queue CI duration | ≈ 1 min | More: `batch_max_wait_time` or `max_parallel_checks` waits |
104
+ | Multi-PR batches formed in the wait window vs behind a running check | — | Whether `batch_max_wait_time` is earning its latency |
105
+
106
+ Then read the failing job logs (`gh run view <id> --log-failed`) and group by
107
+ cause: real defect, flaky test, in-repo infra (artifact upload resets, ports,
108
+ caches), or outside the repo (runner host, package mirror). Only the middle two
109
+ are fixed in the repo.
@@ -0,0 +1,84 @@
1
+ # Stacked PRs (`mergify stack`)
2
+
3
+ > Read when: pushing, opening, updating, or enqueuing PRs in a repo with Mergify stack hooks;
4
+ > the pre-push hook says "Use 'mergify stack push'"; a `Change-Id` is missing.
5
+
6
+ ## CLI version
7
+
8
+ **Use mergify CLI 2026.10.5 or newer.** `stack-push.mjs` refuses an older one (exit 6). Since
9
+ 2026.9.16.1, `stack push` registers a GitHub-native stack by default: GitHub holds the order, and
10
+ PR bodies carry no `Depends-On:`. Mergify's queue lands it only when Mergify's bypass on every
11
+ ruleset protecting the base is `exempt` ([traps.md](traps.md)).
12
+
13
+ ```bash
14
+ mergify --version
15
+ brew upgrade mergify-cli # untrusted-tap refusal: brew trust --formula mergifyio/tap/mergify-cli
16
+ ```
17
+
18
+ ## When a repo uses stacks
19
+
20
+ - **Stack repo:** `.git/hooks/mergify-hooks/` exists (installed by `mergify stack setup`). Every
21
+ commit gets a `Change-Id:` trailer; the pre-push hook refuses plain `git push` on a branch
22
+ with an upstream.
23
+ - **Not a stack repo:** no hooks. Push with `git push` + `gh pr create` (`github-flow`). Never
24
+ use `mergify stack` there, and never wait on a queue the repo has no `.mergify.yml` for.
25
+
26
+ ## Workflow
27
+
28
+ 1. Start a stack branch that tracks trunk: `mergify stack new <type>/<topic>`.
29
+ 2. Commit. **One commit = one PR.** Put `Closes #<n>` in the commit message, not only the PR body.
30
+ 3. Push:
31
+ ```bash
32
+ node <mergify-skill>/scripts/stack-push.mjs # push, report PR numbers
33
+ node <mergify-skill>/scripts/stack-push.mjs --enqueue # push, then enqueue every stack PR
34
+ node <mergify-skill>/scripts/stack-push.mjs --dry-run # show the plan only
35
+ ```
36
+ It refuses a non-stack repo (exit 3), stops on a missing `Change-Id` or empty stack (exit
37
+ 4), refuses a CLI older than 2026.10.5 (exit 6), and prints each PR as JSON on stdout. The last stderr line lists the PRs.
38
+ 4. Fix after review or CI: amend the commit that PR belongs to, then push again. A new commit
39
+ opens a new PR. New commits cancel a PR's queue request, so push a queued PR with
40
+ `--enqueue`; without it, the script warns which PRs need requeueing.
41
+ - Tip commit: `git commit --amend`.
42
+ - Older commit: commit the fix on top, then `mergify stack squash <fix-sha> into <target-sha>`.
43
+ Squash keeps the target's message and `Change-Id`, so its PR updates in place.
44
+ 5. Enqueue the whole stack together (Rule 3), then watch each PR with `watch-pr-delivery.mjs`.
45
+ 6. After a lower PR merges: `mergify stack sync`, then push again.
46
+
47
+ ## Rules
48
+
49
+ - **Never `git push --no-verify`** to get past the stack hook, and never `stack push --no-verify`.
50
+ - **A multi-commit branch that must be one PR** (an integration branch): ask the user before
51
+ `git branch --unset-upstream` + `git push`. A stack push there opens one PR per commit.
52
+ - **Pass `--trunk origin/main`.** Without it the CLI may resolve trunk from the branch's own
53
+ upstream ("targets itself", "could not determine trunk branch"). The script always passes it.
54
+ - **Keep PR bodies:** push with `--keep-pull-request-title-and-body`, or set it once per repo:
55
+ `git config mergify-cli.stack-keep-pr-title-body true`. Without it every push rewrites the
56
+ title and body from the commit message.
57
+ - **Keep the `Change-Id:` trailer in the last paragraph** of the message. A cherry-pick, a
58
+ `commit-tree`, or a rewritten message can drop it; `git commit --amend --no-edit` re-adds it.
59
+ A changed or missing `Change-Id` closes the old PR and opens a new one.
60
+ - **Find a PR by number from `mergify stack list --json`** (`entries[].pull_number`). Its head
61
+ branch is `stack/<user>/<branch>/<slug>--<id>`; `gh pr view <local-branch>` finds nothing.
62
+ - **Rebase conflict** ("rebase failed — there may be conflicts"): resolve, `git rebase
63
+ --continue`, push again. `--skip-rebase` only to avoid dismissing approvals.
64
+ - **Retarget or dequeue after a parent merges** ("could not be retargeted"): see
65
+ [traps.md](traps.md) (`delete_branch_on_merge`, `--force-rebase`).
66
+
67
+ ## Command card
68
+
69
+ | Do | Command |
70
+ |---|---|
71
+ | Push / create / update PRs | `mergify stack push --trunk origin/main --keep-pull-request-title-and-body` |
72
+ | Preview | add `--dry-run` |
73
+ | List commits and PRs | `mergify stack list --trunk origin/main [--json]` |
74
+ | New stack branch | `mergify stack new <name>` |
75
+ | Fold a fix into an older commit | `mergify stack squash <src>... into <target>` |
76
+ | Fold commits into their parent | `mergify stack fixup <commit>...` |
77
+ | Pause a rebase at a commit to amend it | `mergify stack edit <commit>`, amend, `git rebase --continue` |
78
+ | Reword, reorder, drop | `mergify stack reword` / `reorder` / `drop` |
79
+ | Rebase on trunk, drop merged | `mergify stack sync` |
80
+ | Check out a stack from GitHub | `mergify stack checkout <name>` |
81
+ | Install hooks | `mergify stack setup` |
82
+ | CLI version (needs 2026.10.5+) | `mergify --version` |
83
+
84
+ Not commands: `stack status`, `stack submit`, `mergify version`, `--repo` (use `--repository`).
@@ -0,0 +1,119 @@
1
+ # Traps
2
+
3
+ These are the ones that cost real time. Each has been hit in production.
4
+
5
+
6
+ **A path-filtered check is *absent*, not failing.** If the workflow has an
7
+ `on.pull_request.paths:` filter, a PR touching none of those paths never creates
8
+ the check — and `check-success = <name>` can never be satisfied. Those PRs sit in
9
+ the queue forever with nothing reporting why. Fix the workflow: drop `paths:` and
10
+ filter inside the job behind one always-reporting `gate` (`github-actions` skill,
11
+ `conditional-ci.md`). If you cannot, write the condition as an `or` with an
12
+ explicit `-files ~=` exemption, and **include the
13
+ workflow file's own path in the exemption** — otherwise a workflow-only PR takes
14
+ the exempt branch and can merge with the gate red, which is precisely the change
15
+ most able to disable the gate.
16
+
17
+ **Never write `success_conditions: [queue-name = default]`** in a
18
+ `merge_protections` rule to force merges through the queue. Merge-protection
19
+ conditions are injected into the queue's **entry** conditions, while the GitHub
20
+ ruleset requires the resulting check **before** entry — entry waits on a check
21
+ that cannot go green until after entry, and the repository deadlocks with every
22
+ PR parked at "Waiting for queue conditions". `branch_protection_injection_mode:
23
+ merge` does **not** prevent this; it governs GitHub-side injection, not Mergify's
24
+ own merge protections. Queue-only merges are a **GitHub ruleset** job, not a
25
+ Mergify-config job — use the `update` rule, as in
26
+ [Enforcing Queue-Only Merges](branch-protection.md#enforcing-queue-only-merges).
27
+
28
+ **A required status check does not make the queue mandatory.** Once it goes
29
+ green, anyone with write access can merge directly and the queue never sees the
30
+ PR. Only the `update` rule stops that.
31
+
32
+ **`update` locks out your own automation.** Enabling it without adding the
33
+ GitHub Actions app (or whatever pushes to the branch) as a bypass actor turns
34
+ every release/version-bump job red. Inventory pushers before you enable it.
35
+
36
+ **Do not make Mergify the sole bypass actor without a break-glass path.** If
37
+ Mergify is the only actor that can write to the branch and Mergify has an
38
+ outage, nobody can merge the fix either. Keep `OrganizationAdmin` bypass.
39
+
40
+ **Define the gate once, assert it three times.** The queue-entry gate, the
41
+ queue-merge gate and the GitHub-required merge protection must be the same YAML
42
+ anchor. Three hand-written copies drift, and the drift shows up as an
43
+ unmergeable PR, not as an error.
44
+
45
+ **`merge_conditions` re-asserting `queue_conditions` is not redundant.** Mergify
46
+ tests the batch merged with its base — a tree that existed when no individual
47
+ PR's CI ran.
48
+
49
+ **`-draft` is deliberately absent** from `queue_conditions` and
50
+ `merge_conditions`. Auto-enqueue skips drafts (`-draft` in `auto_merge_conditions`), and
51
+ a leftover draft condition presents as "queued, no reason given". Know what the
52
+ absence costs before you re-add it or rely on it: GitHub cannot merge a draft PR,
53
+ so a draft that *is* enqueued rides a whole batch CI run and then fails at the
54
+ merge call, taking the batch's innocent PRs through that failure. Marking a
55
+ queued PR as draft no longer dequeues it either — `@mergifyio dequeue` does.
56
+
57
+ **Stop drafts at *creation*, not just at the queue.** The paragraph above is the
58
+ queue side — it does not stop a PR being *born* a draft, and the queue does not
59
+ filter drafts out. So the guard belongs where PRs are opened. `mergify stack`
60
+ opens each PR per its `--draft` flag, falling back to git config
61
+ `mergify-cli.stack-create-as-draft`, which is `false` when unset and only counts
62
+ the literal string `"true"`. The failure mode is therefore a **global**
63
+ `mergify-cli.stack-create-as-draft=true` inherited into every repo, silently
64
+ drafting every agent-opened PR. Pin it off in the repo so no inherited value can
65
+ flip it:
66
+
67
+ ```bash
68
+ git config mergify-cli.stack-create-as-draft false
69
+ ```
70
+
71
+ An explicit `--draft` on the `mergify stack` invocation still overrides this, so
72
+ also confirm no wrapper or alias passes it. (Deliberate drafting is a separate
73
+ case: `resolve-issues`' integration gate converts per-unit PRs to draft *after*
74
+ opening the combined PR — that is intended and not what this guard is about.)
75
+
76
+ **Under a required Mergify check, set `branch_protection_injection_mode: merge`.**
77
+ The default (`queue`) injects ruleset requirements into entry conditions too, and
78
+ a Mergify check that deliberately fails pre-queue then blocks the enqueue that
79
+ would make it pass.
80
+
81
+ **`Depends-On` stacked PRs dequeue with "could not be retargeted onto the queue base
82
+ branch" when head branches survive merge.** This applies to a `Depends-On` stack
83
+ (`--no-github-native`, or a push that printed `not registered on GitHub`); GitHub
84
+ retargets a native stack's next PR itself, and auto-delete stays on as the guard. This is not a `.mergify.yml`
85
+ `batch_size` / `merge-batch` bug. Mergify *can* land a stack when members are
86
+ queued together (stack-aware base + batching), but after a lower member merges
87
+ GitHub must restack the survivors onto `main`. That retarget happens when the
88
+ merged PR's **head branch is deleted**. If the repository has
89
+ `delete_branch_on_merge: false`, parent stack refs stay on the remote, GitHub
90
+ never moves the next PR's base from `parent-head` → `main`, and Mergify dequeues
91
+ with `base-ref-alignment-timeout` / "stacked on another whose head branch still
92
+ exists after merging" — even while the tip was already in the queue and draft
93
+ batch CI was green. Hit on skyee-ai-risk ADR 0044 stack (#2108 after #2107;
94
+ #2110 after #2108/#2109). Fix the repo setting, not the queue rule:
95
+
96
+ ```bash
97
+ gh api repos/<owner>/<repo> -X PATCH -f delete_branch_on_merge=true \
98
+ --jq .delete_branch_on_merge
99
+ ```
100
+
101
+ Verify with `gh api repos/<owner>/<repo> --jq .delete_branch_on_merge` (must be
102
+ `true`). If a tip is already stuck, `mergify stack push --force-rebase` (or a
103
+ manual base edit onto `main`) unblocks that incident; auto-delete prevents the
104
+ next one. On a `Depends-On` stack (`--no-github-native`), keep the full
105
+ `Depends-On: #N` chain on every member — without it Mergify may not treat the
106
+ chain as a stack and keeps literal bases, which collides with
107
+ `queue_conditions: base = main`. A GitHub-native stack carries no `Depends-On`;
108
+ Mergify reads its order from GitHub. Do not merge unrelated `main` PRs
109
+ through the middle of an open stack unless you expect another rebase cycle.
110
+ For GitHub-native stacks, Mergify's ruleset bypass should be **`exempt`** (not
111
+ only `always`); see [Stacked Pull Requests](https://docs.mergify.com/merge-queue/stacks/).
112
+
113
+
114
+ **A queue lane that skips its tests is a merge button, not a queue.** A
115
+ workflow that sets every job to skip on `mergify/merge-queue/*` ("the queue
116
+ reuses the PR's CI") reports green on a tree no CI ran: the PR merged with its
117
+ base. The breakage the queue exists to catch then lands on `main`. Run the
118
+ integration checks on the queue branch; skip only what the queue branch cannot
119
+ change.