Settlement proof
Create a read-only evidence packet that verifies a claimed payment outcome against processor, internal ledger, idempotency/retry, reconciliation, and compensating-action state. Use when asked to "prove payment settled", "verify a payment", "check payment succeeded", "produce settlement proof", investigate a "ledger mismatch", validate a "duplicate webhook", check a reversal or refund, reconcile payment state, or block an agent's payment-done claim until money-stakes systems agree.From its SKILL.md
npx -y skills add runsagents/settlement-proofAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.4 KB, 961 tokens by cl100k_base, as published. Nobody here has run it
settlement-proof
Verify state, not an actor's success message. Treat this as a read-only airlock for payment outcome claims.
Enforce the safety boundary
- Query only read APIs or operator-provided snapshots.
- Never repair, retry, capture, refund, reverse, reconcile, or post ledger entries.
- Halt on the first mismatch and report it.
- Mark missing or pending evidence
UNVERIFIABLE; never infer agreement. - Keep credentials and customer data out of snapshots and packets.
- Label synthetic inputs and outputs as synthetic.
Run an included synthetic fixture
Execute from the skill directory:
node scripts/verify-fixture.mjs fixtures/settled
Use any included fixture directory or its scenario.json file. Interpret exits as:
0:PROVED1:MISMATCH; stop the enclosing workflow2:UNVERIFIABLEor invalid input; do not claim success
Do not continue to a mutation step after exit 1 or 2 unless a human starts a separate, explicitly authorized workflow.
Map the contract onto real systems
- State the exact claim:
paymentId, terminaloutcome, integeramountMinor, andcurrency. - Identify the authoritative processor, ledger, idempotency store, reconciliation result, and compensating-action log for the same tenant and environment.
- Obtain least-privilege read access. Refuse to use a mutation-capable tool when a read-only alternative is required by policy.
- Read all systems within one logical observation window. Record
observedAtand stable correlation identifiers. - Normalize the reads into the shape used by
fixtures/*/scenario.jsonwithsynthetic: false. - Store the snapshot in a protected local temporary path without secrets, PANs, bank details, names, emails, or raw provider payloads.
- Run
node scripts/verify-fixture.mjs <snapshot-path>. - Return the complete evidence packet and its exit meaning. On
MISMATCH, name the halt location and leave later checks asNOT_EVALUATED. - Retain or remove the snapshot only under the operator's privacy, evidence, and audit policy.
Map adapters to this minimum contract:
{
"synthetic": false,
"observedAt": "2026-07-13T12:00:00.000Z",
"claim": {
"paymentId": "opaque-payment-id",
"outcome": "SETTLED",
"amountMinor": 10000,
"currency": "USD"
},
"systems": {
"processor": {
"paymentId": "opaque-payment-id",
"processorTransactionId": "opaque-processor-id",
"outcome": "SETTLED",
"amountMinor": 10000,
"currency": "USD"
},
"ledger": {
"entries": [
{
"entryId": "opaque-entry-id",
"paymentId": "opaque-payment-id",
"account": "processor_clearing",
"kind": "SETTLEMENT",
"status": "POSTED",
"amountSignedMinor": -10000,
"currency": "USD"
}
]
},
"idempotency": {
"key": "opaque-idempotency-key",
"attempts": 1,
"appliedEffects": 1,
"duplicatesSuppressed": 0,
"lastResult": "APPLIED"
},
"reconciliation": {
"jobRunId": "opaque-job-id",
"result": "MATCHED",
"paymentId": "opaque-payment-id",
"outcome": "SETTLED",
"amountMinor": 10000,
"currency": "USD"
},
"compensatingActions": []
}
}
Supply a complete balanced ledger entry set; the single entry above demonstrates field names only and would correctly produce MISMATCH.
Report precisely
- Say
PROVEDonly when every v1 check passes. - Say
MISMATCHwhen observed state contradicts the claim, and quotehalted.atplushalted.reason. - Say
UNVERIFIABLEwhen evidence is absent, incomplete, pending, or malformed, and quoteunverifiableReasons. - Describe compensating actions only as observed state. Do not recommend or execute one as part of verification.
- Keep the limitations in README's
WHAT IT DOES NOT PROVEsection attached to high-stakes interpretations.
What ships with it: 13 files
50.9 KB alongside SKILL.md, 3 of them executable
fixtures/
schemas/
scripts/
- verify-fixture.mjsruns11.1 KB
tests/
- evidence-packets.test.mjsruns6.8 KB
- index.jsruns38 B
- ATTRIBUTION.md1.6 KB
- CHANGELOG.md564 B
- LICENSE6.9 KB
- package.json284 B
- README.md10.6 KB