Cleveland Kitchen Sandbox Eval Runbook
This runbook outlines the steps to reproduce the Cleveland Kitchen email-order auto-validation eval against the WhereFour sandbox.
1. Setup Sandbox Connection
Section titled β1. Setup Sandbox ConnectionβThe eval uses an ERP connection pointing to the WhereFour sandbox. This connection ID scopes all mirrored data in Postgres and Typesense.
# This creates/updates the connection and prints the CONNECTION_IDnode scripts/poc-setup/create-ck-sandbox-connection.mjsSandbox connection_id: bd0a441f-d749-404c-9928-230cc2b61cb8
2. Seed Sandbox Data (T2a/T2b/T3a/T3b)
Section titled β2. Seed Sandbox Data (T2a/T2b/T3a/T3b)βThe chosen sync procedure is the unified sandbox seeder. It bypasses Dagster to directly read master data from the WhereFour Sandbox API and populates both Typesense (products, cross_references) and Postgres (erp_products, erp_customers, erp_effective_prices) keyed by the connection_id.
export CONNECTION_ID="bd0a441f-d749-404c-9928-230cc2b61cb8"node scripts/poc-setup/seed-cleveland-kitchen-sandbox.mjs3. Dataset Remap Step (T4)
Section titled β3. Dataset Remap Step (T4)βThe golden dataset originally contained WhereFour production IDs. We must remap these _wherefourMatch.customerId values to their equivalent WhereFour Sandbox IDs so the eval assertions pass.
cd packages/evaltsx scripts/remap-ck-golden-customer-ids.tsThis generates cleveland-kitchen-golden-dataset.sandbox.json.
4. Run the Eval (T5)
Section titled β4. Run the Eval (T5)βWith the mirror seeded and the golden dataset mapped to the sandbox, you can execute the auto-validation runner.
cd packages/evalpnpm run eval:auto-validation5. Reproducibility-Snapshot Sanity Checks
Section titled β5. Reproducibility-Snapshot Sanity ChecksβTo ensure the environment matches the snapshot loaded on 2026-05-29, verify the following:
- Test artifacts are removed: Verify that βZZ Test Customer Aβ, βZZ Test Customer Bβ, βZZ Bool Testβ, βZZ Accrual Realβ, and βZZ ACME NoRefsβ (Accrual) are soft-deleted (named
DELETED_...andblock_shipments: true) or absent from customer listings, and that duplicate βNet 30β payment terms are absent. - Connection Isolation: Ensure that Postgres
erp_productsand Typesense searches are strictly scoped withfilter_by: connection_id:=bd0a441f-d749-404c-9928-230cc2b61cb8.