# Claims — every sentence on obligente.com that asserts something, and where the proof is

PH-8 (periplus-ph8-public-face.md, NN2/NN3, gate PH8-T1). The rendered page is the
input: `scripts/ph8-gate.mjs extract` prints every sentence that carries a numeral or a
capability word, and the gate fails when one of those sentences is missing from the JSON
block below, or when a row below no longer renders. Evidence paths are relative to the
sibling checkouts (`rutter/`, the engine this page describes) or to this file.

Verdicts: `supported` — the evidence says exactly this; `rewritten` — the PH-8 audit
found the prior wording unsupported and this is the re-sourced wording. No row is
`unsupported`: that verdict fails the gate, and a claim with no proof ships as
`[[REAL PROOF NEEDED]]` in the source, which fails PH8-T2. Neither marker exists.

Written at HEAD `3d70e0e77d86633ede5c7bdc83643682e9180922` (program §9). The gate run that
verifies this table is `qa/evidence/ph8-gate-run.txt`, which names its own HEAD.

## The demo chain (every hash on the page)

The eight hashes on the page are prefixes of a real SHA-256 chain over eight demo
payloads. Genesis is sixty-four zero characters; each head is
`h(n) = SHA-256(h(n−1) ‖ payload(n))` over the UTF-8 bytes of the hex head followed by
the payload text. The payloads, in order:

```
{"kind":"run.started","process":"vendor-onboarding","rev":7}   → fb82d7238c2bfd6a
{"kind":"step.started","node":"collect-w9"}                    → aa9c1faa27cd7576
{"kind":"evidence.submitted","requirement":"w9-form"}          → 7b240e002244071f
{"kind":"evidence.verified","checks":11}                       → 3b81ee73fd0b27d3
{"kind":"tool.started","op":"sanctions.screen"}                → e9c23ac8b445dff0
{"kind":"tool.succeeded","receipt":true}                       → d6458bd14c78d631
{"kind":"approval.recorded","sod":"distinct-actor"}            → 26369cdbcd51a547
{"kind":"run.completed","outcome":"approved"}                  → 962ac5342796e340
```

Recompute it yourself (plain Node, no dependencies):

```js
import { createHash } from "node:crypto";
const payloads = [
  '{"kind":"run.started","process":"vendor-onboarding","rev":7}',
  '{"kind":"step.started","node":"collect-w9"}',
  '{"kind":"evidence.submitted","requirement":"w9-form"}',
  '{"kind":"evidence.verified","checks":11}',
  '{"kind":"tool.started","op":"sanctions.screen"}',
  '{"kind":"tool.succeeded","receipt":true}',
  '{"kind":"approval.recorded","sod":"distinct-actor"}',
  '{"kind":"run.completed","outcome":"approved"}',
];
let head = "0".repeat(64);
for (const p of payloads) {
  head = createHash("sha256").update(head + p).digest("hex");
  console.log(head.slice(0, 16));
}
```

This is a demo chain: its payloads are illustrative, and it is computed by the page's own
arithmetic, not read from a running Obligente. The engine's real ledger hashes under the
`rfc8785-v1` contract (rutter ADR-0001/0011), whose genesis event carries no `prev_hash`
key at all — the demo's zero-genesis is the page's simplification, stated here so nobody
mistakes one for the other.

## Banned terms

`docs/banned-terms.json` is vendored verbatim from `rutter/scripts/gate/banned-terms.json`
(sha256 `00688e68162cce1e7c1b6e7ad201dd5278f1bf9fd94a7cbffd65c7d8dffc8fde`). The gate scans
the rendered page for every term in it; the count is 0. The page says *tamper-evident*
and never the absolute forms.

## The table

