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