Soldi Testing Plan

Last updated: 2026-07-22.

This plan defines how each Soldi surface earns proof. A surface is not ready when it merely builds; it is ready when the right unit, integration, programmatic, and browser/e2e checks pass with evidence that matches the claim being made.

Global Success Criteria

  • bun install from the repo root completes without lockfile churn unless dependency changes are intentional.
  • bun run verify from the repo root passes: app typecheck, app tests, app build, docs/previews/FHC checks included by the root script.
  • No deploy happens until the relevant --dry-run passes and the owner-approved deploy target is confirmed.
  • Every new user-facing UI change has a screenshot or browser observation on desktop and mobile-sized viewports.
  • Money remains integer cents in API, worker, and persistence paths.
  • D1 timestamp math uses the shared parsing/normalization patterns, not raw Date.parse on D1 datetime() strings.
  • Fair Home Cash output remains behind the brand firewall: generated FHC pages must not contain "soldi" except documented legal/landmark exceptions.
  • Stripe claims are split by proof level: fixture-funded, Stripe-code-deployed, hosted-checkout-visible, and webhook-credited are separate states.

App Surface: app.soldi.cc

Unit Tests

Scope:

  • Pure format/pricing helpers.
  • API client URL/body branching where the branch can be tested without a browser.
  • Small worker utilities: allocation matching, D1 time parsing, Stripe response parsing, refund decision guards.

Success criteria:

  • Expected values are asserted directly, including edge cases such as zero cents, null optional fields, no matching standing order, and duplicate refund decisions.
  • Tests do not require Cloudflare network access or real secrets.

Validation commands:

  • cd app && bun run test -- src/lib
  • cd app && bun run test -- worker/<target>.test.ts

Integration Tests

Scope:

  • Worker routes that cross persistence and side effects: Market buy, wallet funding, refund decision, auction settlement, standing-order allocation, pipeline stage moves.
  • React pages where backend wiring matters: Market buy table, My Leads status/share actions, Territories bid steppers, Wallet funding.

Success criteria:

  • Route tests assert the exact D1 statements or returned state that proves the contract, not just HTTP 200.
  • Page tests mock only the network boundary and assert the real client function is called with the correct IDs/body.
  • Permission boundaries are covered: unauthenticated, non-owner, non-admin, and duplicate-action cases.

Validation commands:

  • cd app && bun run test -- worker
  • cd app && bun run test -- src/pages

Programmatic Checks

Scope:

  • TypeScript, production bundle, static route availability, bundle freshness, remote D1 schema compatibility, worker health.

Success criteria:

  • cd app && bun run typecheck passes.
  • cd app && bun run build passes and emits the expected Vite bundle.
  • bunx wrangler@4 deploy --config app/wrangler.jsonc --dry-run passes before an app deploy.
  • After deploy, /api/v1/health returns 200 and the live HTML references the new bundle hash.

Validation commands:

  • cd app && bun run typecheck
  • cd app && bun run build
  • bunx wrangler@4 deploy --config app/wrangler.jsonc --dry-run
  • curl -fsS https://app.soldi.cc/api/v1/health

E2E / Browser Proof

Scope:

  • Buyer: login, Wallet/Billing, Market buy, My Leads table, owned-lead share, lead dossier drawer, Activity/refund request/status.
  • Admin: refund queue/decision once a live admin exists.
  • Stripe: hosted checkout redirect plus webhook wallet credit once secrets and dashboard webhook exist.
  • Responsive buyer screens: Market, My Leads, Territories, Wallet, Activity, Settings, and refund screens.

Success criteria:

  • Browser proof uses demo@soldi.cc / soldidemo or a documented live admin account.
  • Screenshots are saved under artifacts/.../shots/ or docs/shots/ with date and surface in the filename.
  • Network/API observations match UI claims. For example, a lead bought in Market must appear in My Leads with seller contact fields.
  • Owned-share proof must capture both privacy states: contact is absent with the default-off toggle and appears only after explicit opt-in; reopening must reset the toggle off.
  • Mobile proof checks document overflow, clipping/overlap, center hit ownership, 44px primary targets, console/page errors, and failed application requests at the exact named viewports. Width equality alone is not acceptance.
  • If proof is fixture-funded, the artifact says fixture-funded and does not imply Stripe-funded.

Validation tools:

  • Playwright/browser automation against localhost for pre-PR UI checks.
  • Playwright/browser automation against https://app.soldi.cc after merge/deploy.

Docs Surface: docs.soldi.cc

Unit / Content Checks

Scope:

  • Markdown content renders through docs/build.ts.
  • Docs nav includes every published internal reference that should be discoverable.

Success criteria:

  • New docs appear in docs/build.ts INTERNAL_DOCS or are intentionally unlisted with a reason.
  • Links to app routes, previews, and evidence artifacts are current.

Validation command:

  • bun run build:docs

Programmatic Checks

Scope:

  • Static build output, screenshot assets, walkthrough freshness.

Success criteria:

  • docs/dist/<slug>.html exists for every listed doc.
  • docs/dist/shots/ contains refreshed screenshots for changed app surfaces.
  • docs/walkthrough.html does not describe stale screens after a UI change.

