Atlas P10.5: the cold chain doctrine (spoilage/placement/rotation/freezer)

Cure's defensive twin, spec'd around the verified coldchain.ts sim. The
scene + cross-day carryover + inspector hygiene row are the remaining
build to make it playable; composes with the shop, the eggs' float test,
and the cure (same day-clock, opposite sign).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-19 20:56:55 +10:00
parent e7ed091077
commit a2ecfdda8f

View File

@ -241,6 +241,52 @@ The pot is the pan's sibling: a heat-under-vessel with a LIQUID field.
bucket, preserving jars ×4 (empty/full family), gravlax slab, curing
shelf, ice cream scoop, coupe glass.
### P10.5 — THE COLD CHAIN (cure's defensive twin — SIM BUILT & VERIFIED 2026-07-20)
The cure is time you *want*; the cold chain is time you *fight*. `src/sim/coldchain.ts`
is built and gate-verified — spoilage is the temperature clock pointed the other
way: every perishable's `freshness` (1→0) only falls, on the DAY clock, and three
disciplines sit on top. The doctrine (John's ask, 2026-07-20):
> **Where you put it, how you stack it, and how long it's been there. Fresh food
> is a clock you can slow but never stop — the fridge crawls it, the freezer
> nearly halts it (for a texture price), the bench races it. Use the oldest first
> or it rots in the back.**
- **Spoilage clock** (`coldStep(store, days)`): `freshness -= BASE_SPOIL · perish ·
zoneWarmth · days`. Per-ingredient `perish` (fish/mince ~2, dairy ~1, onion ~0.3).
Thresholds fresh→use-soon→off→**dangerous**. Verified: raw fish over 3 days is
dangerous on the bench, "off" in the fridge, fresh in the freezer.
- **PLACEMENT — zones** (`ZONE_COLD`): door 0.55 (warmest), main fridge 0.78, back
0.9 (coldest), freezer 1.0. Raw meat goes low, dairy mid, condiments in the door.
**Contamination**: a `raw` item on a higher `shelf` than a `readyToEat` item drips
→ the lower item is flagged unsafe + docked (verified: raw-above-salad → unsafe;
same-shelf → safe). **Overpack**: past `ZONE_CAP` airflow chokes and the zone
warms (verified: crammed fridge spoils milk the sparse one kept).
- **ROTATION — FIFO** (`pull(store, zone, fifo=true)` hands you the OLDEST): use the
about-to-expire stock first or it rots unused = `wasteCount` (money, P12) and, if
you don't notice, a `dangerous` serve. Verified: FIFO 0 waste vs newest-first 2 rot.
- **THE FREEZER**: near-halts the clock but sets `frozen``usableQuality` docks
texture ×0.82 on thaw. Time bought, paid for later (verified: 0.93 kept vs 0.76
usable).
- **The stakes**: `usableQuality` returns `{quality, safe}`. Cooking an "off" item is
a quality hit the judge tastes; serving a `dangerous`/contaminated one is the
rotten-egg beat with the safety off — a health-inspector catastrophe.
**Remaining to make it playable (the scene + the cross-day layer):** a FRIDGE VIEW
(drag stock between zones/shelves, the door/back gradient shown as a cool-tint, a
date/age tell per item — the info tool), carry the `ColdStore` across days in the
save (each `beginDay` calls `coldStep(store, 1)` — your fridge ages while you sleep),
and a hygiene row on the inspector's card (`storeHealth` → fresh%/off%/contaminated/
waste). Composes with: the shop (P12 — buy fresh = perishable, a good fridge holds
temp = smaller `ZONE_COLD` penalty), the eggs (the float test is a freshness info
tool), the cure (same day-clock, opposite sign). Assets (seeds 580589 gap +): fridge
open (zoned interior), freezer drawer, date labels 2D, a hygiene "PASS/FAIL" stamp.
- **Feel that must be right:** the first time you reach for stock and it's gone off
on you — and the day you rotate correctly and the inspector says nothing, which
from him is applause.
## 7. P11 — THE BANQUET (carving, the elaborate table, the symphony)
- **CARVING — the two-handed gesture John called**: the carving FORK