| id | claim (rendered) | evidence | verdict |
|---|---|---|---|
| ob-01 | Obligente runs your regulated processes and writes the audit trail as it goes. | rutter/docs/adr/0011-ledger-append-protocol.md; 0036-change-proposal-boundary.md | supported |
| ob-02 | When the auditor asks, the answer already exists. | rutter/docs/adr/0014-chain-verification.md | supported |
| ob-03 | demo ledger head 962ac5342796e340 · recompute it yourself | this file, §The demo chain | rewritten — prior copy implied a live ledger head; now named as the demo chain with its payloads published |
| ob-04 | We are not #1. | rutter/docs/CHARTER.md §5 (no claim beyond what the build supports) | supported — a stance, and the one superlative the page makes is a negative one |
| ob-05 | Every hash on this page is real arithmetic you can recompute yourself — which is more than a superlative ever proved. | this file, §The demo chain | supported |
| ob-06 | The Friday the evidence chase didn't happen. | vignette, labelled "what week one is designed to feel like"; mechanism: rutter/docs/adr/0021-evidence-assurance-limits.md | supported as a labelled scenario |
| ob-07 | Every run already recorded itself as it happened — submission, verification, approval — as hash-chained events. | rutter/docs/adr/0011-ledger-append-protocol.md; 0019-approvals-and-separation-of-duties.md | supported |
| ob-08 | The audit where nobody rebuilt a spreadsheet. | vignette; mechanism: rutter/docs/adr/0035-aggregation-read-model.md | supported as a labelled scenario |
| ob-09 | The report is a view of the ledger — it cannot drift from what actually happened. | rutter/docs/adr/0035-aggregation-read-model.md | supported |
| ob-10 | Proposed changes cite the exact ledger events that justify them — pointers anyone can resolve and recompute. | rutter/docs/adr/0036-change-proposal-boundary.md; 0037-proposal-persistence-and-invariants.md | supported |
| ob-11 | SCENARIO VIGNETTES — WHAT WEEK ONE IS DESIGNED TO FEEL LIKE | the label that declares ob-06/ob-08/ob-13 as scenarios | supported |
| ob-12 | DEPARTURES · AUDIT SEASON | board label over demo rows | supported (demo) |
| ob-13 | Every item, suddenly on time. | board heading over demo rows; SLA mechanism: rutter/docs/adr/0018-time-sla-and-system-actor.md | supported as a labelled scenario |
| ob-14 | The things you dread pulling together are the things the ledger already holds. | rutter/docs/adr/0011-ledger-append-protocol.md; 0035-aggregation-read-model.md | supported |
| ob-15 | Each row below is tied to a shipped mechanism — and each hash is a real SHA-256 prefix. | this file, §The demo chain; ob-17/20/22/23 name the mechanisms | supported |
| ob-16 | Q3 vendor review | demo row (payload 1, `vendor-onboarding`) | supported (demo) |
| ob-17 | hash-chained ledger · fb82d7238c2bfd6a | demo chain head 1; rutter/docs/adr/0011-ledger-append-protocol.md | supported |
| ob-18 | READY · verifiable | rutter/docs/adr/0014-chain-verification.md | supported |
| ob-19 | SOC-prep evidence pull | demo row (payload 3, `w9-form`) | supported (demo) |
| ob-20 | evidence binding · 7b240e002244071f | demo chain head 3; rutter/docs/adr/0021-evidence-assurance-limits.md | supported |
| ob-21 | Change approval trail | demo row (payload 7, `approval.recorded`) | supported (demo) |
| ob-22 | separation of duties · d6458bd14c78d631 | demo chain head 6; rutter/docs/adr/0019-approvals-and-separation-of-duties.md | supported |
| ob-23 | proposal loop · e9c23ac8b445dff0 | demo chain head 5; rutter/docs/adr/0036-change-proposal-boundary.md | supported |
| ob-24 | "Verifiable" means recomputable: h(n) = SHA-256(h(n−1) ‖ payload(n)), genesis sixty-four zeros, over the eight demo payloads published in docs/CLAIMS.md. | this file, §The demo chain | rewritten — new this phase; names the arithmetic and the demo |
| ob-25 | Tamper-evident within a stated threat model — see limits. | rutter/docs/adr/0011-ledger-append-protocol.md; docs/banned-terms.json | supported |
| ob-26 | One published revision becomes the runbook, the checklist, and the guide — automatically, deterministically. | rutter/docs/adr/0022-compiler-determinism.md; 0033-compile-targets.md (web_runbook, checklist, training_guide) | supported |
| ob-27 | Durations, failure edges, and evidence outcomes are computed from the ledger, not remembered. | rutter/docs/adr/0035-aggregation-read-model.md | supported |
| ob-28 | Changes propose themselves, citing the evidence. | rutter/docs/adr/0036-change-proposal-boundary.md | supported |
| ob-29 | People approve them. | rutter/docs/adr/0038-proposal-review-rollout-and-publication-guard.md | supported |
| ob-30 | A machine draft never publishes itself: the database refuses. | rutter/docs/adr/0037-proposal-persistence-and-invariants.md; 0038 — trigger `rutter.assert_proposal_human_approved()` | rewritten — now names the mechanism (a database trigger, not application code) |
| ob-31 | Obligente is built so that knowledge stops living in one person and starts living in the record, without taking it away from them. | rutter/docs/adr/0044-sop-studio-room.md; 0036 | supported (intent, with the mechanism cited) |
| ob-32 | Not the org chart — the one who wrote the runbook, keeps the exceptions in their head, and gets called at 8pm during audit week. | audience description, no capability asserted | supported |
| ob-33 | It is not certified. | rutter/docs/CHARTER.md §5 | supported |
| ob-34 | No SOC 2, ISO 27001, PCI DSS, or HIPAA attestation exists for Obligente, and none is claimed here. | rutter/docs/CHARTER.md §5 | supported |
| ob-35 | Tamper-evident, within a stated threat model. | rutter/docs/adr/0011-ledger-append-protocol.md | supported |
| ob-36 | The chain detects modification by a party that cannot also rewrite the verification path and every stored digest. | rutter/docs/adr/0014-chain-verification.md; 0021-evidence-assurance-limits.md | supported |
| ob-37 | It is not a defence against an operator with full control of storage and verifier — no hash chain is. | rutter/docs/adr/0014-chain-verification.md | supported |
| ob-38 | The ledger, evidence verification, approvals, retention, isolation, the proposal loop and the SOP studio are built and gated. | rutter/docs/adr/0011, 0021, 0019, 0013-staged-purge-erasure.md, 0006/0012 (isolation), 0036–0038, 0044; rutter/docs/session-reports/ph4-report.md (PASS) | rewritten — "phase 2" replaced by the named, gated mechanisms |
| ob-39 | Autonomy beyond human-approved proposals is deliberately not built. | rutter/docs/adr/0034-agent-instructions-boundary.md; 0038 | supported |
| ob-40 | Obligente has run against a local stack and its own test suites. | rutter/docs/session-reports/ph4-report.md; rutter/docs/CHARTER.md §1 (no deployment) | supported |
| ob-41 | Bring us your worst audit story. | invitation, no claim | supported |
| ob-42 | The useful conversation right now is with people who want to test the mechanism, not watch a demo. | stance | supported |
| ob-43 | Obligente — a process engine with a checkable ledger. | rutter/docs/adr/0011; 0014 | supported |
| ob-44 | No certification is claimed. | rutter/docs/CHARTER.md §5 | supported |
| ob-45 | Tamper-evident within the threat model stated under Limits. | rutter/docs/adr/0011-ledger-append-protocol.md | supported |
| ob-46 | Process engine · pre-production · uncertified | rutter/docs/CHARTER.md §1/§5 | rewritten — "phase 2" dropped: the phase number drifted with every session |

