@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,215 @@
1
+ # Mergify configuration template.
2
+ #
3
+ # Copy to the repository root as `.mergify.yml`, then replace every <PLACEHOLDER>
4
+ # and work through the TODOs. Validate before committing:
5
+ #
6
+ # mergify config validate
7
+ # mergify config simulate https://github.com/<owner>/<repo>/pull/<n>
8
+ #
9
+ # Shape of this template:
10
+ # - enqueue is HYBRID: AUTO on ready + review-PASS, MANUAL (`@mergifyio queue`) otherwise
11
+ # - batch mode, batch_size 3
12
+ # - update_method: rebase (head-freshness intent; see the note on it below)
13
+ # - one CI gate (`gate`), defined once and asserted in three places
14
+ # - queue-only merges, with the admin escape hatch routed THROUGH Mergify
15
+ #
16
+ # Queue-only merges are half configured here and half in ruleset.json:
17
+ # its `update` rule makes Mergify the only actor that may write to the branch,
18
+ # so the admin escape hatch cannot be "merge it by hand" — it has to be
19
+ # something Mergify performs. That is the `pull_request_rules` block at the end.
20
+
21
+ shared:
22
+ # ---------------------------------------------------------------------------
23
+ # THE GATE. Define the CI requirement once and reference it by anchor in the
24
+ # queue-entry gate, the queue-merge gate and the merge protection.
25
+ #
26
+ # TODO: replace `gate` if your roll-up job has another name. It must be the
27
+ # always-reporting roll-up job (`if: always()`, no workflow `paths:` filter;
28
+ # github-actions skill, conditional-ci.md). A path-filtered workflow leaves the
29
+ # check ABSENT on some PRs and they sit in the queue forever: fix the workflow.
30
+ # Only if you cannot, wrap the condition in an `or` with a `-files ~=` exemption
31
+ # that also lists the workflow file itself (references/traps.md).
32
+ gate: &gate check-success = gate
33
+
34
+ queue_rules:
35
+ - name: default
36
+ # No checks timeout: a run slowed by busy runners waits instead of
37
+ # dequeuing (and bisecting) green PRs. Fix slow CI, do not cap it.
38
+ checks_timeout: null
39
+ # Where GitHub branch-protection / ruleset requirements get injected.
40
+ # queue (default) — injected into BOTH queue-entry and merge conditions
41
+ # merge — injected only while merging
42
+ #
43
+ # Use `merge` when a Mergify-published check is itself REQUIRED by the
44
+ # ruleset: that check deliberately fails before the PR is in the queue, and
45
+ # with the default `queue` mode it would block the very enqueue step that
46
+ # makes it pass.
47
+ branch_protection_injection_mode: merge
48
+
49
+ # ---- Step 1: what a PR must satisfy to ENTER the queue --------------------
50
+ # `-draft` is deliberately ABSENT here, and from merge_conditions below.
51
+ # Auto-enqueue already skips drafts (`-draft` in auto_merge_conditions), and a
52
+ # draft condition here shows up as a lone unmet condition on a PR nobody
53
+ # expected to be held. Do not add it back without reading the next paragraph.
54
+ #
55
+ # What the absence costs, stated plainly so it is a choice and not a surprise:
56
+ # GitHub cannot merge a draft pull request. A draft that gets enqueued anyway
57
+ # is admitted, rides a full batch CI run, reaches the front and fails at the
58
+ # merge call — taking the batch's innocent PRs through that failure with it.
59
+ # Marking a queued PR as draft also no longer pulls it out of the queue;
60
+ # use `@mergifyio dequeue` for that.
61
+ queue_conditions:
62
+ - base = <main-branch>
63
+ - *gate
64
+
65
+ # ---- Step 2: what must hold to MERGE from the front of the queue ----------
66
+ # Not redundant with step 1: Mergify tests the batch merged WITH its base
67
+ # here — a tree that existed when no individual PR's CI ran.
68
+ # Add a second, queue-only check here only for work too slow for every PR
69
+ # push; never one that repeats the PR's own `gate` job.
70
+ merge_conditions:
71
+ - *gate
72
+
73
+ # ---- BATCH MODE ----------------------------------------------------------
74
+ # Test up to 3 PRs as one CI run — this skill's default. The key must be
75
+ # explicit: unset, `batch_size` silently runs at Mergify's built-in default of
76
+ # 1 (no batching), so this line is what turns batching on. Mergify groups a batch by
77
+ # relationship (stacks together, then similar scopes/directories), not raw
78
+ # queue order. A red batch is bisected by Mergify, so innocent PRs are not
79
+ # discarded; only the culprit is dequeued.
80
+ #
81
+ # REQUIRED GitHub setting: "Require branches to be up to date before merging"
82
+ # must be DISABLED on the protected branch. Batches cannot merge with it on.
83
+ batch_size: 3
84
+
85
+ # How long to hold the gate open for a batch to fill. This is a straight
86
+ # latency tax on a LONE PR — Mergify waits the full window before giving up
87
+ # on company. Keep it short where PRs usually arrive one at a time.
88
+ batch_max_wait_time: 10 seconds
89
+
90
+ # Bound on how many times a failing batch may be split to isolate the
91
+ # culprit. Each split is another CI run. With batch_size 3 a single bad PR
92
+ # is normally found in ~2 splits; this only caps the pathological case.
93
+ batch_max_failure_resolution_attempts: 10
94
+
95
+ # ---- HEAD FRESHNESS ------------------------------------------------------
96
+ # `update_method` applies ONLY to in-place checks, and in-place checks are
97
+ # enabled only when max_parallel_checks == 1 AND every queue has
98
+ # batch_size == 1 AND every queue CI is single-step (no extra
99
+ # merge_conditions). With batch_size 3 it is therefore inert today: head
100
+ # freshness comes from the queue branch, which Mergify builds as
101
+ # base + batch and runs CI against.
102
+ #
103
+ # It is kept here deliberately so that dropping to batch_size 1 does not
104
+ # silently change update behaviour. To rebase the PR BRANCH ITSELF while
105
+ # batching, use the `update`/`rebase` action or `@mergifyio update`
106
+ # (see the skill's "Enforce head" section) — not this option.
107
+ update_method: rebase
108
+
109
+ # Keep the PR's commits (configuration.md, "Stack-ready"): a PR built on another lands cleanly.
110
+ merge_method: merge-batch
111
+
112
+ merge_queue:
113
+ # Parallel speculative checks. Batch splits are tested in parallel during
114
+ # bisection, so a red batch resolves in roughly log time. There is nothing to
115
+ # gain from more parallel checks than a batch can split into.
116
+ max_parallel_checks: 3
117
+
118
+ merge_protections_settings:
119
+ # check-runs is what a GitHub branch ruleset can mark REQUIRED.
120
+ reporting_method: check-runs
121
+ post_comment: true
122
+
123
+ # ENQUEUE: AUTO on ready + review-PASS, MANUAL otherwise. A PR auto-queues the
124
+ # moment it is `-draft` (ready), has >=1 approval with no open change request,
125
+ # and the CI gate is green; short of that it waits for a human `@mergifyio queue`.
126
+ # The manual hatch always works — `@mergifyio queue` ignores these conditions,
127
+ # and `merge_conditions` gate on CI only — so a hand-queued PR merges on green
128
+ # without a review. `-draft` lives HERE, not in queue_conditions/merge_conditions
129
+ # (see the `-draft` note below).
130
+ #
131
+ # Do NOT use the deprecated `auto_merge: true` or `queue_rules[].autoqueue`.
132
+ # For fully MANUAL enqueue instead, delete this block and say so in a comment
133
+ # (an omitted key reads as an oversight and someone will "fix" it back).
134
+ auto_merge_conditions:
135
+ - "-draft"
136
+ - "#approved-reviews-by >= 1"
137
+ - "#changes-requested-reviews-by = 0"
138
+ - *gate
139
+
140
+ merge_protections:
141
+ # Republish the gate as a Mergify check-run so a GitHub ruleset has one stable
142
+ # check name to require.
143
+ #
144
+ # NEVER write `success_conditions: [queue-name = default]` here to "force all
145
+ # merges through the queue". Merge-protection conditions are injected into the
146
+ # queue's ENTRY conditions, while the ruleset requires the resulting check
147
+ # BEFORE entry — entry then waits on a check that cannot go green until after
148
+ # entry, and the repository deadlocks. `branch_protection_injection_mode:
149
+ # merge` does not prevent this; it governs GitHub-side injection, not
150
+ # Mergify's own merge_protections. Queue-only merges are enforced by the
151
+ # GitHub ruleset's `update` rule instead — see ruleset.json.
152
+ - name: gate before merge
153
+ description: >-
154
+ The CI gate, asserted as a required merge protection, so a ruleset
155
+ has one stable Mergify check name to require.
156
+ if:
157
+ - base = <main-branch>
158
+ success_conditions:
159
+ - *gate
160
+
161
+ # ---------------------------------------------------------------------------
162
+ # ADMIN ESCAPE HATCHES — both routed through Mergify.
163
+ #
164
+ # With the `update` rule in ruleset.json, Mergify is the only actor allowed to
165
+ # write to the protected branch. So "an admin merges it by hand" is no longer
166
+ # possible, and the escape hatch has to be an action Mergify takes. There are
167
+ # two, and they are NOT interchangeable.
168
+ # ---------------------------------------------------------------------------
169
+
170
+ # ESCAPE HATCH 1 (preferred): jump the line, keep the tests.
171
+ # The PR still enters the queue and still has to pass CI — it just stops waiting
172
+ # behind everything else. This covers the overwhelming majority of "this is
173
+ # urgent" cases and costs nothing in safety, so reach for it first.
174
+ priority_rules:
175
+ - name: urgent — front of the queue
176
+ conditions:
177
+ - label = urgent
178
+ priority: high
179
+
180
+ # ESCAPE HATCH 2 (break glass): skip the queue entirely.
181
+ # Merges immediately, WITHOUT the queue and WITHOUT the batch's CI run. This is
182
+ # the lever that can put a broken commit on the protected branch, so treat the
183
+ # label as the audited artifact: Mergify records the merge, and GitHub records
184
+ # who applied the label.
185
+ #
186
+ # GitHub cannot restrict who applies a label, and Mergify's `sender-permission`
187
+ # attribute only works for COMMANDS (`@mergifyio …`), not label events — so this
188
+ # rule cannot be technically limited to admins. It is a convention backed by an
189
+ # audit trail, not an enforced permission. If that is not good enough for you,
190
+ # delete this rule and let a genuine emergency go through the OrganizationAdmin
191
+ # bypass in ruleset.json instead, which GitHub does enforce and does audit.
192
+ #
193
+ # TODO: delete this whole rule if you would rather have no queue-skip at all.
194
+ pull_request_rules:
195
+ - name: emergency merge — skips the queue, use only when the queue cannot run
196
+ conditions:
197
+ - base = <main-branch>
198
+ - label = emergency-merge
199
+ - -draft
200
+ actions:
201
+ merge:
202
+ method: merge
203
+ comment:
204
+ message: >-
205
+ Merged via the `emergency-merge` label — this bypassed the merge queue
206
+ and its CI run. Please confirm the branch is healthy.
207
+
208
+ # Who may enqueue. Defaults are `sender-permission >= write` for `queue` and
209
+ # `dequeue`; tighten to `admin` if enqueueing should itself be a privileged act.
210
+ #
211
+ # TODO: delete this block to keep the defaults.
212
+ commands_restrictions:
213
+ queue:
214
+ conditions:
215
+ - sender-permission >= write
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "default",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "conditions": {
6
+ "ref_name": {
7
+ "include": ["~DEFAULT_BRANCH"],
8
+ "exclude": []
9
+ }
10
+ },
11
+ "rules": [
12
+ { "type": "deletion" },
13
+ { "type": "non_fast_forward" },
14
+ {
15
+ "type": "update",
16
+ "parameters": {
17
+ "update_allows_fetch_and_merge": true
18
+ }
19
+ },
20
+ {
21
+ "type": "required_status_checks",
22
+ "parameters": {
23
+ "strict_required_status_checks_policy": false,
24
+ "do_not_enforce_on_create": false,
25
+ "required_status_checks": [
26
+ {
27
+ "context": "Mergify Merge Protections",
28
+ "integration_id": 10562
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ ],
34
+ "bypass_actors": [
35
+ {
36
+ "actor_id": 10562,
37
+ "actor_type": "Integration",
38
+ "bypass_mode": "exempt"
39
+ },
40
+ {
41
+ "actor_id": 1,
42
+ "actor_type": "OrganizationAdmin",
43
+ "bypass_mode": "always"
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,282 @@
1
+ # Branch Protection: the GitHub ruleset
2
+
3
+ Everything GitHub-side that makes the Mergify queue binding. Read this when
4
+ **setting up or changing branch protection** — not needed to debug a stuck PR.
5
+
6
+ Contents:
7
+
8
+ - [Who enforces what](#who-enforces-what) — the bypass-scope problem, and
9
+ what GitHub enforces vs what Mergify enforces
10
+ - [What the rules do](#what-the-rules-do)
11
+ - [Applying it](#applying-it) · [Dry-run first](#dry-run-first) · [Bypass actors](#bypass-actors)
12
+ - [Enforcing queue-only merges](#enforcing-queue-only-merges) — the `update` rule,
13
+ what it breaks, the admin escape hatch, and how to verify
14
+
15
+ ### Who enforces what
16
+
17
+ One ruleset, and it is worth being exact about what it does and does not do —
18
+ this is the part most likely to be misread.
19
+
20
+ **Bypass is granted per *ruleset*, never per rule.** `bypass_actors` sits on the
21
+ ruleset; individual rules have no bypass field. An actor that bypasses one rule
22
+ bypasses *every* rule in that ruleset.
23
+
24
+ That matters because the `update` rule permits only bypass actors to write to the
25
+ branch, so Mergify **must** be a bypass actor or it cannot merge at all. Which
26
+ means Mergify also bypasses `required_status_checks` in the same ruleset. So the
27
+ division of labour is:
28
+
29
+ | Concern | Enforced by |
30
+ |---|---|
31
+ | Nobody but Mergify writes to the branch | **GitHub** — the `update` rule |
32
+ | A red PR does not merge | **Mergify** — `merge_conditions` in `.mergify.yml` |
33
+ | Branch not deleted or force-pushed | **GitHub** — but admins bypass |
34
+
35
+ CI *is* enforced. Just by Mergify, not by GitHub. That is a real property, not a
36
+ gap: the queue will not merge a PR whose `*gate` is red.
37
+
38
+ **Why not split into two rulesets so GitHub checks Mergify too?** It was
39
+ considered and rejected. You can put `required_status_checks` in a second ruleset
40
+ that Mergify does not bypass — but the check being required is
41
+ `Mergify Merge Protections`, whose pass/fail is computed from `*gate` in
42
+ `.mergify.yml`. Weaken the gate and that check goes green along with it, so the
43
+ second ruleset does not actually verify anything independently. It costs a second
44
+ object to manage and buys almost nothing.
45
+
46
+ If you genuinely want GitHub-side CI enforcement independent of `.mergify.yml`,
47
+ the missing piece is not a second ruleset — it is a CI job that **always reports**
48
+ (no `paths:` filter, or an always-run job that reports success when no gated path
49
+ changed). Require that job directly, in a ruleset Mergify does not bypass. Until
50
+ the job always reports, GitHub cannot require it without stranding path-exempt
51
+ PRs, which is the whole reason the Mergify check exists as an intermediary.
52
+
53
+ ### Then why keep `required_status_checks` at all?
54
+
55
+ With `update` active it gates nobody: non-bypass users cannot write regardless,
56
+ and Mergify and admins bypass. It earns its place as a **backstop** — if the
57
+ `update` rule is ever removed or the ruleset stops targeting the branch, the
58
+ required check immediately becomes load-bearing again and ordinary users are
59
+ still gated. Keep it, but do not mistake it for something that constrains
60
+ Mergify's merges. It does not.
61
+
62
+ ### What the rules do
63
+
64
+ | Rule | Why |
65
+ |------|-----|
66
+ | `deletion` | Nobody deletes the protected branch. |
67
+ | `non_fast_forward` | No force-push. The queue's whole model assumes base history only moves forward. |
68
+ | `required_status_checks` → `Mergify Merge Protections` | The one required check. **Require Mergify's check-run, not the raw CI job** — see below. |
69
+ | `strict_required_status_checks_policy: false` | **Mandatory with `batch_size > 1`.** This is GitHub's "Require branches to be up to date before merging"; batches cannot merge with it on. |
70
+ | `update` | **Only bypass actors may write to the branch.** This is what makes the queue mandatory — see [Enforcing Queue-Only Merges](#enforcing-queue-only-merges). Read that section first; it blocks CI bots too. |
71
+
72
+ **Require the Mergify check, not the CI job.** `integration_id: 10562` is
73
+ Mergify's GitHub App, and pinning it means only Mergify can publish the check —
74
+ another app cannot spoof the context name. The raw CI job is the wrong thing to
75
+ require because it is *absent*, not failing, on a path-exempt PR, and a ruleset
76
+ cannot tell "skipped" from "missing". It would strand exactly those PRs. Mergify's
77
+ check-run carries the same exemption logic and is always produced, so it is
78
+ green-or-red but never missing.
79
+
80
+ Verify Mergify's app id rather than trusting this document:
81
+
82
+ ```bash
83
+ gh api /apps/mergify --jq '{id, slug, name}' # → 10562
84
+ ```
85
+
86
+ ### Applying it
87
+
88
+ `gh ruleset` is **read-only** (`list` / `view` / `check`). Creating and updating
89
+ goes through `gh api`.
90
+
91
+ ```bash
92
+ # Repository-level
93
+ gh api -X POST /repos/<owner>/<repo>/rulesets --input ruleset.json
94
+
95
+ # Update an existing one (find the id with: gh ruleset list)
96
+ gh api -X PUT /repos/<owner>/<repo>/rulesets/<id> --input ruleset.json
97
+ ```
98
+
99
+ Consider applying it once with `"enforcement": "evaluate"` first (see
100
+ [Dry-run first](#dry-run-first)) — the `update` rule is the one most likely to
101
+ block something you forgot about.
102
+
103
+ **Org-level** rulesets cover many repos at once and need one extra condition —
104
+ otherwise the payload is identical:
105
+
106
+ ```bash
107
+ # add to conditions: "repository_name": {"include": ["~ALL"], "exclude": []}
108
+ gh api -X POST /orgs/<org>/rulesets --input ruleset.json
109
+ ```
110
+
111
+ An org-level ruleset **cannot be edited from the repository**, only viewed. If
112
+ `gh ruleset list` shows `source_type: Organization`, take changes to the org.
113
+
114
+ ### Dry-run first
115
+
116
+ Set `"enforcement": "evaluate"` instead of `"active"` to have GitHub record what
117
+ *would* have been blocked without blocking it. Apply, let a few PRs land, then
118
+ read the evaluations:
119
+
120
+ ```bash
121
+ gh api '/repos/<owner>/<repo>/rulesets/rule-suites?per_page=20' \
122
+ --jq '.[] | {actor_name, ref, result, pushed_at}'
123
+ ```
124
+
125
+ `result` is `pass` / `fail` / `bypass`. Flip to `"active"` once it reads the way
126
+ you expect. The template ships as `"active"` deliberately — a template left in
127
+ `evaluate` and forgotten is an unprotected branch that looks protected.
128
+
129
+ ### Bypass actors
130
+
131
+ | `actor_type` | `actor_id` | Note |
132
+ |---|---|---|
133
+ | `Integration` | app id (Mergify = `10562`, GitHub Actions = `15368`) | |
134
+ | `OrganizationAdmin` | `1` | `actor_id` is ignored for this type; `null` also works |
135
+ | `RepositoryRole` | `5` = repository admin | Other role ids are not officially documented — copy them from an existing ruleset |
136
+ | `Team` | team id | |
137
+ | `DeployKey` | `null` | |
138
+
139
+ `bypass_mode` is one of:
140
+
141
+ | Mode | Behaviour |
142
+ |---|---|
143
+ | `always` | Bypasses everywhere, **and writes an audit-log entry** |
144
+ | `pull_request` | May bypass only through a PR (branch rulesets only) |
145
+ | `exempt` | Rules are not evaluated for this actor at all — **no audit entry** |
146
+
147
+ Prefer `always` over `exempt` for anything you want a record of. `exempt` is the
148
+ quieter setting and that is exactly its problem on a break-glass path.
149
+
150
+ Exception: Mergify's own Integration actor (10562) must be `exempt` on every
151
+ ruleset protecting the base. GitHub's async merge API, which lands
152
+ GitHub-native stacks, honors no other mode, so the queue cannot land a stack
153
+ with `always`. Keep human break-glass actors such as `OrganizationAdmin` on `always`.
154
+
155
+ Discover ids you don't know by reading a ruleset that already has the actor you
156
+ want:
157
+
158
+ ```bash
159
+ gh api /repos/<owner>/<repo>/rulesets/<id> --jq '.bypass_actors'
160
+ ```
161
+
162
+ Note that `bypass_actors` is only returned if you have write access to the
163
+ ruleset — an empty list may mean "no permission", not "no bypasses".
164
+
165
+ ## Enforcing Queue-Only Merges
166
+
167
+ Requiring a status check does **not** get you this. Once the check goes green,
168
+ anyone with write access can press "Merge pull request" and the queue never sees
169
+ the PR. To make the queue mandatory you need the ruleset's **`update`** rule:
170
+
171
+ ```json
172
+ { "type": "update", "parameters": { "update_allows_fetch_and_merge": true } }
173
+ ```
174
+
175
+ GitHub calls this "Restrict updates": *only users with bypass permission can push
176
+ to matching branches*. A PR merge is a write to the branch, so with `update` on
177
+ the default branch and **only Mergify (plus the admin break-glass) bypassing**,
178
+ Mergify becomes the only thing that routinely puts a commit on `main`. The merge
179
+ button fails for everyone else. That is the enforcement — nothing in
180
+ `.mergify.yml` can do it.
181
+
182
+ `update_allows_fetch_and_merge` covers a fork's branch pulling from its upstream,
183
+ which does not apply to a protected default branch either way; `true` matches
184
+ GitHub's UI default.
185
+
186
+ ### What this breaks, and you must fix
187
+
188
+ `update` blocks **every** non-bypass writer, not just humans clicking merge.
189
+ Before enabling it, inventory anything that pushes to the protected branch and
190
+ add it as a bypass actor, or it silently starts failing:
191
+
192
+ - release automation that commits a version bump or CHANGELOG
193
+ - `actions/github-script` or bots pushing back to `main`
194
+ - tag-and-push release jobs
195
+ - anything using the default `GITHUB_TOKEN` to push
196
+
197
+ ```bash
198
+ # does anything push to the protected branch?
199
+ grep -rnE 'git push|peter-evans/create-pull-request|github-script' .github/workflows/
200
+ ```
201
+
202
+ A GitHub Actions push needs `{"actor_type": "Integration", "actor_id": 15368}`
203
+ (GitHub Actions app) as a bypass actor. Verify with `gh api /apps/github-actions --jq .id`.
204
+
205
+ ### The admin escape hatch, routed through Mergify
206
+
207
+ Once Mergify is the only writer, "an admin merges it by hand" no longer exists.
208
+ The escape hatch has to be something *Mergify* performs. The template ships two,
209
+ and they are not interchangeable:
210
+
211
+ | | Lever | Skips CI? | Enforced? |
212
+ |---|---|---|---|
213
+ | **1. Jump the line** | `priority_rules` + `urgent` label | No — still queued and tested | n/a |
214
+ | **2. Break glass** | `pull_request_rules` merge action + `emergency-merge` label | **Yes** | Convention + audit trail only |
215
+ | **3. Lockout escape** | `OrganizationAdmin` bypass in the ruleset | Yes | Yes, by GitHub |
216
+
217
+ **Reach for (1) first.** Most "this is urgent" is impatience with the queue, not
218
+ a need to skip testing. Priority costs nothing in safety.
219
+
220
+ **(2) cannot be limited to admins**, and you should know that before relying on
221
+ it. GitHub cannot restrict who applies a label, and Mergify's `sender-permission`
222
+ attribute only works for `@mergifyio …` **commands**, not label events. So the
223
+ rule is a convention with an audit trail — GitHub records who applied the label,
224
+ Mergify records and comments on the merge — not an enforced permission. There is
225
+ no `@mergifyio merge` command to gate instead; the command set is `queue`,
226
+ `dequeue`, `requeue`, `rebase`, `refresh`, `update`, `squash`, `backport`, `copy`.
227
+
228
+ **Keep (3).** If Mergify is the only actor allowed to write to `main` and Mergify
229
+ has an outage, the repository is frozen — nobody can merge anything, including
230
+ the fix. `OrganizationAdmin` bypass is the way out. Use `bypass_mode: always`,
231
+ not `exempt`: `always` writes a bypass entry to the audit log, `exempt` skips the
232
+ rules without recording anything. For a break-glass path you want the record.
233
+
234
+ Drop the `OrganizationAdmin` entry only if you consciously accept the lockout
235
+ risk. Do not drop it by accident.
236
+
237
+ You can also tighten who may enqueue at all — `queue` and `dequeue` default to
238
+ `sender-permission >= write`:
239
+
240
+ ```yaml
241
+ commands_restrictions:
242
+ queue:
243
+ conditions:
244
+ - sender-permission >= admin
245
+ ```
246
+
247
+ ### Verify it actually enforces
248
+
249
+ The JSON looking right is not evidence, and the two failure directions need
250
+ separate tests. Prove the **allowed** path first — a ruleset strict enough to
251
+ block humans can also block Mergify if a bypass id is wrong, and you would rather
252
+ discover that before you can no longer merge the fix.
253
+
254
+ ```bash
255
+ gh ruleset list --repo <owner>/<repo> # both rulesets present? whose are they?
256
+ gh ruleset check main # confirm both apply to this branch
257
+
258
+ # 1. the allowed path still works
259
+ # enqueue a PR with `@mergifyio queue`, then:
260
+ mergify queue show <number> -v # watch it through to merge
261
+
262
+ # 2. the blocked path is blocked
263
+ gh pr create --title "ruleset probe" --body "do not merge"
264
+ gh pr merge <PR> --merge # MUST fail for a non-bypass user
265
+ ```
266
+
267
+ Expect a rejection naming the ruleset. **If it merges anyway**, the usual causes,
268
+ in order: you are a bypass actor yourself (org admins are — test with a non-admin
269
+ account); the ruleset is not targeting the branch (`gh ruleset check main`); or
270
+ `update` was left out of the queue-only ruleset, in which case the required check
271
+ is the only gate and a green check lets anyone merge.
272
+
273
+ Audit what has been landing and by whom:
274
+
275
+ ```bash
276
+ gh api '/repos/<owner>/<repo>/rulesets/rule-suites?per_page=30' \
277
+ --jq '.[] | select(.result != "pass") | {actor_name, result, pushed_at}'
278
+ ```
279
+
280
+ `result: bypass` rows are the escape hatches being used. If they are routine,
281
+ the queue is too slow or too strict — fix that rather than normalising bypass.
282
+