@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,208 @@
1
+ # Chargeback / dispute rate (normal vs pre-dispute; Visa vs Mastercard)
2
+
3
+ Topic **4.8 拒付 / 争议**. Put the Visa / Mastercard formulas as a **note
4
+ under the monthly rate chart**. Count rates follow card-network monitoring
5
+ programmes, **not** origination-month vintage and **not** a blended
6
+ Visa+Mastercard ratio.
7
+
8
+ Official Visa and Mastercard rulebooks are acquirer-gated. The formulas
9
+ below are the processor restatements used in production monitoring
10
+ (Stripe, Braintree). Caption the report as **network-style estimates
11
+ from this extract**, not as a Visa/Mastercard identification notice.
12
+
13
+ ## Fraud & chargeback period for section 4.8 (default 12 months)
14
+
15
+ Twelve months is the step-0 fraud & chargeback period default. When the user
16
+ picks N months, read every "12" below as N, "preceding 11" as "preceding
17
+ N-1", `M-11` as `M-(N-1)`, `M-12` as `M-N`, and "13" as N+1.
18
+
19
+ Every report's section 4.8 covers **the report month M and the preceding 11
20
+ calendar months**, inclusive: `M-11` through `M`. This applies to daily, weekly,
21
+ monthly, and multi-month reports alike. Use the explicitly requested report month;
22
+ otherwise use the month containing the main report's end date. The explicit
23
+ report month takes precedence if those two months differ. Do not anchor to
24
+ today, the latest dispute file, or the first available historical month.
25
+
26
+ Example: an October 2026 report, including an October 1-11 report, displays
27
+ November 2025 through October 2026. Determine month offsets with calendar
28
+ arithmetic, not a 365-day subtraction. Record two separate times:
29
+
30
+ - Event cutoff: the history cutoff defined in [event-layers.md](event-layers.md)
31
+ Window selection (step 4 there); this file does not redefine it. Record both
32
+ the requested and effective cutoff when capped. If the effective cutoff
33
+ precedes an explicit user-given M, raise it in the step-0 question; in a run
34
+ where no one can answer, keep that M, label it empty or partial, and disclose.
35
+ A default M never needs this: it comes from the main period, which already
36
+ fell back to the latest month with data. Do not invent future data.
37
+ Include cases by stage-opening received date and sales by transaction/capture
38
+ date, never after this cutoff. Label M month-to-date when not complete.
39
+ Establish and record the source/reporting timezone before converting timestamps
40
+ or assigning months. Date-only source labels may be used in their stated source
41
+ calendar without claiming a timezone; naive timestamps with no verified timezone
42
+ may likewise retain their recorded calendar labels, explicitly disclosed.
43
+ Do not silently normalize these to UTC. If a requested timezone conversion or
44
+ cross-source month/cutoff alignment cannot be established, mark the affected
45
+ cells unresolved. An inclusive date cutoff ends at the next local midnight,
46
+ using a half-open interval and calendar arithmetic that respects DST.
47
+ Forex's UTC Rate Date is not the reporting-timezone policy.
48
+ - Evidence snapshot: retain source hashes, export timestamps when provided, and
49
+ the input-selection timestamp. Later exports may correct earlier events.
50
+ Use the latest verifiable correction in the supplied snapshot and disclose
51
+ that historical results are restated, not frozen as originally known. Do not
52
+ use filename ordering alone to choose a revision. If revision order or event
53
+ dating cannot be established, mark affected metrics unresolved and preserve
54
+ the conflicting evidence rather than choosing a row.
55
+
56
+ This separate history applies to monthly stage counts/amounts, reason-category
57
+ context, and network-style rates. A main-period-only stage summary may be added
58
+ but must be labeled separately; it does not replace the 12-month history.
59
+
60
+ Gather all authorized historical dispute and settlement exports for the same
61
+ portfolio scope. Numerators require received cases in `M-11` through `M`. Visa
62
+ sales require those same months. Mastercard's first displayed month requires
63
+ sales from `M-12`, so its denominator inputs may span **13 calendar months**.
64
+ Do not broaden the merchant/MID scope to obtain a denominator or infer missing
65
+ sales from approvals. Record every historical input and its date coverage.
66
+
67
+ Separate repeated export snapshots from genuine stage-opening events. Use stable
68
+ sale/event identifiers for sales; for cases use the processor's linked case ID,
69
+ stage-opening event ID/type, and received date. Count each distinct pre-dispute
70
+ opening once in its received month and each formal chargeback opening once in
71
+ its own received month. A pre-dispute escalating under the same case ID can
72
+ therefore appear in both stage series; these stage counts are not additive unique
73
+ case counts. A later status update, reversal, loss notice, or repeated export is
74
+ not a new opening. Deduplicate only the same event, not all rows of a case ID.
75
+
76
+ Preserve links when a processor assigns a new identifier on escalation. Use its
77
+ dictionary and explicit linkage/revision fields, not amount, reason, or timing
78
+ similarity, to identify events and revisions. Apply verified corrections to the
79
+ same event under the restatement policy above. If the extract cannot distinguish
80
+ an opening from a status snapshot, establish the stage/date or reconcile linked
81
+ identities, keep it unclassified/unresolved and mark affected rate cells `N/A`;
82
+ do not silently collapse a genuine opening or count an update as another case.
83
+ Explain which cells are affected. Keep independently supported cells computable.
84
+
85
+ Keep **all 12 months** on the ascending calendar-month axis and in the supporting
86
+ table, even if only a few months have data. For each brand/stage/month, show case
87
+ count and amount USD, rate numerator, sale denominator, denominator month,
88
+ observed date ranges, and coverage status. Distinguish missing history from
89
+ observed no-case months. Use `N/A` or a gap with an explanation when the rate
90
+ cannot be drawn under the point rules below; never fabricate history or zero
91
+ rates. Partial inputs may yield explicitly labeled extract-based estimates,
92
+ not complete-month monitoring results; disclose missing dates and small
93
+ denominators. A min/max event-date range does not prove continuous coverage.
94
+
95
+ If historical inputs cannot be obtained, retain the full 12-month coverage table
96
+ and state the missing layers/months. If no valid rate points remain, show the
97
+ 12-month axis as an empty rate plot with a no-data caption, not invented points.
98
+ If the chargeback layer is absent entirely, keep a section 4.8 history-coverage
99
+ notice and the 12-month coverage table; do not invent a case-stage breakdown.
100
+
101
+ ## Classify case stage first
102
+
103
+ Before calculating rates, classify each row from an explicit processor or
104
+ network case-stage/type/status field:
105
+
106
+ - **Normal chargeback / dispute**: a formally opened chargeback/dispute.
107
+ - **Pre-dispute**: explicitly identified as pre-dispute, RDR, CDRN, early
108
+ resolution, or the processor's equivalent pre-dispute product.
109
+ - **Unclassified**: the extract does not reliably identify the case stage.
110
+
111
+ Use the processor's data dictionary when labels are unclear. Do not infer
112
+ pre-dispute status from reason code, amount, timing, outcome, or free-text
113
+ description alone. Report counts and amounts for all three classes separately;
114
+ never silently treat pre-dispute or unclassified rows as normal chargebacks.
115
+ Unclassified cases appear in count/amount tables, not the normal or pre-dispute
116
+ rate series; any optional all-case descriptive rate must be labeled separately.
117
+
118
+ If no reliable classification field exists, report the separation as
119
+ unavailable. An all-case Visa dispute rate may be shown as descriptive only,
120
+ but it must not be called a normal chargeback rate or VAMP-style estimate.
121
+
122
+ ## When a point is drawn
123
+
124
+ A monthly point for a brand and case-stage series is drawn **only if**
125
+
126
+ - numerator for that specific series **received** in that calendar month > 0, and
127
+ - denominator (sales count for that brand, month as defined below) > 0.
128
+
129
+ Otherwise **omit the point**. Do not plot `0`. Do not invent a prior-month
130
+ sale count. Keep its month label and explain the gap in the 12-month table.
131
+ Do not connect lines across missing month points. If a series has no drawable
132
+ points, omit its line; if no series remain, retain the empty 12-month rate plot
133
+ and coverage table with an explicit no-data caption. Keep available case-stage
134
+ and reason-category bars.
135
+
136
+ ## Formulas (count)
137
+
138
+ Numerators use cases **received** in calendar month `M` (`Chargeback date`),
139
+ `Payment method` = that brand. Do not use original transaction month. Apply
140
+ the case-stage classification before counting.
141
+
142
+ | Brand / series | Programme alignment | Rate |
143
+ |---|---|---|
144
+ | Visa normal chargeback | VAMP dispute/sales timing (same month) | `Normal_CB_Visa(M) / Sales_Visa(M)` |
145
+ | Visa pre-dispute | Descriptive; excluded from VAMP | `PreDispute_Visa(M) / Sales_Visa(M)` |
146
+ | Mastercard normal chargeback | ECP / ECM chargeback timing (lagged sales) | `Normal_CB_MC(M) / Sales_MC(M−1)` |
147
+
148
+ `Sales_*` = settlement type Sale, that brand, **transaction/capture month**.
149
+ Do not mix refunds into the denominator.
150
+
151
+ Mastercard **must** use the previous calendar month’s sales. If `M−1`
152
+ sales are missing from the extract, skip Mastercard for month `M`. Keep any
153
+ Mastercard pre-dispute rows separate from its normal chargeback numerator; this
154
+ skill does not calculate a Mastercard pre-dispute rate unless the user asks.
155
+
156
+ ## Visa notes (do not over-claim VAMP)
157
+
158
+ Since 2025-04 Visa folded VDMP/VFMP into **VAMP**. Full VAMP Count is
159
+ `opened Visa chargebacks (TC15) + reported fraud (TC40 EFW)`, same-month
160
+ sales in the denominator. **Pre-dispute cases are not opened chargebacks and
161
+ must be excluded from the TC15/VAMP-style numerator.** This skill's extract
162
+ usually has chargebacks only → report **Visa normal 拒付率 = normal Visa CB
163
+ count / Visa same-month sales**, plus **Visa pre-dispute rate = Visa
164
+ pre-dispute count / Visa same-month sales** as a separate descriptive series.
165
+ Do not add the two series together. Do not label the normal rate “VAMP ratio”
166
+ unless TC40/EFW is present and the extract supports the full VAMP definition.
167
+
168
+ VAMP also has volume and enumeration legs; those are out of scope here.
169
+
170
+ ## Mastercard notes
171
+
172
+ ECP (ECM / HECM) uses **both** a count threshold and the lagged rate.
173
+ This report draws the **rate** series only. Do not say the merchant is
174
+ “in ECM” from the extract.
175
+
176
+ EFM is a different (fraud-reason + 3DS mix) programme; do not substitute
177
+ it for ECP.
178
+
179
+ ## Amount rate (optional footnote)
180
+
181
+ `abs(dispute amount) / sale amount` with the **same month alignment as
182
+ the count rate** for that brand. Keep normal and pre-dispute amounts separate.
183
+ Secondary; the line chart is count %.
184
+
185
+ ## Window caveat
186
+
187
+ A short extract (e.g. 22 days of August plus a handful of July sales)
188
+ cannot produce a Mastercard lagged rate for August unless July Mastercard
189
+ sales exist, and cannot produce Visa July if July CBs are absent. Follow
190
+ the skip rules; do not pad. A short main report does not shorten section 4.8's
191
+ 12-month axis. List missing historical inputs and keep partial-data estimates
192
+ distinct from complete-month programme monitoring.
193
+
194
+ ## Sources
195
+
196
+ - Stripe, *Dispute and fraud card monitoring programs*: Visa uses
197
+ disputes/fraud vs **same-month** payments; Mastercard uses
198
+ disputes/fraud vs **previous-month** payments; both assign the CB to
199
+ the month it was **received**.
200
+ https://docs.stripe.com/disputes/monitoring-programs
201
+ - Braintree, *Visa Acquirer Monitoring Program (VAMP)*: VAMP ratio =
202
+ VAMP Count / **same-month** Visa sales count
203
+ (example: August count / August sales).
204
+ https://developer.paypal.com/braintree/articles/risk-and-security/card-brand-monitoring-programs/visa-programs/visa-dispute-monitoring-program
205
+ - Chargebacks911 primer on Mastercard ECM rate: chargebacks in the
206
+ **current** month / Mastercard transactions in the **previous** month
207
+ (April 10,000 sales and May 90 CBs → May rate 1%).
208
+ https://chargebacks911.com/mastercard-chargebacks/mastercard-excessive-fraud-chargeback-monitoring-programs/mastercard-ecm-program-how-to-calculate-your-mastercard-chargeback-rate/
@@ -0,0 +1,51 @@
1
+ # Chinese polish guardrails
2
+
3
+ The final step runs `polish-cn` (`{polish-cn baseDir}/SKILL.md`) after `editorial-review`. This
4
+ file holds what `polish-cn` needs from this skill: the blocks, the protected terms, and the
5
+ guardrails to send with the brief.
6
+
7
+ ## Blocks
8
+
9
+ Polish the narrative source the renderer reads, not the rendered `.zh.md` or `.zh.html`. Write
10
+ `blocks.json` with one block per Chinese text block (`id` = the narrative block id, `text`, `sha`),
11
+ with the English text of the block as `en`. Apply accepted text to the narrative source, then
12
+ re-render every Chinese artifact from it. Never send tables of facts, chart payloads, raw payment
13
+ records, card or account identifiers, or credentials.
14
+
15
+ ## Protected terms
16
+
17
+ Pass these with `--protect-file`, plus every term in [terminology.md](terminology.md):
18
+
19
+ ```text
20
+ 授权尝试
21
+ 授权成功
22
+ 授权成功率
23
+ 授权拒绝
24
+ 疑似欺诈
25
+ 拒付
26
+ 拒付率
27
+ 预争议
28
+ 结算
29
+ 退款
30
+ USD
31
+ ```
32
+
33
+ ## Guardrails
34
+
35
+ Send with the brief:
36
+
37
+ > 这是支付业务分析报告。保持分类、分母、统计期间、汇率依据、缺失数据说明和样本量限制不变。
38
+ > 授权拒绝不是拒付;疑似欺诈响应不是已确认损失;未观察到记录不表示没有交易。
39
+ > 4.8 拒付部分展示欺诈与拒付期内的每个自然月(默认为报告月及此前 11 个月,以报告头注明的期间为准);
40
+ > 缺少数据的月份仍保留其位置,不以 0% 补齐。不得改动图表数据、表格和计算代码。
41
+
42
+ ## Accept
43
+
44
+ - Reject a rewrite that changes a claim's strength, a classification, a denominator or the subject
45
+ of a number, even when `check` passes.
46
+ - After applying, the facts, tables and chart payloads hash the same as before the polish, and the
47
+ English artifact is unchanged.
48
+ - Rerun the banned-string scan in [terminology.md](terminology.md) and the report's sanity check,
49
+ including the three report periods and the section 4.8 window.
50
+ - Write the `polish-cn` record (model, fallback reason, blocks applied) into the run record, never
51
+ into the report's data-source footer.
@@ -0,0 +1,127 @@
1
+ # Event layers, grains, and joins
2
+
3
+ ## Layers
4
+
5
+ | Layer | Example filename pattern | Default grain | Usual time field |
6
+ |---|---|---|---|
7
+ | Authorizations | `Authorizations_*authorizations.csv` | one auth attempt | `Timestamp` |
8
+ | Settlements | `Sales-and-refunds_*settlements.csv` | one sale or refund | `Timestamp` or `Settlement date` |
9
+ | Chargebacks | `Chargebacks_*chargebacks.csv` | one dispute | `Chargeback date`; origination via `Original transaction timestamp` |
10
+
11
+ A run may use one, two, or all three layers. Name every layer used and every layer
12
+ missing.
13
+
14
+ ## Portfolio constants to record
15
+
16
+ When columns exist and are near-constant, state them once (do not treat as
17
+ drivers):
18
+
19
+ - MID / Gateway MID
20
+ - MCC
21
+ - Provider / acquirer path
22
+ - Transaction source / entry method
23
+ - Billing descriptor / sub merchant
24
+
25
+ ## Keys and joins
26
+
27
+ | Join | Left | Right | Notes |
28
+ |---|---|---|---|
29
+ | Auth ↔ Chargeback | `Order ID` | `Original transaction order ID` | Primary for this Pazien-style extract |
30
+ | Auth ↔ Settlement | `Order ID` | `Order ID` | May be 1:n if capture/refund splits |
31
+ | Weak identity | masked `Account`, `IIN` | same | Collisions possible; fine for contribution tables, not unique-customer claims |
32
+
33
+ Report match rates whenever a join supports a claim (“N of M chargebacks match an
34
+ auth in file”).
35
+
36
+ ## Currency
37
+
38
+ Reporting amounts are USD. Conversion rules: [fx.md](fx.md).
39
+
40
+ 1. Prefer native USD rows; convert every non-USD amount before summing.
41
+ 2. Never add USD + EUR (etc.) into one total without FX and a disclosure.
42
+ 3. Count KPIs never need FX.
43
+
44
+ ## Window selection
45
+
46
+ The step-0 preflight fixes three periods. Set them in this order:
47
+
48
+ 1. Ceiling: the earliest of the user's as-of date, the execution date, and the
49
+ data end. The data end is the earliest last-event date among the layers a
50
+ period uses, so numerators and denominators share one end. Disclose each
51
+ layer's own last date.
52
+ 2. Main period, from the table below, capped at the ceiling. Apply the no-data
53
+ fallback here, before `M` exists.
54
+ 3. `M`: the user's explicit report month, otherwise the month containing the
55
+ main period's end date.
56
+ 4. History cutoff for the trend and fraud & chargeback periods: the main
57
+ period's end date when it falls in `M`, otherwise the last day of `M`;
58
+ capped at the ceiling. Label `M` month-to-date when this cutoff falls before
59
+ its last day. An explicit `M` ending before the main period (e.g. 4.8 for
60
+ December with a January main period) cuts history at December 31.
61
+
62
+ ### Main period
63
+
64
+ | User ask | Main period |
65
+ |---|---|
66
+ | Nothing stated | this month to date: the 1st of the execution month → cutoff |
67
+ | Full extract | min→max of chosen time field |
68
+ | A named month | that calendar month, capped at the cutoff; label MTD if incomplete |
69
+ | Most recent week / last 7 days | `(max_ts - 7d, max_ts]` |
70
+ | Calendar week | dates in that Mon–Sun (or local week rule; state it) |
71
+ | Compare recent vs prior (within the main period) | split at the same cut; show both |
72
+
73
+ If the extracts have no rows in the execution month, the default becomes the
74
+ latest calendar month with data (MTD if incomplete); say why. `M` is the month containing the
75
+ main period's end date, or the user's explicit report month.
76
+
77
+ ### Trend period
78
+
79
+ Default: the last 6 calendar months, `M-5` through `M` inclusive (calendar
80
+ arithmetic, not 182 days). A user-chosen N months spans `M-(N-1)` through `M`.
81
+ Bucket 4.2 by week; label the partial first and last weeks. Any
82
+ month-over-month comparison uses this period. Keep every week on the axis when
83
+ history is missing: a week with no source coverage shows no bar (not 0) and is
84
+ listed as missing. Do not shorten the period to the data.
85
+
86
+ ### Fraud & chargeback period
87
+
88
+ Default: the last 12 calendar months, `M-11` through `M` inclusive; a
89
+ user-chosen N months spans `M-(N-1)` through `M`. Wherever the skill says
90
+ "12 months" for section 4.8, it means this period. It covers section 4.8 per
91
+ [chargebacks.md](chargebacks.md) and every fraud-over-time chart (疑似欺诈
92
+ decline counts/rates by month). Record the separate
93
+ anchor/as-of cutoff and historical input coverage. Gather the extra preceding
94
+ sale month needed for Mastercard's earliest denominator; missing history does
95
+ not shorten the display.
96
+
97
+ Chargeback **programme 拒付率** uses received month (`Chargeback date`) per
98
+ [chargebacks.md](chargebacks.md). If you also show origination-month incidence,
99
+ label that separately so it is not mistaken for the Visa/Mastercard rate.
100
+ Before calculating a programme-style rate, identify the processor field that
101
+ distinguishes normal chargebacks from pre-disputes. Keep unclassified cases
102
+ separate; pre-disputes are excluded from Visa VAMP-style metrics and reported
103
+ as a separate Visa rate.
104
+
105
+ ## Decline taxonomy (auth)
106
+
107
+ Map with both code and message when present (example Pazien-style):
108
+
109
+ | Code | Message (typical) | Class |
110
+ |---|---|---|
111
+ | A001 | Approval - generic | approval |
112
+ | D102 | Suspected fraud | hard / fraud-coded |
113
+ | D104 | Insufficient funds | soft / funds |
114
+ | D387 | Policy reasons | hard / policy |
115
+ | D202 | Security code invalid | hard / data |
116
+ | D204 | Invalid Expiration date | hard / data |
117
+ | D210 | Do not honor | soft / issuer |
118
+ | R014 | Invalid transaction | reject |
119
+
120
+ Always recompute from the file; do not assume codes are portable across gateways.
121
+
122
+ ## What not to infer
123
+
124
+ - BIN country ≠ shipping or billing country
125
+ - Approval ≠ settled funds
126
+ - Suspected-fraud decline ≠ confirmed fraud loss
127
+ - Chargeback reason Fraud ≠ first-party vs third-party adjudication
@@ -0,0 +1,59 @@
1
+ # Amount currency → USD (Forex Service)
2
+
3
+ Reporting amounts are **USD**. Count KPIs never need FX.
4
+
5
+ Use the Forex Service (`~/projects/forex`), not a provider SDK, not a
6
+ spreadsheet rate, not realtime quotes for historical windows.
7
+
8
+ ## Which amount
9
+
10
+ | Layer | Amount | Currency |
11
+ |---|---|---|
12
+ | Authorization | `Transaction amount` | `Transaction amount currency` |
13
+ | Settlement | `Settlement amount` (fallback `Transaction amount`) | `Settlement amount currency` |
14
+ | Chargeback | `Dispute amount` | `Dispute amount currency` |
15
+
16
+ Ignore empty `Pre-DCC amount` (often `0` with blank currency). Do not treat BIN
17
+ country as the transaction currency.
18
+
19
+ ## Rules
20
+
21
+ 1. If every used currency field is `USD`, keep native amounts. Write
22
+ `金额均为 USD`. Do **not** call Forex Service and do **not** write
23
+ `未做汇率折算`.
24
+ 2. If any row is not USD, convert **that row** to USD before any amount sum,
25
+ share, ticket size, or dual-axis amount chart.
26
+ 3. Historical / windowed reports use **daily** conversion, not realtime:
27
+
28
+ `POST {FOREX_BASE_URL}/api/v1/conversions/daily`
29
+
30
+ Body:
31
+
32
+ ```json
33
+ {
34
+ "quoteCurrency": "USD",
35
+ "date": "<UTC Rate Date = transaction date in the extract>",
36
+ "items": [{ "currency": "EUR", "amount": "100.00" }]
37
+ }
38
+ ```
39
+
40
+ Prefer one request per Rate Date: either `conversions/daily` for the day's
41
+ distinct currencies, or `POST /api/v1/rates/daily` then multiply locally
42
+ (`converted = native × rate`, decimal strings).
43
+ 4. Fail closed if a non-USD row has no daily rate. Do not drop it silently and
44
+ do not mix native EUR with USD in one total.
45
+ 5. Auth: `forex:read` bearer token, audience `forex-service`. Base URL default
46
+ `https://forex.1above.io`. Contract: `GET /integration/agent.json`.
47
+ 6. Footnote converted reports: Rate Date rule, quote USD, Forex Service daily
48
+ conversion (not realtime). Mark `realtimeFallback` if a current UTC day was
49
+ served as provisional.
50
+
51
+ ## Env
52
+
53
+ | Variable | Role |
54
+ |---|---|
55
+ | `FOREX_BASE_URL` | Default `https://forex.1above.io` |
56
+ | `FOREX_TOKEN` | Bearer with scope `forex:read` |
57
+
58
+ Mint the token from Identity (`client_credentials`, audience `forex-service`,
59
+ scope `forex:read`) as in the Forex Service integration guide.
@@ -0,0 +1,79 @@
1
+ # Payment journey (Sankey)
2
+
3
+ The journey is a **count** Sankey across checkpoints. Prefer ECharts (or
4
+ equivalent). Do not mix count and amount on one Sankey.
5
+
6
+ ## Checkpoint order
7
+
8
+ ```text
9
+ start → risk decision → 3DS → authorization → settlement
10
+ ```
11
+
12
+ ## Canonical state transitions
13
+
14
+ Use these edge names when the underlying fields exist:
15
+
16
+ | From | To |
17
+ |---|---|
18
+ | risk decision | accept |
19
+ | risk review | 3DS init |
20
+ | accept | non-3DS authorization |
21
+ | non-3DS authorization | non-3DS authorization approved |
22
+ | non-3DS authorization | non-3DS authorization declined |
23
+ | 3DS init | 3DS challenge |
24
+ | 3DS init | 3DS frictionless |
25
+ | 3DS init | 3DS reject |
26
+ | 3DS challenge | 3DS authenticated |
27
+ | 3DS challenge | 3DS authentication failed |
28
+ | 3DS frictionless | 3DS authorization |
29
+ | 3DS authenticated | 3DS authorization |
30
+ | 3DS authorization | 3DS authorization approved |
31
+ | 3DS authorization | 3DS authorization declined |
32
+
33
+ Settlement edges (when settlement layer present), from approved authorization
34
+ nodes only:
35
+
36
+ | From | To |
37
+ |---|---|
38
+ | non-3DS / 3DS authorization approved | settled sale |
39
+ | non-3DS / 3DS authorization approved | approved not settled |
40
+ | settled sale | refund (only if Order ID joins cleanly) |
41
+ | settled sale | chargeback fraud / non-fraud (optional) |
42
+
43
+ ## Skip unavailable checkpoints
44
+
45
+ If a checkpoint has no usable field in the extract, **omit its nodes and edges**.
46
+ Do not invent risk decisions or 3DS outcomes.
47
+
48
+ Examples:
49
+
50
+ - `Authentication method` / 3DS result all null → skip risk decision, risk
51
+ review, and every 3DS node. Collapse to:
52
+
53
+ ```text
54
+ start → authorization → authorization approved / declined → settlement…
55
+ ```
56
+
57
+ - Settlement file absent → stop after authorization approved/declined.
58
+ - Refunds with Order IDs that do not join auth approvals → footnote only; do not
59
+ force a refund edge.
60
+
61
+ Caption must list skipped checkpoints.
62
+
63
+ ## Mapping hints (when fields exist)
64
+
65
+ | Journey node | Typical source |
66
+ |---|---|
67
+ | risk decision / risk review | gateway risk action, review queue, step-up flag |
68
+ | accept | risk allow / no step-up |
69
+ | 3DS init / challenge / frictionless / reject | 3DS status / ECI / transStatus |
70
+ | 3DS authenticated / failed | challenge result |
71
+ | non-3DS / 3DS authorization approved | auth response = approval |
72
+ | non-3DS / 3DS authorization declined | auth response ≠ approval |
73
+ | settled sale | settlement type = Sale joined on Order ID |
74
+
75
+ ## Anti-patterns
76
+
77
+ - Drawing 3DS branches when authentication fields are empty
78
+ - Using amount on the journey Sankey
79
+ - Putting decline-reason fan-out on the journey (keep that in Topics charts)
@@ -0,0 +1,67 @@
1
+ # Metrics and denominators
2
+
3
+ Compute with explicit denominators. Prefer count and amount side by side.
4
+ Amounts are USD per [fx.md](fx.md) before any sum or share.
5
+
6
+ ## Authorization
7
+
8
+ | KPI | Formula | Notes |
9
+ |---|---|---|
10
+ | Attempts | count of auth rows in window | |
11
+ | Approvals | count where response = approval | |
12
+ | Auth rate | approvals / attempts | Not capture rate |
13
+ | Approved amount | sum(amount \| approval) | USD after [fx.md](fx.md) |
14
+ | Declines | attempts − approvals | Or hard-only if stated |
15
+ | Decline rate | declines / attempts | |
16
+ | Reason share (of declines) | reason_count / declines | Default for mix tables |
17
+ | Reason incidence (of attempts) | reason_count / attempts | Label clearly if used |
18
+ | Country attempt share | country_attempts / attempts | |
19
+ | Country amount share | country_attempt_amount_USD / attempt_amount_USD | Often diverges from attempt share |
20
+ | Country auth rate | country_approvals / country_attempts | Require min-n (e.g. ≥30) for rankings |
21
+
22
+ Trend grains: daily (`Timestamp` date) within the main period, and weekly
23
+ (state week rule, e.g. W-SUN) over the trend period.
24
+
25
+ Card product: `Payment method` × `Card type` when both exist.
26
+
27
+ ## Settlement
28
+
29
+ | KPI | Formula | Notes |
30
+ |---|---|---|
31
+ | Sale count / amount | Settlement type = Sale | |
32
+ | Refund count / amount | Settlement type = Refund | Show sign or absolute + label |
33
+ | Net settled amount | sales + refunds (refunds negative) | |
34
+ | Refund rate (count) | refunds / sales | |
35
+ | Refund rate (amount) | abs(refund amount) / sale amount | |
36
+ | Status mix | by Settlement status | |
37
+
38
+ Do not equalize settled sales to approved auth amount without a timing caveat.
39
+
40
+ ## Chargebacks
41
+
42
+ Monthly **拒付率** by brand is [chargebacks.md](chargebacks.md): classify normal,
43
+ pre-dispute, and unclassified cases first; Visa uses same-month sales and
44
+ reports pre-disputes separately; Mastercard normal chargebacks use
45
+ previous-month sales. Section 4.8 spans the fraud & chargeback period (default
46
+ `M-11` through `M`) regardless of the main analysis period; Mastercard may need
47
+ `M-12` sales. Keep every month label and coverage row, skip empty rate points, and do not blend Visa+Mastercard.
48
+ The table below is mix / match, not that programme rate.
49
+
50
+ | KPI | Formula | Notes |
51
+ |---|---|---|
52
+ | Normal / pre-dispute / unclassified count and amount | as classified | Amounts USD after [fx.md](fx.md); use abs for magnitude if signed |
53
+ | Reason mix | by Reason category / code | Fraud ≠ all CBs |
54
+ | Match rate to auths | matched / CB rows | State join key |
55
+ | Visa normal monthly 拒付率 | Normal_CB_Visa(M) / Sales_Visa(M) | Excludes pre-disputes; received month; not VAMP unless TC40 is present |
56
+ | Visa pre-dispute rate | PreDispute_Visa(M) / Sales_Visa(M) | Separate descriptive series; excluded from VAMP-style numerator |
57
+ | Mastercard normal monthly 拒付率 | Normal_CB_MC(M) / Sales_MC(M−1) | Excludes pre-disputes; skip M if M−1 sales missing |
58
+
59
+ Lag: chargeback date is later than original auth. Programme rates use
60
+ **received** month, not origination vintage.
61
+
62
+ ## Ranking and “Other”
63
+
64
+ - Rank countries by attempts unless the user asks for amount.
65
+ - Roll the long tail into `Other` after top 10–15; show Other share.
66
+ - For decline-by-country matrices, use top countries by attempts and top reasons
67
+ globally; collapse remaining reasons to `Other declines`.