Validation commands:

  • bun run build:docs
  • test -f docs/dist/testing-plan.html
  • rg -n "Market|Leads|Territories|Stripe|fixture" docs/walkthrough.html docs/content

E2E / Browser Proof

Scope:

  • docs.soldi.cc, especially /walkthrough, /build-log.html, /roadmap.html, and /testing-plan.html.

Success criteria:

  • Live docs URLs return 200 after deploy.
  • Walkthrough iframe/screenshots match the current buyer app surfaces or are clearly marked as historical.

Validation commands:

  • curl -fsS https://docs.soldi.cc/testing-plan.html
  • Browser screenshot of /walkthrough after buyer UI changes.

Preview Surface: preview.soldi.cc

Unit / Static Checks

Scope:

  • Hand-authored buyer preview pages and scrubbed static exports.

Success criteria:

  • Preview files are static and deterministic.
  • Any seller/contact data is clearly sample/scrubbed unless explicitly approved as real demo data.

Validation commands:

  • rg -n "<known real names|emails|phones>" previews
  • bun run build:previews if the root script exposes it.

Programmatic Checks

Scope:

  • Static assets, public archive routes, and body parity when an archive route mirrors a source file.

Success criteria:

  • Deployed preview URL returns 200.
  • Important archived preview HTML matches the committed source or documented generated output.

Validation commands:

  • bun run deploy:previews -- --dry-run when supported.
  • curl -fsS https://preview.soldi.cc/<path>/

E2E / Browser Proof

Scope:

  • Buyer mockup source of truth: previews/marketplace-client.html.

Success criteria:

  • Browser screenshot demonstrates the mockup still opens locally/live.
  • Any React app parity claim cites the exact preview view/function it matched.

Fair Home Cash Surface: fairhomecash.com

Unit Tests

Scope:

  • SEO schema builders, city/state/situation data transforms, variant assignment, sitemap helpers, IndexNow payload generation.

Success criteria:

  • Generated schema parses as JSON-LD.
  • Variant and URL generation are deterministic.
  • Brand firewall checks cannot be bypassed by new page types.

Validation commands:

  • cd sites/fhc-pages && bun test if test files exist.
  • cd sites/fhc-pages && bun run audit

Integration / Programmatic Checks

Scope:

  • Full static generation, page count, sitemap/robots/llms output, legal/static pages, lead form endpoint, Resend-gated notification path.

Success criteria:

  • bun run build:fhc emits the expected page count with zero missing-content blockers.
  • bun run audit exits 0 and reports launch-ready.
  • dist/sitemap.xml, segmented sitemaps, robots.txt, and llms.txt exist.
  • Lead capture validates consent fields and does not leak Soldi branding into buyer-facing output.

Validation commands:

  • bun run build:fhc
  • bun run audit
  • rg -n "soldi" sites/fhc-pages/dist

E2E / Browser Proof

Scope:

  • Apex, top city pages, state pages, situation pages, calculator/static pages, thank-you flow.

Success criteria:

  • Live URLs return 200 and render the intended page title/H1.
  • Lead forms submit only with valid consent and show the expected confirmation path.
  • SEO-critical files return 200: robots.txt, sitemap index, child sitemaps, llms.txt.

Validation commands:

  • curl -fsS https://fairhomecash.com/robots.txt
  • curl -fsS https://fairhomecash.com/sitemap.xml
  • Browser proof for one city, one state, one situation page, and one form flow after major changes.

Release Gate Matrix

Change type Minimum required proof
Worker/API route Focused worker test, typecheck, build, dry-run deploy
Buyer UI route React page test, typecheck, build, desktop/mobile browser screenshot
Money/Stripe/refund Worker integration test, browser proof, ledger/D1 evidence, explicit fixture-vs-Stripe state
Docs/deck build:docs, changed route 200 locally/live, screenshot if visual
Preview Static grep/scrub proof, live 200 after deploy
FHC SEO/content build:fhc, audit, brand firewall grep, representative live 200s

Open Proof Gaps

  • Live Stripe funding remains unproven — CLOSED 2026-07-03: secrets set, dashboard webhook 200 (incl. resend), and the full B7 battery (checkout deposit, webhook credit, replay idempotency, portal reuse, Stripe-funded buy) proven; see artifacts/soldi-completion-2026-07/COMPLETION_TRACKER.md P1/P2.
  • Mobile buyer shell (landed on main 2026-07-06, commit 46b14dc) has test + typecheck proof but no browser screenshot proof yet — the 375px/desktop proof gates and the post-deploy live battery (incl. realtime GET /api/v1/rt/floor expectations) are defined in docs/plans/mvp-build-public-release/BETA_READINESS.md §1–2.
  • Live admin refund approval is proven as of 2026-07-01 with a dedicated production admin@soldi.cc; keep future refund changes covered by request -> decide -> wallet/status browser proof.
  • Buyer walkthrough screenshots must be refreshed after the mobile-shell + Wave 3 deploy (BETA_READINESS B12).