lemma-engine 0.9.6

A pure, declarative language for business rules.
Documentation
**Organization: spec → rule**

Default: one file, one implicit repo. No `repo` blocks unless multi-namespace workspace requested. Structure: **spec → rule**.

**Spec** = namespace for `data` and `rules`. **Rule** = named computed value. Reference rules by name; engine resolves if name is data or rule. One file can have multiple specs.
Hierarchical names: `spec employee/contract`. Effective date for temporal changes: `spec pricing 2026-01-01`.
Commentary placement: see **Syntax**.

**Example: multi-spec composition (same file)**

```lemma
spec base_config

data tax_rate:          21%
data standard_discount: 5%

data price: measure
  -> unit eur: 1.00
  -> decimals 2

rule tax_amount:
  price * tax_rate

rule price_with_tax:
  price + tax_amount

rule discount_amount:
  price * standard_discount

rule discounted_price:
  price - discount_amount

rule final_price:
  discounted_price * (100% + tax_rate)


spec line_item

uses pricing: base_config
  -> with price: 10 eur

data qty: number
  -> minimum 0
  -> suggest 10


rule line_total:
  pricing.final_price * qty

rule has_discount:
  pricing.standard_discount > 0%
```

- `uses alias: target_spec`: imports spec in same file.
- Reference members: `alias.field` or `alias.rule_name`.
- Under `uses`, `  -> with path: value` sets imported data (path relative to imported spec). Do not use `data alias.field`. Standalone `with alias.field: …` is deprecated (still parses; `quality` recommends block form). Local slots use `data`.

**LemmaBase: shared specs from the registry**

Specs on [LemmaBase.com](https://lemmabase.com) imported with `@` repo qualifiers. Search: [lemmabase.com/search?q=](https://lemmabase.com/search?q=) (e.g. `?q=finance`).

```lemma
spec invoicing

uses lemma units

uses iso: @iso/countries alpha2 2026-01-01

data price: measure
  -> unit eur: 1

data country: iso.code


rule tariff:
  0 eur
  unless country is "NL" then price * 5%

rule total:
  price + tariff
```

Forms:
- `uses @user/repo spec_name`: import registry spec (alias = spec name)
- `uses alias: @user/repo spec_name`: import with alias (`iso.field`)
- `uses @user/repo spec_name 2026-01-01`: pin effective date

Reference imported members: `iso.code`. Detail: [LemmaBase Registry](https://lemma.run/reference/registry).

`repo` blocks namespace specs across contexts (e.g., `repo accounting`). Skip unless asked. Details: [Composing specs](https://lemma.run/learn/composing_specs).