Skip to content

ci: add fabrication-rot grep guard for retired honesty patterns#224

Merged
operatoruplift merged 1 commit intomasterfrom
ci/fabrication-rot-guard
Apr 28, 2026
Merged

ci: add fabrication-rot grep guard for retired honesty patterns#224
operatoruplift merged 1 commit intomasterfrom
ci/fabrication-rot-guard

Conversation

@operatoruplift
Copy link
Copy Markdown
Owner

Summary

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:

Comment-line heuristic skips lines starting with `//`, `/`, ``, or `<!--` so audit-trail comments documenting these retirements (e.g. the new `/api/gold` route's comment block) 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.

Test plan

  • Clean state: 197 files scanned, 0 hits, exit 0
  • Plant a regression: lib/_fab_test.ts containing balanceOz: 0.0847 → guard fires with rule name and retiring-PR pointer, exit 1
  • `pnpm exec tsc --noEmit` clean
  • `pnpm build` passes
  • `pnpm check` 4/4 (was 3/3)
  • CI green

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.
@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 9:16am

@operatoruplift operatoruplift merged commit bd5bf86 into master Apr 28, 2026
3 of 4 checks passed
operatoruplift added a commit that referenced this pull request Apr 28, 2026
The orchestrator test scaffolds fake check scripts and asserts the
"X passed, Y failed, Z skipped" summary. Adding fabrication-rot as the
4th check in #224 shifted those counts and broke 3 of 5 tests:

  fail-fast:   "0 passed, 1 failed, 2 not run" -> 3 not run
  --all:       "1 passed, 2 failed"            -> 2 passed, 2 failed
  mix:         "1 passed, 1 failed, 1 skipped" -> 1 passed, 1 failed, 2 skipped

Updated each scenario to include a fabrication-rot-check entry where
the prior 3-script setups are now 4-script setups, and adjusted the
expected counts. The skips-missing-scripts test now also asserts the
new SKIP line for fabrication-rot.

The orchestrator contract (run, skip-if-missing, fail-propagate,
fail-fast) is unchanged; only the count of registered checks moves.
operatoruplift added a commit that referenced this pull request Apr 28, 2026
)

Continuation of #227 (privacy policy), #228 (problem-statement pillars),
and #229 (compliance section). Four more homepage surfaces still made
the same retired claim:

1. src/sections/Pricing.tsx — Free tier feature list said "Runs on your
   computer, your data never leaves it" + "Lightweight Mac app, opens
   instantly". Replaced with what the free tier actually unlocks today:
   try /chat with no signup, BYOK or Google sign-in for live mode,
   approval gate before any send.

2. src/sections/Comparison.tsx — Feature checklist had "Runs on your
   computer" and "Works offline" rows comparing Operator Uplift to
   ChatGPT/Claude/Gemini/Grok. Both rows removed; rewrote the list to
   focus on what we can demonstrate: tap-to-approve, signed receipts,
   on-chain audit log, switch-AI mid-conversation, real Gmail/Calendar
   via OAuth, exportable memory, MIT license, HIPAA-aware/GDPR posture.

3. src/sections/FAQ.tsx — Two answers explicitly told users their data
   stays on their machine and we never see it. Rewrote to be specific
   about today (web app routes through Vercel + the AI provider you
   pick) and roadmap (desktop+Ollama is in development). Repointed at
   the privacy policy and the MIT license as verification paths.

4. src/sections/CloudVsLocal.tsx — Whole section was structured around
   a hosting comparison ("Your data on your device", "Works offline",
   "Cryptographically private"). The whole premise contradicted the
   cloud-deployed reality. Re-structured as Chat-only AI vs Operator
   Uplift on the *behavior* axis instead of the *hosting* axis: each
   bullet ties to a real shipped feature (OAuth, approval gate, signed
   receipt, audit log, AI switching, MIT license). Section heading
   updated from "The last AI you will need to trust" to "An assistant
   that does the work, not just talks about it."

Skipped this pass: ProductPage and MarketOpportunity. ProductPage
sits behind /product (separate audit). MarketOpportunity is
explicitly aspirational future-state framing for a market pitch, not
a current factual claim about how the website works.

The fabrication-rot guard from #224 doesn't catch these because the
claims weren't structured patterns — they were free-form English that
varied per surface. Honesty regression here is harder to grep-guard;
the consumer-copy spec's banned-phrase list could be expanded if a
future regression actually happens.
operatoruplift added a commit that referenced this pull request Apr 28, 2026
)

Update the "Honesty regression net" section to accurately describe
what's locked in after the local-machine claim cleanups landed in
PRs #225-#240:

- PR range bumped from #147-#224 to #147-#240
- consumer-copy.spec.ts banned-phrase list documented in full,
  including the 8 retired local-machine claims added in #240
- fabrication-rot-check.mjs documented as 20 rules (was 10), with
  the new local-machine patterns enumerated alongside the original
  retired-fabrication catalog (Gold Agent, Webacy, x402, random-
  vector, expires-in-30-days, fake-install)

This is documentation-only — no source changes. Verifies pnpm check
4/4 still passes after the description is brought up to date.
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