121 lines
3.0 KiB
Markdown
121 lines
3.0 KiB
Markdown
|
|
# Resolver Contract Tests
|
||
|
|
|
||
|
|
Tests that any resolver implementation must pass.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_001 — Arithmetic resolution
|
||
|
|
```
|
||
|
|
Input WorldState:
|
||
|
|
Objects: Q1 (value=5, unit=apples), Q2 (value=2, unit=apples), Q_result (value=null)
|
||
|
|
Constraints: C1 = quantity_difference(Q_result, Q1, Q2), status=unresolved
|
||
|
|
|
||
|
|
Expected resolved WorldState:
|
||
|
|
Q_result.QuantityFacet.value = 3
|
||
|
|
Q_result.QuantityFacet.is_exact = true
|
||
|
|
Q_result.QuantityFacet.unit = "apples"
|
||
|
|
C1.status = "resolved"
|
||
|
|
resolution_log contains entry for "resolve_arithmetic" affecting Q_result
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_002 — Coreference merge
|
||
|
|
```
|
||
|
|
Input WorldState:
|
||
|
|
Objects: E1 (Alice, confidence=0.97), E_she (She, confidence=0.72)
|
||
|
|
Constraints: C_coref = same_entity(E1, E_she), status=resolved
|
||
|
|
|
||
|
|
Expected resolved WorldState:
|
||
|
|
E_she.status = "merged"
|
||
|
|
E_she.merged_into = "E1"
|
||
|
|
E1.aliases contains "She"
|
||
|
|
All facet_refs and constraint_refs from E_she transferred to E1
|
||
|
|
resolution_log contains entry for "merge_coreference"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_003 — Contradiction detected and logged
|
||
|
|
```
|
||
|
|
Input WorldState:
|
||
|
|
Constraints:
|
||
|
|
C1 = before(EV1, EV2), strength=hard, status=unresolved
|
||
|
|
C2 = before(EV2, EV1), strength=hard, status=unresolved
|
||
|
|
|
||
|
|
Expected:
|
||
|
|
C1.status = "contradicted"
|
||
|
|
C2.status = "contradicted"
|
||
|
|
open_contradictions contains record with constraint_refs = ["C1", "C2"]
|
||
|
|
NO silent resolution
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_004 — Soft constraint suspended by hard conflict
|
||
|
|
```
|
||
|
|
Input WorldState:
|
||
|
|
C1 = quantity_equals(Q1, 5), strength=hard, status=resolved
|
||
|
|
C2 = quantity_equals(Q1, 7), strength=soft, status=unresolved
|
||
|
|
|
||
|
|
Expected:
|
||
|
|
C2.status = "suspended"
|
||
|
|
resolution_log contains "suspend_soft" entry for C2
|
||
|
|
Q1.value = 5 (unchanged)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_005 — No new objects created
|
||
|
|
```
|
||
|
|
Input WorldState: N objects
|
||
|
|
Expected: resolved WorldState has <= N objects (merges reduce count; splits would increase but must be explicitly supported)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_006 — Resolution log completeness
|
||
|
|
```
|
||
|
|
For any non-trivial WorldState:
|
||
|
|
Every object status change must have a log entry
|
||
|
|
Every constraint status change must have a log entry
|
||
|
|
resolution_log must be non-empty
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_007 — Stage check
|
||
|
|
```
|
||
|
|
Input: WorldState with stage = "post_gate"
|
||
|
|
Expected: resolver raises error or returns error state, does not produce resolved output
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_008 — Idempotency
|
||
|
|
```
|
||
|
|
Call resolver(WorldState) → resolved_1
|
||
|
|
Call resolver(resolved_1) → resolved_2
|
||
|
|
Expected: resolved_1 and resolved_2 are logically equivalent (no new changes on second pass)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_009 — Confidence propagation bounds
|
||
|
|
```
|
||
|
|
Given any resolved constraint affecting object O:
|
||
|
|
O.confidence must not increase by more than 0.15 from a single constraint
|
||
|
|
O.confidence must not decrease by more than 0.15 from a single contradiction
|
||
|
|
O.confidence must remain in [0.0, 1.0]
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## RT_010 — Resolver interface replaceability
|
||
|
|
```
|
||
|
|
Given a resolver interface: resolve(world_state) → world_state
|
||
|
|
|
||
|
|
Any implementation that passes RT_001 through RT_009 is a valid resolver.
|
||
|
|
The rest of the pipeline must not depend on resolver internals.
|
||
|
|
```
|