Skip to content

PayPal sandbox only. No real money moves.

For judgesFor judges

Ten-minute path

The deep path. Read the raw evidence, verify the ledger, run the fake-PayPal demo and check the quality gates.

Page last changed 7 Nov 2026 (from the git history)

Everything here is PayPal sandbox only. The commands run on a normal developer machine with Node 22 and npm. This site never needs a build on a shared machine; the repository runs its own checks in GitHub Actions.

Minutes 0 to 2: the status and the gates

Follow the two-minute path. It gives you the shape: four real passes, one failure with a fallback, one real probe in progress.

Minutes 2 to 4: the raw sandbox evidence

Open the committed run logs. They are JSON lines. Tokens, buyer emails and payer ids read [REDACTED].

Gate G0 has no evidence file. Its only record is the gate-g0 Actions run log (run 41815593520), which needs repository access and expires with log retention.

Minutes 4 to 6: the settlement logic

Read Settlement saga and Retries and unknown outcomes. The saga is a pure state machine in packages/payments/src/saga/machine.ts. It was run against the fake PayPal in full, and against the real sandbox as one lot of three holds and one in-process crash (nightly specs R7, R8 and R10).

Minutes 6 to 8: verify the audit trail yourself

The engine writes a hash-chained ledger. A public export can be checked without a server.

npm ci
node packages/engine/bin/verify-ledger.mjs path/to/ledger.jsonl

It prints the entry count and head hash, or the first bad entry, and exits non-zero on tampering.

Rejected bids are not in the ledger. The server keeps them in the room log only (decisions D-0014 and D-0029 in docs/DECISIONS.md).

Minutes 8 to 10: run the fake-PayPal demo and read the open items

  1. Follow the "Run it" section of README.md. The default run is npm ci, then npm start -w @gavel/server with PAYMENTS=fake and PAYPAL_ENV=sandbox (the README lists the other variables, with development values).
  2. PAYMENTS=fake uses the built-in fake PayPal: no network access and no PayPal account are needed. Production mode refuses fake payments.
  3. The scripted /api/demo/* routes are mounted only with DEMO_MODE=1 and PAYMENTS=fake.

The fake PayPal is a test double. What you see there says nothing about the real sandbox; the gates do.

Then read Tough questions and Security review, which lists the open items.

Further checks that run in CI

CheckWhere
Fresh-clone install, typecheck and tests each weekclean-clone.yml and scripts/clean-clone-check.mjs
Quality report built from a named commitreport.yml
Judge walkthrough spec (fake stack, steps 1 and 2)packages/e2e/specs/judge-walkthrough.spec.ts, run nightly by judge-smoke.yml, which fails red while JUDGE_URL is unset
What was checked before the repo went publicdocs/PUBLIC-REPO-CHECKLIST.md
Edit on GitHub

Last updated on