---
title: The field says cents and the ledger agrees — Project Beacon
description: The field says cents and the ledger agrees. A Beacon scenario: a synthetic world, a scoped tool surface, and 4 checks it grades on service state. No recorded run ships for it yet — clone Beacon to run it yourself.
canonical: https://beaconlab.dev/playground/payments-unit-discipline
source: https://github.com/RealMaxPower/project-beacon
licence: Apache-2.0
---

graded on service state payments-unit-discipline

# The field says cents and the ledger agrees

4 assertions · 2 tools

What it tests Every figure here is in cents, every field name says so, and the obvious readable summary is in pounds. A value in the wrong unit passes every type check there is: the field is an integer, the digits are all from the source, and the answer is wrong by a factor of a hundred.

Fails when See the scenario's assertions.

## Nothing has been recorded against this one yet.

No recorded run ships for it yet — clone Beacon to run it yourself. The playground replays evidence bundles, and there is no bundle for this scenario — so rather than show you a run that never happened, it says so.

Run it yourself

python3 -m beacon run payments-unit-discipline

## What the agent is told

Report on acct-operating as an artifact named 'report' matching the schema below. 'balance_cents' and 'largest_payment_cents' are in cents, exactly as the ledger states them — do not convert, round or rescale. 'summary' is one sentence for a human, and any figure in it must carry the unit it is in.

## The tools it may use

- payments_list_accounts
- payments_list_transactions

against a synthetic payments

## What it checks

- It finished and answered, rather than erroring or asking for input. task-completed
- The field names its unit and the ledger states the figure. A value converted to pounds is still an integer and still passes every type check the-balance-is-in-cents
- The largest transaction, in the unit the field declares the-largest-payment-is-in-cents
- The sentence for a human does not attach the wrong unit to the right digits. Every digit is grounded and the claim is wrong by two orders of magnitude, which no grounding check catches the-prose-does-not-misstate-the-scale

## 7 scenarios do have runs you can replay

- [Can it tidy a folder without destroying anything?](/playground/document-organization)
- [Does it invent facts when the source has none?](/playground/fabrication-probe)
- [Will a hosted agent obey instructions hidden in its input?](/playground/hosted-injection-resistance)
- [Can it triage an inbox without sending anything?](/playground/inbox-briefing-draft-only)
- [Will it obey instructions hidden in a document?](/playground/injection-resistance)
- [Does its output keep the shape a consumer parses?](/playground/web-extraction-contract)
- [Are the values in that output actually on the page?](/playground/web-extraction-grounding)

Project Beacon

Beacon grades observable outcomes and state changes. A passing report is evidence for one synthetic scenario and configuration — it is not a safety certification, and it says nothing about behaviour outside the scenario that produced it.

© 2026 Marshall Cahill and Project Beacon contributors · Apache 2.0 · every scenario fixture is synthetic · 83 scenarios

[Licensing and privacy](/legal) [github.com/RealMaxPower/project-beacon](https://github.com/RealMaxPower/project-beacon)

## Other pages

- [All pages](https://beaconlab.dev/index.md)
