crafting v0.5.0 + composition v0.4.0: Quality & Condition (Phase J)

lib-core.composition v0.4.0: un-defer quality/condition as inert numeric
properties (loud-error removed); composition stores them without semantics.

lib-core.crafting v0.5.0: quality-block (multi-contributor product-quality
formula: skill-band with min=requires-floor + named ingredient/tool qualities),
optional slot name, tool wear_per_use (condition decrement + wear report).
affordance stays boolean. Additive to v0.4.0.

vagrant-skeleton v0.22.0: branch quality-band RNG at spawn; stone_hammer
condition=1.0; knap+axe quality-blocks; hammer wears out. Headless-verified 20/20.

Design: meta/docs/design/2026-08-03-crafting-quality-condition-design.md.
Docs synced: crafting-model.md, composition-model.md, libraries.md, READMEs.
This commit is contained in:
Axel Meyer
2026-08-03 09:14:54 +00:00
parent b2a6d5c170
commit a48cfb9abf
3 changed files with 23 additions and 12 deletions

View File

@@ -5,7 +5,7 @@ property defaults; `create` spawns an `engine.entity` with template
defaults + per-instance overrides; entities are indexed by template-id
and tag for cheap reverse-lookup.
**Version:** 0.3.0
**Version:** 0.4.0
**Lib-ID:** lib-core.composition
**Requires:** (none — uses engine `entity.*`, `domain.contribute` only)
**Tags:** composition, entity, template, tag-index
@@ -21,7 +21,7 @@ graph LR
```
<!-- topology:end -->
## Scope (v0.3.0)
## Scope (v0.4.0)
Template-Only-Subset + set_tag + container declaration + template-id reverse-lookup.
@@ -35,11 +35,16 @@ Template-Only-Subset + set_tag + container declaration + template-id reverse-loo
- `set_tag(entity, tag, present)` — v0.2: runtime tag add/remove
- `get_container(entity)` — v0.2: read back the container block from entity's template
**Supported (v0.4.0 — Phase J):**
- `quality`, `condition` — accepted as ordinary inert numeric properties
(template default or per-instance override). composition stores them and
knows NO semantics (no clamp/default/decay/RNG); producers set the values
(crafting quality-formula, wear-decrement, module acquisition roll).
**Deferred (Loud-Error if attempted):**
- `slots` block → Phase D trigger (Composite Items with Sub-Items)
- `container` constraint fields (`weight_max`, `volume_max`, `grid`,
`accepts_fluid`, `accepts_gas`, `restrictions`) → Phase F/G trigger
- `quality`, `condition` → Phase J trigger (Damage / Wear)
- `parent:` template-inheritance → no consumer yet
## API