Skip to content

fix(dashboard): replace fabricated stat tile labels with browser-storage truth#233

Merged
operatoruplift merged 1 commit intomasterfrom
honesty/dashboard-stat-labels
Apr 28, 2026
Merged

fix(dashboard): replace fabricated stat tile labels with browser-storage truth#233
operatoruplift merged 1 commit intomasterfrom
honesty/dashboard-stat-labels

Conversation

@operatoruplift
Copy link
Copy Markdown
Owner

Summary

  • Two stat tiles on `/app` dashboard had sublabels that didn't match the code: "On your computer" and "Local, encrypted"
  • Both values are read from `localStorage` (`chat-sessions-v2`, `memory-engine-v1`); there is no encryption applied at any of the read/write call sites
  • Replace both sublabels with "In this browser" — literally true, no cryptographic claim, no implication that prompts stay local

Why

Test plan

  • `pnpm check` (4/4: copy-check, capability-check, trust-gate, fabrication-rot-check)
  • `pnpm exec tsc --noEmit` (clean)
  • Visual inspection of `/app` dashboard tile sublabels (no other stats reference encryption)

The /app dashboard rendered three stat tiles with sublabels that did
not match what the code actually does:

- Chat sessions tile: "On your computer"
- Memories saved tile: "Local, encrypted"

Both values come from localStorage (chat-sessions-v2, memory-engine-v1).
That data lives in the browser, not on disk in the OS sense, and there
is no encryption applied to either. The "encrypted" claim is
particularly misleading because the encryption helpers in lib/encryption
have no callers from these features.

Replace both sublabels with "In this browser", which:
- Is literally true (localStorage is browser-scoped)
- Doesn't claim cryptographic protection that isn't there
- Doesn't imply "your data never leaves the device" — chat prompts are
  still routed through the AI provider the user picked

This matches the honesty positioning sweep landing across the homepage
in PRs #227-#232 (Privacy / Compliance / ProblemStatement / Pricing /
Comparison / FAQ / CloudVsLocal / dataService / ProductPage /
MarketOpportunity).

Verification:
- pnpm check (4/4: copy-check, capability-check, trust-gate,
  fabrication-rot-check)
- pnpm exec tsc --noEmit (clean)
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 28, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
website Ready Ready Preview, Comment Apr 28, 2026 11:34am

@operatoruplift operatoruplift merged commit e48c861 into master Apr 28, 2026
4 checks passed
operatoruplift added a commit that referenced this pull request Apr 28, 2026
After the homepage + dashboard + auth + demo + blog honesty sweep
landed across PRs #233-#239, this PR institutionalizes the changes
in two places so they cannot regress silently:

scripts/fabrication-rot-check.mjs:
Add 6 anchored patterns (rules 14-20):

| Pattern | Retired in | Phrase / location |
|---|---|---|
| `vault sealed[^a-zA-Z]+memory encrypted` | #235 | HeroAnimation canvas text |
| `Encrypted on your computer` | #238 | /security page header |
| `Your agent ran locally. Zero cloud. Zero surveillance` | #238 | /demo step-6 |
| `${...} deployed locally` | #238 | /agents/builder toast |
| `AES-256-GCM Encrypted` | #239 | Security card badge |
| `change: ['"]Local, encrypted['"] | 'On your computer'` | #233 | /app dashboard tiles |

tests/e2e/consumer-copy.spec.ts:
Add 8 banned phrases to BANNED_DEV_PHRASES so the existing
consumer-copy regression spec asserts they don't appear in
rendered body text on /, /paywall, /pricing, /store, /login,
/signup. This complements the build-time grep guards with a
runtime check that catches regressions in dynamic content.

Combined regression net for retired local-machine claims:
- 14 fabrication-rot rules (was 10) -> 20 total rules
- 8 banned phrases on consumer-copy.spec.ts asserting against
  rendered body innerText across 5 routes

Verification:
- pnpm check (4/4: copy-check, capability-check, trust-gate,
  fabrication-rot-check; 20 rules across 197 files)
- pnpm exec tsc --noEmit (clean)
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