Skip to content

honesty(memory): empty knowledge base on cold load, drop random-vector fake#210

Merged
operatoruplift merged 1 commit intomasterfrom
honesty/memory-page-no-fake-seed
Apr 28, 2026
Merged

honesty(memory): empty knowledge base on cold load, drop random-vector fake#210
operatoruplift merged 1 commit intomasterfrom
honesty/memory-page-no-fake-seed

Conversation

@operatoruplift
Copy link
Copy Markdown
Owner

Summary

The /memory dashboard page initialized with 6 hardcoded fake "memory nodes" with detailed metadata ("Operator Uplift Architecture" 1240 vectors, "Security Whitepaper" 2100 vectors, "User Feedback Q1 2026" 1800 vectors, etc — totaling ~6900 vectors of fabricated "indexed memory"). Fresh users landed on /memory and saw 6 documents that don't exist.

Same fabrication pattern that #164 cleaned up on /app, /agents, and /workflows — /memory just wasn't covered.

Worse: `addNode()` generated a random vector count (`Math.floor(Math.random() * 2000) + 100`) and toasted "X indexed with 1247 vectors" — implying real embedding work happened when the page never calls `lib/memoryEngine.ts` at all.

Changes

  1. `DEMO_NODES` → empty array. Fresh user sees the empty state already built into the page ("No knowledge indexed yet").
  2. `addNode()` writes `vectors: 0`, `lastIndexed: 'Pending'`, `size: 'Unknown'`. Toast says "Embeddings will be computed once the indexer is connected" — the truth.
  3. Header gets the same DEMO badge + disclosure copy as /analytics: "Add knowledge sources here. Embedding + search will activate once the indexer is connected."

Locked in via a new test in `tests/e2e/dashboard-honesty.spec.ts` that asserts the four most distinctive fake titles never appear on a fresh /memory load. Hermetic spec count stays at 17.

Test plan

  • `pnpm exec tsc --noEmit` clean
  • `pnpm build` passes
  • `pnpm check` passes
  • `pnpm exec playwright test tests/e2e/dashboard-honesty.spec.ts -g memory` — passes
  • CI green

…r fake

The /memory dashboard page initialized with 6 hardcoded fake "memory
nodes" with detailed metadata:
  - "Operator Uplift Architecture" (1240 vectors, 48KB)
  - "Security Whitepaper" (2100 vectors, 156KB)
  - "User Feedback Q1 2026" (1800 vectors, 92KB)
  - ...etc, totaling ~6900 vectors of fabricated "indexed memory"

A fresh user landed on /memory and saw 6 documents that don't exist.
Same dashboard fabrication pattern that #164 cleaned up on /app, /agents,
and /workflows. /memory just wasn't covered.

Worse: addNode() generated a *random* vector count
(`Math.floor(Math.random() * 2000) + 100`) and toasted "Title indexed
with 1247 vectors" — implying real embedding work happened when the
page never calls lib/memoryEngine.ts at all.

Three changes:
1. DEMO_NODES -> empty array (fresh user sees the empty state already
   built into the page: "No knowledge indexed yet").
2. addNode() now writes vectors: 0, lastIndexed: 'Pending', size:
   'Unknown', and the toast says "Embeddings will be computed once the
   indexer is connected" — the truth.
3. Header gets the same DEMO badge + disclosure copy as /analytics:
   "Add knowledge sources here. Embedding + search will activate once
   the indexer is connected."

Locked in via a new test in tests/e2e/dashboard-honesty.spec.ts that
asserts the four most distinctive fake titles never appear on a fresh
/memory load. Hermetic spec count stays at 17.
@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 6:12am

@operatoruplift operatoruplift merged commit 349a55e into master Apr 28, 2026
4 checks passed
operatoruplift added a commit that referenced this pull request Apr 28, 2026
Adds a fourth grep-guard alongside copy-check, capability-check, and
trust-gate. Each rule encodes a fabrication pattern we've explicitly
retired and points at the original cleanup PR so a future contributor
can read the prior agreement before reintroducing it.

10 rules covering:
- Gold Agent fake balances (0.0847 oz, $278.24, $3284.50/oz) retired in #209
- Webacy fake "wallet grade A, not flagged, not sanctioned" risk grades retired in #209
- Fabricated x402-devnet-${Date.now()} tx signature pattern retired in #173
- Random-vector fake (Math.floor(Math.random() * 2000) + 100) on /memory retired in #210
- Fake-Pro confirm fall-through tx_signature pattern retired in #182
- Pre-seeded fake "Operator Uplift Architecture" memory node retired in #210
- "API key generated (expires in 30 days)" toast lie retired in #212
- 2-second setTimeout fake-install alert on /store retired in #216

Comment-line heuristic skips lines starting with //, /*, *, or <!--
so the audit-trail comments documenting these retirements (e.g. the
new /api/gold route's comment block explaining why the lib was
deleted) don't trigger false positives.

Wired into pnpm check via scripts/check.mjs and added a top-level
script `pnpm fabrication-rot-check` for direct invocation.

Sanity-tested both directions:
- Clean state: 197 files scanned, 0 hits
- Plant a 'balanceOz: 0.0847' in lib/: guard fires with the rule name
  and the retiring-PR pointer, exit code 1.
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