- from
- checkout@twin.local
- to
- customer@example.test
- subject
- Your order #4182
The twin cannot act on the real world.
No default public egress. Clone-local DNS. A stateful Stripe that answers offline, mail rendered and captured rather than sent. Unknown destinations are denied and written to the attempted-effect ledger.
Every outbound attempt is recorded, including the denials. Six per-host modes, from refusing outright to answering from an offline pack. Never a live processor.
- stripe.pack.localMOCKFIG. P-FW-02stateful offline packcontainedStripe charge lifecycle
request POST /v1/chargesamount 4900; usd; cus_sim_11mock response 200 OK; ch_sim_08f2status succeeded; livemode falseClone-local state transition persistedcus_sim_11; charge.created; api.stripe.com never resolvedA Stripe charge request is answered by the stateful clone-local pack, which returns a simulated charge and records the state transition without contacting Stripe. - capture inboxCAPTUREFIG. P-FW-03searchable artifact202 shapeRendered, not deliverednot sentOrder #4182msg_sim_2a91; multipart/alternativeplainhtmlPOST /v3/mail/send returns provider-shaped 202; no delivery attempted.
A SendGrid API call is terminated inside the twin and rendered as a captured MIME message that can be inspected, but is never delivered. - policy traceBLOCKFIG. P-FW-04unknown destinationrefusedCONNECT example.com:443
- 01Resolve hostexample.com
- 02Match explicit rulenone
- 03Apply defaultBLOCK
- 04Write decisiondeny_02
Socket not opened; 0 bytes out; denial receipt deny_02 recorded.An unlisted connection to example.com is evaluated by the gateway, matches no explicit rule, inherits the BLOCK default, and receives a denial receipt in the decision log.
IllustrativeSix rows chosen to show mocked calls, captured messages and denials. The hosts, the modes and the decision log are real: af net log prints every request the gateway decided, allowed as well as refused, and af ci summarises them on the pull request. A packet that never reaches the gateway, such as a connection straight to a public address, leaves no row: it fails at the network instead, which is stronger and is the section below. A denied destination is denied inside the twin; it does not on its own fail the check.
Containment is not a rule you can edit. A direct-IP attempt does not get out.
Clone-local DNS is not enough if the twin dials an address. The gateway matches domain, IP, protocol, method, and operation. Unknown destinations, unresolved secrets, or missing isolation block the run. Convenience does not silently override containment.
No default egress
There is no default public internet route from the twin.
Clone-local DNS
Production hostnames do not resolve to production.
Mandatory gateway
Domain, IP, protocol, method, and operation policies at the edge.
A stateful Stripe
One built-in pack answers the Stripe API from a clone-local ledger. Other mocked hosts answer without keeping state.
Charging a live processor is an existential failure. Not a warning. Not a retry.
Know what happens before you deploy.
Create a disposable production twin for every risky change. Catch migration failures before they reach customers.