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 installfrom the repo root completes without lockfile churn unless dependency changes are intentional.bun run verifyfrom 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-runpasses 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.parseon D1datetime()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/libcd 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 -- workercd 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 typecheckpasses.cd app && bun run buildpasses and emits the expected Vite bundle.bunx wrangler@4 deploy --config app/wrangler.jsonc --dry-runpasses before an app deploy.- After deploy,
/api/v1/healthreturns 200 and the live HTML references the new bundle hash.
Validation commands:
cd app && bun run typecheckcd app && bun run buildbunx wrangler@4 deploy --config app/wrangler.jsonc --dry-runcurl -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 / soldidemoor a documented live admin account. - Screenshots are saved under
artifacts/.../shots/ordocs/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.ccafter 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.tsINTERNAL_DOCSor 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>.htmlexists for every listed doc.docs/dist/shots/contains refreshed screenshots for changed app surfaces.docs/walkthrough.htmldoes not describe stale screens after a UI change.
Validation commands:
bun run build:docstest -f docs/dist/testing-plan.htmlrg -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
/walkthroughafter 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>" previewsbun run build:previewsif 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-runwhen 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 testif 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:fhcemits the expected page count with zero missing-content blockers.bun run auditexits 0 and reports launch-ready.dist/sitemap.xml, segmented sitemaps,robots.txt, andllms.txtexist.- Lead capture validates consent fields and does not leak Soldi branding into buyer-facing output.
Validation commands:
bun run build:fhcbun run auditrg -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.txtcurl -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; seeartifacts/soldi-completion-2026-07/COMPLETION_TRACKER.mdP1/P2.- Mobile buyer shell (landed on
main2026-07-06, commit46b14dc) has test + typecheck proof but no browser screenshot proof yet — the 375px/desktop proof gates and the post-deploy live battery (incl. realtimeGET /api/v1/rt/floorexpectations) are defined indocs/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).