Skip to content
Solutions · Fintech

Rehearse billing changes before money moves.

Test payment flows with masked account data and a local Stripe simulator.

Check the resulting ledger entries against your expected outcomes.

Find duplicate charges, missed events, and inconsistent balances in an isolated run.

  1. 01
    twin.app.internal
    POST /checkout
    origin
    0.4ms
  2. 02
    af-proxy:8443
    egress rule
    inspect
    1.1ms
  3. 03
    stripe.pack.local412b
    POST /v1/charges
    mock
    ledger
  4. 04
    api.stripe.com
    live processor
    deny
    refused
fail closed
Live hop refused

The charge is written to a clone-local ledger. api.stripe.com never resolves.

deny · 0 charged
Payment integrations

Run the payment flow inside your test environment.

  • The mode is set per host. block, allow, capture, mock, emulate, sandbox or synth, written against the host in antifailure.yaml.

  • Nothing leaves without a rule. Egress defaults to block, so a processor nobody configured is refused on its first run rather than passed through.

  • The ledger records the decision. Each attempt is stored with the mode that decided it, so the reason a request never left is readable afterwards.

antifailure.yaml
egress
1egress:
2default: block
3hosts:
HostHostmode
4
api.stripe.comsandbox
5
api.sendgrid.comcapture
6
hooks.slack.comcapture
7
unknown TCPblock, default
8
api.prod.internalblock, default
Default refuses

A host with no rule is blocked on first contact.

default: block
Containment

Check the result across your services.

  • Ledger comparison. The oracle compares writes, events, and third-party effects against baseline.

  • Irreversible writes. Test whether the previous release can still read the updated schema.

  • Your billing workflows. Define the payment and subscription journeys that matter to your team.

twin ledger
0 packets

Twin ledger

in-boundary
id · effectamt
  • chg_184$49.00POST /v1/charges
  • chg_185$49.00retry checkout
  • inv_044$0.00refund path

Live processors

dest · refused
  • api.stripe.com
  • api.sendgrid.com
  • hooks.slack.com
  • api.prod.internal
0 packets out

TTL contained. Processors never resolved.

Request evidence

See how every gateway request was handled.

  • Inspect the decision. Review whether each request was blocked, captured, simulated, or allowed by policy.

  • Capture notifications. Read captured messages and inspect webhook payloads during the test.

  • Block unknown hosts. New destinations remain blocked until you configure how they should behave.

Attempted-effect ledger

LNS 04

Twin run 08f2

must never · fail closed

LnEffectMode
  1. 01
    STRIPE
    POST /v1/charges $49.00
    MOCK
  2. 02
    SENDGRID
    render invoice.paid.html
    CAPTURE
  3. 03
    SLACK
    webhook preview stored
    CAPTURE
  4. 04
    HOSTNAME
    api.prod.internal
    DENY

3 contained · 1 denied · 0 charged

Total live$0.00
Next

Bring your next pull request.

See how Antifailure would test your stack, what it would check, and the evidence your team would review before merging.