Not rendered, still bound by the same rule: the JSON-LD `softwareVersion` is
`"pre-production"` and the `publisher` is Periplus — the same sources as ob-46.

```json
[
  {"id":"ob-01","text":"Obligente runs your regulated processes and writes the audit trail as it goes.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md; rutter/docs/adr/0036-change-proposal-boundary.md","verdict":"supported"},
  {"id":"ob-02","text":"When the auditor asks, the answer already exists.","evidence":"rutter/docs/adr/0014-chain-verification.md","verdict":"supported"},
  {"id":"ob-03","text":"demo ledger head 962ac5342796e340 · recompute it yourself","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page","verdict":"rewritten"},
  {"id":"ob-04","text":"We are not #1.","evidence":"rutter/docs/CHARTER.md#5","verdict":"supported"},
  {"id":"ob-05","text":"Every hash on this page is real arithmetic you can recompute yourself — which is more than a superlative ever proved.","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page","verdict":"supported"},
  {"id":"ob-06","text":"The Friday the evidence chase didn't happen.","evidence":"rutter/docs/adr/0021-evidence-assurance-limits.md (labelled scenario)","verdict":"supported"},
  {"id":"ob-07","text":"Every run already recorded itself as it happened — submission, verification, approval — as hash-chained events.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md; rutter/docs/adr/0019-approvals-and-separation-of-duties.md","verdict":"supported"},
  {"id":"ob-08","text":"The audit where nobody rebuilt a spreadsheet.","evidence":"rutter/docs/adr/0035-aggregation-read-model.md (labelled scenario)","verdict":"supported"},
  {"id":"ob-09","text":"The report is a view of the ledger — it cannot drift from what actually happened.","evidence":"rutter/docs/adr/0035-aggregation-read-model.md","verdict":"supported"},
  {"id":"ob-10","text":"Proposed changes cite the exact ledger events that justify them — pointers anyone can resolve and recompute.","evidence":"rutter/docs/adr/0036-change-proposal-boundary.md; rutter/docs/adr/0037-proposal-persistence-and-invariants.md","verdict":"supported"},
  {"id":"ob-11","text":"SCENARIO VIGNETTES — WHAT WEEK ONE IS DESIGNED TO FEEL LIKE","evidence":"index.html (the label that declares the vignettes as scenarios)","verdict":"supported"},
  {"id":"ob-12","text":"DEPARTURES · AUDIT SEASON","evidence":"index.html (board label over demo rows)","verdict":"supported"},
  {"id":"ob-13","text":"Every item, suddenly on time.","evidence":"rutter/docs/adr/0018-time-sla-and-system-actor.md (labelled scenario)","verdict":"supported"},
  {"id":"ob-14","text":"The things you dread pulling together are the things the ledger already holds.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md; rutter/docs/adr/0035-aggregation-read-model.md","verdict":"supported"},
  {"id":"ob-15","text":"Each row below is tied to a shipped mechanism — and each hash is a real SHA-256 prefix.","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page","verdict":"supported"},
  {"id":"ob-16","text":"Q3 vendor review","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (payload 1)","verdict":"supported"},
  {"id":"ob-17","text":"hash-chained ledger · fb82d7238c2bfd6a","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (head 1); rutter/docs/adr/0011-ledger-append-protocol.md","verdict":"supported"},
  {"id":"ob-18","text":"READY · verifiable","evidence":"rutter/docs/adr/0014-chain-verification.md","verdict":"supported"},
  {"id":"ob-19","text":"SOC-prep evidence pull","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (payload 3)","verdict":"supported"},
  {"id":"ob-20","text":"evidence binding · 7b240e002244071f","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (head 3); rutter/docs/adr/0021-evidence-assurance-limits.md","verdict":"supported"},
  {"id":"ob-21","text":"Change approval trail","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (payload 7)","verdict":"supported"},
  {"id":"ob-22","text":"separation of duties · d6458bd14c78d631","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (head 6); rutter/docs/adr/0019-approvals-and-separation-of-duties.md","verdict":"supported"},
  {"id":"ob-23","text":"proposal loop · e9c23ac8b445dff0","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page (head 5); rutter/docs/adr/0036-change-proposal-boundary.md","verdict":"supported"},
  {"id":"ob-24","text":"\"Verifiable\" means recomputable: h(n) = SHA-256(h(n−1) ‖ payload(n)), genesis sixty-four zeros, over the eight demo payloads published in docs/CLAIMS.md.","evidence":"docs/CLAIMS.md#the-demo-chain-every-hash-on-the-page","verdict":"rewritten"},
  {"id":"ob-25","text":"Tamper-evident within a stated threat model — see limits.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md; docs/banned-terms.json","verdict":"supported"},
  {"id":"ob-26","text":"One published revision becomes the runbook, the checklist, and the guide — automatically, deterministically.","evidence":"rutter/docs/adr/0022-compiler-determinism.md; rutter/docs/adr/0033-compile-targets.md","verdict":"supported"},
  {"id":"ob-27","text":"Durations, failure edges, and evidence outcomes are computed from the ledger, not remembered.","evidence":"rutter/docs/adr/0035-aggregation-read-model.md","verdict":"supported"},
  {"id":"ob-28","text":"Changes propose themselves, citing the evidence.","evidence":"rutter/docs/adr/0036-change-proposal-boundary.md","verdict":"supported"},
  {"id":"ob-29","text":"People approve them.","evidence":"rutter/docs/adr/0038-proposal-review-rollout-and-publication-guard.md","verdict":"supported"},
  {"id":"ob-30","text":"A machine draft never publishes itself: the database refuses.","evidence":"rutter/docs/adr/0037-proposal-persistence-and-invariants.md; rutter/docs/adr/0038-proposal-review-rollout-and-publication-guard.md (rutter.assert_proposal_human_approved())","verdict":"rewritten"},
  {"id":"ob-31","text":"Obligente is built so that knowledge stops living in one person and starts living in the record, without taking it away from them.","evidence":"rutter/docs/adr/0044-sop-studio-room.md; rutter/docs/adr/0036-change-proposal-boundary.md","verdict":"supported"},
  {"id":"ob-32","text":"Not the org chart — the one who wrote the runbook, keeps the exceptions in their head, and gets called at 8pm during audit week.","evidence":"index.html (audience description; no capability asserted)","verdict":"supported"},
  {"id":"ob-33","text":"It is not certified.","evidence":"rutter/docs/CHARTER.md#5","verdict":"supported"},
  {"id":"ob-34","text":"No SOC 2, ISO 27001, PCI DSS, or HIPAA attestation exists for Obligente, and none is claimed here.","evidence":"rutter/docs/CHARTER.md#5","verdict":"supported"},
  {"id":"ob-35","text":"Tamper-evident, within a stated threat model.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md","verdict":"supported"},
  {"id":"ob-36","text":"The chain detects modification by a party that cannot also rewrite the verification path and every stored digest.","evidence":"rutter/docs/adr/0014-chain-verification.md; rutter/docs/adr/0021-evidence-assurance-limits.md","verdict":"supported"},
  {"id":"ob-37","text":"It is not a defence against an operator with full control of storage and verifier — no hash chain is.","evidence":"rutter/docs/adr/0014-chain-verification.md","verdict":"supported"},
  {"id":"ob-38","text":"The ledger, evidence verification, approvals, retention, isolation, the proposal loop and the SOP studio are built and gated.","evidence":"rutter/docs/adr/0011, 0021, 0019, 0013-staged-purge-erasure.md, 0006-database-roles-and-grants.md, 0012-storage-boundary.md, 0036–0038, 0044-sop-studio-room.md; rutter/docs/session-reports/ph4-report.md","verdict":"rewritten"},
  {"id":"ob-39","text":"Autonomy beyond human-approved proposals is deliberately not built.","evidence":"rutter/docs/adr/0034-agent-instructions-boundary.md; rutter/docs/adr/0038-proposal-review-rollout-and-publication-guard.md","verdict":"supported"},
  {"id":"ob-40","text":"Obligente has run against a local stack and its own test suites.","evidence":"rutter/docs/session-reports/ph4-report.md; rutter/docs/CHARTER.md#1","verdict":"supported"},
  {"id":"ob-41","text":"Bring us your worst audit story.","evidence":"index.html (invitation; no claim)","verdict":"supported"},
  {"id":"ob-42","text":"The useful conversation right now is with people who want to test the mechanism, not watch a demo.","evidence":"index.html (stance)","verdict":"supported"},
  {"id":"ob-43","text":"Obligente — a process engine with a checkable ledger.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md; rutter/docs/adr/0014-chain-verification.md","verdict":"supported"},
  {"id":"ob-44","text":"No certification is claimed.","evidence":"rutter/docs/CHARTER.md#5","verdict":"supported"},
  {"id":"ob-45","text":"Tamper-evident within the threat model stated under Limits.","evidence":"rutter/docs/adr/0011-ledger-append-protocol.md","verdict":"supported"},
  {"id":"ob-46","text":"Process engine · pre-production · uncertified","evidence":"rutter/docs/CHARTER.md#1; rutter/docs/CHARTER.md#5","verdict":"rewritten"}
]
```
