Skip to content
Marcus Richards edited this page Oct 7, 2026 · 2 revisions

FAQ

Does the demo call PayPal? No. Every demo uses the mock rail. At 9900817, only server.py --sandbox (via SandboxPayPalClient) touches PayPal's sandbox.

What can I run with no keys and no LLM? python demo.py, python demo_sla_escrow.py --fast, python trace.py, python server.py, and python -m pytest -q.

Why does demo_six_beat.py fail for me? It drives a real LLM through the runner in PERMIT_GROK_CLI, which is required and has no default. If it is unset or not a file, the demo stops at the first agent beat with setup guidance. Set it, or pass --replay <transcript.jsonl> with a transcript from an earlier live run (none is committed). See Running the Demos.

Can a blocked spend reach PayPal? No. check() returns before authorize(). trace.py proves this with a spy whose authorize() raises if it is called.

Can a retry double-charge? The capture uses a stable PayPal-Request-Id ({permit_id}:{auth_id}:capture). The mock returns the same capture for the same key. The sandbox relies on PayPal honouring the header.

What happens if the capture response is lost? The escrow goes UNKNOWN. Nothing else happens until reconcile. See UNKNOWN and Reconcile.

Does e-stop stop a whole delegation tree? Not in code. /estop revokes one permit, while /revoke-cascade revokes the subtree. See E-Stop and Revocation.

Is the ledger proof of payment? No. It is an internally consistent, in-memory hash chain. It is not signed, not durable, and not a PayPal record.

What currency? CAD on the sandbox rail. Amounts are integer cents everywhere.

Does trace.py still collide with a server on 8741? No. Since 17943eb it uses a free loopback port.

Where do I report a security issue? GitHub private vulnerability reporting. See Contributing.

Clone this wiki locally