@orygn/opa-mcp 0.4.0 → 0.6.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.
- package/CHANGELOG.md +583 -4
- package/README.md +144 -98
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +91 -19
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +17 -3
- package/dist/constants.js.map +1 -1
- package/dist/lib/bundle-signatures.d.ts +23 -0
- package/dist/lib/bundle-signatures.d.ts.map +1 -0
- package/dist/lib/bundle-signatures.js +152 -0
- package/dist/lib/bundle-signatures.js.map +1 -0
- package/dist/lib/child-env.d.ts +9 -2
- package/dist/lib/child-env.d.ts.map +1 -1
- package/dist/lib/child-env.js +38 -6
- package/dist/lib/child-env.js.map +1 -1
- package/dist/lib/conftest-cli.d.ts +25 -10
- package/dist/lib/conftest-cli.d.ts.map +1 -1
- package/dist/lib/conftest-cli.js +233 -50
- package/dist/lib/conftest-cli.js.map +1 -1
- package/dist/lib/errors.d.ts +4 -5
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +15 -3
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/inline-paths.d.ts +37 -0
- package/dist/lib/inline-paths.d.ts.map +1 -0
- package/dist/lib/inline-paths.js +162 -0
- package/dist/lib/inline-paths.js.map +1 -0
- package/dist/lib/install-id.d.ts.map +1 -1
- package/dist/lib/install-id.js +18 -3
- package/dist/lib/install-id.js.map +1 -1
- package/dist/lib/json-stream.d.ts +26 -0
- package/dist/lib/json-stream.d.ts.map +1 -0
- package/dist/lib/json-stream.js +69 -0
- package/dist/lib/json-stream.js.map +1 -0
- package/dist/lib/opa-cli.d.ts +74 -16
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +107 -30
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/opa-client.d.ts +27 -1
- package/dist/lib/opa-client.d.ts.map +1 -1
- package/dist/lib/opa-client.js +98 -14
- package/dist/lib/opa-client.js.map +1 -1
- package/dist/lib/opa-paths.d.ts +34 -0
- package/dist/lib/opa-paths.d.ts.map +1 -0
- package/dist/lib/opa-paths.js +101 -0
- package/dist/lib/opa-paths.js.map +1 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +83 -10
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/regal-cli.d.ts +16 -1
- package/dist/lib/regal-cli.d.ts.map +1 -1
- package/dist/lib/regal-cli.js +40 -6
- package/dist/lib/regal-cli.js.map +1 -1
- package/dist/lib/rego-ast-walker.d.ts +0 -6
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +181 -55
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/lib/rego-counterexample.d.ts +15 -2
- package/dist/lib/rego-counterexample.d.ts.map +1 -1
- package/dist/lib/rego-counterexample.js +63 -15
- package/dist/lib/rego-counterexample.js.map +1 -1
- package/dist/lib/rego-input-path.d.ts +20 -0
- package/dist/lib/rego-input-path.d.ts.map +1 -0
- package/dist/lib/rego-input-path.js +70 -0
- package/dist/lib/rego-input-path.js.map +1 -0
- package/dist/lib/rego-ir.d.ts +34 -3
- package/dist/lib/rego-ir.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.d.ts +88 -5
- package/dist/lib/rego-smt-encoder.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.js +270 -31
- package/dist/lib/rego-smt-encoder.js.map +1 -1
- package/dist/lib/rego-type-inferencer.d.ts +27 -2
- package/dist/lib/rego-type-inferencer.d.ts.map +1 -1
- package/dist/lib/rego-type-inferencer.js +71 -3
- package/dist/lib/rego-type-inferencer.js.map +1 -1
- package/dist/lib/rego-verify-engine.d.ts.map +1 -1
- package/dist/lib/rego-verify-engine.js +203 -90
- package/dist/lib/rego-verify-engine.js.map +1 -1
- package/dist/lib/rego-z3.d.ts +66 -0
- package/dist/lib/rego-z3.d.ts.map +1 -1
- package/dist/lib/rego-z3.js +312 -5
- package/dist/lib/rego-z3.js.map +1 -1
- package/dist/lib/security.d.ts +8 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +130 -54
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/subprocess.d.ts +13 -0
- package/dist/lib/subprocess.d.ts.map +1 -1
- package/dist/lib/subprocess.js +153 -18
- package/dist/lib/subprocess.js.map +1 -1
- package/dist/lib/tool-helpers.d.ts +12 -25
- package/dist/lib/tool-helpers.d.ts.map +1 -1
- package/dist/lib/tool-helpers.js +66 -40
- package/dist/lib/tool-helpers.js.map +1 -1
- package/dist/prompts/index.js +2 -2
- package/dist/resources/index.js +1 -1
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/patterns.d.ts +1 -1
- package/dist/resources/patterns.d.ts.map +1 -1
- package/dist/resources/patterns.js +42 -15
- package/dist/resources/patterns.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +50 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/authoring/capabilities.d.ts +4 -0
- package/dist/tools/authoring/capabilities.d.ts.map +1 -1
- package/dist/tools/authoring/capabilities.js +41 -4
- package/dist/tools/authoring/capabilities.js.map +1 -1
- package/dist/tools/authoring/check-schema.d.ts +6 -0
- package/dist/tools/authoring/check-schema.d.ts.map +1 -1
- package/dist/tools/authoring/check-schema.js +56 -3
- package/dist/tools/authoring/check-schema.js.map +1 -1
- package/dist/tools/authoring/format.d.ts.map +1 -1
- package/dist/tools/authoring/format.js +2 -2
- package/dist/tools/authoring/format.js.map +1 -1
- package/dist/tools/authoring/lint.d.ts.map +1 -1
- package/dist/tools/authoring/lint.js +8 -6
- package/dist/tools/authoring/lint.js.map +1 -1
- package/dist/tools/authoring/migrate-v1.d.ts.map +1 -1
- package/dist/tools/authoring/migrate-v1.js +20 -4
- package/dist/tools/authoring/migrate-v1.js.map +1 -1
- package/dist/tools/authoring/parse.d.ts.map +1 -1
- package/dist/tools/authoring/parse.js +3 -3
- package/dist/tools/authoring/parse.js.map +1 -1
- package/dist/tools/bundles/build.d.ts.map +1 -1
- package/dist/tools/bundles/build.js +12 -4
- package/dist/tools/bundles/build.js.map +1 -1
- package/dist/tools/bundles/sign.d.ts +9 -2
- package/dist/tools/bundles/sign.d.ts.map +1 -1
- package/dist/tools/bundles/sign.js +125 -19
- package/dist/tools/bundles/sign.js.map +1 -1
- package/dist/tools/bundles/verify.d.ts +1 -1
- package/dist/tools/bundles/verify.d.ts.map +1 -1
- package/dist/tools/bundles/verify.js +58 -19
- package/dist/tools/bundles/verify.js.map +1 -1
- package/dist/tools/conftest/index.d.ts +5 -0
- package/dist/tools/conftest/index.d.ts.map +1 -1
- package/dist/tools/conftest/index.js.map +1 -1
- package/dist/tools/conftest/pull.d.ts.map +1 -1
- package/dist/tools/conftest/pull.js +24 -10
- package/dist/tools/conftest/pull.js.map +1 -1
- package/dist/tools/conftest/push.d.ts.map +1 -1
- package/dist/tools/conftest/push.js +17 -7
- package/dist/tools/conftest/push.js.map +1 -1
- package/dist/tools/conftest/test.d.ts +10 -6
- package/dist/tools/conftest/test.d.ts.map +1 -1
- package/dist/tools/conftest/test.js +61 -39
- package/dist/tools/conftest/test.js.map +1 -1
- package/dist/tools/conftest/verify.d.ts +10 -6
- package/dist/tools/conftest/verify.d.ts.map +1 -1
- package/dist/tools/conftest/verify.js +40 -32
- package/dist/tools/conftest/verify.js.map +1 -1
- package/dist/tools/evaluation/_shared.js +9 -12
- package/dist/tools/evaluation/_shared.js.map +1 -1
- package/dist/tools/evaluation/bench.d.ts +29 -2
- package/dist/tools/evaluation/bench.d.ts.map +1 -1
- package/dist/tools/evaluation/bench.js +53 -9
- package/dist/tools/evaluation/bench.js.map +1 -1
- package/dist/tools/evaluation/compile.js +4 -4
- package/dist/tools/evaluation/compile.js.map +1 -1
- package/dist/tools/evaluation/eval.d.ts.map +1 -1
- package/dist/tools/evaluation/eval.js +12 -16
- package/dist/tools/evaluation/eval.js.map +1 -1
- package/dist/tools/evaluation/exec.d.ts +16 -0
- package/dist/tools/evaluation/exec.d.ts.map +1 -1
- package/dist/tools/evaluation/exec.js +38 -6
- package/dist/tools/evaluation/exec.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +6 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -1
- package/dist/tools/evaluation/test-multiroot.js +35 -8
- package/dist/tools/evaluation/test-multiroot.js.map +1 -1
- package/dist/tools/evaluation/test.d.ts +45 -0
- package/dist/tools/evaluation/test.d.ts.map +1 -1
- package/dist/tools/evaluation/test.js +153 -32
- package/dist/tools/evaluation/test.js.map +1 -1
- package/dist/tools/helpers/coverage-gaps.d.ts +11 -3
- package/dist/tools/helpers/coverage-gaps.d.ts.map +1 -1
- package/dist/tools/helpers/coverage-gaps.js +7 -7
- package/dist/tools/helpers/coverage-gaps.js.map +1 -1
- package/dist/tools/helpers/describe-policy.d.ts.map +1 -1
- package/dist/tools/helpers/describe-policy.js +2 -2
- package/dist/tools/helpers/describe-policy.js.map +1 -1
- package/dist/tools/helpers/explain-decision.d.ts.map +1 -1
- package/dist/tools/helpers/explain-decision.js +3 -4
- package/dist/tools/helpers/explain-decision.js.map +1 -1
- package/dist/tools/helpers/explain-undefined.d.ts +9 -3
- package/dist/tools/helpers/explain-undefined.d.ts.map +1 -1
- package/dist/tools/helpers/explain-undefined.js +214 -73
- package/dist/tools/helpers/explain-undefined.js.map +1 -1
- package/dist/tools/helpers/fix.d.ts +11 -5
- package/dist/tools/helpers/fix.d.ts.map +1 -1
- package/dist/tools/helpers/fix.js +88 -45
- package/dist/tools/helpers/fix.js.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.d.ts.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.js +105 -21
- package/dist/tools/helpers/generate-test-skeleton.js.map +1 -1
- package/dist/tools/helpers/playground-share.d.ts +4 -2
- package/dist/tools/helpers/playground-share.d.ts.map +1 -1
- package/dist/tools/helpers/playground-share.js +13 -3
- package/dist/tools/helpers/playground-share.js.map +1 -1
- package/dist/tools/helpers/policy-diff.d.ts.map +1 -1
- package/dist/tools/helpers/policy-diff.js +3 -4
- package/dist/tools/helpers/policy-diff.js.map +1 -1
- package/dist/tools/helpers/security-audit.d.ts.map +1 -1
- package/dist/tools/helpers/security-audit.js +19 -19
- package/dist/tools/helpers/security-audit.js.map +1 -1
- package/dist/tools/helpers/verify.d.ts.map +1 -1
- package/dist/tools/helpers/verify.js +5 -1
- package/dist/tools/helpers/verify.js.map +1 -1
- package/dist/tools/meta/index.d.ts +1 -1
- package/dist/tools/server-management/_shared.d.ts +15 -4
- package/dist/tools/server-management/_shared.d.ts.map +1 -1
- package/dist/tools/server-management/_shared.js +86 -13
- package/dist/tools/server-management/_shared.js.map +1 -1
- package/dist/tools/server-management/data.d.ts.map +1 -1
- package/dist/tools/server-management/data.js +88 -23
- package/dist/tools/server-management/data.js.map +1 -1
- package/dist/tools/server-management/decisions.d.ts.map +1 -1
- package/dist/tools/server-management/decisions.js +16 -3
- package/dist/tools/server-management/decisions.js.map +1 -1
- package/dist/tools/server-management/policies.d.ts.map +1 -1
- package/dist/tools/server-management/policies.js +44 -7
- package/dist/tools/server-management/policies.js.map +1 -1
- package/dist/tools/server-management/status.d.ts.map +1 -1
- package/dist/tools/server-management/status.js +80 -13
- package/dist/tools/server-management/status.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A string literal for Z3. Its parser reads `\u{HH}` inside a literal as an
|
|
3
|
+
* escape, so a policy literal that happens to spell one, or that holds any
|
|
4
|
+
* backslash, would be stored as something else. Every backslash is written
|
|
5
|
+
* as `\u{5c}`, which Z3 stores as the character and renders back as an
|
|
6
|
+
* escape the counterexample decoder undoes.
|
|
7
|
+
*/
|
|
8
|
+
export function z3String(Z3, value) {
|
|
9
|
+
return Z3.String.val(value.replace(/\\/g, '\\u{5c}'));
|
|
10
|
+
}
|
|
1
11
|
/**
|
|
2
12
|
* Create Z3 constants for all input paths based on inferred sorts.
|
|
3
13
|
* Each constant name is prefixed with callId to ensure uniqueness across
|
|
@@ -5,15 +15,20 @@
|
|
|
5
15
|
*/
|
|
6
16
|
export function createInputVars(Z3, inputPaths, sorts, callId) {
|
|
7
17
|
const vars = new Map();
|
|
18
|
+
const presence = new Map();
|
|
8
19
|
for (const path of inputPaths.keys()) {
|
|
9
20
|
const sort = sorts.get(path) ?? 'string';
|
|
10
21
|
const varName = `${callId}_${pathToVarName(path)}`;
|
|
22
|
+
presence.set(path, Z3.Bool.const(`${varName}__present`));
|
|
11
23
|
switch (sort) {
|
|
12
24
|
case 'string':
|
|
13
25
|
vars.set(path, Z3.String.const(varName));
|
|
14
26
|
break;
|
|
15
|
-
case '
|
|
16
|
-
|
|
27
|
+
case 'real':
|
|
28
|
+
// Rego numbers are JSON numbers, not integers. Encoding them as Z3 Ints
|
|
29
|
+
// proved fractional ranges empty: `input.n > 0; input.n < 1` came back
|
|
30
|
+
// UNSATISFIABLE even though 0.5 satisfies it.
|
|
31
|
+
vars.set(path, Z3.Real.const(varName));
|
|
17
32
|
break;
|
|
18
33
|
case 'bool':
|
|
19
34
|
vars.set(path, Z3.Bool.const(varName));
|
|
@@ -26,44 +41,197 @@ export function createInputVars(Z3, inputPaths, sorts, callId) {
|
|
|
26
41
|
}
|
|
27
42
|
}
|
|
28
43
|
}
|
|
29
|
-
return vars;
|
|
44
|
+
return { vars, presence };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Facts about the shape of any input, added to the solver alongside the
|
|
48
|
+
* property. A path the rule compared equal to a scalar literal, or fed to a
|
|
49
|
+
* string built-in, is present only as a scalar wherever that read holds, so
|
|
50
|
+
* it cannot also be the object holding a path beneath it: the two are never
|
|
51
|
+
* present together. Without this, `input.a == "x"` and `input.a.b == "y"`
|
|
52
|
+
* got two independent constants and a rule no input can satisfy was proved
|
|
53
|
+
* satisfiable, with a witness OPA rejects.
|
|
54
|
+
*
|
|
55
|
+
* Only those reads qualify. `input.a != "x"`, `input.a > 1` and a bare
|
|
56
|
+
* `input.a` all hold for an object, and a path with no evidence at all is
|
|
57
|
+
* given the string sort by default; treating any of them as scalar proved
|
|
58
|
+
* satisfiable rules never true.
|
|
59
|
+
*/
|
|
60
|
+
export function structuralAxioms(Z3, inputPaths, scalarPaths, presence) {
|
|
61
|
+
const axioms = [];
|
|
62
|
+
const entries = [...inputPaths.entries()];
|
|
63
|
+
for (const [parent, parentSegs] of entries) {
|
|
64
|
+
if (!scalarPaths.has(parent))
|
|
65
|
+
continue;
|
|
66
|
+
const parentPresent = presence.get(parent);
|
|
67
|
+
if (parentPresent === undefined)
|
|
68
|
+
continue;
|
|
69
|
+
for (const [child, childSegs] of entries) {
|
|
70
|
+
if (childSegs.length <= parentSegs.length)
|
|
71
|
+
continue;
|
|
72
|
+
if (!parentSegs.every((seg, i) => childSegs[i] === seg))
|
|
73
|
+
continue;
|
|
74
|
+
const childPresent = presence.get(child);
|
|
75
|
+
if (childPresent === undefined)
|
|
76
|
+
continue;
|
|
77
|
+
axioms.push(Z3.Not(Z3.And(parentPresent, childPresent)));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return axioms;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Every input path `clauses` reference, a negated body included.
|
|
84
|
+
*
|
|
85
|
+
* The presence guard below deliberately skips a negated body, since a
|
|
86
|
+
* missing field satisfies it; a witness must still be able to name that
|
|
87
|
+
* field. It must also never name a field the rule does not read: variables
|
|
88
|
+
* are created for every path in the module, so a path belonging to another
|
|
89
|
+
* rule is unconstrained here, and model completion would hand it an
|
|
90
|
+
* arbitrary value. Where that path is the parent of one this rule reads,
|
|
91
|
+
* the two collide and the witness stops satisfying the rule.
|
|
92
|
+
*/
|
|
93
|
+
export function clauseInputPaths(clauses) {
|
|
94
|
+
const out = new Set();
|
|
95
|
+
const walk = (expr) => {
|
|
96
|
+
if (expr.kind === 'negation') {
|
|
97
|
+
for (const inner of expr.inner)
|
|
98
|
+
walk(inner);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
inputPathsOf(expr, out);
|
|
102
|
+
};
|
|
103
|
+
for (const clause of clauses) {
|
|
104
|
+
for (const expr of clause.expressions)
|
|
105
|
+
walk(expr);
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
/** Every input path an expression reads. Used to build the presence guard. */
|
|
110
|
+
function inputPathsOf(expr, out) {
|
|
111
|
+
const take = (v) => {
|
|
112
|
+
if (v && v.kind === 'input_ref')
|
|
113
|
+
out.add(v.path);
|
|
114
|
+
};
|
|
115
|
+
switch (expr.kind) {
|
|
116
|
+
case 'eq':
|
|
117
|
+
case 'neq':
|
|
118
|
+
case 'lt':
|
|
119
|
+
case 'lte':
|
|
120
|
+
case 'gt':
|
|
121
|
+
case 'gte':
|
|
122
|
+
take(expr.left);
|
|
123
|
+
take(expr.right);
|
|
124
|
+
break;
|
|
125
|
+
case 'startswith':
|
|
126
|
+
take(expr.str);
|
|
127
|
+
take(expr.prefix);
|
|
128
|
+
break;
|
|
129
|
+
case 'endswith':
|
|
130
|
+
take(expr.str);
|
|
131
|
+
take(expr.suffix);
|
|
132
|
+
break;
|
|
133
|
+
case 'contains':
|
|
134
|
+
take(expr.str);
|
|
135
|
+
take(expr.sub);
|
|
136
|
+
break;
|
|
137
|
+
case 'regex_match':
|
|
138
|
+
take(expr.pattern);
|
|
139
|
+
take(expr.str);
|
|
140
|
+
break;
|
|
141
|
+
case 'bool_check':
|
|
142
|
+
take(expr.ref);
|
|
143
|
+
break;
|
|
144
|
+
case 'assign':
|
|
145
|
+
take(expr.value);
|
|
146
|
+
break;
|
|
147
|
+
case 'negation':
|
|
148
|
+
// Deliberately NOT recursed into. A negated body is SATISFIED by a missing
|
|
149
|
+
// field, so requiring presence at the clause level would be wrong.
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
30
154
|
}
|
|
31
155
|
/**
|
|
32
156
|
* Encode a complete rule as a Z3 Bool formula.
|
|
33
157
|
* rule_formula = clause_0 OR clause_1 OR ... OR clause_n
|
|
34
158
|
*/
|
|
35
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Encode "the rule evaluates to true".
|
|
161
|
+
*
|
|
162
|
+
* Rego semantics, and why the previous OR-of-all-clauses was wrong:
|
|
163
|
+
* - a clause whose body holds gives the rule that clause's HEAD value
|
|
164
|
+
* - the rule is DEFINED when any clause body holds
|
|
165
|
+
* - when no body holds the rule takes its `default`, or stays undefined
|
|
166
|
+
*
|
|
167
|
+
* So `rule == true` is the OR of the bodies of clauses whose head is literally
|
|
168
|
+
* true, plus the default case when nothing else fired. Treating every satisfied
|
|
169
|
+
* body as "true" made `allow := false if {...}` prove always-true, and ignoring
|
|
170
|
+
* the default made `default allow := true` prove never-true.
|
|
171
|
+
*/
|
|
172
|
+
export function encodeRule(clauses, ctx, defaultValue) {
|
|
36
173
|
const { Z3 } = ctx;
|
|
37
174
|
const warnings = [];
|
|
38
|
-
const
|
|
175
|
+
const bodyFormulas = [];
|
|
176
|
+
const trueBodyFormulas = [];
|
|
39
177
|
for (const clause of clauses) {
|
|
40
178
|
const localVars = new Map();
|
|
41
179
|
const localSorts = new Map();
|
|
42
180
|
const clauseResult = encodeClause(clause, ctx, localVars, localSorts);
|
|
43
|
-
if (clauseResult.formula !== null) {
|
|
44
|
-
clauseFormulas.push(clauseResult.formula);
|
|
45
|
-
}
|
|
46
181
|
warnings.push(...clauseResult.warnings);
|
|
182
|
+
if (clauseResult.formula === null) {
|
|
183
|
+
// Refuse the whole rule. Continuing here would silently solve a rule with
|
|
184
|
+
// one of its clauses missing.
|
|
185
|
+
return { formula: Z3.Bool.val(false), warnings, unencodable: true };
|
|
186
|
+
}
|
|
187
|
+
bodyFormulas.push(clauseResult.formula);
|
|
188
|
+
if (clause.headValue === true)
|
|
189
|
+
trueBodyFormulas.push(clauseResult.formula);
|
|
47
190
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
191
|
+
const anyBody = bodyFormulas.length === 0
|
|
192
|
+
? Z3.Bool.val(false)
|
|
193
|
+
: bodyFormulas.length === 1
|
|
194
|
+
? bodyFormulas[0]
|
|
195
|
+
: Z3.Or(...bodyFormulas);
|
|
196
|
+
let ruleTrue = trueBodyFormulas.length === 0
|
|
197
|
+
? Z3.Bool.val(false)
|
|
198
|
+
: trueBodyFormulas.length === 1
|
|
199
|
+
? trueBodyFormulas[0]
|
|
200
|
+
: Z3.Or(...trueBodyFormulas);
|
|
201
|
+
// A default applies only when no clause body holds.
|
|
202
|
+
if (defaultValue === true) {
|
|
203
|
+
ruleTrue = Z3.Or(ruleTrue, Z3.Not(anyBody));
|
|
53
204
|
}
|
|
54
|
-
return { formula:
|
|
205
|
+
return { formula: ruleTrue, warnings, unencodable: false };
|
|
55
206
|
}
|
|
56
207
|
function encodeClause(clause, ctx, localVars, localSorts) {
|
|
57
208
|
const { Z3 } = ctx;
|
|
58
209
|
const warnings = [];
|
|
59
210
|
const conjuncts = [];
|
|
211
|
+
const readPaths = new Set();
|
|
60
212
|
for (const expr of clause.expressions) {
|
|
61
|
-
if (expr.kind === 'unsupported')
|
|
62
|
-
|
|
213
|
+
if (expr.kind === 'unsupported') {
|
|
214
|
+
// The engine refuses the rule before reaching here, so this is a
|
|
215
|
+
// defensive fail-closed rather than a reachable path.
|
|
216
|
+
return { formula: null, warnings };
|
|
217
|
+
}
|
|
218
|
+
inputPathsOf(expr, readPaths);
|
|
63
219
|
const encoded = encodeExpr(expr, ctx, localVars, localSorts, warnings);
|
|
64
|
-
if (encoded
|
|
65
|
-
|
|
220
|
+
if (encoded === null) {
|
|
221
|
+
// An expression the encoder could not translate. Dropping it made the
|
|
222
|
+
// clause strictly easier to satisfy, which is how an unencodable operand
|
|
223
|
+
// such as a null literal turned into a false PROVEN.
|
|
224
|
+
warnings.push('A body expression could not be encoded; the clause is not verifiable.');
|
|
225
|
+
return { formula: null, warnings };
|
|
66
226
|
}
|
|
227
|
+
conjuncts.push(encoded);
|
|
228
|
+
}
|
|
229
|
+
// Rego needs every field the body reads to exist. Without this guard a rule
|
|
230
|
+
// that merely goes undefined on a missing field looked like a tautology.
|
|
231
|
+
for (const path of readPaths) {
|
|
232
|
+
const present = ctx.presenceVars.get(path);
|
|
233
|
+
if (present !== undefined)
|
|
234
|
+
conjuncts.push(present);
|
|
67
235
|
}
|
|
68
236
|
if (conjuncts.length === 0) {
|
|
69
237
|
// Empty body (no constraints) = always true.
|
|
@@ -77,6 +245,31 @@ function encodeClause(clause, ctx, localVars, localSorts) {
|
|
|
77
245
|
function encodeExpr(expr, ctx, localVars, localSorts, warnings) {
|
|
78
246
|
const { Z3 } = ctx;
|
|
79
247
|
switch (expr.kind) {
|
|
248
|
+
case 'contradiction':
|
|
249
|
+
// A body term that can never hold, such as a literal `false`.
|
|
250
|
+
return Z3.Bool.val(false);
|
|
251
|
+
case 'negation': {
|
|
252
|
+
// NOT (AND of inner). The presence guards belong INSIDE the negation: a
|
|
253
|
+
// body that reads a missing field is undefined, so it does not hold, so
|
|
254
|
+
// its negation does.
|
|
255
|
+
const inner = [];
|
|
256
|
+
const innerPaths = new Set();
|
|
257
|
+
for (const e of expr.inner) {
|
|
258
|
+
inputPathsOf(e, innerPaths);
|
|
259
|
+
const enc = encodeExpr(e, ctx, localVars, localSorts, warnings);
|
|
260
|
+
if (enc === null)
|
|
261
|
+
return null;
|
|
262
|
+
inner.push(enc);
|
|
263
|
+
}
|
|
264
|
+
for (const path of innerPaths) {
|
|
265
|
+
const present = ctx.presenceVars.get(path);
|
|
266
|
+
if (present !== undefined)
|
|
267
|
+
inner.push(present);
|
|
268
|
+
}
|
|
269
|
+
if (inner.length === 0)
|
|
270
|
+
return Z3.Bool.val(false);
|
|
271
|
+
return Z3.Not(inner.length === 1 ? inner[0] : Z3.And(...inner));
|
|
272
|
+
}
|
|
80
273
|
case 'eq': {
|
|
81
274
|
const l = resolveValue(expr.left, ctx, localVars, localSorts, warnings);
|
|
82
275
|
const r = resolveValue(expr.right, ctx, localVars, localSorts, warnings);
|
|
@@ -187,7 +380,7 @@ function sortOfVerifyValue(value, ctx, localSorts) {
|
|
|
187
380
|
case 'literal_string':
|
|
188
381
|
return 'string';
|
|
189
382
|
case 'literal_number':
|
|
190
|
-
return '
|
|
383
|
+
return 'real';
|
|
191
384
|
case 'literal_bool':
|
|
192
385
|
return 'bool';
|
|
193
386
|
case 'literal_null':
|
|
@@ -222,13 +415,18 @@ function resolveValue(value, ctx, localVars, localSorts, warnings) {
|
|
|
222
415
|
return createLocalVar(Z3, value.name, sort, localVars, localSorts, ctx.callId);
|
|
223
416
|
}
|
|
224
417
|
case 'literal_string':
|
|
225
|
-
return Z3
|
|
418
|
+
return z3String(Z3, value.value);
|
|
226
419
|
case 'literal_number':
|
|
227
|
-
|
|
420
|
+
// Real, not Int: a fractional literal and a fractional witness inside an
|
|
421
|
+
// integer-looking range must both be representable.
|
|
422
|
+
return Z3.Real.val(value.value);
|
|
228
423
|
case 'literal_bool':
|
|
229
424
|
return Z3.Bool.val(value.value);
|
|
230
425
|
case 'literal_null':
|
|
231
|
-
|
|
426
|
+
// The sort model has no null. Returning null now aborts the clause rather
|
|
427
|
+
// than silently dropping the comparison, which used to leave an empty,
|
|
428
|
+
// always-true body behind.
|
|
429
|
+
warnings.push('null is not representable in the current sort model.');
|
|
232
430
|
return null;
|
|
233
431
|
}
|
|
234
432
|
}
|
|
@@ -246,8 +444,10 @@ function createLocalVar(Z3, name, sort, localVars, localSorts, callId) {
|
|
|
246
444
|
case 'string':
|
|
247
445
|
c = Z3.String.const(z3Name);
|
|
248
446
|
break;
|
|
249
|
-
case '
|
|
250
|
-
|
|
447
|
+
case 'real':
|
|
448
|
+
// Must match the input-path sort. Creating an Int here while input paths
|
|
449
|
+
// are Real made Z3 refuse the comparison with "Can't cast Real to IntSort".
|
|
450
|
+
c = Z3.Real.const(z3Name);
|
|
251
451
|
break;
|
|
252
452
|
case 'bool':
|
|
253
453
|
c = Z3.Bool.const(z3Name);
|
|
@@ -262,13 +462,31 @@ function createLocalVar(Z3, name, sort, localVars, localSorts, callId) {
|
|
|
262
462
|
localSorts.set(name, sort);
|
|
263
463
|
return c;
|
|
264
464
|
}
|
|
265
|
-
/**
|
|
465
|
+
/**
|
|
466
|
+
* Convert an input path like "input.user.role" to a valid Z3 constant name.
|
|
467
|
+
*
|
|
468
|
+
* Must be INJECTIVE. Replacing "." with "__" was not: a quoted key holding a
|
|
469
|
+
* dot or an underscore pair, ordinary in Kubernetes and cloud policies such as
|
|
470
|
+
* `input.labels["app.kubernetes.io/name"]`, collided with a different path and
|
|
471
|
+
* two distinct fields became a single SMT variable.
|
|
472
|
+
*/
|
|
266
473
|
export function pathToVarName(path) {
|
|
267
|
-
|
|
474
|
+
let out = '';
|
|
475
|
+
for (const ch of path) {
|
|
476
|
+
if (/[A-Za-z0-9]/.test(ch))
|
|
477
|
+
out += ch;
|
|
478
|
+
else if (ch === '.')
|
|
479
|
+
out += '__';
|
|
480
|
+
else
|
|
481
|
+
out += `_x${ch.codePointAt(0).toString(16)}_`;
|
|
482
|
+
}
|
|
483
|
+
return out;
|
|
268
484
|
}
|
|
269
485
|
/** Reconstruct a nested JSON object from flat Z3 var name → value pairs. */
|
|
270
486
|
export function varNameToPath(varName) {
|
|
271
|
-
return varName
|
|
487
|
+
return varName
|
|
488
|
+
.replace(/_x([0-9a-f]+)_/g, (_m, hex) => String.fromCodePoint(parseInt(hex, 16)))
|
|
489
|
+
.replace(/__/g, '.');
|
|
272
490
|
}
|
|
273
491
|
// ─── Regex simplifier ────────────────────────────────────────────────────────
|
|
274
492
|
// Detects structurally simple patterns and maps them to cheap Z3 string
|
|
@@ -301,6 +519,12 @@ export function isSimpleRegexPattern(pattern) {
|
|
|
301
519
|
return true;
|
|
302
520
|
if (hasStart && hasEnd && isRegexLiteral(core))
|
|
303
521
|
return true;
|
|
522
|
+
if (hasStart && !hasEnd && isRegexLiteral(core))
|
|
523
|
+
return true;
|
|
524
|
+
if (hasEnd && !hasStart && isRegexLiteral(core))
|
|
525
|
+
return true;
|
|
526
|
+
if (!hasStart && !hasEnd && isRegexLiteral(core) && core.length > 0)
|
|
527
|
+
return true;
|
|
304
528
|
if (hasStart && core.endsWith('.*') && isRegexLiteral(core.slice(0, -2)))
|
|
305
529
|
return true;
|
|
306
530
|
if (hasEnd && core.startsWith('.*') && isRegexLiteral(core.slice(2)))
|
|
@@ -324,27 +548,42 @@ function tryRegexAsStringConstraint(Z3, str, pattern) {
|
|
|
324
548
|
}
|
|
325
549
|
// ^lit$ → exact equality
|
|
326
550
|
if (hasStart && hasEnd && isRegexLiteral(core)) {
|
|
327
|
-
return Z3.Eq(str, Z3
|
|
551
|
+
return Z3.Eq(str, z3String(Z3, core));
|
|
328
552
|
}
|
|
329
553
|
// ^lit.* → startswith
|
|
330
554
|
if (hasStart && core.endsWith('.*')) {
|
|
331
555
|
const prefix = core.slice(0, -2);
|
|
332
556
|
if (isRegexLiteral(prefix)) {
|
|
333
|
-
return Z3
|
|
557
|
+
return z3String(Z3, prefix).prefixOf(str);
|
|
334
558
|
}
|
|
335
559
|
}
|
|
336
560
|
// .*lit$ → endswith
|
|
337
561
|
if (hasEnd && core.startsWith('.*')) {
|
|
338
562
|
const suffix = core.slice(2);
|
|
339
563
|
if (isRegexLiteral(suffix)) {
|
|
340
|
-
return Z3
|
|
564
|
+
return z3String(Z3, suffix).suffixOf(str);
|
|
341
565
|
}
|
|
342
566
|
}
|
|
567
|
+
// ^lit → startswith. An unanchored tail matches anything, so "starts with
|
|
568
|
+
// lit" is exactly prefixOf. Previously only ^lit.* was recognised, so the
|
|
569
|
+
// commoner form fell through to unsupported.
|
|
570
|
+
if (hasStart && !hasEnd && isRegexLiteral(core)) {
|
|
571
|
+
return z3String(Z3, core).prefixOf(str);
|
|
572
|
+
}
|
|
573
|
+
// lit$ → endswith, by the same argument at the other end.
|
|
574
|
+
if (hasEnd && !hasStart && isRegexLiteral(core)) {
|
|
575
|
+
return z3String(Z3, core).suffixOf(str);
|
|
576
|
+
}
|
|
577
|
+
// lit (no anchors) → contains. An unanchored literal matches when it occurs
|
|
578
|
+
// anywhere in the string.
|
|
579
|
+
if (!hasStart && !hasEnd && isRegexLiteral(core) && core.length > 0) {
|
|
580
|
+
return str.contains(z3String(Z3, core));
|
|
581
|
+
}
|
|
343
582
|
// .*lit.* → contains
|
|
344
583
|
if (core.startsWith('.*') && core.endsWith('.*')) {
|
|
345
584
|
const sub = core.slice(2, -2);
|
|
346
585
|
if (isRegexLiteral(sub)) {
|
|
347
|
-
return str.contains(Z3
|
|
586
|
+
return str.contains(z3String(Z3, sub));
|
|
348
587
|
}
|
|
349
588
|
}
|
|
350
589
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rego-smt-encoder.js","sourceRoot":"","sources":["../../src/lib/rego-smt-encoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rego-smt-encoder.js","sourceRoot":"","sources":["../../src/lib/rego-smt-encoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 1. Used in startswith/endswith/contains/regex_match → string
|
|
7
7
|
* 2. Compared to a string literal → string
|
|
8
8
|
* 3. Compared to a boolean literal → bool
|
|
9
|
-
* 4. Compared to a number literal, or in gt/gte/lt/lte →
|
|
9
|
+
* 4. Compared to a number literal, or in gt/gte/lt/lte → real
|
|
10
10
|
* 5. Conflicting evidence → uninterpreted (equality-only in encoder)
|
|
11
11
|
* 6. No evidence → string (safe default: Z3 string theory is flexible)
|
|
12
12
|
*
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* evidence from comparisons on x propagates back to input.path.
|
|
15
15
|
*/
|
|
16
16
|
import type { VerifyRuleClause } from './rego-ir.js';
|
|
17
|
-
export type Z3Sort = 'bool' | '
|
|
17
|
+
export type Z3Sort = 'bool' | 'real' | 'string' | 'uninterpreted';
|
|
18
18
|
export interface TypeInferenceResult {
|
|
19
19
|
sorts: Map<string, Z3Sort>;
|
|
20
20
|
conflicts: Array<{
|
|
@@ -22,5 +22,30 @@ export interface TypeInferenceResult {
|
|
|
22
22
|
reason: string;
|
|
23
23
|
}>;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* How one rule reads each input path, which decides what the encoder may
|
|
27
|
+
* assume about its shape. Collected per rule: a read in another rule of the
|
|
28
|
+
* module says nothing about the rule being verified.
|
|
29
|
+
*/
|
|
30
|
+
export interface PathReads {
|
|
31
|
+
/**
|
|
32
|
+
* Paths the rule compared equal to a scalar literal or fed to a string
|
|
33
|
+
* built-in: the only reads for which "present" means "present as a
|
|
34
|
+
* scalar", which is what the encoder's structural axioms rely on. An
|
|
35
|
+
* inequality, an ordering, or a bare truthiness read holds for an object
|
|
36
|
+
* too, so they do not count.
|
|
37
|
+
*/
|
|
38
|
+
scalarPaths: Set<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Paths read as a value in any other way: an inequality, an ordering, a
|
|
41
|
+
* bare truthiness read, a comparison against another field or null. The
|
|
42
|
+
* model gives such a path one scalar, and when the rule also reads a field
|
|
43
|
+
* beneath it the witness carries an object instead, so the comparison need
|
|
44
|
+
* not hold on it. The engine reports such a rule inconclusive.
|
|
45
|
+
*/
|
|
46
|
+
valueReads: Set<string>;
|
|
47
|
+
}
|
|
48
|
+
/** Every path `clauses` read, split by what the read implies about its shape. */
|
|
49
|
+
export declare function collectPathReads(clauses: VerifyRuleClause[]): PathReads;
|
|
25
50
|
export declare function inferTypes(clauses: VerifyRuleClause[][], inputPaths: Map<string, string[]>): TypeInferenceResult;
|
|
26
51
|
//# sourceMappingURL=rego-type-inferencer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rego-type-inferencer.d.ts","sourceRoot":"","sources":["../../src/lib/rego-type-inferencer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAc,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAE9E,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"rego-type-inferencer.d.ts","sourceRoot":"","sources":["../../src/lib/rego-type-inferencer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAc,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAE9E,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,SAAS,CA4BvE;AAGD,wBAAgB,UAAU,CACxB,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAChC,mBAAmB,CAkDrB"}
|
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
/** Every path `clauses` read, split by what the read implies about its shape. */
|
|
2
|
+
export function collectPathReads(clauses) {
|
|
3
|
+
const localAssignments = new Map();
|
|
4
|
+
const collectAssignments = (expr) => {
|
|
5
|
+
if (expr.kind === 'negation') {
|
|
6
|
+
for (const inner of expr.inner)
|
|
7
|
+
collectAssignments(inner);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (expr.kind === 'assign')
|
|
11
|
+
localAssignments.set(expr.local, expr.value);
|
|
12
|
+
};
|
|
13
|
+
for (const clause of clauses) {
|
|
14
|
+
for (const expr of clause.expressions)
|
|
15
|
+
collectAssignments(expr);
|
|
16
|
+
}
|
|
17
|
+
const scalarPaths = new Set();
|
|
18
|
+
const valueReads = new Set();
|
|
19
|
+
const walk = (expr) => {
|
|
20
|
+
// A negated body reads its fields too. What the read says about the
|
|
21
|
+
// field's shape does not depend on which side of a `not` it sits on: no
|
|
22
|
+
// input has a field that is both a string and an object.
|
|
23
|
+
if (expr.kind === 'negation') {
|
|
24
|
+
for (const inner of expr.inner)
|
|
25
|
+
walk(inner);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
collectScalarReads(expr, localAssignments, scalarPaths, valueReads);
|
|
29
|
+
};
|
|
30
|
+
for (const clause of clauses) {
|
|
31
|
+
for (const expr of clause.expressions)
|
|
32
|
+
walk(expr);
|
|
33
|
+
}
|
|
34
|
+
return { scalarPaths, valueReads };
|
|
35
|
+
}
|
|
1
36
|
export function inferTypes(clauses, inputPaths) {
|
|
2
37
|
// Pass 1: collect every local-variable assignment as a raw VerifyValue.
|
|
3
38
|
// This covers both direct (x := input.age) and chained (x := y; y := input.age)
|
|
@@ -46,6 +81,39 @@ export function inferTypes(clauses, inputPaths) {
|
|
|
46
81
|
}
|
|
47
82
|
return { sorts, conflicts };
|
|
48
83
|
}
|
|
84
|
+
const SCALAR_LITERALS = new Set(['literal_string', 'literal_number', 'literal_bool']);
|
|
85
|
+
function collectScalarReads(expr, localAssignments, scalarPaths, valueReads) {
|
|
86
|
+
const mark = (value, into) => {
|
|
87
|
+
const path = resolveToInputPath(value, localAssignments);
|
|
88
|
+
if (path !== undefined)
|
|
89
|
+
into.add(path);
|
|
90
|
+
};
|
|
91
|
+
switch (expr.kind) {
|
|
92
|
+
case 'eq':
|
|
93
|
+
mark(expr.left, SCALAR_LITERALS.has(expr.right.kind) ? scalarPaths : valueReads);
|
|
94
|
+
mark(expr.right, SCALAR_LITERALS.has(expr.left.kind) ? scalarPaths : valueReads);
|
|
95
|
+
break;
|
|
96
|
+
case 'neq':
|
|
97
|
+
case 'lt':
|
|
98
|
+
case 'lte':
|
|
99
|
+
case 'gt':
|
|
100
|
+
case 'gte':
|
|
101
|
+
mark(expr.left, valueReads);
|
|
102
|
+
mark(expr.right, valueReads);
|
|
103
|
+
break;
|
|
104
|
+
case 'bool_check':
|
|
105
|
+
mark(expr.ref, valueReads);
|
|
106
|
+
break;
|
|
107
|
+
case 'startswith':
|
|
108
|
+
case 'endswith':
|
|
109
|
+
case 'contains':
|
|
110
|
+
case 'regex_match':
|
|
111
|
+
mark(expr.str, scalarPaths);
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
49
117
|
function collectEvidence(expr, evidence, localAssignments) {
|
|
50
118
|
switch (expr.kind) {
|
|
51
119
|
case 'eq':
|
|
@@ -60,8 +128,8 @@ function collectEvidence(expr, evidence, localAssignments) {
|
|
|
60
128
|
case 'gte':
|
|
61
129
|
case 'lt':
|
|
62
130
|
case 'lte':
|
|
63
|
-
addSortEvidence(expr.left, '
|
|
64
|
-
addSortEvidence(expr.right, '
|
|
131
|
+
addSortEvidence(expr.left, 'real', evidence, localAssignments);
|
|
132
|
+
addSortEvidence(expr.right, 'real', evidence, localAssignments);
|
|
65
133
|
break;
|
|
66
134
|
case 'startswith':
|
|
67
135
|
case 'endswith':
|
|
@@ -115,7 +183,7 @@ function addLiteralEvidence(subject, comparand, evidence, localAssignments) {
|
|
|
115
183
|
addPathEvidence(path, 'string', evidence);
|
|
116
184
|
break;
|
|
117
185
|
case 'literal_number':
|
|
118
|
-
addPathEvidence(path, '
|
|
186
|
+
addPathEvidence(path, 'real', evidence);
|
|
119
187
|
break;
|
|
120
188
|
case 'literal_bool':
|
|
121
189
|
addPathEvidence(path, 'bool', evidence);
|