Failing tests first (3 red: no offering pool stream; the sold-EDGE count was the only gate, so a buy went through after the projection was wiped; the pool-refused buy leaked a showing seat). A ticket now acquires from TWO atomic pools: the showing seat (physical capacity) AND the offering allocation (stream 'offering:<off>', cap = its :cap field, ∞ if unset — so uncapped offerings are unaffected). Both ev/hold! → guarded mint → confirm both / release both; offering-full releases the seat. This is the co-op's product stock: in the store shape the offering IS the product and its cap is the only pool, now genuinely atomic. Advisory offering-available? stays for button-hiding only. blog suite 259/259 (+3). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 KiB
92 KiB