@kanonak-protocol/expression 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,85 @@
1
+ {
2
+ "expressionRuntimeVersion": "1",
3
+ "description": "Behavior parity vectors for the Kanonak expression runtime (tx + math). Every language port evaluates these to identical values. `expr` is the tree; `env` binds tx.VarRef names for the conformance resolve hook; `refEnv` binds tx.VarRef names to member URIs for the resolveRef hook inside ordered comparisons; `closures` is the ClosureTable an ordered comparison consults; `expected` is the numeric result (exact unless `tolerance` is given); `expectError` marks a required runtime error; `trace` is the expected explain() verdict tree (type/value/children, plus leftRef/rightRef on ordered comparisons), asserted structurally. Every vector additionally runs through explain() and its root value must equal evaluate()'s result. The determinism traps (Round half-away, floored Modulo, Sign(0)=0, comparisons as 1/0) are required rows.",
4
+ "vectors": [
5
+ { "id": "integer-literal", "expr": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 42 }, "expected": 42 },
6
+ { "id": "decimal-literal", "expr": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": 2.5 }, "expected": 2.5 },
7
+ { "id": "boolean-literal-true", "expr": { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true }, "expected": 1 },
8
+ { "id": "boolean-literal-false", "expr": { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false }, "expected": 0 },
9
+
10
+ { "id": "add", "expr": { "type": "kanonak.org/transformations/Add", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 } }, "expected": 5 },
11
+ { "id": "subtract", "expr": { "type": "kanonak.org/transformations/Subtract", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 10 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 4 } }, "expected": 6 },
12
+ { "id": "multiply", "expr": { "type": "kanonak.org/transformations/Multiply", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 6 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 7 } }, "expected": 42 },
13
+ { "id": "divide", "expr": { "type": "kanonak.org/transformations/Divide", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 20 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 4 } }, "expected": 5 },
14
+ { "id": "divide-by-zero", "expr": { "type": "kanonak.org/transformations/Divide", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expectError": true },
15
+
16
+ { "id": "power", "expr": { "type": "kanonak.org/math/Power", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 10 } }, "expected": 1024 },
17
+ { "id": "modulo-floored-negative-dividend", "expr": { "type": "kanonak.org/math/Modulo", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -7 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 } }, "expected": 2 },
18
+ { "id": "modulo-positive", "expr": { "type": "kanonak.org/math/Modulo", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 7 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 } }, "expected": 1 },
19
+ { "id": "modulo-floored-negative-divisor", "expr": { "type": "kanonak.org/math/Modulo", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 7 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -3 } }, "expected": -2 },
20
+ { "id": "modulo-by-zero", "expr": { "type": "kanonak.org/math/Modulo", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 5 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expectError": true },
21
+ { "id": "minimum", "expr": { "type": "kanonak.org/math/Minimum", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 8 } }, "expected": 3 },
22
+ { "id": "maximum", "expr": { "type": "kanonak.org/math/Maximum", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 8 } }, "expected": 8 },
23
+
24
+ { "id": "abs-of-negate", "expr": { "type": "kanonak.org/transformations/Abs", "value": { "type": "kanonak.org/transformations/Negate", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 5 } } }, "expected": 5 },
25
+ { "id": "negate", "expr": { "type": "kanonak.org/transformations/Negate", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 7 } }, "expected": -7 },
26
+ { "id": "exp-0", "expr": { "type": "kanonak.org/math/Exp", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expected": 1, "tolerance": 1e-9 },
27
+ { "id": "ln-1", "expr": { "type": "kanonak.org/math/Ln", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1 } }, "expected": 0, "tolerance": 1e-9 },
28
+ { "id": "ln-non-positive", "expr": { "type": "kanonak.org/math/Ln", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expectError": true },
29
+ { "id": "log10-1000", "expr": { "type": "kanonak.org/math/Log10", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1000 } }, "expected": 3, "tolerance": 1e-9 },
30
+ { "id": "sqrt-9", "expr": { "type": "kanonak.org/math/Sqrt", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 9 } }, "expected": 3, "tolerance": 1e-9 },
31
+ { "id": "sqrt-negative", "expr": { "type": "kanonak.org/math/Sqrt", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -4 } }, "expectError": true },
32
+ { "id": "floor", "expr": { "type": "kanonak.org/math/Floor", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": 2.7 } }, "expected": 2 },
33
+ { "id": "ceil", "expr": { "type": "kanonak.org/math/Ceil", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": 2.1 } }, "expected": 3 },
34
+ { "id": "round-half-away-positive", "expr": { "type": "kanonak.org/math/Round", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": 2.5 } }, "expected": 3 },
35
+ { "id": "round-half-away-negative", "expr": { "type": "kanonak.org/math/Round", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": -2.5 } }, "expected": -3 },
36
+ { "id": "round-down", "expr": { "type": "kanonak.org/math/Round", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": 2.4 } }, "expected": 2 },
37
+ { "id": "sign-zero", "expr": { "type": "kanonak.org/math/Sign", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expected": 0 },
38
+ { "id": "sign-negative", "expr": { "type": "kanonak.org/math/Sign", "value": { "type": "kanonak.org/transformations/DecimalLiteral", "decimalLiteral": -3.5 } }, "expected": -1 },
39
+ { "id": "sign-positive", "expr": { "type": "kanonak.org/math/Sign", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 1 },
40
+
41
+ { "id": "greater-than-true", "expr": { "type": "kanonak.org/transformations/GreaterThan", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 1 },
42
+ { "id": "less-than-false", "expr": { "type": "kanonak.org/transformations/LessThan", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 0 },
43
+ { "id": "equals-true", "expr": { "type": "kanonak.org/transformations/Equals", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 1 },
44
+ { "id": "gte-equal", "expr": { "type": "kanonak.org/transformations/GreaterThanOrEqual", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 1 },
45
+ { "id": "lte-false", "expr": { "type": "kanonak.org/transformations/LessThanOrEqual", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } }, "expected": 0 },
46
+
47
+ { "id": "and-true", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true }, { "type": "kanonak.org/transformations/GreaterThan", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 5 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1 } } ] }, "expected": 1 },
48
+ { "id": "and-false", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true }, { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false } ] }, "expected": 0 },
49
+ { "id": "and-empty-vacuous-true", "expr": { "type": "kanonak.org/transformations/And", "operands": [] }, "expected": 1 },
50
+ { "id": "or-true", "expr": { "type": "kanonak.org/transformations/Or", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false }, { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true } ] }, "expected": 1 },
51
+ { "id": "or-empty-vacuous-false", "expr": { "type": "kanonak.org/transformations/Or", "operands": [] }, "expected": 0 },
52
+ { "id": "not-of-false", "expr": { "type": "kanonak.org/transformations/Not", "operand": { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false } }, "expected": 1 },
53
+ { "id": "not-of-true", "expr": { "type": "kanonak.org/transformations/Not", "operand": { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true } }, "expected": 0 },
54
+
55
+ { "id": "clip-above-upper", "expr": { "type": "kanonak.org/math/Clip", "clipValue": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 15 }, "clipLower": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 }, "clipUpper": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 10 } }, "expected": 10 },
56
+ { "id": "clip-below-lower", "expr": { "type": "kanonak.org/math/Clip", "clipValue": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -5 }, "clipLower": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 }, "clipUpper": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 10 } }, "expected": 0 },
57
+ { "id": "clip-within", "expr": { "type": "kanonak.org/math/Clip", "clipValue": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 5 }, "clipLower": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 }, "clipUpper": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 10 } }, "expected": 5 },
58
+
59
+ { "id": "var-ref", "expr": { "type": "kanonak.org/transformations/VarRef", "varName": "x" }, "env": { "x": 7 }, "expected": 7 },
60
+ { "id": "nested-equation-with-vars", "description": "growth-rate * (1 - population/1000); the dynamics logistic-growth shape", "expr": { "type": "kanonak.org/transformations/Multiply", "arithLeft": { "type": "kanonak.org/transformations/VarRef", "varName": "growth-rate" }, "arithRight": { "type": "kanonak.org/transformations/Subtract", "arithLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1 }, "arithRight": { "type": "kanonak.org/transformations/Divide", "arithLeft": { "type": "kanonak.org/transformations/VarRef", "varName": "population" }, "arithRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1000 } } } }, "env": { "growth-rate": 0.5, "population": 200 }, "expected": 0.4, "tolerance": 1e-12 },
61
+ { "id": "unbound-var-errors", "expr": { "type": "kanonak.org/transformations/VarRef", "varName": "missing" }, "env": {}, "expectError": true },
62
+
63
+ { "id": "or-short-circuits-past-would-error", "description": "Or returns on the first truthy operand and never evaluates the Ln(-1) that would error — pins short-circuit, not eager, under expressionRuntimeVersion 1", "expr": { "type": "kanonak.org/transformations/Or", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true }, { "type": "kanonak.org/math/Ln", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -1 } } ] }, "expected": 1 },
64
+ { "id": "and-short-circuits-past-would-error", "description": "And returns on the first falsy operand and never evaluates the Sqrt(-1) that would error", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false }, { "type": "kanonak.org/math/Sqrt", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": -1 } } ] }, "expected": 0 },
65
+ { "id": "and-short-circuits-past-unbound-leaf", "description": "And stops at the first falsy operand; the unbound VarRef is never handed to resolve", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 }, { "type": "kanonak.org/transformations/VarRef", "varName": "missing" } ] }, "env": {}, "expected": 0 },
66
+ { "id": "log10-non-positive", "expr": { "type": "kanonak.org/math/Log10", "value": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 0 } }, "expectError": true },
67
+
68
+ { "id": "is-at-least-same-member", "description": "Reflexivity lives in the operator: the same member satisfies IsAtLeast with no closure edge", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn", "example.org/severity/info", "example.org/severity/debug"], "example.org/severity/warn": ["example.org/severity/info", "example.org/severity/debug"], "example.org/severity/info": ["example.org/severity/debug"] } }, "expected": 1 },
69
+ { "id": "is-at-least-reaches", "description": "error reaches warn through the supplied closure", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/error" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn", "example.org/severity/info", "example.org/severity/debug"], "example.org/severity/warn": ["example.org/severity/info", "example.org/severity/debug"], "example.org/severity/info": ["example.org/severity/debug"] } }, "expected": 1 },
70
+ { "id": "is-at-least-does-not-reach", "description": "info does not reach warn; the fail-closed direction", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/info" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn", "example.org/severity/info", "example.org/severity/debug"], "example.org/severity/warn": ["example.org/severity/info", "example.org/severity/debug"], "example.org/severity/info": ["example.org/severity/debug"] } }, "expected": 0 },
71
+ { "id": "is-at-least-unrelated-scales", "description": "A member of a different scale has no edge; false, not an error", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/tier/gold" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/warn": ["example.org/severity/info", "example.org/severity/debug"] } }, "expected": 0 },
72
+ { "id": "is-at-least-varref-subject", "description": "The subject side is a VarRef bound to a member URI through refEnv/resolveRef — identity binding is the caller's, exactly like numeric binding", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/VarRef", "varName": "observed" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "refEnv": { "observed": "example.org/severity/error" }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn", "example.org/severity/info", "example.org/severity/debug"] } }, "expected": 1 },
73
+ { "id": "dominates-reaches", "expr": { "type": "kanonak.org/transformations/Dominates", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/error" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn", "example.org/severity/info", "example.org/severity/debug"] } }, "expected": 1 },
74
+ { "id": "dominates-strict-same-member", "description": "Dominates is strict: the same member on both sides is false", "expr": { "type": "kanonak.org/transformations/Dominates", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/warn": ["example.org/severity/info"] } }, "expected": 0 },
75
+ { "id": "dominates-does-not-reach-reverse", "description": "The closure is directional: warn does not dominate error", "expr": { "type": "kanonak.org/transformations/Dominates", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/error" } }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn"], "example.org/severity/warn": ["example.org/severity/info"] } }, "expected": 0 },
76
+ { "id": "is-at-least-missing-closure-errors", "description": "A missing closure table is a configuration failure, never a silent false", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/error" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "expectError": true },
77
+ { "id": "is-at-least-missing-viaproperty-errors", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/error" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "closures": { "example.org/severity/dominates": {} }, "expectError": true },
78
+ { "id": "is-at-least-unbound-ref-errors", "description": "An identity leaf with no refEnv binding errors through resolveRef, like an unbound numeric VarRef", "expr": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/VarRef", "varName": "missing" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, "refEnv": {}, "closures": { "example.org/severity/dominates": {} }, "expectError": true },
79
+ { "id": "not-is-at-least", "description": "Ordered comparisons compose with boolean operators like any other 1/0", "expr": { "type": "kanonak.org/transformations/Not", "operand": { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/info" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } } }, "closures": { "example.org/severity/dominates": { "example.org/severity/info": ["example.org/severity/debug"] } }, "expected": 1 },
80
+
81
+ { "id": "trace-and-short-circuit", "description": "The trace is truthful about what ran: operands after the deciding one are absent", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": false }, { "type": "kanonak.org/transformations/BooleanLiteral", "booleanLiteral": true } ] }, "expected": 0, "trace": { "type": "kanonak.org/transformations/And", "value": 0, "children": [ { "type": "kanonak.org/transformations/BooleanLiteral", "value": 0, "children": [] } ] } },
82
+ { "id": "trace-not-greater-than", "expr": { "type": "kanonak.org/transformations/Not", "operand": { "type": "kanonak.org/transformations/GreaterThan", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 3 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 5 } } }, "expected": 1, "trace": { "type": "kanonak.org/transformations/Not", "value": 1, "children": [ { "type": "kanonak.org/transformations/GreaterThan", "value": 0, "children": [ { "type": "kanonak.org/transformations/IntegerLiteral", "value": 3, "children": [] }, { "type": "kanonak.org/transformations/IntegerLiteral", "value": 5, "children": [] } ] } ] } },
83
+ { "id": "trace-ordered-in-and", "description": "The regex-debugger view: which clause failed and the identities the ordered comparison compared", "expr": { "type": "kanonak.org/transformations/And", "operands": [ { "type": "kanonak.org/transformations/IsAtLeast", "viaProperty": "example.org/severity/dominates", "compareLeft": { "type": "kanonak.org/transformations/VarRef", "varName": "observed" }, "compareRight": { "type": "kanonak.org/transformations/UriLiteral", "refTo": "example.org/severity/warn" } }, { "type": "kanonak.org/transformations/Equals", "compareLeft": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 1 }, "compareRight": { "type": "kanonak.org/transformations/IntegerLiteral", "integerLiteral": 2 } } ] }, "refEnv": { "observed": "example.org/severity/error" }, "closures": { "example.org/severity/dominates": { "example.org/severity/error": ["example.org/severity/warn"] } }, "expected": 0, "trace": { "type": "kanonak.org/transformations/And", "value": 0, "children": [ { "type": "kanonak.org/transformations/IsAtLeast", "value": 1, "children": [], "leftRef": "example.org/severity/error", "rightRef": "example.org/severity/warn" }, { "type": "kanonak.org/transformations/Equals", "value": 0, "children": [ { "type": "kanonak.org/transformations/IntegerLiteral", "value": 1, "children": [] }, { "type": "kanonak.org/transformations/IntegerLiteral", "value": 2, "children": [] } ] } ] } }
84
+ ]
85
+ }