@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,150 @@
1
+ # Release flows
2
+
3
+ > Read when: choosing a predefined flow, the target repository has `.release/flow.md`, a run was invoked with `--flow` or `--save-flow`, or a flow failed validation.
4
+
5
+ A release flow records how a repository varies the release, so a run follows it
6
+ without rediscovering or re-asking it. It fills slots of the fixed skeleton in
7
+ [../SKILL.md](../SKILL.md). It cannot add, remove, or reorder stages, relax a
8
+ run invariant, or change either skill's manual-only invocation.
9
+
10
+ ## Predefined flows (shipped with this skill)
11
+
12
+ The skill ships templates in `flows/`. List them with:
13
+
14
+ ```bash
15
+ node <skillsRoot>/resolve-release/scripts/flow.mjs list
16
+ ```
17
+
18
+ | Flow | For |
19
+ |---|---|
20
+ | `root-tag-npm` | one repository version, published by pushing `vX.Y.Z` |
21
+ | `workspace-npm` | independently versioned npm workspaces, package-scoped dispatch publisher |
22
+ | `cloud-run` | Cloud Run candidate at 0%, validated, shifted to 100% in one step |
23
+ | `cloud-run-canary` | Cloud Run candidate at 0%, validated, exposed through canary steps (10%, 50%; 15-minute holds) |
24
+
25
+ A predefined flow carries only what is true for every repository of its kind.
26
+ Repository facts — publisher workflow names, package names, the canary health
27
+ check — come from the project.
28
+
29
+ ## Which flow a run uses
30
+
31
+ 1. **The project's `.release/flow.md`**, when present. It usually starts from a
32
+ predefined flow with `extends: <name>` and adds only its own slots and steps.
33
+ 2. Otherwise **`--flow <name>`** at invocation: that predefined flow as is.
34
+ 3. Otherwise **no flow**: preflight detection alone, exactly as before flows
35
+ existed. A predefined flow is never picked by guessing.
36
+
37
+ `--flow` with a project flow present is a hand-back: the project flow wins, and
38
+ choosing a different base is an edit to its `extends`. Both modes accept
39
+ `--flow`.
40
+
41
+ ## File format
42
+
43
+ YAML frontmatter of **settings**, then optional `##` sections of **steps**.
44
+ Text before the first `##` is free prose. Validate the effective flow with:
45
+
46
+ ```bash
47
+ node <skillsRoot>/resolve-release/scripts/flow.mjs validate [--flow <name>] --json
48
+ ```
49
+
50
+ Validation rejects unknown settings, unknown sections, skeleton or invocation
51
+ keys (`trunk`, `releaseBranch`, `stages`, `skip`, `confirm`,
52
+ `disable-model-invocation`, …), an unknown `extends`, a predefined flow that
53
+ extends another, and inconsistent values in the merged flow. An invalid flow is
54
+ a hand-back; never run against it.
55
+
56
+ ## Settings (slots)
57
+
58
+ | Setting | Values | Fills |
59
+ |---|---|---|
60
+ | `extends` | a predefined flow name (project flows only) | the base this flow starts from |
61
+ | `description` | text | what the flow is for |
62
+ | `route` | `root-tag` · `workspace-npm` · `cloud-run` | the release type preflight must find |
63
+ | `publisher` | mapping of scalars, e.g. `workflow`, `input`, `ownsTags` | the publisher and its inputs |
64
+ | `packages` | `exclude: [...]`, `publishLast: [...]` (workspace-npm only) | package set and dispatch order |
65
+ | `changelog` | `root` · `package-scoped` | heading format |
66
+ | `registry` | `https://…` | `--registry` for every npm command |
67
+ | `ask` | list of `{ id, question, options?, default? }` | extra preflight choices |
68
+ | `exposure` | `full` · `canary` · `n/a` | default exposure (`n/a`: no traffic to split) |
69
+ | `canary` | `{ steps: [10, 50], holdMinutes: 15, healthCheck: <cmd> }` | canary plan (cloud-run only) |
70
+ | `dark` | `on` · `off` · `n/a` | default dark launch |
71
+ | `flagRegistry` | repository path | flag registry for dark launch |
72
+ | `required` | `[canary]`, `[dark]` | choices the shortcut must not override |
73
+
74
+ When a project extends a predefined flow, its settings override the base;
75
+ `publisher`, `packages`, and `canary` merge key by key; `ask` items merge by
76
+ `id`. A slot pins a fact the run would otherwise infer; the pinned value is
77
+ still verified against the tree and provider. A flow that names a publisher the
78
+ repository does not have is a refusal, not an override.
79
+
80
+ ## Steps
81
+
82
+ Sections, each a list of `- ` steps (repository commands or checks, in order).
83
+ With `extends`, the base flow's steps at a point run first, then the project's.
84
+
85
+ | Section | Runs | A failure is |
86
+ |---|---|---|
87
+ | `before-cut` | before the cut commit | a hand-back, nothing changed remotely |
88
+ | `after-merge` | after the merged `main` SHA is verified | a hand-back, nothing published or exposed |
89
+ | `before-exposure` | before the first traffic shift | pre-exposure: production untouched |
90
+ | `after-publish` | after each artifact's registry proof | a hand-back naming what already shipped |
91
+ | `after-live` | after live verification, before the final tag | a failed live check: automatic rollback |
92
+ | `hand-back-if` | conditions, checked at preflight and before each outward action | a stop before that action |
93
+
94
+ Run only commands the repository documents; a step never authorizes an action
95
+ the skeleton does not already contain (no extra deploys, tag moves, or flag
96
+ flips).
97
+
98
+ ## Choices and precedence
99
+
100
+ Invocation option > flow > preflight answer. Full mode asks only what is still
101
+ unresolved, plus every `ask:` item not answered by the invocation. Shortcut
102
+ mode (`/rush-release`) asks nothing: exposure `full`, dark `off`, each `ask:`
103
+ item takes its `default`; `required` canary/dark, or an `ask:` item with no
104
+ default, is a refusal that points to `/resolve-release`.
105
+
106
+ ## Identity
107
+
108
+ Record the effective flow's `sha256` (it covers the predefined base and the
109
+ project file) in the plan and receipt. On resume, a different hash invalidates
110
+ the receipt: a run never continues under a flow it did not show — including one
111
+ whose base changed in a skills update.
112
+
113
+ ## Saving a flow
114
+
115
+ `--save-flow` (full mode) writes the **project** file: `extends` for the base in
116
+ use, the project's own slots and steps, and this run's exposure, canary, dark,
117
+ and flag-registry choices. Base slots and steps stay in the skill; per-release
118
+ `ask:` answers are not saved:
119
+
120
+ ```bash
121
+ node <skillsRoot>/resolve-release/scripts/flow.mjs resolve --mode full --json … > /tmp/release-choices.json
122
+ node <skillsRoot>/resolve-release/scripts/flow.mjs render [--flow <name>] < /tmp/release-choices.json > .release/flow.md
123
+ ```
124
+
125
+ Write it only after the release finishes, on its own branch from the new
126
+ `main`, and open a separate PR. It is never part of the metadata cut.
127
+
128
+ ## Example: extending `workspace-npm`
129
+
130
+ ```markdown
131
+ ---
132
+ extends: workspace-npm
133
+ publisher: { workflow: publish.yml, input: package, ownsTags: true }
134
+ packages:
135
+ exclude: [pi-better-read-aloud, navigator, sandbox-core]
136
+ publishLast: [pi-better-harness]
137
+ ask:
138
+ - id: bundle-bump
139
+ question: Should pi-better-harness bundle the new component versions?
140
+ options: [yes, no]
141
+ ---
142
+
143
+ ## after-publish
144
+ - `pi install npm:<pkg>` succeeds
145
+ ```
146
+
147
+ The base supplies the route, package-scoped changelog, registry, verify and
148
+ pack dry-run steps, the `npm view` proof, and the first-publish hand-back. With
149
+ this flow, `/rush-release` refuses (the `bundle-bump` question has no default)
150
+ and `/resolve-release` asks it once at preflight.
@@ -0,0 +1,154 @@
1
+ # Preflight
2
+
3
+ > Read when: starting a run; loading the release flow, detecting trunk, publisher, deployment mode, and the files that carry the version, then resolving the release choices.
4
+
5
+ Preflight outputs trunk `main`, publishers, deployment mode, release commands,
6
+ the files that carry the version, the release flow, and the resolved choices. It
7
+ does not pick the SHA, bump the version, or push. Resolve **facts** from
8
+ repository and provider state without asking the human to confirm any of them.
9
+ A non-choice that cannot be inferred takes its deterministic default in
10
+ [cut.md](cut.md), or the value the user stated at invocation; never a preflight
11
+ question. Only the **choices** in section 5 are ever asked, and only in full mode.
12
+
13
+ ## 0. Release flow
14
+
15
+ ```bash
16
+ node <skillsRoot>/resolve-release/scripts/flow.mjs validate [--flow <name>] --json
17
+ ```
18
+
19
+ The effective flow is the project's `.release/flow.md` (merged with the
20
+ predefined flow it `extends`), else the predefined flow named by `--flow`.
21
+ Neither is normal: continue with detection alone, and never pick a predefined
22
+ flow by guessing. An invalid flow
23
+ is a hand-back naming each error; never run a release against a flow that
24
+ failed validation or guess what it meant. A valid flow's slots pin what the
25
+ sections below would otherwise infer, and are still verified against the
26
+ repository: a `route` or `publisher` the tree does not support is a refusal.
27
+ Record its `sha256`. Details: [flows.md](flows.md).
28
+
29
+ ## 1. Trunk
30
+
31
+ Fetch `origin/main` and all remote tags. Verify the release trunk is `main` from those fetched refs
32
+ (`origin/main` exists). A repo whose production branch is `master` or `release`
33
+ is not this workflow.
34
+
35
+ ## 2. Publisher
36
+
37
+ Detect how a tag becomes a shipped artifact. Prefer what the human named;
38
+ otherwise look at the tree:
39
+
40
+ Before treating a root `package.json` as the release identity, inspect its
41
+ `private` and `workspaces` fields, the workspaces' versions and exact bundle
42
+ pins, and the publish workflow's parsed triggers and package inputs. If the
43
+ root is private, packages are independently versioned, and a package-scoped
44
+ `workflow_dispatch` publishes them from their manifests, select the
45
+ **workspace npm** route in [workspace-npm.md](workspace-npm.md). A dispatcher
46
+ is not a tag-triggered publisher: do not infer one from the presence of npm or
47
+ `publishConfig`. If the package input, publish order, or tag ownership is
48
+ unclear, stop rather than cut a private root tag. This route handles its own
49
+ candidate, versions, plan record, cut, merge, and publish gates.
50
+
51
+ | Signal | Publisher |
52
+ |---|---|
53
+ | Cloud Build production trigger matching only `v*-rc.*`, whose prod path emits immutable candidate coordinates after `--no-traffic` | `cloudbuild`, mode `cloud-run-staged` |
54
+ | public root `package.json` with a tag/release-triggered publish workflow, `publishConfig`, or an explicit root npm release | `npm` |
55
+ | both | watch both |
56
+ | neither, and the human did not name one | refuse — nothing to watch |
57
+
58
+ Cloud Build presence alone is not a staged contract. For `cloud-run-staged`,
59
+ verify from repository policy and live trigger configuration:
60
+
61
+ - the production trigger matches RC tags and excludes the final `vX.Y.Z` tag;
62
+ - each affected service deploys an immutable revision with `--no-traffic` and
63
+ publishes one receipt binding RC tag, merged SHA, revision, image digest, and
64
+ candidate URL;
65
+ - `golden-paths.json` defines read-only `prod-preview` and `prod-active`
66
+ profiles with at least one eligible path;
67
+ - exact inspect, traffic-shift, rollback, and candidate-delete commands are
68
+ documented, including service dependency order;
69
+ - any durable processing affected by a shift has exact pause, quiescence,
70
+ resume, and restoration checks;
71
+ - for canary exposure only: an exact command that splits traffic between the
72
+ candidate and the incumbent by percentage, and a read-only health check to
73
+ judge each hold ([canary.md](canary.md)).
74
+
75
+ Refuse staged release when any applicable item is absent; never improvise
76
+ production commands. Record `publisher` as `cloudbuild`, `npm`, or `both` and
77
+ `deploymentMode` as `artifact-only` or `cloud-run-staged`. If a GitHub Actions
78
+ workflow publishes on `release: published` rather than on tag push, note that
79
+ `gh release create` is required at publish time.
80
+
81
+ ## 3. Version files
82
+
83
+ The root identity list below applies only to root-tag and staged Cloud Run
84
+ releases. Workspace npm uses the selected package manifests, exact bundle pins,
85
+ lockfile, and repository changelog as described in [workspace-npm.md](workspace-npm.md).
86
+
87
+ First check for `skills/distribution/manifest.json` with an exact `releaseVersion`
88
+ and `skills/distribution/scripts/distribution.mjs`. That manifest is the repository
89
+ release identity when present; record it and use the distribution-aware cut in
90
+ `apply.mjs`. It takes precedence over a private root `package.json` with no version.
91
+
92
+ Otherwise, list identity files present at the repo root (and only those):
93
+
94
+ - `package.json` (and `package-lock.json` when it exists)
95
+ - `pyproject.toml`
96
+ - `VERSION`
97
+
98
+ Do not bump other nested workspace packages unless the human names them. The cut
99
+ must stay metadata-only. A distribution-aware cut may also update trusted runtime
100
+ identity constants, test fixtures that pin that identity, and deterministic generated
101
+ policy/inventory artifacts; those are version metadata, not product behavior.
102
+
103
+ ## 4. Baseline
104
+
105
+ Read the current version from those files when present. List annotated/lightweight
106
+ release tags matching `vMAJOR.MINOR.PATCH` with no prerelease. The highest such
107
+ tag is the changelog baseline. A prerelease (`v1.2.0-rc.1`) is not a baseline.
108
+
109
+ ## Prepared-metadata reuse
110
+
111
+ Only an explicit human keep-version/reuse instruction selects this route; a
112
+ failed RC or an input file does not. Record the instruction and the supplied
113
+ `prepared-release-metadata/v1` RC provenance, or v2's explicit `pre-tag` /
114
+ `cloudRunRC` provenance. A v2 `pre-tag` input requires artifact-only root npm
115
+ publishing, no private/workspace root, and separately verified stopped-before-
116
+ tagging/publication evidence. Record the exact effective registry from the
117
+ existing flow or publisher configuration; if it cannot be established, stop
118
+ rather than guessing or reading credential payloads. Keep the new CI-green
119
+ target separate
120
+ from historical cut/merge identities. No reuse-specific provider verification
121
+ is delegated to local git: the cut stage must establish the mandatory fresh
122
+ PR, main, CI and reviewed-notes bindings in
123
+ [prepared-metadata.md](prepared-metadata.md). Neither this input nor a previous
124
+ attempt grants execution permission. Existing publisher and flow gates apply.
125
+
126
+ ## 5. Choices
127
+
128
+ Detect the repository hints first: canary support (the Cloud Run contract
129
+ declares percentage-split commands, hold, and a health check) and a flag
130
+ registry. Then resolve:
131
+
132
+ ```bash
133
+ node <skillsRoot>/resolve-release/scripts/flow.mjs resolve --mode <full|shortcut> [--flow <name>] --json \
134
+ [--exposure …] [--canary-steps …] [--hold-minutes …] [--dark …] \
135
+ [--health-check <repo-declared cmd>] [--flag-registry <path>] \
136
+ [--repo-canary] [--repo-flag-registry] [--answer <id>=<value>]…
137
+ # exit 0 resolved · 4 questions pending · 3 refused · 1 invalid flow
138
+ ```
139
+
140
+ - **Shortcut mode** (`/rush-release`) asks nothing: exposure `full`, dark `off`,
141
+ flow questions answered by their defaults. Exit 3 is a hand-back that points
142
+ to `/resolve-release`.
143
+ - **Full mode** (`/resolve-release`): exit 4 returns `questions`, each with its
144
+ options and a suggested default. Ask them together, once, as choices; rerun
145
+ with `--answer` until exit 0. Canary steps and hold are asked only after
146
+ canary is chosen. Exit 3 is a hand-back with the refusals.
147
+
148
+ Precedence is invocation option > release flow > answer. Canary needs the
149
+ repository-declared health check and split commands; dark launch needs a flag
150
+ registry — without them the choice is refused, not improvised. Record the
151
+ resolved `choices` and `sources` in the plan and receipt.
152
+
153
+ Preflight succeeds when trunk, publisher, version files, baseline, flow, and
154
+ choices are recorded. Proceed to [candidate.md](candidate.md).
@@ -0,0 +1,260 @@
1
+ # Reuse prepared metadata
2
+
3
+ > Read when: the human explicitly chose to keep an unused final version after a failed RC or a Node/npm attempt stopped before tagging/publication, and approved reusing its already-merged metadata. This is a branch of the existing cut stage, not a release executor or a resume of the failed attempt.
4
+
5
+ Do not infer consent from a failed RC, a file, a flow default, or a prior receipt.
6
+ Without explicit human approval for reuse, follow the normal create-and-deliver
7
+ cut. This capability does not authorize release execution when the task only
8
+ asked to implement or plan it.
9
+
10
+ ## Input
11
+
12
+ After preflight and candidate selection, supply this JSON to
13
+ `plan.mjs --sha <full frozen new target SHA> --prepared-metadata <file> --json`
14
+ (add `--cloud-run` for the staged route). The API equivalent is
15
+ `planRelease({ sha, preparedMetadata, ... })`. No version override is added.
16
+
17
+ V1 retains the existing strict RC provenance below. For a genuine Node/npm
18
+ attempt without an RC, use the explicit v2 `pre-tag` variant described next;
19
+ do not fabricate an RC identity.
20
+
21
+ ```json
22
+ {
23
+ "schema": "prepared-release-metadata/v1",
24
+ "repository": "owner/repo",
25
+ "version": "0.7.0",
26
+ "metadataPr": 123,
27
+ "cutSha": "1111111111111111111111111111111111111111",
28
+ "mergeSha": "2222222222222222222222222222222222222222",
29
+ "previousAttempt": {
30
+ "receiptId": "failed-attempt-1",
31
+ "receiptSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
32
+ "candidateTag": "v0.7.0-rc.1",
33
+ "candidateSha": "2222222222222222222222222222222222222222"
34
+ }
35
+ }
36
+ ```
37
+
38
+ All fields are required; unknown fields refuse. `metadataPr` is a positive PR
39
+ number in `repository`. SHAs are full lowercase 40-hex commit identities;
40
+ `receiptSha256` is a lowercase 64-hex historical digest supplied with the
41
+ previous attempt's provenance, not a path to load. `receiptId` is a safe opaque
42
+ identifier (1-128 ASCII letters, digits, dots, underscores or hyphens, beginning
43
+ with a letter or digit). `version` is canonical `x.y.z`. The previous RC must
44
+ be for that version and its source must equal the historical `mergeSha`.
45
+
46
+ The new `--sha` is the release source, not the historical cut or merge. Select
47
+ it through the existing exact-tree CI-green main candidate gate. New code and
48
+ reviewed changelog corrections may have landed since the old metadata merge.
49
+ Never pass an arbitrary unreviewed SHA just because it descends from that merge.
50
+
51
+ ## Node/npm Before Tagging
52
+
53
+ For a publishable root npm package whose prior attempt stopped before final
54
+ tagging or publication, use this v2 input without `--cloud-run`:
55
+
56
+ ```json
57
+ {
58
+ "schema": "prepared-release-metadata/v2",
59
+ "repository": "owner/node-package",
60
+ "version": "1.3.0",
61
+ "metadataPr": 42,
62
+ "cutSha": "1111111111111111111111111111111111111111",
63
+ "mergeSha": "2222222222222222222222222222222222222222",
64
+ "previousAttempt": {
65
+ "kind": "pre-tag",
66
+ "receiptId": "stopped-before-tagging-1",
67
+ "receiptSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
68
+ "sourceSha": "3333333333333333333333333333333333333333"
69
+ }
70
+ }
71
+ ```
72
+
73
+ V2 has exactly two previous-attempt variants. `pre-tag` requires only `kind`,
74
+ `receiptId`, `receiptSha256`, and `sourceSha`. `cloudRunRC` requires only `kind`,
75
+ `receiptId`, `receiptSha256`, `candidateTag`, and `candidateSha`, with the same RC
76
+ binding and ordinal rules as v1. Missing, null, mixed, or unknown fields refuse.
77
+ V1 remains backward compatible; its RC fields are not made optional.
78
+
79
+ The pre-tag planner resolves the previous full source commit and proves
80
+ `metadata.mergeSha -> previousAttempt.sourceSha -> plan.sha` ancestry; equality
81
+ is allowed. It returns `candidateTag: null` and a named npm artifact, not a
82
+ synthetic RC. Preflight must independently prove artifact-only, root-tag npm
83
+ publishing and the previous failed/canceled attempt's pre-publication state.
84
+ The input's claim alone proves neither failure nor absence of publication.
85
+
86
+ Require a publishable root `package.json`, not a private or workspace root.
87
+ Bind its package name across the original cut, previous source, and new target.
88
+ When present, `package-lock.json` must use integer format 2 or 3, with top-level
89
+ and `packages[""]` name/version identities matching that root. The supported
90
+ identity-file set remains unchanged. Original-cut scripts, dependency edges,
91
+ resolved versions, integrity values and other non-version metadata cannot
92
+ change; later reviewed code and dependency fixes remain eligible. Node-only
93
+ inspection must not require Python. It requires Node 22+ with JSON parser
94
+ numeric-source support: strict UTF-8 blobs are compared through fully tagged
95
+ JSON trees that retain original numeric tokens before JavaScript rounding.
96
+ Equivalent ordinary decimal/exponent spellings compare exactly, while underflow
97
+ and rounded-fraction changes cannot disappear. Signed zero remains distinct;
98
+ nonzero tokens with explicit exponents outside the safe-integer range require
99
+ identical numeric source text. Nonfinite values and unsafe integer Numbers
100
+ refuse. Input and package/lock versions use canonical safe-integer semantic
101
+ version components, matching the npm gate. Independently versioned workspaces
102
+ remain on their existing dispatcher route, not this capability.
103
+
104
+ An existing final tag blocks a new-source attempt even if the npm version is
105
+ absent or the tag points at the historical source. An npm publish failure after
106
+ final tagging is not a pre-tag attempt; preserve the tag and use the existing
107
+ failure/resume policy rather than retagging or claiming this route can recover it.
108
+
109
+ The planner makes no npm or credential calls. Before final tagging, the publish
110
+ stage must separately establish registry-version absence using the bounded
111
+ [read-only npm gate](publish.md#node-pre-tag-registry-gate). Registry and Git
112
+ observations do not reserve names or authorize publication.
113
+
114
+ ## Planner checks and limits
115
+
116
+ The planner is read-only, apart from its stdout. It proves from real git objects:
117
+
118
+ - the declared GitHub `origin` identity matches `repository` (canonical HTTPS,
119
+ SCP-style SSH or `ssh://git@github.com/` URL);
120
+ - the original single-parent cut changes only root version identities and
121
+ `CHANGELOG.md`, with no package scripts, dependency, lock dependency or other
122
+ non-version edits hidden in identity files;
123
+ - the cut is an ancestor of its merge and their whole trees are equal;
124
+ - that merge is an ancestor of the new frozen target;
125
+ - the supported root identity file set is unchanged and every version agrees
126
+ at the historical cut and new target, including the lock's top-level version,
127
+ `packages[""].version` when present, and package/lock name identity; for Python,
128
+ the actual project name and exactly one matching uv editable or virtual root
129
+ at `.` with the requested version;
130
+ - there is one nonempty dated release section for that version at both sources;
131
+ - a successful fresh `git ls-remote --tags origin` inspection proves the exact
132
+ final tag absent. Remote, local and historical RC ordinals all count as spent.
133
+ For staged releases, a second exact-ref inspection proves both final and
134
+ proposed RC tags absent. Errors, timeouts and ambiguous output block.
135
+
136
+ Supported identity files are root `package.json`, `package-lock.json`, `VERSION`,
137
+ static `[project]` / `[tool.poetry]` versions in `pyproject.toml`, and a root
138
+ `uv.lock` (lock format version 1) belonging to that Python project. TOML is parsed
139
+ structurally, including project name and uv package source; adding a lock filename
140
+ to the metadata paths alone is not proof. The uv root must have the exact project
141
+ name and exactly `source = { editable = "." }` or `source = { virtual = "." }`.
142
+ Missing, duplicate, foreign, mixed, extra-key or non-root sources refuse at the
143
+ parent, cut and target. Both representations prove the same root identity;
144
+ accepting a virtual root does not grant execution authority or change context
145
+ policy. The historical parent may have a stale root version (for example, project
146
+ `0.6.2` with lock root `0.4.0` repaired to `0.7.0` at the cut). Only that identified
147
+ root's version is excluded from the historical lock comparison: every other
148
+ package, dependency edge, requirement, source, hash and lock field must remain
149
+ structurally unchanged, including the root source. Switching between editable
150
+ and virtual across the historical cut refuses even though each shape is valid
151
+ individually. Cut and target root versions must equal the requested
152
+ version. The target must retain the historical prepared project name and exact
153
+ root source mode; a coordinated rename or editable/virtual switch is not part of
154
+ this reuse capability. Reviewed dependency changes after the historical cut are allowed;
155
+ they do not exempt the target from root identity validation.
156
+
157
+ Python metadata reuse requires `python3` 3.11+ with standard-library `tomllib`
158
+ on `PATH`. Prepared TOML blobs are acquired from Git as raw bytes with a
159
+ five-second timeout and an 8 MiB output limit, then decoded as strict UTF-8 before
160
+ TOML parsing. Invalid octets refuse rather than becoming replacement characters.
161
+ The planner starts only fixed parser code with `-I -S`, passes raw bytes through
162
+ stdin, and bounds each parse to five seconds and 8 MiB of input/output.
163
+ Metadata-only comparison uses a type-tagged tree for every scalar and container;
164
+ integer-to-float changes cannot disappear through JSON serialization, while
165
+ unchanged finite floats remain valid. The uv lock format must be integer `1`, not
166
+ float `1.0`. Missing Python/tomllib, malformed TOML, process errors, non-JSON TOML
167
+ values, nonfinite numbers, integers outside the lossless JSON range and exceeded
168
+ bounds all refuse with sanitized acquisition/parser errors. No Python is invoked
169
+ for npm-only reuse, and normal create-cut planning and application are unchanged.
170
+
171
+ Identity files must be regular non-executable files. Workspace npm is not this route.
172
+ Distribution-aware cuts (`skills/distribution/manifest.json`) have a wider
173
+ generated metadata surface and refuse reuse until a dedicated verifier exists;
174
+ normal distribution cuts are unchanged. `--dark-flags` refuses in reuse mode:
175
+ notes must already be reviewed in the target, not generated on this path.
176
+
177
+ The planner does **not** prove GitHub PR state, approval, required checks, CI,
178
+ remote main membership, publisher configuration, old receipt authenticity, or
179
+ execution authorization. A successful local plan is not permission to tag.
180
+ Tag absence is an observation, not a reservation; re-inspect immediately before
181
+ any tag creation. Do not delete or move an old RC even when it failed.
182
+
183
+ ## Mandatory Cut-Stage Verification
184
+
185
+ The existing cut stage chooses exactly one route: create and deliver new metadata,
186
+ or verify already-prepared metadata. For `metadata.mode: reuse-prepared`, do all
187
+ of the following before publication, and record the named stage output:
188
+
189
+ 1. `preparedMetadataApproval`: record the human's explicit keep-version/reuse
190
+ instruction and the exact repository, version, new target SHA and plan it
191
+ covers. Metadata input and `previousAttempt` are provenance, not authorization.
192
+ 2. `historicalMetadataVerification`: use fresh provider evidence in the canonical
193
+ repository to prove `metadataPr` merged into main, its head equals `cutSha`,
194
+ its merge identity equals `mergeSha`, and it passed the repository's required
195
+ review/delivery policy. Record provider coordinates and observation time.
196
+ 3. `releaseSourceVerification`: fetch main and use the existing candidate/CI
197
+ gate for the exact new `plan.sha`. Record remote main SHA, ancestry result,
198
+ required CI/queue run identities, tree/proof binding and freshness. Never
199
+ substitute green evidence from the old cut, failed RC or another target.
200
+ 4. `preparedNotesVerification`: independently extract the version section from
201
+ the exact reviewed new target and compare it with `plan.changelogMarkdown`
202
+ and `metadata.preparedSectionSha256`. The canonical section is the heading
203
+ through just before the next `## [..]` heading, with trailing whitespace
204
+ removed and one final LF. Verify review/delivery evidence covers that target's
205
+ notes, including corrections since the old cut. Record the review coordinates,
206
+ target SHA and digest. `originalSectionSha256` is historical provenance only;
207
+ it is intentionally separate, not an equality claim for updated notes.
208
+ 5. `previousAttemptVerification`: establish the named prior attempt's terminal
209
+ failed/canceled state and matching repository, source, version and receipt
210
+ identity/digest from retained or provider evidence. For v2 `pre-tag`, require
211
+ proof it stopped before final tagging/publication; do not invent an RC or
212
+ treat an input claim as evidence. Do not reopen or consume the old receipt.
213
+ 6. `preparedCutVerification`: rerun the read-only planner checks against the
214
+ same frozen input and match source, identities, notes digests and tags to the
215
+ recorded plan (ignore only the newly generated receipt ID and inspection
216
+ time). Record exact-ref remote absence evidence and time. Any drift blocks;
217
+ never quietly choose a new target, version or note body.
218
+
219
+ If evidence cannot establish these facts, hand back the missing gate. Do not
220
+ create an empty metadata PR, run `apply.mjs`, run `before-cut` mutation steps,
221
+ create a branch/commit, or rewrite changelog/version files in the reuse route.
222
+ The current reviewed target already contains the prepared metadata.
223
+
224
+ ## Fresh Receipt and Publish Convergence
225
+
226
+ The planner supplies a fresh `receiptId` for every reuse plan. The stage writes
227
+ an exclusively created, distinct receipt at
228
+ `.git/<invoked-skill>-<receiptId>-authorization.json`; never overwrite the fixed
229
+ legacy path or another receipt. Bind the complete new plan and its SHA-256,
230
+ `releaseSourceSha` (= `plan.sha`), all stage outputs above, historical cut/merge/PR,
231
+ `previousAttempt.receiptId` and `previousAttempt.receiptSha256`, both notes
232
+ digests, tags, choices, flow hash, invocation authorization, expiry and separate
233
+ permissions. A new plan is not a retry/reset of the old receipt.
234
+
235
+ Do not read, mutate, reset, copy permissions from, or grant authority through the
236
+ old receipt. Start only this invocation's applicable publish/promotion permissions
237
+ at `pending-conditions`. Omit metadata branch/commit/write/PR-delivery permissions.
238
+ On resume use this new receipt's exact path and plan, with the existing
239
+ executable/consumed checks. Do not fall back to the old fixed receipt path.
240
+
241
+ Once these checks pass, output `metadataVerification: verified-prepared`,
242
+ `releaseSourceSha: <new target>`, `receiptPath` and the evidence bindings. For the
243
+ existing publish/promotion procedures, bind their operational `<mergedSha>` to
244
+ this verified **new target**. Keep `metadata.mergeSha` as historical provenance;
245
+ never overwrite it or tag it. Skip publish section 1 (new metadata PR) and the
246
+ new-cut tree equality comparison in section 2: historical cut/merge equality
247
+ was already verified, and later reviewed product fixes intentionally change the
248
+ new target's tree. All remaining exact-source CI, main ancestry, tag absence,
249
+ publisher, candidate, preview, traffic and live verification gates still apply.
250
+ Run `after-merge` flow validation on the verified source as usual. For v2
251
+ `pre-tag`, also bind the named npm artifact and explicit effective registry into
252
+ the new receipt. The final-tag permission requires a fresh registry-absence
253
+ observation from the existing publish stage as well as fresh remote tag absence.
254
+ The read-only npm probe itself never grants or consumes a permission.
255
+
256
+ Both cut routes now converge on the same existing publish and promotion stages.
257
+ For Cloud Run, the next unused RC builds from the new target; after the exact
258
+ candidate serves 100% and passes live verification, the still-unused final tag
259
+ names that same source. Neither historical provenance nor this planner may
260
+ reuse an old candidate, relax a golden path, or trigger any effect by itself.
@@ -0,0 +1,82 @@
1
+ # Cloud Run staged promotion
2
+
3
+ > Read when: a Cloud Run candidate is built at 0% and must be validated, shifted to 100%, verified live, or rolled back.
4
+
5
+ Promote one immutable candidate from 0% to 100% under the invocation's
6
+ authorization, as recorded in the plan receipt. Load `golden-path` for both validation
7
+ profiles and the applicable platform skill for repository-declared Cloud Run
8
+ commands. Do not restore the archived `resolve-release` state machine or
9
+ introduce a confirmation.
10
+
11
+ ## 1. Bind the candidate
12
+
13
+ After the RC-tag build reports `SUCCESS`, read its durable candidate receipt.
14
+ For every affected service, independently verify from one fresh Cloud Run
15
+ snapshot that:
16
+
17
+ - receipt RC tag and source SHA equal the approved plan and `<mergedSha>`;
18
+ - the named immutable revision runs the receipt's image digest;
19
+ - the candidate URL resolves to that revision;
20
+ - the candidate has exactly 0% traffic and the recorded incumbent exactly 100%;
21
+ - no second release or unknown traffic-bearing revision is in flight.
22
+
23
+ Missing, duplicate, stale, or contradictory identity is a pre-exposure failure.
24
+ Delete the candidate by immutable revision only when the preflight contract
25
+ declared that deletion safe; otherwise leave it at 0% and hand back. Never move
26
+ the RC tag.
27
+
28
+ ## 2. Validate at 0%
29
+
30
+ Run the repository's smoke workflow against the exact candidate URL with
31
+ `--profile prod-preview`. Accept only a non-empty `ALIVE` verdict whose stamped
32
+ target is that URL, profile is `prod-preview`, and `noMutations` is `true`.
33
+ Record its `generatedAt`. A failed or unavailable gate leaves production on the
34
+ incumbent and does not consume the final tag.
35
+
36
+ ## 3. Recheck and shift
37
+
38
+ Immediately before exposure, re-read candidate identity and traffic. Require
39
+ the candidate still at 0%, incumbent still at 100%, and the ALIVE verdict still
40
+ within the plan's declared freshness window. If durable processing is affected,
41
+ run the preflight-declared pause order and prove quiescence before traffic moves.
42
+
43
+ Run the release flow's `before-exposure` steps; a failure there is still
44
+ pre-exposure. With exposure `canary`, the shift below is replaced by the
45
+ stepped sequence in [canary.md](canary.md), which ends at this same 100% state.
46
+
47
+ Shift all affected services to the candidate in the declared dependency order.
48
+ After each command, read traffic back. If a later service cannot shift, restore
49
+ already-shifted services in reverse order before doing anything else. The
50
+ invocation already authorized this conditional shift and restoration.
51
+ Record traffic-shift and rollback permissions separately. Before either action,
52
+ match its candidate revision/digest, target, profile, gate, and mutation set.
53
+
54
+ ## 4. Verify live
55
+
56
+ From fresh control-plane and service observations, require for every service:
57
+
58
+ - the exact candidate revision holds 100% and the incumbent 0%;
59
+ - serving source SHA and image digest equal the candidate receipt;
60
+ - the live URL passes a non-empty, read-only `prod-active` smoke as `ALIVE`;
61
+ - with dark launch on, every planned dark flag reads off in production
62
+ ([dark-launch.md](dark-launch.md)). A flag found on is a failed live check.
63
+
64
+ Resume durable processing only against the verified serving candidate, then
65
+ prove scheduling/admission and any required publication advancement are healthy.
66
+ Run the release flow's `after-live` steps; a failure there is a failed live
67
+ check. Only this state permits the final release tag.
68
+
69
+ ## 5. Failure routing
70
+
71
+ - **Before any traffic moved:** production is untouched. Delete or retain the
72
+ 0% candidate according to the recorded policy and hand back.
73
+ - **After a known failed shift or live check:** automatically restore every
74
+ service to its recorded incumbent in reverse dependency order, restore
75
+ durable processing against that incumbent, and verify incumbent 100%,
76
+ candidate 0%, and `prod-active` ALIVE before hand-back.
77
+ - **Ambiguous traffic, identity, or processing state:** stop all writes and hand
78
+ back the last known-good evidence for operator recovery. Never guess, retry a
79
+ shift, delete a revision, or claim rollback succeeded.
80
+
81
+ The final tag remains unused on every failure path. An RC tag is immutable and
82
+ remains as attempt evidence.