> ## Documentation Index
> Fetch the complete documentation index at: https://delivery.vexa.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# vexa_values_proven.py

> Turn a station's committed fills into an entry's proof of the contract's values.

Source: `publisher/vexa_values_proven.py` · audience: publisher

## When you use this

Build an entry's `values_proven` block from a station's committed row-fills log, before `platform-entry --values-proven` seals it into the entry. Reach for it whenever the channel's contract sets `carriage.require_entry_values_proven` — which is what makes the block mandatory — rather than typing the block by hand: it copies the station's own PASS lines verbatim as evidence and refuses to claim a required value no line proves.

## Usage

Emitted from `python3 publisher/vexa_values_proven.py --help`.

```text theme={null}
usage: vexa-values-proven [-h] --contract CONTRACT --fills FILLS --map MAP --station STATION
                          --out OUT

vexa-values-proven — build an entry's `values_proven` block from a station's
own committed fills.

WHY IT IS NOT TYPED BY HAND. The block this writes is what a contract's
`carriage.require_entry_values_proven` clause demands, and the in-cluster
verifier now refuses an entry that omits it. A human transcribing "V-est-1:
proven" into JSON is producing an unbacked claim in the exact shape of a backed
one — the same defect `--verdict-out` was written to remove from the station
verdict. So the evidence is COPIED, verbatim, out of the station's row-fills
log: a line that already exists, is already committed to the stations ledger,
and can be re-read at the `ref` this tool records.

WHAT MAKES A LINE PROOF. The station log's own convention is one row per line:

    2026-08-30T08:0xZ E0 PASS  vexa-verify.sh --station laptop-preflight …

...a timestamp, a station row id, a verdict token, and the finding. A line
proves a contract value when its row id is mapped to that value AND its verdict
token is exactly `PASS`. `PART`, `PASS*`, `FINDING`, `NOTE` and anything else do
NOT prove: they are the station saying "not entirely", and a tool that reads
them as proof is a tool that launders a caveat into a green tick. If a partial
row should nonetheless be accepted, that is a human's decision and it is written
as a `waived` row with the human's name on it — which this tool deliberately
cannot mint. A machine does not get to waive.

REFUSES RATHER THAN UNDER-DELIVERS. A required contract value with no mapped
PASS line produces NO output at all: the tool exits 3 and names what is
missing. Writing a partial block would hand the publisher a file that looks
complete and fails at the subscriber's PreSync hook instead.

  usage: python3 publisher/vexa_values_proven.py              --contract contracts/internal-estate-2026-09.json              --fills   <stations ledger>/stations/estate-seq12/row-fills.log              --map     seq12-rows.json              --station estate-seq12              --out     values-proven.json

  --map is a flat JSON object mapping STATION ROW ID -> CONTRACT VALUE ID,
  e.g. {"E0": "V-est-1", "P2": "V-est-2", "F0": "V-est-7"}. Several rows may
  map to one value; each contributes an evidence row. A value named in the map
  that the contract does not declare is a refusal, not a warning — it is the
  shape a typo takes, and a typo here proves nothing while looking like proof.

Exit 0 wrote the block · 2 usage · 3 refused, and says what is unproven.

options:
  -h, --help           show this help message and exit
  --contract CONTRACT  the channel contract whose required_values[] are being answered
  --fills FILLS        the station's committed row-fills.log; quoted verbatim as evidence
  --map MAP            JSON object mapping station row id -> contract value id
  --station STATION    the station making the claim; recorded on every row
  --out OUT            where to write the values_proven JSON array
```
