diff --git a/docs/trustshell-dev-draft/README.md b/docs/trustshell-dev-draft/README.md
new file mode 100644
index 00000000..e8abff4e
--- /dev/null
+++ b/docs/trustshell-dev-draft/README.md
@@ -0,0 +1,71 @@
+# trustshell.dev — "Receipts, not promises" draft section (D7)
+
+**Status: DRAFT. Not deployed. Not published.** This is a self-contained HTML draft of one
+explainer section for trustshell.dev, built to be shown and reviewed, then ported into the live
+site by the site owner if approved. Nothing here ships automatically, and no new public claim
+goes live from this folder.
+
+## What it is
+
+`receipts-section.html` — a single, self-contained page that walks the owner's five-step
+progression — **Enforce → Observe → Verify → Earn → Reuse** — with the real CLI at each step:
+the owner policy that decides before a tool runs and pins it by path+sha256 (`guard` / `run`), the
+hash-chained log checked offline (`inspect`), the one-receipt / six-claim non-collapsing verdict
+(`verify-receipt`), the three-rung evidence ladder (owner-self-signed → issuer-attested →
+RepID-eligible), and the signed carry where authority never travels (`bundle`). It ends with
+"What a receipt does not prove" and a runnable, offline, no-account loop.
+
+## This revision (2026-11-07): IA aligned, commands made real, one label corrected
+
+- **IA now follows the owner's progression** Enforce → Observe → Verify → Earn → Reuse — a step rail
+ up top, one step per section. The six-claim verdict panel lives inside Verify; the ladder inside Earn.
+- **Three fabricated commands removed.** The prior draft told a skeptic to run `trustshell demo`,
+ `npx … demo`, and `trustshell sign-receipt` — none of which exist in the CLI (`demo` is only a
+ `check --demo` flag; sealing lives in the `sandbox` / `run` path, which needs a container or the
+ engine). Every command shown now is one the CLI actually has and runs offline: `guard`, `run`,
+ `inspect`, `verify-receipt`, `bundle` (verified against `src/cli/index.ts` and L-E2E).
+- **Rung 2 is "Issuer-attested", not "independently-verified"** — reconciled with #681's
+ `INDEPENDENTLY_VERIFIED → ISSUER_ATTESTED` rename: the engine's key is not independent of the
+ issuer, so the page says exactly that instead of claiming an independence it does not have.
+
+## How to view it
+
+```
+cd docs/trustshell-dev-draft
+python -m http.server 8787
+# open http://127.0.0.1:8787/receipts-section.html
+```
+
+Opening the file directly (`file://`) works too; a server is only needed if a tool must drive it.
+
+## It inherits trustshell.dev's own world (extension, not a redesign)
+
+Captured from the live site and reused verbatim, so this drops in without a visual seam:
+
+- Ground `#0a0a0a`, foreground `#fafafa`, muted `#a1a1aa`, accent `#f6851b`, card `#18181b`,
+ border `#27272a`.
+- State palette doing the semantic work: `--state-measured #2dd4bf` (VERIFIED), `--state-not-checked
+ #8b97a8` (NOT_CHECKED), `--state-failed #fb7185` (reserved for FAILED).
+- Type: IBM Plex Serif display headings, Inter body, JetBrains Mono for receipts / commands / state.
+
+## Honesty rules honored (PRODUCT.md copy rules)
+
+- No "first / only / unique / unhackable" anywhere.
+- NOT_CHECKED is shown, never rounded up to a pass; the six claims never collapse into one badge.
+- The three evidence levels are kept distinct; an owner self-signature earns **no** production RepID.
+- Framed as a developer preview; ends with explicit "what a pass does not prove".
+- No accuracy number is quoted (none has a ruler to carry here).
+- Every command shown exists in the CLI and runs offline — no fabricated `demo` / `sign-receipt`.
+- "Independently-verified" is not claimed where the code only reaches `ISSUER_ATTESTED` (#681).
+
+## Design-detector result
+
+`impeccable detect` → **1 finding, accepted:** `overused-font: inter`. Inter is trustshell.dev's
+own body face; this section inherits the established world, so the face is intentional, not a
+default. All other findings (contrast, sub-11px micro-labels, flat type steps, italic-serif hero
+tell, em-dash saturation) were fixed. Verified rendered at desktop and 375px mobile.
+
+## What this draft does NOT do
+
+It does not deploy, it does not touch the live trustshell.dev, and it introduces no claim the
+engine cannot already back. Any new public copy here is a MAJOR change and is the owner's call.
diff --git a/docs/trustshell-dev-draft/receipts-section.html b/docs/trustshell-dev-draft/receipts-section.html
new file mode 100644
index 00000000..eb1372b6
--- /dev/null
+++ b/docs/trustshell-dev-draft/receipts-section.html
@@ -0,0 +1,315 @@
+
+
+
A TrustShell action is decided before it runs, recorded while it runs, and sealed into a receipt anyone can check offline — one that is strict about what it refuses to claim. Five steps, no single “valid” badge at the end of any of them.
+
+
1 Enforce→
+
2 Observe→
+
3 Verify→
+
4 Earn→
+
5 Reuse→
+
+
+
+
+
+ Step 1Enforce
+
The owner decides before the tool runs
+
A policy you own lists what may run and pins each tool to one executable by path and sha256. The decision and its record come before the command starts — a command that is not listed, or whose binary was swapped, never starts.
+
+
$ trustshell guard init # write the owner policy; every limit 0
+$ trustshell guard allow tool:git --exe "$(command -v git)" # list it AND pin it by path+sha256
+$ trustshell run --tool git -- "$(command -v git)" --version # decided+recorded, then runs
+$ trustshell run --tool git -- ./not-the-pinned-git --version # REFUSED before it starts (exit 5)
+
+
With a policy in place, anything unlisted is denied, and no policy at all means nothing runs (exit 2) — never a silent allow. This is where the receipt’s authorization and containment claims come from.
+
+
+
+
+ Step 2Observe
+
What happened is recorded — and so is what no one watched
+
The run records the plain facts it has: the exit code, the signal, the duration. It does not claim to have watched the work. The card says so in those words, and the record goes into a local, hash-chained log you can check offline.
+
+
$ trustshell inspect # verify the local tool-call log — opens NO socket
+INTACT .trustshell/session.jsonl # exit 0 · BROKEN (1) / UNCHAINED (3) / NO_LOG (3)
+
+
The run card reads independently observed — nothing: no outside party watched this command. “Exited 0” is recorded as an exit code, never promoted to “succeeded”, “correct”, or “verified”.
+
+
+
+
+ Step 3Verify
+
One receipt, six separate claims
+
There is no single “valid” badge. verify-receipt recomputes the hash and the signature locally — no network, no engine — and reports each claim on its own, with its own gaps.
Offline verdict — sealer ✓ trusted under the pinned key. No network was used.
+
+
IntegrityVERIFIEDThe bytes are whole: the hash matches the contents, and a pinned Ed25519 key sealed them.
+
AuthenticityNOT_CHECKEDNo six-claim envelope was supplied, and this cannot be derived from the receipt alone.
+
ObservationNOT_CHECKEDNo outcome (e.g. a payment settling on chain) was observed and attested.
+
CorrectnessNOT_CHECKEDThe content was not verified against its source.
+
AuthorizationNOT_CHECKEDWhether the kernel permitted this action under its policy is not established here.
+
ContainmentNOT_CHECKEDThat the tool ran only under an ALLOW decision is not established here.
+
+
NOT_CHECKED is never a pass. Offline verification proves two things by cryptography: the bytes are whole, and a pinned key sealed them. Every other claim is read from an authenticated envelope or stays NOT_CHECKED — so exit is keyed to integrity: 0 VERIFIED, 1 FAILED, 2 NOT_CHECKED.
+
+
+
+
+
+ Step 4Earn
+
Three levels of evidence, never collapsed
+
A signature says who sealed a receipt — not that an action was permitted, and not that it earned a reputation. The levels do not blur together, and you can only reach the first one by yourself.
+
+
+
+
Owner-self-signed you can do this now
+
Sealed with your install’s own key. Integrity verifies under the key you pin, offline.
+
Proves authorship and wholeness, nothing more. Not independent verification, and it earns no production RepID.
+
+
+
Issuer-attested the engine’s key
+
An engine key sealed the receipt and an authenticated six-claim envelope backs it, so a claim beyond Integrity reads VERIFIED.
+
The engine’s key is not independent of the issuer, so this is not yet independent verification — and still not reputation. Verification and reputation are separate gates.
+
+
+
RepID-eligible the engine decides
+
Whether a receipt earns portable reputation is the engine’s call, against its own pinned key.
+
Never an offline verdict, and never self-declared. An owner cannot promote their own receipt here.
+
+
+
+
+
+
+ Step 5Reuse
+
Carry what was earned — authority stays home
+
A bundle is one Ed25519-signed file: your profile, the policy by hash, the notes you choose, and evidence pointers by sha256. Never credentials, keys, or spending authority. What travels is evidence a stranger can check; what does not travel is the power to act.
+
+
$ trustshell bundle export carry.sig --notes released # sign a carry; the key never goes in it
+$ trustshell bundle import carry.sig # verify its signature, then write it here
+
+
On import, authority does not come with it: notes land untrusted and quarantined, and a policy is enforced only if its owner signature verifies with a key you trust and its nonce is higher than the one in force. The same receipt and the same RepID carry across contexts without carrying the right to act.
+
+
+
+
+
What a receipt does not prove
+
+
An owner self-signature proves authorship and wholeness — not that the engine permitted the action, and not that it earned reputation.
+
NOT_CHECKED is never rounded up to a pass. A claim with no evidence stays not-checked; there is no single rollup “valid”.
+
Offline verification is stateless. It does not catch a verbatim replay of one receipt. Replay is prevented by the engine’s receipt-id and nullifier, not by the offline verifier.
+
A pinned root is required to accept a seal. With no key pinned, a whole-but-unaccountable receipt is NOT_CHECKED, never exit 0.
+
+
+
+
Run the enforced path and check its log yourself — no account, no network, no container: