lemma-engine 0.9.5

A pure, declarative language for business rules.
Documentation
**Anti-patterns**

Inline comments (WRONG: `#` fails to parse):
```lemma-skip
data customer_age: number -> minimum 0  # input
rule discount: 0%  # default
```

Commentary after `uses` (WRONG). RIGHT: commentary immediately after `spec` (see **Syntax**).

Mega-rule (WRONG):
```lemma-skip
rule final_total:
  base_price * qty
  - base_price * qty * (0% unless qty >= 10 then 10% unless is_premium then 20%)
  + (15 unless base_price * qty >= 100 then 10 unless base_price * qty >= 200 then 0)
```

Decomposed pipeline (RIGHT):
```lemma
spec order_pricing

data base_price: number -> minimum 0
data qty:        number -> minimum 0

rule subtotal:             base_price * qty
rule discount_percentage:  0% unless qty >= 10 then 10%
rule discount_amount:      subtotal * discount_percentage
rule total_after_discount: subtotal - discount_amount
rule shipping_cost:        15 unless total_after_discount >= 100 then 10
rule final_total:          total_after_discount + shipping_cost
```

Hardcoded input (WRONG): `rule discount: 10 * 0.1`
RIGHT: `data qty: number` then `rule discount: qty * 0.1`

Wrong unless order (WRONG: VIP gets 20% not 25%):
```lemma-skip
rule discount: 0%
  unless is_vip then 25%
  unless qty >= 50 then 20%
```
RIGHT: specific override last (`qty` tiers first, `is_vip` last).

Placeholder (WRONG): `data customer_name: "TODO"`
RIGHT: `data customer_name: text`

Error vs Veto: `5 and "text"` = planning Error. `unless age > 120 then veto "…"` = runtime Veto.

Veto-as-rejection (WRONG: denial is answerable; see **Veto**):
```lemma-skip
rule is_eligible: true
  unless age < 18 then veto "Must be 18+"
  unless has_id is false then veto "ID required"
```
RIGHT: boolean rules composed with `and` (`is_old_enough and has_valid_id`).

Unnecessary `repo` (WRONG). RIGHT: single-file `spec` without `repo`.

No `or` (WRONG): `rule is_eligible: is_adult or has_guardian`. See **Syntax**; use `unless` or separate booleans.

Constraints on rules (WRONG): `rule discount: 10% -> help "…"`. `->` is data-only (see **Syntax**).

Domain-blind polarity / double denial (WRONG):
```lemma-skip
rule can_ship: yes
  unless in_stock is false then no
  unless address_complete is false then no
```
RIGHT: domain principle + positive grant (see **Rules**):
```lemma-skip
rule can_ship: no
  unless in_stock and address_complete then yes
```