@1aboveio/skills 0.19.2 → 0.20.1
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 +9 -4
- package/package.json +1 -1
- package/runtime/skills/distribution/generated/recipes.json +54 -48
- package/runtime/skills/distribution/scripts/bundles.mjs +113 -7
- package/runtime/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -6
- package/runtime/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +3 -36
- package/skills/cicd-pipeline/mergify/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +14 -83
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -6
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +3 -36
- package/skills/engineering/smoke/SKILL.md +1 -1
- package/skills/payment/payment-analysis/SKILL.md +13 -7
- package/skills/payment/payment-analysis/references/chargebacks.md +43 -18
- package/skills/payment/payment-analysis/references/event-layers.md +4 -0
- package/skills/payment/payment-analysis/references/metrics.md +9 -7
- package/skills/payment/payment-analysis/references/report-template.md +3 -3
- package/skills/payment/payment-analysis/references/terminology.md +6 -1
- package/skills/payment/payment-analysis/references/visualization.md +1 -1
- package/skills/payment/tld-detection/SKILL.md +163 -0
- package/skills/payment/tld-detection/agents/openai.yaml +9 -0
- package/skills/payment/tld-detection/evals/evals.json +107 -0
- package/skills/payment/tld-detection/references/clean.md +51 -0
- package/skills/payment/tld-detection/references/clustering.md +219 -0
- package/skills/payment/tld-detection/references/decision.md +85 -0
- package/skills/payment/tld-detection/references/report-template.md +169 -0
- package/skills/payment/tld-detection/references/terminology.md +69 -0
- package/skills/payment/tld-detection/references/workflow.md +78 -0
- package/skills/payment/tld-detection/scripts/detect_ladders.py +390 -0
- package/skills/payment/tld-detection/tests/test_detect_ladders.py +132 -0
- package/skills/engineering/resolve-issues/SKILL.md +0 -168
- package/skills/engineering/resolve-issues/agents/openai.yaml +0 -9
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +0 -499
- package/skills/engineering/resolve-issues/references/breaker.md +0 -82
- package/skills/engineering/resolve-issues/references/deliverables.md +0 -27
- package/skills/engineering/resolve-issues/references/delivery.md +0 -108
- package/skills/engineering/resolve-issues/references/evidence-lane.md +0 -21
- package/skills/engineering/resolve-issues/references/exact-head-ci.md +0 -287
- package/skills/engineering/resolve-issues/references/fan-out.md +0 -33
- package/skills/engineering/resolve-issues/references/finalization.md +0 -68
- package/skills/engineering/resolve-issues/references/guarantees.md +0 -10
- package/skills/engineering/resolve-issues/references/high-risk.md +0 -29
- package/skills/engineering/resolve-issues/references/incidents/848/README.md +0 -156
- package/skills/engineering/resolve-issues/references/intake.md +0 -86
- package/skills/engineering/resolve-issues/references/integration-gate.md +0 -53
- package/skills/engineering/resolve-issues/references/interference.md +0 -87
- package/skills/engineering/resolve-issues/references/loop.md +0 -134
- package/skills/engineering/resolve-issues/references/model-catalog.md +0 -9
- package/skills/engineering/resolve-issues/references/postmortem.md +0 -27
- package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +0 -41
- package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +0 -48
- package/skills/engineering/resolve-issues/references/pre-flight.md +0 -41
- package/skills/engineering/resolve-issues/references/regression-checklist.md +0 -26
- package/skills/engineering/resolve-issues/references/run-state.md +0 -288
- package/skills/engineering/resolve-issues/references/sandboxed-testing.md +0 -48
- package/skills/engineering/resolve-issues/references/spawn-contract.md +0 -96
- package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +0 -40
- package/skills/engineering/resolve-issues/references/why.md +0 -653
- package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +0 -49
- package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +0 -721
- package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +0 -962
- package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +0 -220
- package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +0 -420
- package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +0 -256
- package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +0 -168
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +0 -9
- package/skills/engineering/resolve-issues/scripts/doctrine.mjs +0 -62
- package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +0 -191
- package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +0 -413
- package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +0 -332
- package/skills/engineering/resolve-issues/scripts/finalize.mjs +0 -488
- package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +0 -3307
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +0 -16
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +0 -51
- package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +0 -17
- package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +0 -166
- package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +0 -92
- package/skills/engineering/resolve-issues/scripts/guide-index.mjs +0 -73
- package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +0 -159
- package/skills/engineering/resolve-issues/scripts/interference.mjs +0 -427
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +0 -9
- package/skills/engineering/resolve-issues/scripts/next-operations.mjs +0 -419
- package/skills/engineering/resolve-issues/scripts/postmortem.mjs +0 -909
- package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +0 -345
- package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +0 -415
- package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +0 -697
- package/skills/engineering/resolve-issues/scripts/report.mjs +0 -494
- package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +0 -172
- package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +0 -79
- package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +0 -334
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +0 -4792
- package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +0 -395
- package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +0 -290
- package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +0 -170
- package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +0 -293
- package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +0 -197
- package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +0 -127
- package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +0 -893
- package/skills/engineering/resolve-issues/scripts/workspaces.mjs +0 -829
- package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +0 -290
- package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +0 -80
- package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +0 -102
- package/skills/engineering/resolve-release/LICENSE +0 -3
- package/skills/engineering/resolve-release/SKILL.md +0 -113
- package/skills/engineering/resolve-release/agents/openai.yaml +0 -9
- package/skills/engineering/resolve-release/references/assembly.md +0 -137
- package/skills/engineering/resolve-release/references/auto-when-green.md +0 -56
- package/skills/engineering/resolve-release/references/candidate.md +0 -167
- package/skills/engineering/resolve-release/references/exposure.md +0 -178
- package/skills/engineering/resolve-release/references/handoff.md +0 -24
- package/skills/engineering/resolve-release/references/postmortem.md +0 -230
- package/skills/engineering/resolve-release/references/preflight.md +0 -208
- package/skills/engineering/resolve-release/references/principles.md +0 -94
- package/skills/engineering/resolve-release/references/regression-checklist.md +0 -36
- package/skills/engineering/resolve-release/references/related-skills.md +0 -13
- package/skills/engineering/resolve-release/references/routing.md +0 -149
- package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +0 -285
- package/skills/engineering/resolve-release/references/versioning.md +0 -202
- package/skills/engineering/resolve-release/references/why.md +0 -53
- package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +0 -389
- package/skills/engineering/resolve-release/scripts/build-changes.mjs +0 -209
- package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +0 -407
- package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +0 -904
- package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +0 -81
- package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +0 -612
- package/skills/engineering/resolve-release/scripts/close-attempt.mjs +0 -135
- package/skills/engineering/resolve-release/scripts/closeout-release.mjs +0 -161
- package/skills/engineering/resolve-release/scripts/doctrine.mjs +0 -106
- package/skills/engineering/resolve-release/scripts/durable-processing.mjs +0 -522
- package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +0 -659
- package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +0 -1014
- package/skills/engineering/resolve-release/scripts/finalize-release.mjs +0 -526
- package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +0 -169
- package/skills/engineering/resolve-release/scripts/green-gate.mjs +0 -599
- package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +0 -752
- package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +0 -56
- package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +0 -1538
- package/skills/engineering/resolve-release/scripts/postmortem.mjs +0 -381
- package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +0 -510
- package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +0 -326
- package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +0 -272
- package/skills/engineering/resolve-release/scripts/report.mjs +0 -417
- package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +0 -114
- package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +0 -238
- package/skills/engineering/resolve-release/scripts/review-packet.mjs +0 -503
- package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +0 -263
- package/skills/engineering/resolve-release/scripts/version-assert.mjs +0 -339
- package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +0 -485
- package/skills/engineering/resolve-release/scripts/version.mjs +0 -1199
- package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +0 -449
- package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +0 -21
- package/skills/engineering/resolve-release/vendor/README.md +0 -60
- package/skills/engineering/resolve-release/vendor/acorn.mjs +0 -6233
- package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +0 -21
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +0 -341
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +0 -70
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +0 -7
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +0 -2033
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +0 -2033
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +0 -7
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +0 -49
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +0 -21
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +0 -5
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +0 -549
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +0 -549
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +0 -36
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +0 -47
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +0 -82
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +0 -11
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +0 -22
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +0 -21
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +0 -21
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +0 -11
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +0 -11
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +0 -25
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +0 -85
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +0 -85
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +0 -20
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +0 -20
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +0 -2
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +0 -1
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +0 -61
- /package/skills/{engineering/resolve-issues → payment/tld-detection}/LICENSE +0 -0
|
@@ -11,9 +11,7 @@ export const WORKFLOW_OWNED_MEMBERS = deepFreeze([
|
|
|
11
11
|
'ensure-coverage',
|
|
12
12
|
'implement-and-pr',
|
|
13
13
|
'rush-issues',
|
|
14
|
-
'resolve-issues',
|
|
15
14
|
'rush-release',
|
|
16
|
-
'resolve-release',
|
|
17
15
|
'review-pr',
|
|
18
16
|
'smoke',
|
|
19
17
|
'engineering-runtime',
|
|
@@ -66,23 +64,7 @@ export const WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES = deepFreeze([
|
|
|
66
64
|
],
|
|
67
65
|
generatedIdentities: [],
|
|
68
66
|
},
|
|
69
|
-
|
|
70
|
-
invokedSkill: 'resolve-issues',
|
|
71
|
-
members: [
|
|
72
|
-
'tdd',
|
|
73
|
-
'harness-runtime',
|
|
74
|
-
'e2e-test',
|
|
75
|
-
'ensure-coverage',
|
|
76
|
-
'implement-and-pr',
|
|
77
|
-
'resolve-issues',
|
|
78
|
-
'review-pr',
|
|
79
|
-
'smoke',
|
|
80
|
-
'engineering-runtime',
|
|
81
|
-
],
|
|
82
|
-
generatedIdentities: [
|
|
83
|
-
{ member: 'resolve-issues', path: 'generated/workflow-repair-policy.json' },
|
|
84
|
-
],
|
|
85
|
-
},
|
|
67
|
+
|
|
86
68
|
{
|
|
87
69
|
invokedSkill: 'rush-release',
|
|
88
70
|
members: [
|
|
@@ -91,22 +73,7 @@ export const WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES = deepFreeze([
|
|
|
91
73
|
],
|
|
92
74
|
generatedIdentities: [],
|
|
93
75
|
},
|
|
94
|
-
|
|
95
|
-
invokedSkill: 'resolve-release',
|
|
96
|
-
members: [
|
|
97
|
-
'harness-runtime',
|
|
98
|
-
'e2e-test',
|
|
99
|
-
'ensure-coverage',
|
|
100
|
-
'resolve-issues',
|
|
101
|
-
'resolve-release',
|
|
102
|
-
'review-pr',
|
|
103
|
-
'smoke',
|
|
104
|
-
'engineering-runtime',
|
|
105
|
-
],
|
|
106
|
-
generatedIdentities: [
|
|
107
|
-
{ member: 'resolve-issues', path: 'generated/workflow-repair-policy.json' },
|
|
108
|
-
],
|
|
109
|
-
},
|
|
76
|
+
|
|
110
77
|
]);
|
|
111
78
|
|
|
112
79
|
// First-party content is distributed as an exact public npm release, so its identity is the package
|
|
@@ -119,7 +86,7 @@ export const WORKFLOW_TRUSTED_SOURCES = deepFreeze({
|
|
|
119
86
|
id: 'first-party',
|
|
120
87
|
type: 'first-party',
|
|
121
88
|
package: '@1aboveio/skills',
|
|
122
|
-
version: '0.
|
|
89
|
+
version: '0.20.1',
|
|
123
90
|
},
|
|
124
91
|
matt: {
|
|
125
92
|
id: 'matt-pocock',
|
|
@@ -128,7 +128,7 @@ conflict, never hold the batch window open. Mechanics and the grouping rule
|
|
|
128
128
|
|
|
129
129
|
- [cloud-build](../cloud-build/SKILL.md) — the CI the queue gates on
|
|
130
130
|
- [cloud-debug](../cloud-debug/SKILL.md) — when the CI job itself is failing
|
|
131
|
-
- [
|
|
131
|
+
- [rush-issues](../../engineering/rush-issues/SKILL.md) — consumes this skill's delivery
|
|
132
132
|
watch contract when it delivers merge-ready PRs through Mergify
|
|
133
133
|
- `mergify-config`, `mergify-merge-queue`, `mergify-merge-protections`, `mergify-ci`,
|
|
134
134
|
`mergify-stack` (vendor plugin skills) — reference for raw CLI invocation. They document
|
|
@@ -6,9 +6,7 @@
|
|
|
6
6
|
"ensure-coverage",
|
|
7
7
|
"implement-and-pr",
|
|
8
8
|
"rush-issues",
|
|
9
|
-
"resolve-issues",
|
|
10
9
|
"rush-release",
|
|
11
|
-
"resolve-release",
|
|
12
10
|
"review-pr",
|
|
13
11
|
"smoke",
|
|
14
12
|
"engineering-runtime"
|
|
@@ -58,26 +56,6 @@
|
|
|
58
56
|
],
|
|
59
57
|
"generatedIdentities": []
|
|
60
58
|
},
|
|
61
|
-
{
|
|
62
|
-
"invokedSkill": "resolve-issues",
|
|
63
|
-
"members": [
|
|
64
|
-
"tdd",
|
|
65
|
-
"harness-runtime",
|
|
66
|
-
"e2e-test",
|
|
67
|
-
"ensure-coverage",
|
|
68
|
-
"implement-and-pr",
|
|
69
|
-
"resolve-issues",
|
|
70
|
-
"review-pr",
|
|
71
|
-
"smoke",
|
|
72
|
-
"engineering-runtime"
|
|
73
|
-
],
|
|
74
|
-
"generatedIdentities": [
|
|
75
|
-
{
|
|
76
|
-
"member": "resolve-issues",
|
|
77
|
-
"path": "generated/workflow-repair-policy.json"
|
|
78
|
-
}
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
59
|
{
|
|
82
60
|
"invokedSkill": "rush-release",
|
|
83
61
|
"members": [
|
|
@@ -85,25 +63,6 @@
|
|
|
85
63
|
"engineering-runtime"
|
|
86
64
|
],
|
|
87
65
|
"generatedIdentities": []
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"invokedSkill": "resolve-release",
|
|
91
|
-
"members": [
|
|
92
|
-
"harness-runtime",
|
|
93
|
-
"e2e-test",
|
|
94
|
-
"ensure-coverage",
|
|
95
|
-
"resolve-issues",
|
|
96
|
-
"resolve-release",
|
|
97
|
-
"review-pr",
|
|
98
|
-
"smoke",
|
|
99
|
-
"engineering-runtime"
|
|
100
|
-
],
|
|
101
|
-
"generatedIdentities": [
|
|
102
|
-
{
|
|
103
|
-
"member": "resolve-issues",
|
|
104
|
-
"path": "generated/workflow-repair-policy.json"
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
66
|
}
|
|
108
67
|
],
|
|
109
68
|
"digestAlgorithm": "sha256-path-content-v2",
|
|
@@ -383,7 +342,7 @@
|
|
|
383
342
|
"id": "first-party",
|
|
384
343
|
"type": "first-party",
|
|
385
344
|
"package": "@1aboveio/skills",
|
|
386
|
-
"version": "0.
|
|
345
|
+
"version": "0.20.1"
|
|
387
346
|
},
|
|
388
347
|
"contentDigest": "eff6c7b5931bce5b2265a619bccddd371a89df6ce7bc2edc74f11d00060a71dd",
|
|
389
348
|
"digestExcludes": []
|
|
@@ -396,7 +355,7 @@
|
|
|
396
355
|
"id": "first-party",
|
|
397
356
|
"type": "first-party",
|
|
398
357
|
"package": "@1aboveio/skills",
|
|
399
|
-
"version": "0.
|
|
358
|
+
"version": "0.20.1"
|
|
400
359
|
},
|
|
401
360
|
"contentDigest": "d97abeff7bdc5ae2e4be2f631d09dba46d4753ce1e67334793364329af59f066",
|
|
402
361
|
"digestExcludes": []
|
|
@@ -409,7 +368,7 @@
|
|
|
409
368
|
"id": "first-party",
|
|
410
369
|
"type": "first-party",
|
|
411
370
|
"package": "@1aboveio/skills",
|
|
412
|
-
"version": "0.
|
|
371
|
+
"version": "0.20.1"
|
|
413
372
|
},
|
|
414
373
|
"contentDigest": "00cfdd3e5bfbc3e37b1369ad93aae91161e671829760a8867ea9be25047ba461",
|
|
415
374
|
"digestExcludes": []
|
|
@@ -422,7 +381,7 @@
|
|
|
422
381
|
"id": "first-party",
|
|
423
382
|
"type": "first-party",
|
|
424
383
|
"package": "@1aboveio/skills",
|
|
425
|
-
"version": "0.
|
|
384
|
+
"version": "0.20.1"
|
|
426
385
|
},
|
|
427
386
|
"contentDigest": "58b0556228a9271cf9e33727a05fc08a4fdfd29512ec0936b169f0a55d60e6ef",
|
|
428
387
|
"digestExcludes": []
|
|
@@ -435,24 +394,11 @@
|
|
|
435
394
|
"id": "first-party",
|
|
436
395
|
"type": "first-party",
|
|
437
396
|
"package": "@1aboveio/skills",
|
|
438
|
-
"version": "0.
|
|
397
|
+
"version": "0.20.1"
|
|
439
398
|
},
|
|
440
399
|
"contentDigest": "4664873230f22de2fcf46b7b529570cfedabdc850620031d8f96baf89fcdc5b4",
|
|
441
400
|
"digestExcludes": []
|
|
442
401
|
},
|
|
443
|
-
{
|
|
444
|
-
"installName": "resolve-issues",
|
|
445
|
-
"ownership": "owned",
|
|
446
|
-
"sourcePath": "skills/engineering/resolve-issues",
|
|
447
|
-
"expectedSource": {
|
|
448
|
-
"id": "first-party",
|
|
449
|
-
"type": "first-party",
|
|
450
|
-
"package": "@1aboveio/skills",
|
|
451
|
-
"version": "0.19.2"
|
|
452
|
-
},
|
|
453
|
-
"contentDigest": "a2df894683012581ce57e92d6e2dacd7eb377e4a0547a98acaea04878ef6aa3a",
|
|
454
|
-
"digestExcludes": []
|
|
455
|
-
},
|
|
456
402
|
{
|
|
457
403
|
"installName": "rush-release",
|
|
458
404
|
"ownership": "owned",
|
|
@@ -461,24 +407,11 @@
|
|
|
461
407
|
"id": "first-party",
|
|
462
408
|
"type": "first-party",
|
|
463
409
|
"package": "@1aboveio/skills",
|
|
464
|
-
"version": "0.
|
|
410
|
+
"version": "0.20.1"
|
|
465
411
|
},
|
|
466
412
|
"contentDigest": "01c192d8b4fd416af4ea02e8000e5fce0cee723a6ac2f8c0c48372087e1a262e",
|
|
467
413
|
"digestExcludes": []
|
|
468
414
|
},
|
|
469
|
-
{
|
|
470
|
-
"installName": "resolve-release",
|
|
471
|
-
"ownership": "owned",
|
|
472
|
-
"sourcePath": "skills/engineering/resolve-release",
|
|
473
|
-
"expectedSource": {
|
|
474
|
-
"id": "first-party",
|
|
475
|
-
"type": "first-party",
|
|
476
|
-
"package": "@1aboveio/skills",
|
|
477
|
-
"version": "0.19.2"
|
|
478
|
-
},
|
|
479
|
-
"contentDigest": "ffba0c83491676794c74721f4c6dbae430f5bc186e5a55f0764e29eaeb13829b",
|
|
480
|
-
"digestExcludes": []
|
|
481
|
-
},
|
|
482
415
|
{
|
|
483
416
|
"installName": "review-pr",
|
|
484
417
|
"ownership": "owned",
|
|
@@ -487,7 +420,7 @@
|
|
|
487
420
|
"id": "first-party",
|
|
488
421
|
"type": "first-party",
|
|
489
422
|
"package": "@1aboveio/skills",
|
|
490
|
-
"version": "0.
|
|
423
|
+
"version": "0.20.1"
|
|
491
424
|
},
|
|
492
425
|
"contentDigest": "f048fd00c69f2dc666fc7a3096cfeee6dfba73933bfb69602f3f0e26159798cc",
|
|
493
426
|
"digestExcludes": []
|
|
@@ -500,9 +433,9 @@
|
|
|
500
433
|
"id": "first-party",
|
|
501
434
|
"type": "first-party",
|
|
502
435
|
"package": "@1aboveio/skills",
|
|
503
|
-
"version": "0.
|
|
436
|
+
"version": "0.20.1"
|
|
504
437
|
},
|
|
505
|
-
"contentDigest": "
|
|
438
|
+
"contentDigest": "27861f6dac89c32a97a7d249ce2695cea2d3d80dd2e9bc0607b0c4048a0e3b25",
|
|
506
439
|
"digestExcludes": []
|
|
507
440
|
},
|
|
508
441
|
{
|
|
@@ -513,15 +446,15 @@
|
|
|
513
446
|
"id": "first-party",
|
|
514
447
|
"type": "first-party",
|
|
515
448
|
"package": "@1aboveio/skills",
|
|
516
|
-
"version": "0.
|
|
449
|
+
"version": "0.20.1"
|
|
517
450
|
},
|
|
518
|
-
"contentDigest": "
|
|
451
|
+
"contentDigest": "3e0952beee7078463464872943d414fa944b395ae723ec78b385a28a3548897a",
|
|
519
452
|
"digestExcludes": [
|
|
520
453
|
"coherence/workflow.json"
|
|
521
454
|
]
|
|
522
455
|
}
|
|
523
456
|
],
|
|
524
|
-
"releaseIdentity": "
|
|
457
|
+
"releaseIdentity": "baec385a2bc0414623c97a83ac4ebf3c44ede2654185b748a03ef955cb3f1c8d",
|
|
525
458
|
"lifecycleAuthority": "native-skills-cli",
|
|
526
459
|
"repairRecipe": {
|
|
527
460
|
"id": "engineering-workflow-dependency-first",
|
|
@@ -579,7 +512,7 @@
|
|
|
579
512
|
"sourceId": "first-party",
|
|
580
513
|
"sourceType": "first-party",
|
|
581
514
|
"package": "@1aboveio/skills",
|
|
582
|
-
"version": "0.
|
|
515
|
+
"version": "0.20.1",
|
|
583
516
|
"installPath": null,
|
|
584
517
|
"members": [
|
|
585
518
|
"harness-runtime",
|
|
@@ -587,9 +520,7 @@
|
|
|
587
520
|
"ensure-coverage",
|
|
588
521
|
"implement-and-pr",
|
|
589
522
|
"rush-issues",
|
|
590
|
-
"resolve-issues",
|
|
591
523
|
"rush-release",
|
|
592
|
-
"resolve-release",
|
|
593
524
|
"review-pr",
|
|
594
525
|
"smoke",
|
|
595
526
|
"engineering-runtime"
|
|
@@ -597,7 +528,7 @@
|
|
|
597
528
|
"commands": [
|
|
598
529
|
{
|
|
599
530
|
"transport": "npm",
|
|
600
|
-
"command": "npx @1aboveio/skills@0.
|
|
531
|
+
"command": "npx @1aboveio/skills@0.20.1 install --group engineering-workflow --yes"
|
|
601
532
|
}
|
|
602
533
|
],
|
|
603
534
|
"onFailure": {
|
|
@@ -288,7 +288,7 @@ function validateManifest(manifest) {
|
|
|
288
288
|
add('digest-algorithm-invalid', 'engineering-runtime', 'The coherence digest algorithm is missing or unsupported.');
|
|
289
289
|
}
|
|
290
290
|
if (JSON.stringify(manifest.ownedMembers) !== JSON.stringify(WORKFLOW_OWNED_MEMBERS)) {
|
|
291
|
-
add('owned-census-invalid', 'engineering-runtime', 'The exact
|
|
291
|
+
add('owned-census-invalid', 'engineering-runtime', 'The exact eight-member Workflow ownership census is missing or malformed.');
|
|
292
292
|
}
|
|
293
293
|
if (JSON.stringify(manifest.dependencies) !== JSON.stringify([
|
|
294
294
|
{ groupId: 'matt-pocock-toolkit', members: MATT_DEPENDENCY_MEMBERS },
|
|
@@ -297,11 +297,9 @@ function validateManifest(manifest) {
|
|
|
297
297
|
add('dependency-census-invalid', 'engineering-runtime', 'The exact Matt and harness runtime dependency census is missing or malformed.');
|
|
298
298
|
}
|
|
299
299
|
if (!exactContract(manifest.dependencyClosures, WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES)) {
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
const member = WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES.find((closure) => !names.has(closure.invokedSkill))?.invokedSkill
|
|
304
|
-
?? 'resolve-issues';
|
|
300
|
+
const actual = Array.isArray(manifest.dependencyClosures) ? manifest.dependencyClosures : [];
|
|
301
|
+
const member = WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES.find((closure, index) =>
|
|
302
|
+
!isDeepStrictEqual(actual[index], closure))?.invokedSkill ?? 'engineering-runtime';
|
|
305
303
|
add('dependency-closure-invalid', member, 'The invoked-skill dependency closure is missing, weakened, reordered or malformed.');
|
|
306
304
|
}
|
|
307
305
|
|
|
@@ -11,9 +11,7 @@ export const WORKFLOW_OWNED_MEMBERS = deepFreeze([
|
|
|
11
11
|
'ensure-coverage',
|
|
12
12
|
'implement-and-pr',
|
|
13
13
|
'rush-issues',
|
|
14
|
-
'resolve-issues',
|
|
15
14
|
'rush-release',
|
|
16
|
-
'resolve-release',
|
|
17
15
|
'review-pr',
|
|
18
16
|
'smoke',
|
|
19
17
|
'engineering-runtime',
|
|
@@ -66,23 +64,7 @@ export const WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES = deepFreeze([
|
|
|
66
64
|
],
|
|
67
65
|
generatedIdentities: [],
|
|
68
66
|
},
|
|
69
|
-
|
|
70
|
-
invokedSkill: 'resolve-issues',
|
|
71
|
-
members: [
|
|
72
|
-
'tdd',
|
|
73
|
-
'harness-runtime',
|
|
74
|
-
'e2e-test',
|
|
75
|
-
'ensure-coverage',
|
|
76
|
-
'implement-and-pr',
|
|
77
|
-
'resolve-issues',
|
|
78
|
-
'review-pr',
|
|
79
|
-
'smoke',
|
|
80
|
-
'engineering-runtime',
|
|
81
|
-
],
|
|
82
|
-
generatedIdentities: [
|
|
83
|
-
{ member: 'resolve-issues', path: 'generated/workflow-repair-policy.json' },
|
|
84
|
-
],
|
|
85
|
-
},
|
|
67
|
+
|
|
86
68
|
{
|
|
87
69
|
invokedSkill: 'rush-release',
|
|
88
70
|
members: [
|
|
@@ -91,22 +73,7 @@ export const WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES = deepFreeze([
|
|
|
91
73
|
],
|
|
92
74
|
generatedIdentities: [],
|
|
93
75
|
},
|
|
94
|
-
|
|
95
|
-
invokedSkill: 'resolve-release',
|
|
96
|
-
members: [
|
|
97
|
-
'harness-runtime',
|
|
98
|
-
'e2e-test',
|
|
99
|
-
'ensure-coverage',
|
|
100
|
-
'resolve-issues',
|
|
101
|
-
'resolve-release',
|
|
102
|
-
'review-pr',
|
|
103
|
-
'smoke',
|
|
104
|
-
'engineering-runtime',
|
|
105
|
-
],
|
|
106
|
-
generatedIdentities: [
|
|
107
|
-
{ member: 'resolve-issues', path: 'generated/workflow-repair-policy.json' },
|
|
108
|
-
],
|
|
109
|
-
},
|
|
76
|
+
|
|
110
77
|
]);
|
|
111
78
|
|
|
112
79
|
// First-party content is distributed as an exact public npm release, so its identity is the package
|
|
@@ -119,7 +86,7 @@ export const WORKFLOW_TRUSTED_SOURCES = deepFreeze({
|
|
|
119
86
|
id: 'first-party',
|
|
120
87
|
type: 'first-party',
|
|
121
88
|
package: '@1aboveio/skills',
|
|
122
|
-
version: '0.
|
|
89
|
+
version: '0.20.1',
|
|
123
90
|
},
|
|
124
91
|
matt: {
|
|
125
92
|
id: 'matt-pocock',
|
|
@@ -113,7 +113,7 @@ The **per-PR golden-path liveness floor** (`ensure-coverage` CI contract, gate 8
|
|
|
113
113
|
- **CI (gate 8, blocking)** — wired in `e2e-test/assets/ci-gates.*`; boots the app, drives the paths into `smoke-results.json`, runs `smoke.mjs verdict`. The mechanical backstop.
|
|
114
114
|
- **`resolve-issues`** — final step of the [epic integration gate](../resolve-issues/references/deliverables.md#deliverables-the-shippable-component-not-the-whole-epic): boot the assembled integration branch and run the golden paths; a DEAD whose broken paths are `fail` belongs to a specific unit → reopen its fix loop. **A DEAD built from `blocked`/`missing` paths is a gate-environment problem, not a unit's defect** — report it and fix the environment; reopening a fix loop on it spends a producer spawn and an adversarial review on code that is fine, and the round lands in the unit's budget all the same.
|
|
115
115
|
- **`/smoke`** — standalone, any time, against `local` or a URL.
|
|
116
|
-
-
|
|
116
|
+
- **Legacy `resolve-release` flow (archived)** — the `prod-preview` profile against the 0%-traffic candidate URL (read-only, so it excludes every mutating path), then the `prod-active` profile against the live service after the shift. A DEAD **before** exposure deletes the candidate (no rollback, no user impact); a DEAD after it triggers the rollback policy.
|
|
117
117
|
- **The dev-deploy recorder** (`cloud-build` → Post-deploy smoke gate) — the integration pipeline runs this gate after its 100%-traffic deploy and publishes the verdict as a **SHA-keyed commit status**, never failing the build; that recorded ALIVE is what `resolve-release` requires when pinning a release candidate (its principle 11).
|
|
118
118
|
|
|
119
119
|
## Reference Map
|
|
@@ -5,13 +5,15 @@ description: >
|
|
|
5
5
|
extracts (optional chargebacks): executive summary, top statistics, payment
|
|
6
6
|
journey Sankey, and topics (volume, WoW trend, auth rate, BIN-country
|
|
7
7
|
contribution, decline-by-reason, decline-by-country). Amounts report in USD
|
|
8
|
-
(Forex Service daily conversion). Chargebacks
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
(Forex Service daily conversion). Chargebacks separate normal and
|
|
9
|
+
pre-dispute cases; Visa pre-disputes are excluded from VAMP-style metrics
|
|
10
|
+
and calculated separately, while Mastercard 拒付率 is lagged. 运营影响 is
|
|
11
|
+
3DS / 风控拦截 / soft-decline retry only. Use whenever the user asks for payment overview, auth-rate analysis,
|
|
11
12
|
decline mix, BIN/issuer-country contribution, settlement GMV, payment journey,
|
|
12
13
|
Sankey funnel, FX-to-USD, chargeback rate, 运营影响, or "business analysis of
|
|
13
14
|
transactions" — even if they do not say payment-analysis. Do NOT use for
|
|
14
|
-
supervised fraud-rule mining (
|
|
15
|
+
supervised fraud-rule mining (fraud-analysis) or TLD / MCC-miscoding
|
|
16
|
+
clusters (tld-detection).
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
# Payment Analysis
|
|
@@ -30,7 +32,7 @@ optional topic fuel, not required for the journey core.
|
|
|
30
32
|
|
|
31
33
|
**Produce:** Markdown + preferred Chinese/bilingual HTML under
|
|
32
34
|
`reports/payment-analysis/`.
|
|
33
|
-
**Do not produce:** supervised precision/recall packages (`fraud-analysis`).
|
|
35
|
+
**Do not produce:** supervised precision/recall packages (`fraud-analysis`) or TLD clusters (`tld-detection`).
|
|
34
36
|
|
|
35
37
|
Read the playbook for the step you are on. Paths under `references/` are
|
|
36
38
|
relative to this skill.
|
|
@@ -57,7 +59,8 @@ Compute auth + settlement metrics from [metrics.md](references/metrics.md).
|
|
|
57
59
|
Convert non-USD amounts per [fx.md](references/fx.md) before any sum or share.
|
|
58
60
|
If chargebacks are present, monthly 拒付率 follows
|
|
59
61
|
[chargebacks.md](references/chargebacks.md) (Visa same-month, Mastercard lagged,
|
|
60
|
-
|
|
62
|
+
Visa pre-disputes excluded from the normal/VAMP-style numerator and calculated
|
|
63
|
+
separately, skip empty brand-months, no blended Visa+Mastercard ratio).
|
|
61
64
|
|
|
62
65
|
### 3 — Journey Sankey
|
|
63
66
|
|
|
@@ -98,16 +101,19 @@ Do not change numbers, joins, or chart data.
|
|
|
98
101
|
- [ ] Amount axes/legends include currency (`授权尝试金额 USD`, …)
|
|
99
102
|
- [ ] No supervised fraud-rule metrics
|
|
100
103
|
- [ ] Non-USD amounts converted per fx.md; all-USD books say 金额均为 USD
|
|
104
|
+
- [ ] Normal chargebacks, pre-disputes, and unclassified cases are distinct
|
|
105
|
+
- [ ] Visa pre-disputes are excluded from VAMP-style metrics and calculated separately
|
|
101
106
|
- [ ] Chargeback monthly rates skip empty brand-months; no blended Visa+MC ratio
|
|
102
107
|
- [ ] 运营影响 only from auth-rate-actions.md when triggered
|
|
103
108
|
- [ ] Language matches terminology.md; banned strings have no unexplained hits
|
|
104
109
|
|
|
105
|
-
## Boundary with fraud-analysis
|
|
110
|
+
## Boundary with fraud-analysis and tld-detection
|
|
106
111
|
|
|
107
112
|
| Need | Skill |
|
|
108
113
|
|---|---|
|
|
109
114
|
| Volume, journey Sankey, auth rate, decline mix, settlement overview, 运营影响 routing | `payment-analysis` |
|
|
110
115
|
| Proxy/confirmed fraud labels, holdout precision/recall, 3DS/block **packages** | `fraud-analysis` |
|
|
116
|
+
| Potential TLD clusters, currency-amount-pair ladders, MCC miscoding, stuffing | `tld-detection` |
|
|
111
117
|
|
|
112
118
|
Routing 3DS / 风控拦截 / retry from this extract is not a fraud-analysis rule
|
|
113
119
|
package.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Chargeback / dispute rate (Visa vs Mastercard)
|
|
1
|
+
# Chargeback / dispute rate (normal vs pre-dispute; Visa vs Mastercard)
|
|
2
2
|
|
|
3
3
|
Topic **4.8 拒付 / 争议**. Put the Visa / Mastercard formulas as a **note
|
|
4
4
|
under the monthly rate chart**. Count rates follow card-network monitoring
|
|
@@ -10,43 +10,67 @@ below are the processor restatements used in production monitoring
|
|
|
10
10
|
(Stripe, Braintree). Caption the report as **network-style estimates
|
|
11
11
|
from this extract**, not as a Visa/Mastercard identification notice.
|
|
12
12
|
|
|
13
|
+
## Classify case stage first
|
|
14
|
+
|
|
15
|
+
Before calculating rates, classify each row from an explicit processor or
|
|
16
|
+
network case-stage/type/status field:
|
|
17
|
+
|
|
18
|
+
- **Normal chargeback / dispute**: a formally opened chargeback/dispute.
|
|
19
|
+
- **Pre-dispute**: explicitly identified as pre-dispute, RDR, CDRN, early
|
|
20
|
+
resolution, or the processor's equivalent pre-dispute product.
|
|
21
|
+
- **Unclassified**: the extract does not reliably identify the case stage.
|
|
22
|
+
|
|
23
|
+
Use the processor's data dictionary when labels are unclear. Do not infer
|
|
24
|
+
pre-dispute status from reason code, amount, timing, outcome, or free-text
|
|
25
|
+
description alone. Report counts and amounts for all three classes separately;
|
|
26
|
+
never silently treat pre-dispute or unclassified rows as normal chargebacks.
|
|
27
|
+
|
|
28
|
+
If no reliable classification field exists, report the separation as
|
|
29
|
+
unavailable. An all-case Visa dispute rate may be shown as descriptive only,
|
|
30
|
+
but it must not be called a normal chargeback rate or VAMP-style estimate.
|
|
31
|
+
|
|
13
32
|
## When a point is drawn
|
|
14
33
|
|
|
15
|
-
A monthly point for a
|
|
34
|
+
A monthly point for a brand and case-stage series is drawn **only if**
|
|
16
35
|
|
|
17
|
-
- numerator
|
|
36
|
+
- numerator for that specific series **received** in that calendar month > 0, and
|
|
18
37
|
- denominator (sales count for that brand, month as defined below) > 0.
|
|
19
38
|
|
|
20
39
|
Otherwise **omit the point**. Do not plot `0`. Do not invent a prior-month
|
|
21
|
-
sale count. If a
|
|
22
|
-
|
|
23
|
-
exist).
|
|
40
|
+
sale count. If a series has no drawable points, omit it. If no series remain,
|
|
41
|
+
omit the rate chart (keep case-stage and reason-category bars if cases exist).
|
|
24
42
|
|
|
25
43
|
## Formulas (count)
|
|
26
44
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
count every CB row.
|
|
45
|
+
Numerators use cases **received** in calendar month `M` (`Chargeback date`),
|
|
46
|
+
`Payment method` = that brand. Do not use original transaction month. Apply
|
|
47
|
+
the case-stage classification before counting.
|
|
31
48
|
|
|
32
|
-
| Brand | Programme
|
|
49
|
+
| Brand / series | Programme alignment | Rate |
|
|
33
50
|
|---|---|---|
|
|
34
|
-
| Visa | VAMP dispute/sales
|
|
35
|
-
|
|
|
51
|
+
| Visa normal chargeback | VAMP dispute/sales timing (same month) | `Normal_CB_Visa(M) / Sales_Visa(M)` |
|
|
52
|
+
| Visa pre-dispute | Descriptive; excluded from VAMP | `PreDispute_Visa(M) / Sales_Visa(M)` |
|
|
53
|
+
| Mastercard normal chargeback | ECP / ECM chargeback timing (lagged sales) | `Normal_CB_MC(M) / Sales_MC(M−1)` |
|
|
36
54
|
|
|
37
55
|
`Sales_*` = settlement type Sale, that brand, **transaction/capture month**.
|
|
38
56
|
Do not mix refunds into the denominator.
|
|
39
57
|
|
|
40
58
|
Mastercard **must** use the previous calendar month’s sales. If `M−1`
|
|
41
|
-
sales are missing from the extract, skip Mastercard for month `M`.
|
|
59
|
+
sales are missing from the extract, skip Mastercard for month `M`. Keep any
|
|
60
|
+
Mastercard pre-dispute rows separate from its normal chargeback numerator; this
|
|
61
|
+
skill does not calculate a Mastercard pre-dispute rate unless the user asks.
|
|
42
62
|
|
|
43
63
|
## Visa notes (do not over-claim VAMP)
|
|
44
64
|
|
|
45
65
|
Since 2025-04 Visa folded VDMP/VFMP into **VAMP**. Full VAMP Count is
|
|
46
66
|
`opened Visa chargebacks (TC15) + reported fraud (TC40 EFW)`, same-month
|
|
47
|
-
sales in the denominator.
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
sales in the denominator. **Pre-dispute cases are not opened chargebacks and
|
|
68
|
+
must be excluded from the TC15/VAMP-style numerator.** This skill's extract
|
|
69
|
+
usually has chargebacks only → report **Visa normal 拒付率 = normal Visa CB
|
|
70
|
+
count / Visa same-month sales**, plus **Visa pre-dispute rate = Visa
|
|
71
|
+
pre-dispute count / Visa same-month sales** as a separate descriptive series.
|
|
72
|
+
Do not add the two series together. Do not label the normal rate “VAMP ratio”
|
|
73
|
+
unless TC40/EFW is present and the extract supports the full VAMP definition.
|
|
50
74
|
|
|
51
75
|
VAMP also has volume and enumeration legs; those are out of scope here.
|
|
52
76
|
|
|
@@ -62,7 +86,8 @@ it for ECP.
|
|
|
62
86
|
## Amount rate (optional footnote)
|
|
63
87
|
|
|
64
88
|
`abs(dispute amount) / sale amount` with the **same month alignment as
|
|
65
|
-
the count rate** for that brand.
|
|
89
|
+
the count rate** for that brand. Keep normal and pre-dispute amounts separate.
|
|
90
|
+
Secondary; the line chart is count %.
|
|
66
91
|
|
|
67
92
|
## Window caveat
|
|
68
93
|
|
|
@@ -53,6 +53,10 @@ Reporting amounts are USD. Conversion rules: [fx.md](fx.md).
|
|
|
53
53
|
Chargeback **programme 拒付率** uses received month (`Chargeback date`) per
|
|
54
54
|
[chargebacks.md](chargebacks.md). If you also show origination-month incidence,
|
|
55
55
|
label that separately so it is not mistaken for the Visa/Mastercard rate.
|
|
56
|
+
Before calculating a programme-style rate, identify the processor field that
|
|
57
|
+
distinguishes normal chargebacks from pre-disputes. Keep unclassified cases
|
|
58
|
+
separate; pre-disputes are excluded from Visa VAMP-style metrics and reported
|
|
59
|
+
as a separate Visa rate.
|
|
56
60
|
|
|
57
61
|
## Decline taxonomy (auth)
|
|
58
62
|
|
|
@@ -38,18 +38,20 @@ Do not equalize settled sales to approved auth amount without a timing caveat.
|
|
|
38
38
|
|
|
39
39
|
## Chargebacks
|
|
40
40
|
|
|
41
|
-
Monthly **拒付率** by brand is [chargebacks.md](chargebacks.md):
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
Monthly **拒付率** by brand is [chargebacks.md](chargebacks.md): classify normal,
|
|
42
|
+
pre-dispute, and unclassified cases first; Visa uses same-month sales and
|
|
43
|
+
reports pre-disputes separately; Mastercard normal chargebacks use
|
|
44
|
+
previous-month sales. Skip empty brand-months and do not blend Visa+Mastercard.
|
|
45
|
+
The table below is mix / match, not that programme rate.
|
|
45
46
|
|
|
46
47
|
| KPI | Formula | Notes |
|
|
47
48
|
|---|---|---|
|
|
48
|
-
|
|
|
49
|
+
| Normal / pre-dispute / unclassified count and amount | as classified | Amounts USD after [fx.md](fx.md); use abs for magnitude if signed |
|
|
49
50
|
| Reason mix | by Reason category / code | Fraud ≠ all CBs |
|
|
50
51
|
| Match rate to auths | matched / CB rows | State join key |
|
|
51
|
-
| Visa monthly 拒付率 |
|
|
52
|
-
|
|
|
52
|
+
| Visa normal monthly 拒付率 | Normal_CB_Visa(M) / Sales_Visa(M) | Excludes pre-disputes; received month; not VAMP unless TC40 is present |
|
|
53
|
+
| Visa pre-dispute rate | PreDispute_Visa(M) / Sales_Visa(M) | Separate descriptive series; excluded from VAMP-style numerator |
|
|
54
|
+
| Mastercard normal monthly 拒付率 | Normal_CB_MC(M) / Sales_MC(M−1) | Excludes pre-disputes; skip M if M−1 sales missing |
|
|
53
55
|
|
|
54
56
|
Lag: chargeback date is later than original auth. Programme rates use
|
|
55
57
|
**received** month, not origination vintage.
|
|
@@ -54,8 +54,8 @@ KPI cards / table from auth + settlement: attempts, approvals, auth rate,
|
|
|
54
54
|
attempt amount, approved amount, sale count/amount, refund count/amount, net
|
|
55
55
|
settled, distinct PAN/BIN/countries, portfolio constants (MID, MCC, provider).
|
|
56
56
|
|
|
57
|
-
Chinese labels: 授权尝试, 授权成功, 授权成功率, 授权成功金额,
|
|
58
|
-
净清算, 发卡行国家.
|
|
57
|
+
Chinese labels: 授权尝试, 授权成功, 授权成功率, 授权成功金额,
|
|
58
|
+
已清算交易笔数, 已清算金额, 退款, 净清算, 发卡行国家.
|
|
59
59
|
|
|
60
60
|
### 3. Payment journey (Sankey) / 支付旅程
|
|
61
61
|
|
|
@@ -79,7 +79,7 @@ Each topic: short lede + chart(s) + supporting table.
|
|
|
79
79
|
| 4.5 Decline reason | count bars |
|
|
80
80
|
| 4.6 Decline by country | stacked count bars |
|
|
81
81
|
| 4.7 Settlements | sale/refund amount bars; country contribution dual axis |
|
|
82
|
-
| 4.8 Chargebacks | reason-category bars; Visa
|
|
82
|
+
| 4.8 Chargebacks | normal vs pre-dispute counts/amounts; reason-category bars; Visa normal 拒付率 and separate Visa pre-dispute-rate series; Mastercard normal monthly 拒付率 per [chargebacks.md](chargebacks.md) (note under the rate chart; skip empty brand-months) |
|
|
83
83
|
|
|
84
84
|
Use both authorization and settlement data when both files are present.
|
|
85
85
|
|
|
@@ -24,7 +24,11 @@ writing English or Chinese copy. After writing, run the proofread step in
|
|
|
24
24
|
| BIN country | 发卡行国家 / BIN 国家 | 客户国家;收货国;发卡国 |
|
|
25
25
|
| Settlement | 清算 | |
|
|
26
26
|
| Sale / Refund | 销售 / 退款 | 把销售金额写成清算金额 |
|
|
27
|
+
| Settled transaction count | 已清算交易笔数 | 清算销售 |
|
|
28
|
+
| Settled amount | 已清算金额 | 清算销售金额 |
|
|
27
29
|
| Chargeback / dispute | 拒付 / 争议 | 与清算混用 |
|
|
30
|
+
| Normal chargeback / dispute | 正常拒付 / 正常争议 | 与预争议合并 |
|
|
31
|
+
| Pre-dispute | 预争议 | 计入 VAMP;与正常拒付合并 |
|
|
28
32
|
| Clerical | 差错 | 文书;文书错误 |
|
|
29
33
|
| Quality | 产品服务质量 | 质量;质量争议 |
|
|
30
34
|
| Incidence | 发生率(必须写出分母) | |
|
|
@@ -37,7 +41,8 @@ writing English or Chinese copy. After writing, run the proofread step in
|
|
|
37
41
|
| This analysis window | 当前分析时段内 | 本窗口 |
|
|
38
42
|
| SCA | SCA | 强客户认证(可在首次括注后只用 SCA) |
|
|
39
43
|
| Authentication / 3DS | 鉴权 / 认证 / 3DS | 把 3DS 叫转化 |
|
|
40
|
-
| Visa /
|
|
44
|
+
| Visa normal 拒付率 / Visa pre-dispute rate | Visa 正常拒付率 / Visa 预争议率 | 合并二者;把预争议计入 VAMP;VAMP ratio(无 TC40 时) |
|
|
45
|
+
| Mastercard normal 拒付率 | Mastercard 正常拒付率 | ECM(从本抽取断言商户在项目中) |
|
|
41
46
|
| Amounts in USD | 金额均为 USD | 未做汇率折算(当全部已是 USD) |
|
|
42
47
|
| Count-heavy / amount-light | 授权尝试笔数多但金额小 | 走廊;笔数负担型走廊 |
|
|
43
48
|
|
|
@@ -22,7 +22,7 @@ ECharts (Sankey). Markdown tables remain required beside charts.
|
|
|
22
22
|
## Axis hygiene
|
|
23
23
|
|
|
24
24
|
- Label every axis with the full metric name. Amount axes/legends include
|
|
25
|
-
currency (`授权尝试金额 USD`, `授权拒绝金额 USD`,
|
|
25
|
+
currency (`授权尝试金额 USD`, `授权拒绝金额 USD`, `已清算金额 USD`,
|
|
26
26
|
`拒付金额 USD`). Do not use bare `笔数` / `金额` / `%`.
|
|
27
27
|
- Only one axis draws the main grid on dual-axis charts.
|
|
28
28
|
- Stacked bars = mix within a group (e.g. decline reasons by country), never rate.
|