Public: anyone can read this; 1 person and the crew can change it.

From outside: Day 4 build — Cheffry's Spice Rack (throwable consumables) #8

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

The Spice Rack is in: three throwable spices (Pepper Bomb, Salt the Earth and Hot Sauce Flask) that you craft in the hub from ingredients you bring home from delves. You carry jars into a delve and throw them along an aim arc. No orders came in, so the chef opened his secret drawer. **NEXT SPICE IS YOURS — TELL ME WHAT TO COOK.**

shipped production is serving it deploy df197f5

opened this

The Spice Rack is in: three throwable spices (Pepper Bomb, Salt the Earth and Hot Sauce Flask) that you craft in the hub from ingredients you bring home from delves. You carry jars into a delve and throw them along an aim arc. No orders came in, so the chef opened his secret drawer. NEXT SPICE IS YOURS — TELL ME WHAT TO COOK.

Some of the issue's starting point isn't in the repository. There is no day‑2 Kitchen or meal crafting, no Mimic Fridge, no Grease Slick and no community_feature_slot hooks. Recipes therefore use ingredients from what exists:

SpiceIngredientsWhat it does
Pepper Bombghost pepper (Pepper Imps) + slime jelly (Meatball Slimes)A cloud. Monsters inside attack each other for a few seconds.
Salt the Earthrock salt (chests) + stale crust (Baguette Knights)A line across the throw. Burns Baguette Knights (stale bread stands in for the undead) and slows everything else.
Hot Sauce Flasktorch mushroom (chests) + ghost pepperA burning puddle. Arrows flying through it catch fire and do more damage.

What to look at

  • content/spices.json holds the ingredients, recipes, carry limits, throw numbers and each spice's effects. A new spice that mixes the existing effects (confuse, slow, damage, ignite) in a circle or a line is a JSON edit only. src/content.ts checks every field and every ingredient reference at boot.
  • src/sim.ts adds a throw order, jars in flight, zones on the floor, a brain for confused monsters, slow, burning arrows, and drops credited to whoever landed the last hit. It stays seeded and deterministic.
  • Pantry and shelf: what you pick up and what you throw is written once, when you leave the table or the delve ends (settleHero, through a new onSettle hook in src/delves.ts). You carry up to 3 jars, one of each kind first, and only thrown jars are spent. The shelf holds 9 jars and the pantry 30 of each ingredient.
  • Policy: contract.json gains two new resources, pantry and spice. You can read and list only your own; nobody creates a pantry row or changes a jar through a door; you can craft (any signed-in user) and tip out your own jars. No existing cell is changed or loosened. Both have doors in src/contract.test.ts, routes under /api/pantry and /api/spices, and a migration in src/db.ts. contract/openapi.json is regenerated.
  • Hub: a Spice Rack card with the chalked wall line, your pantry, a Craft button per recipe and your shelf, plus a rack prop in the square. Delve: Q or the Spice button picks a jar, then a click or tap throws it (Enter lobs it ahead, Esc puts it away). The arc, zones, confused monsters and burning arrows are drawn, and the HUD shows what you carry and what you've picked up.
  • MCP: two new tools, spice_rack and craft_spice.
  • I also fixed a crash in static/delve.js: it wrote to a party HUD element that doesn't exist, which stopped the end-of-run screen from showing.

Tests: bun test passes, 85 → 102. There are new tests for each effect in the sim, drops, the range and carry limits, crafting, settling, packing, the content checks, and the API and MCP. Three existing tests changed:

  • game.test.ts: the "unknown order" message now lists throw.
  • content.test.ts: its set of content files now includes spices.json.
  • game.test.ts: the chef() helper's type was tightened; behaviour is the same.

Not done:

  • No party-wide carry cap. Scarce chest ingredients are what push a party towards one spice carrier.
  • The throw aims where you click; there is no hold-to-charge.
  • You can't pick which jars to carry.
  • No terminal commands; the terminal only handles notes today.
  • The pantry doesn't update live; it shows on the next hub load.

To try it: sign in, delve, kill things and open chests, then leave. Craft at the rack on /, start another delve, press Q and click.

🤖 Generated with Claude Code

Closes #7

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs