@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,60 @@
1
+ # Chinese and bilingual mode
2
+
3
+ Language is a setting that works with every template. There is no Chinese-only or bilingual
4
+ template.
5
+
6
+ ## Pick the mode
7
+
8
+ Choose it as in [SKILL.md step 1](../SKILL.md#write-a-new-document). The modes:
9
+
10
+ - **English** or **Chinese**: one version.
11
+ - **Bilingual, separate versions**: two files, `<name>.en.md` and `<name>.zh.md`, same headings in
12
+ the same order.
13
+ - **Bilingual, paired paragraphs**: one file; each English paragraph followed by its Chinese
14
+ paragraph. Headings carry both: `## Scope 范围`. Tables keep one table, with paired cells only
15
+ when WRITING.md asks for it; otherwise one table per language.
16
+
17
+ ## Write
18
+
19
+ Chinese-only mode: write and review the document in Chinese, apply [中文风格](../../house-style/references/style-zh.md),
20
+ then go to step 5. Bilingual modes: steps 1 to 5.
21
+
22
+ 1. Write and review the whole document in the source language: the one the brief names, else
23
+ WRITING.md's Language section, else English. Do not draft both languages at once.
24
+ 2. Produce the second version from the reviewed source. Use TERMINOLOGY.md for every term it
25
+ lists. Translate every other term, including role and team names. Keep a term in the
26
+ source language only when TERMINOLOGY.md says so, or it is a product name, code or an
27
+ abbreviation the reader uses daily. Example: the table keeps "MLRO" in English; "Head of
28
+ Compliance" becomes 合规主管 (繁體:合規主管). Add each new non-obvious translation to TERMINOLOGY.md as
29
+ `proposed`, and list it in the delivery note.
30
+ 3. Write the second version as a native writer would. Restructure sentences freely; do not keep the
31
+ source's word order. Apply the [English style](../../house-style/references/style-en.md) or
32
+ [中文风格](../../house-style/references/style-zh.md) guide to each version.
33
+ 4. Run the equivalence check below. Fix every difference in the version that is wrong.
34
+ 5. Polish the Chinese version with `polish-cn` when installed (bilingual: after the equivalence
35
+ check passes).
36
+ Not installed: say so in the delivery note.
37
+
38
+ ## Equivalence check
39
+
40
+ Compare the two versions section by section. They must match on:
41
+
42
+ - Names of people, organizations, products and systems.
43
+ - Numbers, amounts, currencies, percentages, units, dates and deadlines.
44
+ - Conditions and scope: "if", "unless", "only", "at least", thresholds.
45
+ - Obligation strength: must / must not / should / may ↔ 必须 / 不得 / 应当 / 可以 (Traditional:
46
+ 必須 / 不得 / 應當 / 可以), unless WRITING.md maps them otherwise; "will" never becomes "may", and
47
+ 将 / 將 never becomes 可能.
48
+ - Uncertainty and caveats: a hedge in one version is a hedge in the other.
49
+ - Recommendations, decisions, owners and next steps.
50
+ - Structure: headings, list items, table rows and columns, links and anchors, code, field names,
51
+ every gap marker in either form, including bare `TBD` / `待确认` / `待確認` table cells (one for
52
+ one).
53
+
54
+ Neither version may contain a fact, claim, example or caveat the other lacks. A sentence that only
55
+ reads well in one language is rewritten in both, or cut from both.
56
+
57
+ ## Corrections
58
+
59
+ A correction applies to this document only ([who edits what](../../house-style/references/rules.md#who-edits-what)); mention
60
+ `/distill-writing` once in the delivery note.
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+
8
+ const DAY_MS = 24 * 60 * 60 * 1000;
9
+ const WEEK_MS = 7 * DAY_MS;
10
+ const here = dirname(fileURLToPath(import.meta.url));
11
+
12
+ function readJson(path, fallback = {}) {
13
+ try { return JSON.parse(readFileSync(path, 'utf8')); } catch { return fallback; }
14
+ }
15
+
16
+ function frontmatterValue(text, key) {
17
+ const frontmatter = /^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? '';
18
+ const match = new RegExp('^' + key + ':\\s*([^\\n]+)$', 'm').exec(frontmatter);
19
+ return match?.[1].trim().replace(/^['"]|['"]$/g, '') ?? null;
20
+ }
21
+
22
+ function repositoryOf(source) {
23
+ const value = String(source ?? '').trim();
24
+ const match = /^(?:git@github\.com:|https:\/\/github\.com\/)?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+?)(?:\.git)?$/.exec(value);
25
+ return match?.[1] ?? null;
26
+ }
27
+
28
+ function stableVersion(value) {
29
+ const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(String(value ?? '').trim());
30
+ return match ? match.slice(1).map(Number) : null;
31
+ }
32
+
33
+ function newer(left, right) {
34
+ for (let index = 0; index < 3; index += 1) {
35
+ if (left[index] !== right[index]) return left[index] > right[index];
36
+ }
37
+ return false;
38
+ }
39
+
40
+ function writeCache(path, value) {
41
+ try {
42
+ mkdirSync(dirname(path), { recursive: true });
43
+ writeFileSync(path, JSON.stringify(value));
44
+ } catch { /* A read-only cache must not block skill use. */ }
45
+ }
46
+
47
+ function main(now = Date.now()) {
48
+ if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
+ const name = frontmatterValue(skill, 'name');
51
+ const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
52
+ if (!name || !localVersion) return;
53
+
54
+ const lock = readJson(join(process.env.HOME || homedir(), '.agents', '.skill-lock.json'));
55
+ const entry = lock.skills?.[name];
56
+ const repository = repositoryOf(entry?.sourceUrl || entry?.source);
57
+ if (!repository) return;
58
+
59
+ const cacheRoot = process.env.XDG_CACHE_HOME || join(process.env.HOME || homedir(), '.cache');
60
+ const cachePath = join(cacheRoot, '1aboveio-skills', 'release-check.json');
61
+ const all = readJson(cachePath);
62
+ const cache = all[repository] && typeof all[repository] === 'object' ? all[repository] : {};
63
+
64
+ if (!cache.lastCheck || now - cache.lastCheck >= DAY_MS) {
65
+ const result = spawnSync('gh', ['api', 'repos/' + repository + '/releases/latest', '--jq', '.tag_name'], {
66
+ encoding: 'utf8',
67
+ stdio: ['ignore', 'pipe', 'ignore'],
68
+ timeout: 1500,
69
+ });
70
+ cache.lastCheck = now;
71
+ if (result.status === 0 && stableVersion(result.stdout)) cache.latestTag = result.stdout.trim();
72
+ else delete cache.latestTag;
73
+ all[repository] = cache;
74
+ writeCache(cachePath, all);
75
+ }
76
+
77
+ const latestVersion = stableVersion(cache.latestTag);
78
+ if (!latestVersion || !newer(latestVersion, localVersion)) return;
79
+ if (cache.notifiedTag === cache.latestTag && cache.notifiedAt && now - cache.notifiedAt < WEEK_MS) return;
80
+
81
+ cache.notifiedTag = cache.latestTag;
82
+ cache.notifiedAt = now;
83
+ all[repository] = cache;
84
+ writeCache(cachePath, all);
85
+ const command = `npx skills@1.5.23 add '${repository}#${cache.latestTag}' --global --agent universal claude-code --skill ${name} --yes`;
86
+ process.stdout.write(
87
+ `UPDATE_AVAILABLE: A newer 1AboveIO skills release (${cache.latestTag}) is available; this skill is `
88
+ + `v${localVersion.join('.')}. Ask once whether to refresh ${name}. On approval run \`${command}\`. `
89
+ + 'The refreshed instructions apply next session. Either way, continue the current task and do not ask again this session.\n',
90
+ );
91
+ }
92
+
93
+ try { main(); } catch { /* Update checks are advisory and always fail silent. */ }
@@ -0,0 +1,3 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 1AboveIO
@@ -0,0 +1,249 @@
1
+ ---
2
+ name: better-review
3
+ description: "Slash/explicit-only (/better-review). Single-agent adversarial review of a branch or PR diff, under 10 minutes for a normal-sized change: Spec, Correctness, Test honesty, and Standards passes run in order in one context (no subagents), each finding proven by a file:line and the input that breaks it, rated P0-P2 (P3 cleanup is never reported), with the checks behind it actually run. Use when the user wants a branch, PR, or work-in-progress diff reviewed, asks to \"review since X\", or a delivery workflow needs an independent review, including re-reviews after fixes. Do not auto-select. NOT judging a test suite on its own (test-quality) or defining what must be tested (ensure-coverage)."
4
+ disable-model-invocation: true
5
+ dependencies:
6
+ - engineering-runtime
7
+ release-version: 0.36.0
8
+ ---
9
+ **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
10
+ # Better Review
11
+
12
+ One reviewer, one context, four passes over the net diff, done in **under 10 minutes**: separate
13
+ Spec and Standards axes and an adversarial method, with no sub-agents and no contract paperwork.
14
+
15
+ **Find your task, read that row, then follow [The run](#the-run).**
16
+
17
+ | Task | Read |
18
+ |---|---|
19
+ | Run a review end to end | [Review the rule, not the instance](#review-the-rule-not-the-instance), then [The run](#the-run) below |
20
+ | How to do each pass: the adversarial techniques, the sweeps, what not to flag | [references/passes.md](references/passes.md) |
21
+ | The diff touches auth, money, tenancy, or a migration | [references/domain-hazards.md](references/domain-hazards.md) |
22
+ | Write the result for a caller (JSON shape, severities, follow-ups) | [references/result.md](references/result.md) |
23
+ | Which tier a new HEAD gets: skip, delta, or full | [Review tiers](#review-tiers) below |
24
+ | Review round 2 or later (after fixes or a rebase) | [Re-review](#re-review) below |
25
+
26
+ ## Rules that do not move
27
+
28
+ 1. **Do every pass yourself. Never spawn a subagent and never invoke `code-review`.** The caller
29
+ runs with a small agent cap; one review is one slot.
30
+ 2. **The subject is the net diff** `git diff <merge-base>...HEAD` (three-dot). What was already
31
+ there at the merge-base is a P2 note when serious, else left out. Read unchanged code freely,
32
+ but only to prove a finding the diff causes.
33
+ 3. **Judge against the spec and the repo's written rules, nothing else.** Example: the spec says
34
+ "persist per installation", so per-user storage is P1; an audit log the spec never asks for is
35
+ P2 at most.
36
+ 4. **Produce the counterexample, not an opinion.** A P0/P1 needs a `file:line` and the concrete
37
+ input, state, or sequence that breaks it. The line is in the diff, or for missing behavior, the
38
+ place the behavior should live plus the spec line asking for it. No trigger means P2 at most.
39
+ Example: "P1: a retry reuses the single-use JWT; the second call returns 401" blocks; "could
40
+ use more tests here" is P2 at most.
41
+ 5. **Verify against the tree, never the narration.** PR body, commit messages, test names, logs,
42
+ and "CI is green" are claims: run or read the thing. Never ask the author for evidence documents.
43
+ 6. **Not being able to run a check is not a finding.** List it under `notRun` with its command and
44
+ error verbatim; never turn "I could not run it" into "it is missing". Example: no emulator is
45
+ available, so list the emulator journey as not run; do not rate the code P1 for it.
46
+ 7. **Run the changed files' tests and the check behind each blocker; nothing broader.** Example:
47
+ you claim a refund rounding bug, so run the refund tests and the test that shows it; do not
48
+ rerun the full suite for reassurance.
49
+ 8. **Every round covers the whole diff:** in full, or by the [tier](#review-tiers)
50
+ `rereview-scope.mjs` picks. A sampled or timed-out pass is unfinished, not done.
51
+
52
+ ## Review the rule, not the instance
53
+
54
+ **Every P0/P1 is a broken rule with all its paths, one id every round:** apply the six
55
+ [principles](references/passes.md#review-the-rule-not-the-instance) to each P0/P1 candidate. Example: "a refund never exceeds
56
+ the captured amount" is the finding; "a second partial refund succeeds" is one path.
57
+
58
+ ## Review tiers
59
+
60
+ Every HEAD sent for review gets one tier. The first review is always full; from round 2, `rereview-scope.mjs`
61
+ picks the tier from the previous result. Widen a tier when you must, never narrow one.
62
+
63
+ | Tier | When | What is reviewed | Checks |
64
+ |---|---|---|---|
65
+ | **skip** | The previous review passed (no open P0/P1) and the PR's own changes are unchanged: the same HEAD (whose approval already holds), the same patch over a base that moved only outside the PR's files, or the same changed lines at the same places in every file the base moved under (a conflict resolved by keeping both sides counts) | Nothing: no reviewer runs. `--write-skip` writes the record that carries the approval to this HEAD | None. CI on this HEAD is the proof |
66
+ | **delta** | Fix commits since the last round, a rebase that changed or moved the PR's own lines in a file the base moved under, or any new HEAD while a P0/P1 is open; and no full trigger | The fix diff and merge diff at full depth; carried files only at their `callSites` | Tests whose inputs changed, every check a P0/P1 rests on |
67
+ | **full** | The first review, or any full trigger below | The whole diff, every pass | [Step 5](#5-run-the-checks-and-report-2-min) |
68
+
69
+ **Full triggers.** The script names each one in `reasons`; the round number and a previous delta never force full:
70
+
71
+ - the previous round was incomplete or oversize;
72
+ - fixes and base changes since the last full review touch more than half the PR's lines;
73
+ - the impact of a base change on the PR's own lines cannot be bounded;
74
+ - the previous HEAD is gone and the patch changed, or its `patchFingerprint` is missing;
75
+ - the previous merge-base is missing from the repository;
76
+ - the previous result lacks `head`, `mergeBase`, or `round`;
77
+ - the PR's previously reviewed changes were removed.
78
+
79
+ **Never carry a blocker.** A previous review with an open P0/P1 never yields skip, even on an
80
+ unchanged HEAD or after a rebase: the blocker is fixed, then reviewed as a delta.
81
+
82
+ Examples:
83
+ - Round 3 changed one function to fix R1: **delta** over it, its callers, and any merge diff.
84
+ - A rebase onto main that only moved `docs/`, after a passing review: **skip**.
85
+ - Main changed `b.ts`, which the PR also edits, and the PR's own lines there are unchanged at the same places (a conflict resolved by keeping both sides included): **skip**.
86
+ - A conflict resolution rewrote three PR lines in `b.ts`: **delta** over those hunks, their
87
+ callers and shared invariants. If they reach a lock order the whole module relies on and you
88
+ cannot bound it, widen to **full** and name why.
89
+
90
+ ## The run
91
+
92
+ Time targets add up to 10 minutes for a normal-sized change: finish a pass that runs long and
93
+ tighten the next; an oversize change takes longer.
94
+
95
+ ### 0. Setup (≤1 min)
96
+
97
+ Resolve `SKILL_DIR` to the directory you read this file from (never your working directory, never
98
+ a `find` over `$HOME`).
99
+
100
+ ```bash
101
+ node "$SKILL_DIR/scripts/pr-context.mjs" --base <target-branch> # JSON: mergeBase, files, diffstat
102
+ git diff <mergeBase>...HEAD | node "$SKILL_DIR/scripts/scan-diff.mjs"
103
+ ```
104
+
105
+ Read both outputs where they print; a read-only sandbox is fine.
106
+
107
+ - The target is what the caller or user named, else the PR's base (`gh pr view --json baseRefName`),
108
+ else the default branch, as a fetched remote ref (`origin/main`). Fail on a bad ref or empty diff.
109
+ - `scan-diff` prints **leads** (places to look; never findings by themselves) and **findings**
110
+ (`over-mock-internal-seam`: a first-party mock, rated in pass 3).
111
+ - If `pr-context` reports `promotion: true`, this is a release merge of already-reviewed commits,
112
+ not a feature review: report whether it fast-forwards (`fastForwardable`, and any
113
+ `commitsOnBaseNotInHead` it would revert), and stop.
114
+ - **Oversize:** more than ~1,500 changed lines or 40 files (generated and lock files excluded).
115
+ Still review all of it, highest-risk files first, set `oversize: true` in the result, and say
116
+ in the summary that the change should be split.
117
+ - Collect the inputs: the spec (the caller's, else issue refs in commits and the PR body, else a
118
+ matching file under `docs/`, `specs/`, `.scratch/`) and the repo's written standards
119
+ (`CONTRIBUTING.md`, `AGENTS.md`/`CLAUDE.md`, and the style docs or ADRs the diff touches).
120
+ Missing spec: run code-only and say "no spec found". Do not stop to ask. Leave the hazards
121
+ files for pass 2, which reads them only when the diff needs them.
122
+
123
+ ### 1. Spec (≤2 min)
124
+
125
+ Skip with "no spec found" when there is none. Otherwise list **every** acceptance criterion and
126
+ judge each on its own row:
127
+
128
+ - **Met** only when the result for the real runtime input is right (not just the right call or
129
+ constant present) and a test asserting it would go red if the behavior were removed.
130
+ - **Unmet or wrong** is P1. **Unverified** (implemented, but no test that would fail if it were
131
+ removed) is P1 too: an acceptance criterion with no such test is not proven.
132
+ - Behavior nobody asked for (scope creep) is P2, or P1 if it changes a contract code relies on.
133
+
134
+ ### 2. Correctness, adversarial (≤3 min)
135
+
136
+ Try to prove the change is broken. For each changed function or rule, run the four techniques (and
137
+ check the shapes) in [passes.md](references/passes.md#adversarial-techniques): diff it against its siblings, break its
138
+ patterns with boundary inputs, hold its async steps open, and name the test for each new branch:
139
+
140
+ - **Every regex, glob, parser, or validator the diff adds or changes:** list it and the inputs you
141
+ tried against it (prefix and substring leakage, empty, case, escaping, a malformed value it
142
+ should reject), and record them under `boundaries` in the result. Writing the inputs down is
143
+ what stops this check being skipped when a pattern looks fine at a glance.
144
+ - **Every async step the change relies on** (sign-out, revoke, refresh, cancel, save, upload):
145
+ hold it pending and settle it each way (success, refusal, error, timeout) against the events
146
+ [principle 3](references/passes.md#review-the-rule-not-the-instance) scopes. Rule a cell out by code, or in one line when
147
+ the program cannot produce the event; record it under `windows`.
148
+ - **Callers and sibling paths:** follow each changed contract to every place that uses it or must
149
+ apply the same rule.
150
+ - **High-risk surface** (auth/token/session, money/tax, tenancy/org scope, migration): hunt it
151
+ against [domain-hazards.md](references/domain-hazards.md) and the repo's own hazards file
152
+ (`docs/domain-hazards.md`, or wherever `AGENTS.md`/`CLAUDE.md` points). An
153
+ exploitable security, auth, money, tenancy, or data-loss defect is P0/P1.
154
+ - **A rule that must hold in several places** (a validator, a guard, a behavior the diff changes): run
155
+ the [enforcement-point sweep](references/passes.md#enforcement-point-sweep). Every unenforced
156
+ point is an open `paths` row of the rule's finding this round; a guard copied to each point
157
+ gets one owner as the fix ([principle 5](references/passes.md#review-the-rule-not-the-instance)). One place only: say so in one line.
158
+ - **Narration drift:** a comment, `--help`, doc, or PR claim that contradicts the code. P1 where
159
+ the prose is what agents or users act on; otherwise skip it.
160
+
161
+ ### 3. Test honesty (≤1 min)
162
+
163
+ The tests in the diff are evidence only if they can fail. Each of these is P1 when the test is
164
+ cited as proof of a requirement or fix, otherwise P2:
165
+
166
+ - a mock of a first-party module (`scan-diff`'s finding channel): it proves only wiring. Faking
167
+ an external (third-party API, clock, randomness) is fine. The fix is a real test, a fake of
168
+ only the external, or deleting the test;
169
+ - an added skip, `.only`, `xit`/`xfail`/`fixme`, fixed sleep, empty body, or an assertion weakened
170
+ to pass on an error, empty, or 404 page;
171
+ - an assertion that cannot fail (a swallowed rejection, a try/catch that re-passes, a check
172
+ against a stub);
173
+ - a bug fix with no test that would have been red on the pre-fix tree;
174
+ - a test that awaits an async step to completion, cited as proof of the pending state (unverified).
175
+
176
+ ### 4. Standards (≤1 min)
177
+
178
+ Last on purpose, so style never steers the passes above. Cite the documented rule (file and rule)
179
+ for each violation; skip what tooling already enforces. A rule the repo marks required (must, gate)
180
+ is P1; other documented rules P2. Skip undocumented cleanup: naming, smells, cosmetics, and
181
+ architecture opinions would be P3, and this review never reports P3.
182
+
183
+ ### 5. Run the checks and report (≤2 min)
184
+
185
+ - Run the tests for the changed files, plus lint or typecheck when cheap. Rerun any check a
186
+ P0/P1 rests on. Record each exact command in `commands`; never accept a producer's log instead.
187
+ `commands` lists checks run against the code only, never this skill's update check or scripts.
188
+ - Apply the [finding bar](references/passes.md#the-finding-bar) before reporting: a few strong
189
+ findings beat many weak ones, and "no blocking issues" is a valid result.
190
+ - **Caller gave a result path:** write the JSON in [result.md](references/result.md), including
191
+ the sweeps you ran (a later round re-checks them), and file the follow-ups the caller asks for.
192
+ - **Otherwise** report in chat: one section per pass in run order, then one line with the count
193
+ per pass and the worst finding in each. Do not merge or rerank findings across passes.
194
+
195
+ Write each pass's findings down before starting the next, and never re-rate an earlier pass's
196
+ severities because of a later one: that keeps the passes independent without extra agents.
197
+
198
+ ## Re-review
199
+
200
+ From round 2 the caller gives you the previous round's result file and its open P0/P1 findings.
201
+ **No previous result file** (for example, a user says "I fixed it, review again"): do a full run,
202
+ then check each finding you were told about as in Re-review step 3 below.
203
+
204
+ 1. **Let the script pick the [tier](#review-tiers)**, and run it before reading anything else,
205
+ including the files the caller attached: its output already contains what you need from them.
206
+
207
+ ```bash
208
+ node "$SKILL_DIR/scripts/rereview-scope.mjs" --prior <previous-result.json> --base <target-branch>
209
+ ```
210
+
211
+ - `skip`: review nothing. With a result path from the caller, run the same command again
212
+ with `--head <the sha the caller named> --write-skip <result path>`: the record it writes is your result. Tell the caller the
213
+ tier and stop. (`--write-skip` writes nothing on delta or full.)
214
+ - `full`: run [The run](#the-run) on the whole diff, then step 3 below.
215
+ - `delta`: continue with step 2. `integrationFiles` names PR files whose own changes were
216
+ rewritten over a moved base; `mergeFiles`, those it moved under cleanly. Review their
217
+ resolved hunks, callers and shared invariants. `baseDiffCommand` shows every base change,
218
+ including dependencies outside PR files; check the relevant ones.
219
+
220
+ Copy `fixRound` from the output into the result: it is the caller's fix counter, and the tier
221
+ never changes it.
222
+ 2. **On `delta`, its output is your setup.** Skip step 0 entirely: no update check, no
223
+ `pr-context`, no whole-diff scan, and no re-reading repo docs or `references/` unless the fix
224
+ diff needs one (it touches a hazard surface, adds an async step, or adds a multi-place rule).
225
+ The output holds `fixDiff` (the fix diff itself; `null` when too large, then run
226
+ `fixDiffCommand`), `openFindings` (full; read the [principles](references/passes.md#review-the-rule-not-the-instance) when one is open), `sweepRecheck` (previous sweep points in touched
227
+ files), `changedSymbols`, `callSites` (every line in a carried file that uses a changed name),
228
+ and `fixScan` (leads and findings for the fix diff alone). Each tool call costs seconds, so a
229
+ delta round is mostly about making few of them.
230
+ 3. **Each open finding** is resolved only when every `paths` row, re-derived from the tree
231
+ ([principles 2, 4, 6](references/passes.md#review-the-rule-not-the-instance)), is closed at a `file:line`; a new
232
+ witness of its rule is an open row under its old id at its old severity. A previous P2 is
233
+ closed: raise it again only when it is now P1.
234
+ 4. **The fix diff** (`fixDiff`): run passes 1-4 on it at full depth, including `boundaries` and
235
+ `windows` for any pattern or async step it adds or changes; re-check each `sweepRecheck` point.
236
+ 5. **The carried files:** re-check correctness at the `callSites` lines and every open `paths`
237
+ row, reading enough around each to judge it. If `callSites.truncated` is true, search the
238
+ rest yourself. Spec rows and standards findings carry over, except open P0/P1 rows (step 3).
239
+ 6. **Checks:** run the tests whose inputs changed, every check a current P0/P1 rests on,
240
+ and affected required checks (generated artifacts, lint). Carry unaffected passing
241
+ results forward with their reviewed HEAD; do not report them as freshly executed.
242
+ Record actual code checks, such as `git diff --check`, in `commands`; never copy old
243
+ commands as if they ran this attempt.
244
+ 7. **Write the result** with `tier: "delta"`, `passes` covering this attempt, `mergeBase`,
245
+ `patchId`, `patchFingerprint`, `fixRound` and `fixLinesSinceFull` from the script's
246
+ output, and the previous `sweeps`, `windows` and `boundaries` carried forward with
247
+ the touched points updated. `findings` holds the prior findings still open, under
248
+ their old ids, plus any new ones; resolved findings are left out. A delta round should take a
249
+ few minutes at most.
@@ -0,0 +1,9 @@
1
+ interface:
2
+ display_name: "Better Review"
3
+ short_description: "Slash/explicit-only single-agent adversarial review of a branch or PR diff, with skip, delta, or full re-reviews"
4
+
5
+ policy:
6
+ # Codex counterpart to SKILL.md disable-model-invocation: true.
7
+ # Keeps $better-review / explicit invoke (and delivery workflows reading it by path)
8
+ # while blocking description-based selection.
9
+ allow_implicit_invocation: false
@@ -0,0 +1,53 @@
1
+ # Domain hazards: the high-risk hunt list
2
+
3
+ The bug classes that a happy-path implementation ships and CI passes green, on the surfaces whose
4
+ contract is hardest to pin down: auth, money, tenancy, and migrations. Read when the diff touches
5
+ one of them, and hunt the matching section. An unhandled item is a finding, P0/P1 when exploitable
6
+ or contract-breaking ([result.md](result.md#severity)).
7
+
8
+ This is the generic shape. The repo's own values (its issuer, currencies, tenant column, migration
9
+ tool) live in its hazards file: follow the `Domain hazards` heading in `AGENTS.md`/`CLAUDE.md`, else
10
+ read `docs/domain-hazards.md`, else there is none. Hunt against both. You are read-only: when a
11
+ blocking finding deserves a new row in that file, say so in the finding's summary.
12
+
13
+ The rule behind every class: **decide by a positive allow-list, default to deny, and prove the
14
+ result for the value the app actually produces at runtime, not a convenient fixture.**
15
+
16
+ ---
17
+
18
+ ## 1. Auth / authz / token / session
19
+
20
+ | Hazard | Failure mode (real cases) | What to prove |
21
+ |---|---|---|
22
+ | **Fail-open guard/verifier** | On error / unknown input / unmatched branch, the code *allows* instead of denying. A signature verifier with an HMAC catch-all fallback; a country/eligibility check that skips the gate for unrecognized spellings. | Every error and `else` path **denies**. The default is deny. Add a test that feeds the unrecognized/garbage input and asserts refusal. |
23
+ | **Token/assertion validation** | Wrong issuer, wrong/defaulted `client_id`, missing audience check, unpinned algorithm (accepts `none` or HMAC where RS/ES expected). POSTing to the wrong endpoint (broker vs OIDC issuer). | `iss` / `aud` / `scope` / `exp` / signature-alg each asserted against the **real IdP contract**, not a literal default. Alg pinned. Target endpoint is the issuer, verified against the discovery doc. |
24
+ | **Replay / single-use / idempotency** | A one-time code (nonce, `jti`, `device_code`, OTP) accepted twice; no brute-force limit. | The code is consumed **atomically** and a second use is rejected; a replay test proves it; sensitive endpoints are rate-limited. |
25
+ | **Clock skew** | Assertion/token lifetime unbounded or with no skew tolerance; `iat`/`nbf`/`exp` mishandled. | Lifetime is clamped to a bounded window; skew tolerance is explicit; a token just inside/outside the window is tested both ways. |
26
+ | **Open redirect / dropped `returnTo`** | Redirect target derived from user input without an allow-list; a centralizing auth refactor drops the deep-link `returnTo` and lands the user on a default page. | Redirect targets pass a **positive allow-list** (`^/(?![/\\])` or exact known routes), and `returnTo` survives the whole flow (characterization test on the deep-link path). |
27
+ | **Revocation during a pause** | Sign-out or access loss that arrives while the app is backgrounded, hidden, or a check is in flight takes the temporary-pause path, so private data or a session outlives the revocation until the pending call settles (a downloaded document kept for as long as a hanging logout request runs). | Revocation acts when it starts, not when it settles. A test holds the revocation pending in each paused state and asserts the private data is gone. |
28
+ | **Privilege on switch** | Org-switch / impersonation / role change doesn't re-scope the session or leaves stale elevated state. | The switch re-derives authorization; a test asserts the post-switch scope, not just that the switch succeeded. |
29
+
30
+ ## 2. Money / tax / pricing
31
+
32
+ | Hazard | Failure mode (real cases) | What to prove |
33
+ |---|---|---|
34
+ | **Conversion direction** | Divide-vs-multiply inverted; response keyed to the base currency (USD) when the caller asked for the quote currency; daily vs realtime endpoint confused. | Direction asserted with a **known rate and a known expected result**; the response is keyed to the currency actually requested; the endpoint matches the contract. |
35
+ | **Precision & storage range** | Minor-unit integer column too small for the validated max — validation passes, the INSERT overflows and 500s (INT4 column vs a `1e11` Zod cap). | Storage type holds the max plausible value; the validation cap is **≤** the storage range; a max-size input is tested end-to-end through the write, not just through validation. |
36
+ | **Rounding** | Undefined or inconsistent rounding (half-up vs banker's); rounding applied at the wrong step; tax computed on the wrong base. | Rounding mode and step are explicit and tested at the boundary; tax base/order matches the spec. |
37
+ | **Immutability & state** | An issued invoice/number/ledger entry is mutable; a paid/void transition isn't guarded. | Post-issue mutation is rejected; state transitions go through one authoritative guard; the guard is tested for the illegal transition. |
38
+
39
+ ## 3. Tenancy / org-scope / isolation
40
+
41
+ | Hazard | Failure mode (real cases) | What to prove |
42
+ |---|---|---|
43
+ | **Cross-org leakage** | A read or write not filtered by tenant/org; lineage or join that crosses orgs (cross-org TaskRun lineage leak). | **Every** query is scoped by tenant by default (scoping is not opt-in); a two-org test asserts org A cannot see/mutate org B's rows. |
44
+ | **Authorization scope drift** | Ad-hoc role-string compares that a centralized detector misses (alias forms like `const role = …; return role === 'admin'`); checks in an app the audit doesn't cover. | Authorization is centralized; no inline role-string equality; the detector/audit covers every app, and a real instance is caught by a test. |
45
+
46
+ ## 4. DB migration / schema
47
+
48
+ | Hazard | Failure mode (real cases) | What to prove |
49
+ |---|---|---|
50
+ | **Type/range vs validation** | Column type can't hold the value the app validates as legal (see money precision). | Column range ≥ the app's accepted range; asserted with a boundary write. |
51
+ | **Migration scope creep** | A migration bundles unrelated changes or an unintended column/table drop; schema drifts from the intended migration. | One concern per migration; the diff contains **only** the intended change; drift is reconciled, not silently regenerated. |
52
+ | **Backfill / nullability / locks** | Adding a NOT NULL column without a default or backfill; a migration that locks a hot table. | New columns are nullable-or-defaulted with a backfill plan; lock-heavy changes are called out; the migration is reversible or the irreversibility is declared. |
53
+
@@ -0,0 +1,147 @@
1
+ # How to run each pass
2
+
3
+ The method behind [SKILL.md](../SKILL.md)'s passes. Read the section the run points you to.
4
+
5
+ ## Review the rule, not the instance
6
+
7
+ Apply these to each P0/P1 candidate, in every pass and every round, and record the result in the
8
+ finding's `rule` and `paths` ([result.md](result.md)). Below a P0/P1, skip them.
9
+
10
+ 1. **A finding is a broken rule; its trigger is one witness.** State the rule in one sentence;
11
+ the finding closes only when the rule holds on every path, not when the witness is fixed.
12
+ Example: "a refund never exceeds the captured amount" is the finding; "a second partial
13
+ refund of 60 on a 100 charge succeeds" is one witness.
14
+ 2. **Find the paths in the code, never from memory.** Search the tree for every writer of the
15
+ state the rule guards, or every caller of the contract the diff adds, changes, or relies on;
16
+ record each as a `paths` row. A broken path the diff neither causes nor worsens is not a row:
17
+ it is a P2 follow-up. On a delta, search again only when the fix diff adds or moves a writer.
18
+ Example: grep every call that changes a balance: the refund route, the batch refund job, and
19
+ the chargeback webhook are three rows, not the one the trigger used.
20
+ 3. **Check every path against one shared list of conditions, including its own failure.** For
21
+ a path that guards a session, credentials, money, or a deletion, settle it each way
22
+ (success, refusal, error, timeout) against the same list of events for every path; for other
23
+ paths, the events that can reach it. An event the program cannot produce is ruled out in one
24
+ line; one guard that rules out a whole row of events closes every cell in it.
25
+ Example: an org switch was tried against "offline" and "a second tab", never against "the
26
+ role lookup times out after the switch", and that cell granted the old org's role.
27
+ 4. **One rule, one finding, one id, every round.** A new witness that breaks the same guarded
28
+ state or contract is an open row under the old id, whatever its wording; widen the `rule`
29
+ sentence under the same id when it was too narrow. A different guarded state is a new id;
30
+ an id resolved in an earlier round that breaks again is a new id whose summary names it.
31
+ Example: a cache-invalidation finding fixed for writes is still open when a bulk import
32
+ leaves the cache stale: same id, one more open row.
33
+ 5. **Name one owner as the fix.** Prefer the place every path passes through: a guard copied to
34
+ each path misses the next one. Copied guards that close every row still resolve the
35
+ finding; when no such place exists, say so, and the rows are the fix.
36
+ Example: three handlers each re-check the tenant; the owner is the repository method all
37
+ three call.
38
+ 6. **A rule that breaks again after a fix means the approach is wrong.** Say so in the
39
+ finding, name the owner (5), and re-derive every path (2); never review the next patch as if
40
+ it were the first. Example: the refund cap is open after two fixes, each adding a check to
41
+ one route: the finding names the balance service as the owner and lists every writer.
42
+
43
+ ## Adversarial techniques
44
+
45
+ "Be adversarial" means nothing without a method. The one move behind all four: **build the
46
+ specific artifact that would fail, and cite it.** A finding with no concrete trigger is a hunch.
47
+
48
+ - **Diff each new or changed function against its siblings.** Find its family: the same module,
49
+ naming pattern, or role (a set of `detect*`, `validate*`, `parse*`, or route handlers). Compare
50
+ the logic line by line. A function that handles a case differently, uses a looser or tighter
51
+ pattern, orders its guards differently, or lacks a branch all its siblings have is a defect until
52
+ the difference is justified. Name the sibling and the exact divergence, for example:
53
+ "`detectOverMockedEvidence` matches `route.fulfill` but its sibling `detectTier1UiOnlyEvidence`
54
+ also matches `page.route(`, so the first misses that vector."
55
+ - **Break patterns with boundary inputs.** For each regex, glob, string match, or parser the diff
56
+ adds or changes, write the input that breaks it before you trust it: prefix or substring leakage
57
+ (does `/foo` also match `/foobar`? is it anchored?), empty or whitespace, case, escaping and
58
+ metacharacters, unicode, very long input. Put the failing string in the finding.
59
+ - **Hold each async step open.** For every async step the change relies on (sign-out, revoke,
60
+ refresh, cancel, save, upload), ask what the code does *while it is pending*, and settle it
61
+ each way (success, refusal, error, timeout) against every event that can coincide:
62
+ backgrounded or hidden, offline, a second request, a retry, a sign-in as the same or a
63
+ different subject, sign-out, expiry ([principle 3](#review-the-rule-not-the-instance) scopes
64
+ the list). Write the sequence that interleaves them. Rule a cell out only by code that prevents
65
+ it (a guard, a lock, a state check), never by how you expect the step to be reached: list every
66
+ caller of the step, including timers, push events, expiry, and error handlers, not just the
67
+ button a user presses. A test that awaits the step to completion never runs this window, so it
68
+ proves nothing about it. Example: "export a report to a temp
69
+ file, put the app in the background, then log out and leave the logout request hanging: the
70
+ cleanup waits for logout to finish, so the exported file outlives the session."
71
+ - **Name a test for each new branch.** For every conditional, `else`, early return, switch case,
72
+ and error path in the diff, find the test that drives it. A branch whose failure would be
73
+ observable and has no test is a gap; line coverage is not branch coverage.
74
+
75
+ Shapes to look for while doing this:
76
+
77
+ - **Default-allow.** On an error, unknown input, or unmatched branch, does the code allow instead of
78
+ deny, or fall back to a permissive default? Feed it the garbage input.
79
+ - **Read before lock.** A value read to compute a write must be read inside the lock that guards
80
+ that write. Pair each locked write with a second writer of the same row: if the read happens
81
+ before the lock, the second writer's commit is overwritten.
82
+ - **A control the server refuses.** When the diff newly shows or enables an action for a state
83
+ (pending, archived, partial), trace that exact control's call path with that state: the page's
84
+ server action or route, every layer it passes through, and the service at the bottom. Each layer
85
+ can pin its own expected state, so the service accepting it proves nothing about the action the
86
+ button calls.
87
+ - **A permanent event routed through a temporary path.** Code that handles "paused, hidden,
88
+ checking" and "revoked, signed out, deleted" in one branch keeps data or access alive after it
89
+ should be gone. Check each permanent event arriving during each temporary state, and record it
90
+ under `windows` (see "Revocation during a pause" in [domain-hazards.md](domain-hazards.md)).
91
+ - **Centralizing drops an edge.** A refactor that moves a cross-cutting concern into one place (an
92
+ auth redirect into a layout, error handling into a shared hook) silently loses edges the old
93
+ paths handled. Check that the old edges are pinned by a test that existed before the move.
94
+
95
+ ## Enforcement-point sweep
96
+
97
+ For a rule that must hold in more than one place: an all-or-none field contract, a canonical
98
+ format for a wire value, a validation rule, an admission or promotion check, or **a behavior the
99
+ diff changes** (a redirect target, a default, a guard). For a changed behavior, the places are
100
+ every existing test, caller, and doc that still relies on the old one: search for the old value
101
+ (the old URL, default, or message), not just the new code.
102
+
103
+ 1. **Write the rule as one sentence**, in the form the code must satisfy.
104
+ 2. **Search the whole tree, not just the diff,** for every place that must enforce it: producers,
105
+ serializers and exporters, validators, request-path guards, admission checks, the schema on the
106
+ far side of the wire, and the tests that pin each. The diff shows where the author enforced it;
107
+ the tree shows where it must be enforced.
108
+ 3. **Record one row per place:** location, enforced or not, evidence.
109
+ 4. **Report every unenforced place this round, as an open `paths` row of the rule's finding.**
110
+ Never "and similar issues may exist elsewhere": that is a sample dressed up as a sweep, and
111
+ each place you skip costs the caller another fix-and-review round.
112
+
113
+ When the code under review *is* the enforcement (a verifier, a gate, a checker), the places are the
114
+ checks inside it and the rule is almost always "fail closed on any drift". For each thing it
115
+ inspects, ask what value makes it pass when it should fail.
116
+
117
+ A serial test suite stops at its first failure, so a red run shows only the first stale place and
118
+ says nothing about the cases after it. Never read "one failure" as "one place": find the rest by
119
+ searching for the old value, not by rerunning the suite.
120
+
121
+ ## The finding bar
122
+
123
+ Search hard; then report only what survives this bar.
124
+
125
+ - **Provable.** Every finding cites the diff hunk, and for a ripple effect the code it provably
126
+ breaks. Label any inference.
127
+ - **One finding per broken rule.** Say the rule, every open path in `paths`, and the one owner
128
+ that fixes it. Example: four places miss the generation check: one finding with four open
129
+ rows, not four findings and not one row.
130
+ - **The author would fix it.** Do not flag intended changes or rely on guesses about intent.
131
+ - **Rigor in proportion.** Hold the code to the bar the surrounding code already holds.
132
+ - **Few and strong.** Order by severity. If the change is safe, say so and report nothing.
133
+
134
+ Do not raise:
135
+
136
+ - a sibling divergence that is justified by a genuinely different case;
137
+ - an unanchored pattern whose inputs come from a closed, validated set;
138
+ - an "untested" branch already driven by an integration or E2E test, or whose failure is harmless;
139
+ - a fake of a real external boundary (third-party API, clock, email, randomness);
140
+ - a pre-existing issue the diff neither depends on nor worsens as a blocker (P2 at most);
141
+ - style the surrounding code does not hold either;
142
+ - cleanup, naming, smells, cosmetics, or an architecture opinion with no documented rule behind
143
+ it: that is P3, and P3 is never reported.
144
+
145
+ When unsure, lower the severity and say what you could not rule out. Never inflate a candidate that
146
+ trips one of these guards into a blocker: in the caller's loop every P0/P1 buys a full fix, review,
147
+ and CI round.