@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.
- package/README.md +30 -2
- package/bin/cli.mjs +14 -0
- package/bin/select-core.mjs +172 -0
- package/package.json +146 -4
- package/skills/app-dev/airflow/LICENSE +3 -0
- package/skills/app-dev/airflow/SKILL.md +199 -0
- package/skills/app-dev/airflow/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/LICENSE +3 -0
- package/skills/app-dev/android-foundation/SKILL.md +192 -0
- package/skills/app-dev/android-foundation/assets/android-ci-job.yml +217 -0
- package/skills/app-dev/android-foundation/references/ci.md +87 -0
- package/skills/app-dev/android-foundation/references/gotchas.md +221 -0
- package/skills/app-dev/android-foundation/references/setup.md +164 -0
- package/skills/app-dev/android-foundation/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/scripts/device-run.sh +176 -0
- package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +172 -0
- package/skills/app-dev/app-debug/LICENSE +3 -0
- package/skills/app-dev/app-debug/SKILL.md +110 -0
- package/skills/app-dev/app-debug/references/common-errors.md +128 -0
- package/skills/app-dev/app-debug/release-check.mjs +93 -0
- package/skills/app-dev/better-auth/LICENSE +3 -0
- package/skills/app-dev/better-auth/SKILL.md +598 -0
- package/skills/app-dev/better-auth/references/feishu-api.md +270 -0
- package/skills/app-dev/better-auth/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/LICENSE +3 -0
- package/skills/app-dev/data-catalog/SKILL.md +204 -0
- package/skills/app-dev/data-catalog/agents/openai.yaml +3 -0
- package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +75 -0
- package/skills/app-dev/data-catalog/references/field-definitions.md +116 -0
- package/skills/app-dev/data-catalog/references/format.md +121 -0
- package/skills/app-dev/data-catalog/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +36 -0
- package/skills/app-dev/data-catalog/scripts/data_catalog.py +1392 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +117 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +17 -0
- package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +571 -0
- package/skills/app-dev/ios-foundation/LICENSE +3 -0
- package/skills/app-dev/ios-foundation/SKILL.md +184 -0
- package/skills/app-dev/ios-foundation/references/setup.md +243 -0
- package/skills/app-dev/ios-foundation/release-check.mjs +93 -0
- package/skills/app-dev/monorepo/LICENSE +3 -0
- package/skills/app-dev/monorepo/SKILL.md +462 -0
- package/skills/app-dev/monorepo/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/LICENSE +3 -0
- package/skills/app-dev/nextjs-fullstack/SKILL.md +211 -0
- package/skills/app-dev/nextjs-fullstack/conventions.md +318 -0
- package/skills/app-dev/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/app-dev/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/app-dev/nextjs-fullstack/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/server-actions.md +409 -0
- package/skills/app-dev/prisma-setup/LICENSE +3 -0
- package/skills/app-dev/prisma-setup/SKILL.md +181 -0
- package/skills/app-dev/prisma-setup/nextjs.md +258 -0
- package/skills/app-dev/prisma-setup/release-check.mjs +93 -0
- package/skills/app-dev/prisma-setup/turborepo.md +301 -0
- package/skills/app-dev/pyspark/LICENSE +3 -0
- package/skills/app-dev/pyspark/SKILL.md +127 -0
- package/skills/app-dev/pyspark/assets/templates/etl.py +748 -0
- package/skills/app-dev/pyspark/assets/templates/utils/__init__.py +1 -0
- package/skills/app-dev/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
- package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +169 -0
- package/skills/app-dev/pyspark/references/etl-contract.md +129 -0
- package/skills/app-dev/pyspark/references/production-validation.md +131 -0
- package/skills/app-dev/pyspark/references/reconciliation.md +38 -0
- package/skills/app-dev/pyspark/references/transformation-design.md +190 -0
- package/skills/app-dev/pyspark/references/velocity-feature-calculation.md +193 -0
- package/skills/app-dev/pyspark/release-check.mjs +93 -0
- package/skills/app-dev/pyspark/scripts/spark_eventlog_summary.py +223 -0
- package/skills/app-dev/python-backend/LICENSE +3 -0
- package/skills/app-dev/python-backend/SKILL.md +325 -0
- package/skills/app-dev/python-backend/assets/uv-install.sh +48 -0
- package/skills/app-dev/python-backend/references/uv-installs.md +83 -0
- package/skills/app-dev/python-backend/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/LICENSE +3 -0
- package/skills/app-dev/shadcn/SKILL.md +120 -0
- package/skills/app-dev/shadcn/assets/shadcn-small.png +0 -0
- package/skills/app-dev/shadcn/assets/shadcn.png +0 -0
- package/skills/app-dev/shadcn/cli.md +411 -0
- package/skills/app-dev/shadcn/customization.md +224 -0
- package/skills/app-dev/shadcn/mcp.md +101 -0
- package/skills/app-dev/shadcn/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/app-dev/shadcn/rules/component-selection.md +67 -0
- package/skills/app-dev/shadcn/rules/composition.md +195 -0
- package/skills/app-dev/shadcn/rules/data-table.md +201 -0
- package/skills/app-dev/shadcn/rules/forms.md +255 -0
- package/skills/app-dev/shadcn/rules/icons.md +103 -0
- package/skills/app-dev/shadcn/rules/styling.md +167 -0
- package/skills/app-dev/zod-v4/LICENSE +3 -0
- package/skills/app-dev/zod-v4/SKILL.md +286 -0
- package/skills/app-dev/zod-v4/release-check.mjs +93 -0
- package/skills/cicd/cloud-build/LICENSE +3 -0
- package/skills/cicd/cloud-build/SKILL.md +707 -0
- package/skills/cicd/cloud-build/release-check.mjs +93 -0
- package/skills/cicd/cloud-debug/LICENSE +3 -0
- package/skills/cicd/cloud-debug/SKILL.md +315 -0
- package/skills/cicd/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd/cloud-debug/release-check.mjs +93 -0
- package/skills/cicd/cloud-deploy/LICENSE +3 -0
- package/skills/cicd/cloud-deploy/SKILL.md +230 -0
- package/skills/cicd/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd/cloud-deploy/release-check.mjs +93 -0
- package/skills/cicd/docker/LICENSE +3 -0
- package/skills/cicd/docker/SKILL.md +151 -0
- package/skills/cicd/docker/release-check.mjs +93 -0
- package/skills/cicd/github-actions/LICENSE +3 -0
- package/skills/cicd/github-actions/SKILL.md +111 -0
- package/skills/cicd/github-actions/references/audit-profile-optimize.md +150 -0
- package/skills/cicd/github-actions/references/ci-case-studies.md +141 -0
- package/skills/cicd/github-actions/references/conditional-ci.md +214 -0
- package/skills/cicd/github-actions/references/debugging.md +13 -0
- package/skills/cicd/github-actions/references/pipeline.md +87 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +33 -0
- package/skills/cicd/github-actions/references/runners.md +253 -0
- package/skills/cicd/github-actions/references/security.md +29 -0
- package/skills/cicd/github-actions/references/speed-and-audit.md +115 -0
- package/skills/cicd/github-actions/references/two-pass-reading.md +92 -0
- package/skills/cicd/github-actions/release-check.mjs +93 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit-core.mjs +612 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.mjs +4 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +637 -0
- package/skills/cicd/github-flow/LICENSE +3 -0
- package/skills/cicd/github-flow/SKILL.md +123 -0
- package/skills/cicd/github-flow/references/ci-conventions.md +14 -0
- package/skills/cicd/github-flow/release-check.mjs +93 -0
- package/skills/cicd/github-flow/scripts/flow-core.mjs +105 -0
- package/skills/cicd/github-flow/scripts/flow.mjs +81 -0
- package/skills/cicd/github-flow/scripts/flow.test.mjs +114 -0
- package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +117 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.mjs +49 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +108 -0
- package/skills/cicd/google-cloud/LICENSE +3 -0
- package/skills/cicd/google-cloud/SKILL.md +119 -0
- package/skills/cicd/google-cloud/references/gcs.md +469 -0
- package/skills/cicd/google-cloud/references/iam.md +451 -0
- package/skills/cicd/google-cloud/references/project.md +349 -0
- package/skills/cicd/google-cloud/references/secrets.md +336 -0
- package/skills/cicd/google-cloud/references/vpc.md +312 -0
- package/skills/cicd/google-cloud/release-check.mjs +93 -0
- package/skills/cicd/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd/mergify/LICENSE +3 -0
- package/skills/cicd/mergify/SKILL.md +102 -0
- package/skills/cicd/mergify/assets/templates/mergify.yml +215 -0
- package/skills/cicd/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd/mergify/references/branch-protection.md +282 -0
- package/skills/cicd/mergify/references/configuration.md +274 -0
- package/skills/cicd/mergify/references/diagnosis.md +109 -0
- package/skills/cicd/mergify/references/stacks.md +84 -0
- package/skills/cicd/mergify/references/traps.md +119 -0
- package/skills/cicd/mergify/references/watch-contract.md +274 -0
- package/skills/cicd/mergify/release-check.mjs +93 -0
- package/skills/cicd/mergify/scripts/audit-core.mjs +208 -0
- package/skills/cicd/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd/mergify/scripts/audit.test.mjs +201 -0
- package/skills/cicd/mergify/scripts/entrypoints.test.mjs +106 -0
- package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +30 -0
- package/skills/cicd/mergify/scripts/stack-push-core.mjs +258 -0
- package/skills/cicd/mergify/scripts/stack-push.mjs +4 -0
- package/skills/cicd/mergify/scripts/stack-push.test.mjs +233 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +1065 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +1826 -0
- package/skills/cicd/podman/LICENSE +3 -0
- package/skills/cicd/podman/SKILL.md +71 -0
- package/skills/cicd/podman/agents/openai.yaml +4 -0
- package/skills/cicd/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd/podman/references/troubleshooting.md +98 -0
- package/skills/cicd/podman/release-check.mjs +93 -0
- package/skills/content/article-review/LICENSE +3 -0
- package/skills/content/article-review/SKILL.md +66 -0
- package/skills/content/article-review/references/report-format.md +68 -0
- package/skills/content/article-review/references/template-guide.md +79 -0
- package/skills/content/article-review/references/template-wechat-payments.md +125 -0
- package/skills/content/article-review/release-check.mjs +93 -0
- package/skills/content/article-to-image/LICENSE +3 -0
- package/skills/content/article-to-image/SKILL.md +91 -0
- package/skills/content/article-to-image/references/formats.md +53 -0
- package/skills/content/article-to-image/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/LICENSE +3 -0
- package/skills/content/flowchart-svg/SKILL.md +43 -0
- package/skills/content/flowchart-svg/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/scripts/export_png.sh +8 -0
- package/skills/content/image-gen/LICENSE +3 -0
- package/skills/content/image-gen/SKILL.md +192 -0
- package/skills/content/image-gen/release-check.mjs +93 -0
- package/skills/content/image-gen/scripts/credentials.mjs +217 -0
- package/skills/content/image-gen/scripts/credentials.test.mjs +212 -0
- package/skills/content/image-gen/scripts/generate.mjs +240 -0
- package/skills/content/image-gen/scripts/options.mjs +293 -0
- package/skills/content/image-gen/scripts/options.test.mjs +245 -0
- package/skills/content/mermaid/LICENSE +3 -0
- package/skills/content/mermaid/SKILL.md +635 -0
- package/skills/content/mermaid/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/LICENSE +3 -0
- package/skills/content/wechat-article-writer/SKILL.md +92 -0
- package/skills/content/wechat-article-writer/references/style-selector.md +133 -0
- package/skills/content/wechat-article-writer/references/writing-rules.md +152 -0
- package/skills/content/wechat-article-writer/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/templates/wechat-comparison.md +52 -0
- package/skills/content/wechat-article-writer/templates/wechat-howto.md +51 -0
- package/skills/content/wechat-article-writer/templates/wechat-insight.md +50 -0
- package/skills/content/wechat-article-writer/templates/wechat-pitfall.md +52 -0
- package/skills/content/wechat-publisher/LICENSE +3 -0
- package/skills/content/wechat-publisher/SKILL.md +171 -0
- package/skills/content/wechat-publisher/references/api.md +105 -0
- package/skills/content/wechat-publisher/references/layout-rules.md +57 -0
- package/skills/content/wechat-publisher/references/wechat-safe-template.html +86 -0
- package/skills/content/wechat-publisher/release-check.mjs +93 -0
- package/skills/content/wechat-publisher/scripts/md_to_wechat_html.py +194 -0
- package/skills/content/wechat-publisher/scripts/publish.py +239 -0
- package/skills/content/wechat-search/LICENSE +3 -0
- package/skills/content/wechat-search/SKILL.md +211 -0
- package/skills/content/wechat-search/release-check.mjs +93 -0
- package/skills/content/wechat-search/scripts/start-chrome.sh +83 -0
- package/skills/content/xai-search/LICENSE +3 -0
- package/skills/content/xai-search/SKILL.md +79 -0
- package/skills/content/xai-search/release-check.mjs +93 -0
- package/skills/content/xai-search/scripts/xai_search.sh +187 -0
- package/skills/content/xai-search/tests/smoke_test.sh +36 -0
- package/skills/core/distill-writing/LICENSE +3 -0
- package/skills/core/distill-writing/SKILL.md +74 -0
- package/skills/core/distill-writing/references/extraction.md +95 -0
- package/skills/core/distill-writing/references/updating.md +46 -0
- package/skills/core/distill-writing/release-check.mjs +93 -0
- package/skills/core/doc-to-md/LICENSE +3 -0
- package/skills/core/doc-to-md/SKILL.md +78 -0
- package/skills/core/doc-to-md/release-check.mjs +93 -0
- package/skills/core/doc-to-md/scripts/convert.py +157 -0
- package/skills/core/editorial-review/LICENSE +3 -0
- package/skills/core/editorial-review/SKILL.md +79 -0
- package/skills/core/editorial-review/references/checklist.md +94 -0
- package/skills/core/editorial-review/release-check.mjs +93 -0
- package/skills/core/house-style/LICENSE +3 -0
- package/skills/core/house-style/SKILL.md +33 -0
- package/skills/core/house-style/references/defaults.md +66 -0
- package/skills/core/house-style/references/rules.md +267 -0
- package/skills/core/house-style/references/sources.md +27 -0
- package/skills/core/house-style/references/style-en.md +131 -0
- package/skills/core/house-style/references/style-zh.md +141 -0
- package/skills/core/house-style/references/terminology-zh.md +223 -0
- package/skills/core/house-style/release-check.mjs +93 -0
- package/skills/core/house-style/templates/brd.md +103 -0
- package/skills/core/house-style/templates/commercial-proposal.md +93 -0
- package/skills/core/house-style/templates/compliance-policy.md +109 -0
- package/skills/core/house-style/templates/gap-analysis.md +105 -0
- package/skills/core/house-style/templates/general.md +63 -0
- package/skills/core/house-style/templates/integration-guide.md +98 -0
- package/skills/core/house-style/templates/prd.md +81 -0
- package/skills/core/house-style/templates/risk-operations-procedure.md +94 -0
- package/skills/core/house-style/templates/technical-spec.md +96 -0
- package/skills/core/polish-cn/LICENSE +3 -0
- package/skills/core/polish-cn/SKILL.md +102 -0
- package/skills/core/polish-cn/references/brief.md +93 -0
- package/skills/core/polish-cn/references/models.md +76 -0
- package/skills/core/polish-cn/release-check.mjs +93 -0
- package/skills/core/polish-cn/scripts/polish-cn.test.mjs +244 -0
- package/skills/core/polish-cn/scripts/polish_blocks.py +489 -0
- package/skills/core/reg-parser/LICENSE +3 -0
- package/skills/core/reg-parser/SKILL.md +212 -0
- package/skills/core/reg-parser/references/checklist-schema.md +223 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
- package/skills/core/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
- package/skills/core/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
- package/skills/core/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
- package/skills/core/reg-parser/references/mandates/visa-vars.md +205 -0
- package/skills/core/reg-parser/release-check.mjs +93 -0
- package/skills/core/reg-parser/scripts/compare_checklist.py +230 -0
- package/skills/core/reg-parser/scripts/dump_checklist.py +361 -0
- package/skills/core/reg-parser/scripts/preprocess-mandate.sh +187 -0
- package/skills/core/reg-parser/scripts/reg-parser.test.mjs +165 -0
- package/skills/core/reg-parser/scripts/test_quarantine.sh +105 -0
- package/skills/core/reg-parser/scripts/validate_checklist.py +563 -0
- package/skills/core/reg-parser/scripts/validate_mandate.py +273 -0
- package/skills/core/terminology/LICENSE +3 -0
- package/skills/core/terminology/SKILL.md +62 -0
- package/skills/core/terminology/references/format.md +50 -0
- package/skills/core/terminology/references/init.md +32 -0
- package/skills/core/terminology/release-check.mjs +93 -0
- package/skills/core/write-doc/LICENSE +3 -0
- package/skills/core/write-doc/SKILL.md +141 -0
- package/skills/core/write-doc/references/bilingual.md +60 -0
- package/skills/core/write-doc/release-check.mjs +93 -0
- package/skills/engineering/better-review/LICENSE +3 -0
- package/skills/engineering/better-review/SKILL.md +249 -0
- package/skills/engineering/better-review/agents/openai.yaml +9 -0
- package/skills/engineering/better-review/references/domain-hazards.md +53 -0
- package/skills/engineering/better-review/references/passes.md +147 -0
- package/skills/engineering/better-review/references/result.md +151 -0
- package/skills/engineering/better-review/release-check.mjs +93 -0
- package/skills/engineering/better-review/scripts/pr-context.mjs +212 -0
- package/skills/engineering/better-review/scripts/pr-context.test.mjs +168 -0
- package/skills/engineering/better-review/scripts/rereview-scope.mjs +503 -0
- package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +587 -0
- package/skills/engineering/better-review/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/better-review/scripts/scan-diff.test.mjs +414 -0
- package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +96 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +98 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +24 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +73 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +144 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +25 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +290 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +104 -0
- package/skills/engineering/e2e-test/references/reviewing.md +41 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +51 -0
- package/skills/engineering/e2e-test/release-check.mjs +93 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +106 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +117 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +69 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +98 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +147 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +71 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +59 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +82 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +76 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +11 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +597 -0
- package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +68 -0
- package/skills/engineering/engineering-runtime/release-check.mjs +93 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.mjs +187 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +95 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +79 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +288 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +96 -0
- package/skills/engineering/engineering-runtime/scripts/review-completion.mjs +56 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +595 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +189 -0
- package/skills/engineering/engineering-runtime/scripts/yaml-mapping.mjs +18 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +129 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +92 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +85 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +19 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +57 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +39 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +44 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +110 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +35 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +64 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +27 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +56 -0
- package/skills/engineering/ensure-coverage/release-check.mjs +93 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +67 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +140 -0
- package/skills/engineering/ensure-coverage/scripts/README.md +99 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +182 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +96 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +105 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +47 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +137 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +86 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +674 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +447 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +552 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +282 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +289 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/golden-path/LICENSE +3 -0
- package/skills/engineering/golden-path/SKILL.md +230 -0
- package/skills/engineering/golden-path/agents/openai.yaml +3 -0
- package/skills/engineering/golden-path/assets/golden-paths.example.json +57 -0
- package/skills/engineering/golden-path/references/contract.md +239 -0
- package/skills/engineering/golden-path/references/migration.md +111 -0
- package/skills/engineering/golden-path/release-check.mjs +93 -0
- package/skills/engineering/golden-path/scripts/golden-path-core.mjs +1779 -0
- package/skills/engineering/golden-path/scripts/golden-path.mjs +6 -0
- package/skills/engineering/golden-path/scripts/golden-path.test.mjs +1457 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +19 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/discover-models.test.mjs +363 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/harness-runtime.test.mjs +967 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +829 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/model-catalog.test.mjs +366 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +408 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/harness-runtime/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +250 -0
- package/skills/engineering/resolve-issues/agents/openai.yaml +9 -0
- package/skills/engineering/resolve-issues/plugin-hooks.json +17 -0
- package/skills/engineering/resolve-issues/references/canary.md +28 -0
- package/skills/engineering/resolve-issues/references/ci.md +105 -0
- package/skills/engineering/resolve-issues/references/done.md +25 -0
- package/skills/engineering/resolve-issues/references/dropbox.md +90 -0
- package/skills/engineering/resolve-issues/references/expire.md +318 -0
- package/skills/engineering/resolve-issues/references/exploration.md +202 -0
- package/skills/engineering/resolve-issues/references/implementation.md +303 -0
- package/skills/engineering/resolve-issues/references/preflight.md +445 -0
- package/skills/engineering/resolve-issues/references/review.md +228 -0
- package/skills/engineering/resolve-issues/references/shared-modules.md +44 -0
- package/skills/engineering/resolve-issues/references/task-plan.md +264 -0
- package/skills/engineering/resolve-issues/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +364 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +280 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.mjs +473 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +346 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +88 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.mjs +384 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +264 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +135 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.mjs +162 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +107 -0
- package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +14 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +149 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +856 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +915 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +269 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +156 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +736 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +448 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.mjs +185 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +217 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +91 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +509 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +1060 -0
- package/skills/engineering/resolve-issues/scripts/size-check.mjs +492 -0
- package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +458 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +215 -0
- package/skills/engineering/resolve-release/agents/openai.yaml +8 -0
- package/skills/engineering/resolve-release/flows/cloud-run-canary.md +13 -0
- package/skills/engineering/resolve-release/flows/cloud-run.md +7 -0
- package/skills/engineering/resolve-release/flows/root-tag-npm.md +13 -0
- package/skills/engineering/resolve-release/flows/workspace-npm.md +22 -0
- package/skills/engineering/resolve-release/references/canary.md +51 -0
- package/skills/engineering/resolve-release/references/candidate.md +41 -0
- package/skills/engineering/resolve-release/references/cut.md +131 -0
- package/skills/engineering/resolve-release/references/dark-launch.md +66 -0
- package/skills/engineering/resolve-release/references/flows.md +150 -0
- package/skills/engineering/resolve-release/references/preflight.md +154 -0
- package/skills/engineering/resolve-release/references/prepared-metadata.md +260 -0
- package/skills/engineering/resolve-release/references/promotion.md +82 -0
- package/skills/engineering/resolve-release/references/publish.md +232 -0
- package/skills/engineering/resolve-release/references/workspace-npm.md +103 -0
- package/skills/engineering/resolve-release/release-check.mjs +93 -0
- package/skills/engineering/resolve-release/scripts/apply.mjs +212 -0
- package/skills/engineering/resolve-release/scripts/apply.test.mjs +99 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.mjs +134 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +100 -0
- package/skills/engineering/resolve-release/scripts/flow.mjs +500 -0
- package/skills/engineering/resolve-release/scripts/flow.test.mjs +340 -0
- package/skills/engineering/resolve-release/scripts/green-head.mjs +231 -0
- package/skills/engineering/resolve-release/scripts/green-head.test.mjs +101 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.mjs +138 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +426 -0
- package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +317 -0
- package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +291 -0
- package/skills/engineering/resolve-release/scripts/plan.mjs +806 -0
- package/skills/engineering/resolve-release/scripts/plan.test.mjs +428 -0
- package/skills/engineering/rush-issues/LICENSE +3 -0
- package/skills/engineering/rush-issues/SKILL.md +58 -0
- package/skills/engineering/rush-issues/agents/openai.yaml +8 -0
- package/skills/engineering/rush-issues/rehydrate.mjs +10 -0
- package/skills/engineering/rush-issues/release-check.mjs +93 -0
- package/skills/engineering/rush-release/LICENSE +3 -0
- package/skills/engineering/rush-release/SKILL.md +35 -0
- package/skills/engineering/rush-release/agents/openai.yaml +8 -0
- package/skills/engineering/rush-release/release-check.mjs +93 -0
- package/skills/engineering/test-quality/LICENSE +3 -0
- package/skills/engineering/test-quality/SKILL.md +79 -0
- package/skills/engineering/test-quality/references/audit.md +80 -0
- package/skills/engineering/test-quality/references/lint.md +24 -0
- package/skills/engineering/test-quality/references/principles.md +143 -0
- package/skills/engineering/test-quality/references/testing-conventions.md +9 -0
- package/skills/engineering/test-quality/release-check.mjs +93 -0
- package/skills/engineering/test-quality/scripts/lint-tests.mjs +574 -0
- package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +591 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +117 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.mjs +17 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +104 -0
- package/skills/risk-compliance/compliance-audit/LICENSE +3 -0
- package/skills/risk-compliance/compliance-audit/SKILL.md +439 -0
- package/skills/risk-compliance/compliance-audit/references/findings-schema.md +293 -0
- package/skills/risk-compliance/compliance-audit/references/normalization-rules.md +45 -0
- package/skills/risk-compliance/compliance-audit/references/vars-checklist.md +1068 -0
- package/skills/risk-compliance/compliance-audit/references/vars-findings-schema.md +398 -0
- package/skills/risk-compliance/compliance-audit/release-check.mjs +93 -0
- package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +14 -0
- package/skills/risk-compliance/compliance-audit/scripts/export_tracker_xlsx.py +221 -0
- package/skills/risk-compliance/compliance-audit/scripts/reconcile_tracker.py +458 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_export_tracker_xlsx.py +97 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_validate_tracker.py +157 -0
- package/skills/risk-compliance/compliance-audit/scripts/validate_tracker.py +829 -0
- package/skills/risk-compliance/contract-compare/LICENSE +3 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +199 -0
- package/skills/risk-compliance/contract-compare/references/comparison-dimensions.md +209 -0
- package/skills/risk-compliance/contract-compare/release-check.mjs +93 -0
- package/skills/risk-compliance/contract-review/LICENSE +3 -0
- package/skills/risk-compliance/contract-review/SKILL.md +240 -0
- package/skills/risk-compliance/contract-review/references/review-criteria.md +223 -0
- package/skills/risk-compliance/contract-review/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/LICENSE +3 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +160 -0
- package/skills/risk-compliance/doc-authenticity/agents/openai.yaml +8 -0
- package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +12 -0
- package/skills/risk-compliance/doc-authenticity/references/agreement.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/bank-statement.md +150 -0
- package/skills/risk-compliance/doc-authenticity/references/forensic-signals.md +157 -0
- package/skills/risk-compliance/doc-authenticity/references/image-signals.md +114 -0
- package/skills/risk-compliance/doc-authenticity/references/invoice.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/issuer-profiles.md +86 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict-and-report.md +95 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict.schema.json +81 -0
- package/skills/risk-compliance/doc-authenticity/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/scripts/image_forensics.py +294 -0
- package/skills/risk-compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_codes.py +224 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +212 -0
- package/skills/risk-compliance/fraud-analysis/LICENSE +3 -0
- package/skills/risk-compliance/fraud-analysis/SKILL.md +114 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md +41 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/first-party-fraud.md +44 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +27 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/bank-transfer.md +24 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +30 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/feature-engineering.md +158 -0
- package/skills/risk-compliance/fraud-analysis/references/mechanisms/account-takeover.md +36 -0
- package/skills/risk-compliance/fraud-analysis/references/report-rationale.md +45 -0
- package/skills/risk-compliance/fraud-analysis/references/report-template.md +190 -0
- package/skills/risk-compliance/fraud-analysis/references/review-checklist.md +175 -0
- package/skills/risk-compliance/fraud-analysis/references/taxonomy.md +79 -0
- package/skills/risk-compliance/fraud-analysis/references/terminology.md +108 -0
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +175 -0
- package/skills/risk-compliance/fraud-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +180 -0
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +30 -0
- package/skills/risk-compliance/payment-analysis/references/chargebacks.md +208 -0
- package/skills/risk-compliance/payment-analysis/references/chinese-polish.md +51 -0
- package/skills/risk-compliance/payment-analysis/references/event-layers.md +127 -0
- package/skills/risk-compliance/payment-analysis/references/fx.md +59 -0
- package/skills/risk-compliance/payment-analysis/references/journey.md +79 -0
- package/skills/risk-compliance/payment-analysis/references/metrics.md +67 -0
- package/skills/risk-compliance/payment-analysis/references/report-template.md +119 -0
- package/skills/risk-compliance/payment-analysis/references/terminology.md +95 -0
- package/skills/risk-compliance/payment-analysis/references/visualization.md +56 -0
- package/skills/risk-compliance/payment-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/report-writing/LICENSE +3 -0
- package/skills/risk-compliance/report-writing/SKILL.md +220 -0
- package/skills/risk-compliance/report-writing/references/audit-report-template.md +121 -0
- package/skills/risk-compliance/report-writing/references/external-assessment-template.md +167 -0
- package/skills/risk-compliance/report-writing/references/management-report-template.md +145 -0
- package/skills/risk-compliance/report-writing/references/vars-report-template.md +224 -0
- package/skills/risk-compliance/report-writing/release-check.mjs +93 -0
- package/skills/risk-compliance/similar-domain/LICENSE +3 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +203 -0
- package/skills/risk-compliance/similar-domain/references/entities.md +67 -0
- package/skills/risk-compliance/similar-domain/references/fingerprints.md +134 -0
- package/skills/risk-compliance/similar-domain/references/pivots.md +82 -0
- package/skills/risk-compliance/similar-domain/references/report-template.md +93 -0
- package/skills/risk-compliance/similar-domain/references/scoring.md +130 -0
- package/skills/risk-compliance/similar-domain/references/terminology.md +41 -0
- package/skills/risk-compliance/similar-domain/references/workflow.md +85 -0
- package/skills/risk-compliance/similar-domain/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/LICENSE +3 -0
- package/skills/risk-compliance/tld-detection/SKILL.md +245 -0
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +9 -0
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +55 -0
- package/skills/risk-compliance/tld-detection/references/clean.md +51 -0
- package/skills/risk-compliance/tld-detection/references/clustering.md +235 -0
- package/skills/risk-compliance/tld-detection/references/decision.md +189 -0
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +232 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +272 -0
- package/skills/risk-compliance/tld-detection/references/streams.md +141 -0
- package/skills/risk-compliance/tld-detection/references/terminology.md +95 -0
- package/skills/risk-compliance/tld-detection/references/workflow.md +95 -0
- package/skills/risk-compliance/tld-detection/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +390 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +650 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +134 -0
- 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`.
|