# Crafting: goods and embedded recipes (ORIGINAL content)

The SRD prices finished arms but has NO material recipes — its downtime
crafting is gp-rates only. Everything in this section is therefore OURS
(the `alignment_bias` precedent: original additions living inside or
beside `.srd.ron` files, explicitly marked): the `goods/` collection,
every `recipes:` list, and all quantities, tiers, and hours.

- **The goods collection** (`goods/<id>.ron`, `source: Original`, one
 file per material): a starter set of 12 sufficient to give every SRD
 weapon and armor a plausible recipe — iron_ore, coal, iron_ingot,
 timber, hide, leather, cotton, cloth, sinew, and the four artisan's
 tools. Raw naturals (ore, coal, timber, hide, sinew, cotton) have
 no recipes — they are gathered or traded; intermediates (iron_ingot
 from ore+coal at the smithy, leather from hide at the tannery, cloth
 woven from cotton at the loom) carry
 theirs. The tools' WEIGHTS are aligned with the SRD equipment table's
 artisan's-tools rows (noted per file); their VALUES, and every other
 good's, now DERIVE (/0396): worth = material cost ÷ `yield` +
 `labour_rate(tier)` ÷ `rate`, and no file states a price. **Weapons and
 armour are the same rule since §5**: the book's price column is
 no longer transcribed at all. It never reached a price — only a
 materials-≤-price sanity bound, which the derivation makes
 unrepresentable (labour is non-negative, so `worth ≥ materials` holds by
 construction on any `yield: 1` row) — and while it sat in the file it was
 a second, quieter authority over the same quantity. What the SRD's plate
 price actually recorded, a brand/scarcity premium some 300× the raw
 craft cost, belongs to the market layer, and the market layer is where
 it now lives. The `bedroll`
 is the first TERMINAL consumer good — a carpentry product
 off the timber and cloth chains, `quality_class: "good"` marking it a
 fitted item (used, not crafted onward), so the orphan check reads it as
 a legitimate sink; its weight aligns with the SRD's bedroll row and its
 value derives like every crafted good's.
- **Recipes are EMBEDDED in item definitions** — `recipes:` on Weapon,
 Armor, and Good. **Craftable is DERIVED from having recipes, never a
 flag.** `Recipe.station` ids resolve at boot against the union of the
 building types' `stations` lists (today: smithy, tannery, carpentry,
 weaver, ovens, mash_house); `tier` is the ladder; `tool`
 references a good id (`None` = bare hands — a club is whittled).
 Constructive inputs are CLASS-GENERIC (`Class("metal")` — any
 material of the class satisfies; a mithral dagger needs no dagger
 variant); process inputs stay specific ids (`Good("coal")` — iron
 ingots come from iron ore, not "any metal").
- **The strike table (the rare find in the bulk):** an
 EXTRACTION recipe (one with no `inputs`) may carry
 `strike: Some(Strike(good: "<id>", odds: <0..1>))`. Each unit the face
 earns then rolls a SECOND die for its IDENTITY: the rare good at `odds`,
 the bulk good otherwise. It splits identity, NEVER quantity — bulk +
 rare equals exactly what the face would have minted without it, so a
 strike never mints or loses a unit. The mountain mine's `iron_ore` row
 strikes `mithral_ore` at 0.08; its `stone` row strikes `iron_ore` at
 0.15. An unknown good or a non-probability `odds` fails boot.
- **Richer ground, richer vein ( §5):** a `Strike` may carry
 `mods: [(tag, multiplier)]` — the `terrain_mods` rule applied to the
 odds. The effective chance at a venue is `odds × Π(multiplier for each
 town terrain tag present)`, clamped to a probability. One row can
 therefore run a fat seam in one town and a thin one in the next without
 a second recipe or a hand-wired deposit: the ground decides. Tags
 resolve against `tables/terrain_tags.ron`; a negative or non-finite
 multiplier fails boot.
- **Boot feeds these into the EXISTING production machinery**:
 recipes become graph structure, worldgen assigns the venues, and
 there is NO parallel crafting system. The make-check quality rule
 generalizes here later (tier + check → quality); material `weight_lb`
 feeds the arbitrage cart loads.
- **Batch yield (RAY-22):**
 `yield` names the integer units fed by one run of the listed inputs. The
 production edge carries it only above one. Production burns each run once
 and spends the post's open units before burning another; different goods
 keep separate balances, including across a save. Per-unit feed costs divide
 the materials by yield, while `rate` already expresses per-unit labour.
 Ammunition is consumed in combat (RAY-1038). Every recipe states its yield
 explicitly; one means ordinary single-unit production.
