Skip to content

fix(honesty): hedge proof-ledger copy to readiness at proof_events=0#656

Open
Victor "David" Medina (Victor-David-Medina) wants to merge 1 commit into
mainfrom
fix/proof-ledger-readiness-copy
Open

fix(honesty): hedge proof-ledger copy to readiness at proof_events=0#656
Victor "David" Medina (Victor-David-Medina) wants to merge 1 commit into
mainfrom
fix/proof-ledger-readiness-copy

Conversation

@Victor-David-Medina

Copy link
Copy Markdown
Collaborator

Problem (live on main)

components/proof/ProofLedger.tsx rendered a present-tense claim unconditionally:

"Every dollar we win back lands here, owner-approved and timestamped..."

At proof_events=0 (no real recovered dollar yet) this asserts RelayLaunch is recovering dollars. That is a recovered-as-fact overclaim (FTC 5 / substantiation exposure) and contradicts the project honesty gate that forbids treating a recovered dollar as fact before First Light.

Fix (state-dependent, honest in every state)

  • proof_events=0 (loading / empty / Sample): future-tense "will land here" copy + a DOM-measurable Sample marker so a Playwright/regex honesty check can assert readiness:
    • data-proof-state="sample" on the section root
    • a visible "Sample" chip (data-proof-state-chip="sample", with an accessible label: "Sample state, pending your first recovered result")
  • proof_events>0 (post First Light): the present-tense "lands here" copy is earned and renders, with data-proof-state="live".

State is derived from the existing ledger source the component already reads (state === "ready" && ledger && ledger.totals.proof_events > 0) — no new data source. Mirrors the established ProofReceiptCard Sample/data-*-mode honesty pattern.

Scope (surgical)

  • Copy + Sample-state marker only.
  • Export unchanged — the existing CSV/JSON export (downloadCsv/downloadJson via proof-csv.ts) is untouched.
  • Design tokens only (--overlay-*, text-stone-*); no raw hex.
  • No em-dashes in any copy (anti-slop v2 gate).

Test

New components/proof/ProofLedger.test.tsx (TDD, watched fail then pass):

  • at proof_events=0: readiness copy + Sample marker render, and the present-tense we win back ... lands here claim is absent.
  • at proof_events>0: present-tense copy + data-proof-state="live" render, Sample chip gone.

Verification (local)

Gate Result
gate:anti-theater (honesty firewall, blocking) PASS
brand:scan exit 0 (ProofLedger not flagged; em-dash findings are pre-existing in other files)
tsc --noEmit PASS
npm run lint PASS
npm run test 4313 passed / 3 skipped, exit 0

No merge — buyer copy needs founder eye. Vercel check is the known permafail and is ignorable.

Generated with Claude Code by RelayLaunch

The header asserted "Every dollar we win back lands here" in present tense,
claiming active recovery while proof_events=0 (no real recovered dollar yet).
That is a recovered-as-fact overclaim (FTC 5 / substantiation exposure) and
contradicts the honesty gate that forbids treating a recovered dollar as fact
before First Light.

Now state-dependent, honest in every state:
- proof_events=0 (loading/empty/Sample): future-tense "will land here" copy
  plus a DOM-measurable Sample marker (data-proof-state="sample" + a visible
  "Sample" chip) so a Playwright/regex honesty check can assert readiness.
- proof_events>0 (post First Light): the present-tense "lands here" copy is
  earned and renders (data-proof-state="live").

State is derived from the existing ledger source the component already reads
(no new data source). The CSV/JSON export path is untouched. New test asserts
the readiness copy + Sample marker render at proof_events=0 and that the
present-tense copy returns once real proof exists. No em-dashes in copy.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant