# Keizer store / Mansell collection — data pack and methodology

Everything on thebammap.com/keizer/ is computed from public data. This pack
lets you rebuild every number yourself. No trust required.

## What is here
- `data/eugene_catalog_scrape_20260708.json` — the full public product catalog of
  Best & Johnson's Bricks & Minifigs Eugene store, pulled 2026-07-08 (19,427 products).
  Each product carries a server-assigned id (monotonic), a created_at date, title,
  body_html (with the "Original packaging: Yes/No" field), variants and prices.
  This one file is the source for the burst, the un-forgeable clock, the strip, and the tiers.
- `data/*.csv` — the derived tables (below).
- `scripts/*.py` — the Python that produces each figure from the scrape.

## How each figure is produced (and reproducible)

1. THE TWO-DAY BURST (Poisson).  scripts/intake_events.py + data/poisson_scan.csv
   Keep the used Star Wars stratum; group products by created_at day; count each
   2-day window. Baseline rate lambda = stratum total / number of windows (~0.58).
   Dec 23-24 window: observed 23 (13 matching Mansell's set-number list). p-value =
   Poisson upper tail P(X>=23) at that lambda, Bonferroni-corrected over 586 windows.

2. THE UN-FORGEABLE CLOCK (0 inversions).  scripts/backdate.py
   Sort all 14,749 products by the server's monotonic product id; walk the list and
   count every time created_at drops below the prior row. Result: 0 inversions. A
   single back-edited date would surface as an inversion.

3. THE COPY-COUNT FINGERPRINT.  data/mansell_mass_reconciliation.csv + mansell_reconciliation_92.csv
   Per-set copy counts of the consigned lot, sorted: 30, 21, 19, down a 71-set tail.

4. THE STRIP COST (~$2,112).  scripts/ucc_build.py + data/boxed_boxless_spread.csv + mansell_value_destroyed.csv
   Parse body_html for "Original packaging: Yes/No". For every set number listed both
   boxed and boxless, take the median price gap (10.0%; boxed higher on 179 of 251
   non-tied sets, p=1.08e-11). Apply the per-tier gap to Mansell's 61 stripped sets. Sum ~$2,112.

5. THE VALUE TIERS + MISSING GRAILS.  scripts/grails_newcoll.py + the reconciliation
   Bucket Mansell's sets by dollar value; per bucket count how many surfaced in the
   Eugene catalog. Flagship (>=$1,000): 0 of 8. Grail set numbers were then queried
   against all 134 stores' live inventory (the chain's public patron API) and returned nothing.

## Two inputs cited, not re-hosted (already public)
- BAM's consignment ledger, filed as Exhibit B in BAM v. Schneider-Mansell (Utah 4th Dist. 260402353).
- The independent line-by-line reconciliation workbooks by the analysts Collin & Bubba (public Google Sheets).

## Firewall
Public data only. No home addresses, no confidential-source material. The catalog is
the operators' own public storefront feed; the reconciliation is set-level, no personal data.
