aontu 0.52.0 → 0.53.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/README.md +88 -0
- package/bin/aontu-mcp.js +4 -0
- package/dist/agentsmd.d.ts +16 -0
- package/dist/agentsmd.js +107 -0
- package/dist/agentsmd.js.map +1 -0
- package/dist/aontu.d.ts +14 -3
- package/dist/aontu.js +145 -4
- package/dist/aontu.js.map +1 -1
- package/dist/cli.d.ts +44 -1
- package/dist/cli.js +2401 -44
- package/dist/cli.js.map +1 -1
- package/dist/ctx.d.ts +16 -0
- package/dist/ctx.js +44 -0
- package/dist/ctx.js.map +1 -1
- package/dist/diff.d.ts +22 -0
- package/dist/diff.js +141 -0
- package/dist/diff.js.map +1 -0
- package/dist/err.d.ts +3 -1
- package/dist/err.js +48 -8
- package/dist/err.js.map +1 -1
- package/dist/graph.d.ts +16 -0
- package/dist/graph.js +73 -0
- package/dist/graph.js.map +1 -0
- package/dist/hcanon.d.ts +3 -0
- package/dist/hcanon.js +146 -0
- package/dist/hcanon.js.map +1 -0
- package/dist/hints.js +223 -5
- package/dist/hints.js.map +1 -1
- package/dist/jsonschema.d.ts +20 -0
- package/dist/jsonschema.js +391 -0
- package/dist/jsonschema.js.map +1 -0
- package/dist/lang.js +698 -35
- package/dist/lang.js.map +1 -1
- package/dist/lsp.d.ts +9 -2
- package/dist/lsp.js +262 -46
- package/dist/lsp.js.map +1 -1
- package/dist/mcp-server.d.ts +20 -0
- package/dist/mcp-server.js +147 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp.d.ts +42 -0
- package/dist/mcp.js +814 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mod-tool.d.ts +58 -0
- package/dist/mod-tool.js +498 -0
- package/dist/mod-tool.js.map +1 -0
- package/dist/mod.d.ts +31 -0
- package/dist/mod.js +250 -0
- package/dist/mod.js.map +1 -0
- package/dist/patch.d.ts +44 -0
- package/dist/patch.js +506 -0
- package/dist/patch.js.map +1 -0
- package/dist/provenance.d.ts +40 -0
- package/dist/provenance.js +335 -0
- package/dist/provenance.js.map +1 -0
- package/dist/query.d.ts +27 -0
- package/dist/query.js +294 -0
- package/dist/query.js.map +1 -0
- package/dist/reach.d.ts +14 -0
- package/dist/reach.js +140 -0
- package/dist/reach.js.map +1 -0
- package/dist/relation.d.ts +19 -0
- package/dist/relation.js +305 -0
- package/dist/relation.js.map +1 -0
- package/dist/report-sarif.d.ts +14 -0
- package/dist/report-sarif.js +102 -0
- package/dist/report-sarif.js.map +1 -0
- package/dist/site.d.ts +4 -0
- package/dist/site.js +31 -0
- package/dist/site.js.map +1 -1
- package/dist/std.d.ts +1 -0
- package/dist/std.js +73 -0
- package/dist/std.js.map +1 -0
- package/dist/subsume.d.ts +39 -0
- package/dist/subsume.js +526 -0
- package/dist/subsume.js.map +1 -0
- package/dist/trim.d.ts +19 -0
- package/dist/trim.js +155 -0
- package/dist/trim.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +17 -1
- package/dist/type.js.map +1 -1
- package/dist/unify.d.ts +3 -1
- package/dist/unify.js +287 -18
- package/dist/unify.js.map +1 -1
- package/dist/utility.d.ts +9 -1
- package/dist/utility.js +122 -1
- package/dist/utility.js.map +1 -1
- package/dist/val/AggFuncVal.d.ts +33 -0
- package/dist/val/AggFuncVal.js +202 -0
- package/dist/val/AggFuncVal.js.map +1 -0
- package/dist/val/ArithFuncVal.d.ts +31 -0
- package/dist/val/ArithFuncVal.js +62 -0
- package/dist/val/ArithFuncVal.js.map +1 -0
- package/dist/val/BagVal.d.ts +5 -0
- package/dist/val/BagVal.js +96 -5
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/CloseFuncVal.js +9 -1
- package/dist/val/CloseFuncVal.js.map +1 -1
- package/dist/val/ConjunctVal.d.ts +1 -1
- package/dist/val/ConjunctVal.js +19 -0
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/ConstraintVal.d.ts +48 -1
- package/dist/val/ConstraintVal.js +1501 -110
- package/dist/val/ConstraintVal.js.map +1 -1
- package/dist/val/CopyFuncVal.d.ts +1 -2
- package/dist/val/CopyFuncVal.js +7 -0
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/Decimal.d.ts +1 -0
- package/dist/val/Decimal.js +13 -0
- package/dist/val/Decimal.js.map +1 -1
- package/dist/val/DeprecateFuncVal.d.ts +11 -0
- package/dist/val/DeprecateFuncVal.js +47 -0
- package/dist/val/DeprecateFuncVal.js.map +1 -0
- package/dist/val/DisjunctVal.js +130 -21
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/EachFuncVal.d.ts +15 -0
- package/dist/val/EachFuncVal.js +75 -0
- package/dist/val/EachFuncVal.js.map +1 -0
- package/dist/val/ExpectVal.d.ts +1 -0
- package/dist/val/ExpectVal.js +41 -4
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FeatureVal.js +1 -1
- package/dist/val/FeatureVal.js.map +1 -1
- package/dist/val/FilterFuncVal.d.ts +15 -0
- package/dist/val/FilterFuncVal.js +91 -0
- package/dist/val/FilterFuncVal.js.map +1 -0
- package/dist/val/FuncBaseVal.d.ts +6 -1
- package/dist/val/FuncBaseVal.js +178 -2
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/HideFuncVal.js.map +1 -1
- package/dist/val/IdFuncVal.d.ts +13 -0
- package/dist/val/IdFuncVal.js +54 -0
- package/dist/val/IdFuncVal.js.map +1 -0
- package/dist/val/JunctionVal.js +7 -1
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.d.ts +1 -1
- package/dist/val/KeyFuncVal.js +38 -30
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.js +117 -17
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/LowerFuncVal.js.map +1 -1
- package/dist/val/MapVal.js +102 -8
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MatchFuncVal.d.ts +15 -0
- package/dist/val/MatchFuncVal.js +107 -0
- package/dist/val/MatchFuncVal.js.map +1 -0
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.js +24 -0
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/OpBaseVal.d.ts +1 -1
- package/dist/val/OpBaseVal.js +24 -2
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/OpenFuncVal.js +4 -1
- package/dist/val/OpenFuncVal.js.map +1 -1
- package/dist/val/PackFuncVal.d.ts +15 -0
- package/dist/val/PackFuncVal.js +108 -0
- package/dist/val/PackFuncVal.js.map +1 -0
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PlaceVal.d.ts +13 -0
- package/dist/val/PlaceVal.js +131 -0
- package/dist/val/PlaceVal.js.map +1 -0
- package/dist/val/PlusOpVal.js +11 -2
- package/dist/val/PlusOpVal.js.map +1 -1
- package/dist/val/PrefFuncVal.js.map +1 -1
- package/dist/val/PrefVal.d.ts +2 -2
- package/dist/val/PrefVal.js +78 -23
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/RefVal.d.ts +1 -1
- package/dist/val/RefVal.js +158 -30
- package/dist/val/RefVal.js.map +1 -1
- package/dist/val/ReferFuncVal.d.ts +36 -0
- package/dist/val/ReferFuncVal.js +303 -0
- package/dist/val/ReferFuncVal.js.map +1 -0
- package/dist/val/ScalarKindVal.d.ts +1 -2
- package/dist/val/ScalarKindVal.js +0 -11
- package/dist/val/ScalarKindVal.js.map +1 -1
- package/dist/val/TopVal.js.map +1 -1
- package/dist/val/TypeFuncVal.js.map +1 -1
- package/dist/val/UpperFuncVal.js.map +1 -1
- package/dist/val/Val.d.ts +9 -2
- package/dist/val/Val.js +150 -4
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js.map +1 -1
- package/dist/val/arith.d.ts +6 -0
- package/dist/val/arith.js +170 -0
- package/dist/val/arith.js.map +1 -0
- package/dist/vet.d.ts +45 -0
- package/dist/vet.js +776 -0
- package/dist/vet.js.map +1 -0
- package/dist/walk.d.ts +2 -0
- package/dist/walk.js +91 -0
- package/dist/walk.js.map +1 -0
- package/grammar/aontu.gbnf +130 -0
- package/grammar/aontu.lark +113 -0
- package/package.json +30 -15
- package/skill/SKILL.md +37 -0
- package/skill/error-codes.md +62 -0
- package/skill/examples.md +99 -0
- package/skill/grammar-card.md +57 -0
- package/src/agentsmd.ts +135 -0
- package/src/aontu.ts +192 -4
- package/src/cli.ts +2858 -71
- package/src/ctx.ts +81 -0
- package/src/diff.ts +196 -0
- package/src/err.ts +52 -8
- package/src/graph.ts +135 -0
- package/src/hcanon.ts +169 -0
- package/src/hints.ts +271 -5
- package/src/jsonschema.ts +511 -0
- package/src/lang.ts +779 -37
- package/src/lsp.ts +281 -47
- package/src/mcp-server.ts +187 -0
- package/src/mcp.ts +993 -0
- package/src/mod-tool.ts +679 -0
- package/src/mod.ts +344 -0
- package/src/patch.ts +624 -0
- package/src/provenance.ts +430 -0
- package/src/query.ts +379 -0
- package/src/reach.ts +184 -0
- package/src/relation.ts +395 -0
- package/src/report-sarif.ts +137 -0
- package/src/site.ts +36 -1
- package/src/std.ts +73 -0
- package/src/subsume.ts +690 -0
- package/src/trim.ts +195 -0
- package/src/tsconfig.json +10 -4
- package/src/type.ts +51 -2
- package/src/unify.ts +311 -16
- package/src/utility.ts +139 -1
- package/src/val/AggFuncVal.ts +319 -0
- package/src/val/ArithFuncVal.ts +108 -0
- package/src/val/BagVal.ts +101 -4
- package/src/val/CloseFuncVal.ts +9 -1
- package/src/val/ConjunctVal.ts +20 -0
- package/src/val/ConstraintVal.ts +1699 -116
- package/src/val/CopyFuncVal.ts +7 -1
- package/src/val/Decimal.ts +15 -0
- package/src/val/DeprecateFuncVal.ts +84 -0
- package/src/val/DisjunctVal.ts +139 -28
- package/src/val/EachFuncVal.ts +133 -0
- package/src/val/ExpectVal.ts +43 -6
- package/src/val/FeatureVal.ts +1 -1
- package/src/val/FilterFuncVal.ts +154 -0
- package/src/val/FuncBaseVal.ts +200 -3
- package/src/val/HideFuncVal.ts +0 -2
- package/src/val/IdFuncVal.ts +91 -0
- package/src/val/JunctionVal.ts +7 -1
- package/src/val/KeyFuncVal.ts +39 -35
- package/src/val/ListVal.ts +125 -18
- package/src/val/LowerFuncVal.ts +0 -1
- package/src/val/MapVal.ts +110 -8
- package/src/val/MatchFuncVal.ts +176 -0
- package/src/val/MoveFuncVal.ts +0 -2
- package/src/val/NilVal.ts +25 -0
- package/src/val/OpBaseVal.ts +26 -3
- package/src/val/OpenFuncVal.ts +4 -2
- package/src/val/PackFuncVal.ts +175 -0
- package/src/val/PathFuncVal.ts +0 -1
- package/src/val/PlaceVal.ts +193 -0
- package/src/val/PlusOpVal.ts +11 -2
- package/src/val/PrefFuncVal.ts +0 -1
- package/src/val/PrefVal.ts +79 -36
- package/src/val/RefVal.ts +163 -30
- package/src/val/ReferFuncVal.ts +387 -0
- package/src/val/ScalarKindVal.ts +0 -13
- package/src/val/TopVal.ts +0 -1
- package/src/val/TypeFuncVal.ts +0 -2
- package/src/val/UpperFuncVal.ts +0 -1
- package/src/val/Val.ts +213 -3
- package/src/val/VarVal.ts +0 -1
- package/src/val/arith.ts +316 -0
- package/src/vet.ts +992 -0
- package/src/walk.ts +99 -0
package/dist/subsume.js
ADDED
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.effectiveDefault = effectiveDefault;
|
|
5
|
+
exports.subsumeNode = subsumeNode;
|
|
6
|
+
exports.subsume = subsume;
|
|
7
|
+
const aontu_1 = require("./aontu");
|
|
8
|
+
const vet_1 = require("./vet");
|
|
9
|
+
const hcanon_1 = require("./hcanon");
|
|
10
|
+
const ConstraintVal_1 = require("./val/ConstraintVal");
|
|
11
|
+
const ScalarKindVal_1 = require("./val/ScalarKindVal");
|
|
12
|
+
const PrefVal_1 = require("./val/PrefVal");
|
|
13
|
+
const DEFAULT_GENERAL_URL = 'general';
|
|
14
|
+
const DEFAULT_SPECIFIC_URL = 'specific';
|
|
15
|
+
function pathText(path) {
|
|
16
|
+
return '$' + (0 < path.length ? '.' + path.join('.') : '');
|
|
17
|
+
}
|
|
18
|
+
// Every recorded operand is a real evaluated Val or the sited topLike
|
|
19
|
+
// stand-in, so no null guards: a Val's site is always an object, and a
|
|
20
|
+
// value parsed without a usable frame (a disjunct, say) already carries
|
|
21
|
+
// the -1 coordinates in it.
|
|
22
|
+
function siteOf(v, role, url) {
|
|
23
|
+
return {
|
|
24
|
+
file: url,
|
|
25
|
+
row: v.site.row,
|
|
26
|
+
col: v.site.col,
|
|
27
|
+
len: v.site.len,
|
|
28
|
+
role: role,
|
|
29
|
+
src: v.site.src,
|
|
30
|
+
value: v.canon,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// One finding: general and specific sites (general first — it is the
|
|
34
|
+
// contract being weakened or broken), canons as expected/actual.
|
|
35
|
+
function record(state, code, path, g, s, message) {
|
|
36
|
+
state.findings.push({
|
|
37
|
+
code,
|
|
38
|
+
class: 'compat',
|
|
39
|
+
severity: 'error',
|
|
40
|
+
path: pathText(path),
|
|
41
|
+
message,
|
|
42
|
+
sites: [
|
|
43
|
+
siteOf(g, 'general', state.generalUrl),
|
|
44
|
+
siteOf(s, 'specific', state.specificUrl),
|
|
45
|
+
],
|
|
46
|
+
expected: g.canon,
|
|
47
|
+
actual: s.canon,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// The admission view of a value under a profile: a BARE preference
|
|
51
|
+
// admits what its superior admits (the engine's own PrefVal.superpeg
|
|
52
|
+
// semantics, and the docs' "a bare preference is gated by kind"); the
|
|
53
|
+
// default itself is compared separately, by the `defaults` and `gen`
|
|
54
|
+
// profiles.
|
|
55
|
+
function admission(v) {
|
|
56
|
+
return true === v?.isPref ? v.superpeg : v;
|
|
57
|
+
}
|
|
58
|
+
// A PREFERRED BRANCH CONTRIBUTES EXACTLY ITS OWN VALUE (ADR-004). The
|
|
59
|
+
// admission gate made that the engine's rule -- `*'auto'|'literal'|'data'`
|
|
60
|
+
// admits those three strings and nothing else -- and the subsumption
|
|
61
|
+
// walk kept comparing a pref MEMBER by its kind superior, the
|
|
62
|
+
// pre-ADR-004 reading. So a disjunction with a default did not subsume
|
|
63
|
+
// ITSELF: every member of the specific side widened to `string`, which
|
|
64
|
+
// no general member admits, and the walk answered the distribution
|
|
65
|
+
// case. `aontu_policy: hide({compat: *backward|forward|full|none})` --
|
|
66
|
+
// the verbatim idiom from reference-api.md -- failed self-subsumption
|
|
67
|
+
// under --profile gen (use-cases/BUGS.md §29).
|
|
68
|
+
//
|
|
69
|
+
// Only for a member of a disjunction: a bare `*x` standing alone is
|
|
70
|
+
// still gated by kind, which is the rule above and the documented one.
|
|
71
|
+
function memberAdmission(v) {
|
|
72
|
+
return true === v?.isPref ? (0, PrefVal_1.prefInnerPeg)(v) : v;
|
|
73
|
+
}
|
|
74
|
+
// The effective default of a value, or undefined when it has none, or
|
|
75
|
+
// 'indeterminate' when equal-rank preferences disagree (which the
|
|
76
|
+
// engine itself refuses only at generation).
|
|
77
|
+
// Exported (with subsumeNode) for the default-validity lint in
|
|
78
|
+
// ts/src/vet.ts (G3 phase 5): the lint asks exactly this walk's two
|
|
79
|
+
// questions — what is the effective default, and does a member admit
|
|
80
|
+
// it.
|
|
81
|
+
function effectiveDefault(v) {
|
|
82
|
+
// EVERY pref layer is unwrapped (prefInnerPeg), not just one: a
|
|
83
|
+
// ranked default's effective value is the innermost peg — `**member`
|
|
84
|
+
// generates "member" exactly as `*member` does (the rank-uniform
|
|
85
|
+
// meet, ADR-004). The one-layer unwrap left a rank-2 default wearing
|
|
86
|
+
// a `*`-wrapper no plain alternative subsumes, which is the
|
|
87
|
+
// pref_not_instance lint's ranked false positive of
|
|
88
|
+
// use-cases/BUGS.md §4 (`**member|member|admin|owner` warned while
|
|
89
|
+
// generating a value its own branch admits).
|
|
90
|
+
if (true === v?.isPref) {
|
|
91
|
+
return (0, PrefVal_1.prefInnerPeg)(v);
|
|
92
|
+
}
|
|
93
|
+
if (true === v?.isDisjunct && Array.isArray(v.peg)) {
|
|
94
|
+
const prefs = v.peg.filter((m) => true === m?.isPref);
|
|
95
|
+
if (0 === prefs.length) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
// Generation picks the LOWEST rank (`a:**1|*2` generates 2 —
|
|
99
|
+
// test/spec/edge.tsv), so the effective default does too.
|
|
100
|
+
const minRank = Math.min(...prefs.map((p) => p.rank));
|
|
101
|
+
const top = prefs.filter((p) => p.rank === minRank);
|
|
102
|
+
const first = (0, PrefVal_1.prefInnerPeg)(top[0]);
|
|
103
|
+
for (const p of top.slice(1)) {
|
|
104
|
+
if (!first.same?.((0, PrefVal_1.prefInnerPeg)(p))) {
|
|
105
|
+
return 'indeterminate';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return first;
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
// Is this evaluated value concrete enough to serve as a witness — a
|
|
113
|
+
// value that certainly IS an instance of the specific side?
|
|
114
|
+
function isConcrete(v) {
|
|
115
|
+
if (true === v?.isScalar) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
if ((true === v?.isMap || true === v?.isList) && null != v.peg) {
|
|
119
|
+
const children = Array.isArray(v.peg) ? v.peg : Object.values(v.peg);
|
|
120
|
+
return children.every((c) => isConcrete(c));
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
// Unresolved residue makes the relation undecidable at this node:
|
|
125
|
+
// references, variables, unreduced conjuncts and functions have no
|
|
126
|
+
// admitted set to compare.
|
|
127
|
+
function unresolved(v) {
|
|
128
|
+
return true === v?.isRef || true === v?.isVar ||
|
|
129
|
+
true === v?.isConjunct || true === v?.isExpect ||
|
|
130
|
+
(true === v?.isFunc && true !== v?.isConstraint);
|
|
131
|
+
}
|
|
132
|
+
// Exported for the defensive-arm unit test (ADR-002,
|
|
133
|
+
// ts/test/coverage3.test.ts): the no-rule fold at the walk's tail is
|
|
134
|
+
// unreachable through subsume() today — the ladder is total for every
|
|
135
|
+
// evaluated former — and the walk is otherwise private.
|
|
136
|
+
function subsumeNode(state, path, g0, s0) {
|
|
137
|
+
const g = admission(g0);
|
|
138
|
+
const s = admission(s0);
|
|
139
|
+
// Marks change the OUTPUT shape, not the admitted set: only the `gen`
|
|
140
|
+
// profile reports them, and only when they differ on corresponding
|
|
141
|
+
// nodes.
|
|
142
|
+
if ('gen' === state.profile && true !== state.distributing &&
|
|
143
|
+
(!!g?.mark?.type !== !!s?.mark?.type ||
|
|
144
|
+
!!g?.mark?.hide !== !!s?.mark?.hide)) {
|
|
145
|
+
record(state, 'compat_marks_changed', path, g, s, 'marks differ: general ' + JSON.stringify(g?.mark) +
|
|
146
|
+
', specific ' + JSON.stringify(s?.mark));
|
|
147
|
+
return 'no';
|
|
148
|
+
}
|
|
149
|
+
// TOP admits everything. There is no nil rule: an error-free
|
|
150
|
+
// evaluated document carries no nil (failing disjunct members are
|
|
151
|
+
// discarded, every other nil collects an error, and subsume() answers
|
|
152
|
+
// `error` for a source that does not stand alone), so a nil handed to
|
|
153
|
+
// the walk by a future caller falls to the no-rule fold below —
|
|
154
|
+
// `undecided`, the safe direction.
|
|
155
|
+
if (true === g?.isTop) {
|
|
156
|
+
return 'yes';
|
|
157
|
+
}
|
|
158
|
+
if (unresolved(g) || unresolved(s)) {
|
|
159
|
+
// REFLEXIVITY IS A LAW, not a rule the ladder gets to skip. Every
|
|
160
|
+
// value admits itself, residue included: the set admitted by
|
|
161
|
+
// `integer & min(0)` is exactly the set admitted by
|
|
162
|
+
// `integer & min(0)`. Without this, a constraint inside a spread
|
|
163
|
+
// template made a contract non-SELF-subsumable -- expected and
|
|
164
|
+
// actual byte-identical, verdict `undecided` -- so `breaking` on
|
|
165
|
+
// the documented close-per-entry idiom hard-failed reflexivity and
|
|
166
|
+
// had to run --allow-undecided, which then masks the genuine
|
|
167
|
+
// undecideds it exists to surface (use-cases/BUGS.md §28).
|
|
168
|
+
//
|
|
169
|
+
// Identity is the HASH FORM, not the canon: canon drops closedness
|
|
170
|
+
// and the marks, so `close({a:1})` and `{a:1}` share a canon while
|
|
171
|
+
// admitting different sets. Computed only on this branch, where
|
|
172
|
+
// the answer would otherwise be undecided, so the hot path is
|
|
173
|
+
// untouched.
|
|
174
|
+
if ((0, hcanon_1.hcanon)(g) === (0, hcanon_1.hcanon)(s)) {
|
|
175
|
+
return 'yes';
|
|
176
|
+
}
|
|
177
|
+
record(state, 'sub_unresolved', path, g, s, 'unresolved residue: the admitted set is not comparable');
|
|
178
|
+
return 'undecided';
|
|
179
|
+
}
|
|
180
|
+
// Disjunctions. General side first: a specific member must be
|
|
181
|
+
// subsumed by SOME general member; member-wise failure is not proof
|
|
182
|
+
// (the distribution case), so a concrete failing member becomes the
|
|
183
|
+
// witness and anything else is honestly undecided.
|
|
184
|
+
if (true === s?.isDisjunct) {
|
|
185
|
+
let out = 'yes';
|
|
186
|
+
for (const raw of s.peg) {
|
|
187
|
+
const member = memberAdmission(raw);
|
|
188
|
+
const trial = trialSubsume(state, path, g, member);
|
|
189
|
+
if ('yes' !== trial) {
|
|
190
|
+
if (isConcrete(admission(member))) {
|
|
191
|
+
record(state, 'compat_narrowed', path, g, member, 'a specific alternative is not admitted by the general value');
|
|
192
|
+
return 'no';
|
|
193
|
+
}
|
|
194
|
+
record(state, 'sub_disjunct_distribution', path, g, member, 'a specific alternative is not admitted member-wise, and no' +
|
|
195
|
+
' concrete counterexample settles the distribution case');
|
|
196
|
+
out = 'undecided';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return out;
|
|
200
|
+
}
|
|
201
|
+
if (true === g?.isDisjunct) {
|
|
202
|
+
for (const raw of g.peg) {
|
|
203
|
+
if ('yes' === trialSubsume(state, path, memberAdmission(raw), s)) {
|
|
204
|
+
return 'yes';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (isConcrete(s)) {
|
|
208
|
+
record(state, 'compat_narrowed', path, g, s, 'no general alternative admits the specific value');
|
|
209
|
+
return 'no';
|
|
210
|
+
}
|
|
211
|
+
record(state, 'sub_disjunct_distribution', path, g, s, 'no general alternative admits the specific value member-wise,' +
|
|
212
|
+
' and no concrete counterexample settles the distribution case');
|
|
213
|
+
return 'undecided';
|
|
214
|
+
}
|
|
215
|
+
// Scalar kinds: a kind subsumes its scalars, narrower kinds, and the
|
|
216
|
+
// constraint residuals of its domain.
|
|
217
|
+
if (true === g?.isScalarKind) {
|
|
218
|
+
if (true === s?.isScalarKind) {
|
|
219
|
+
if (g.peg === s.peg || (0, ScalarKindVal_1.kindSubsumes)(g.peg, s.peg)) {
|
|
220
|
+
return 'yes';
|
|
221
|
+
}
|
|
222
|
+
record(state, 'compat_narrowed', path, g, s, 'the general kind does not admit the specific kind');
|
|
223
|
+
return 'no';
|
|
224
|
+
}
|
|
225
|
+
if (true === s?.isScalar) {
|
|
226
|
+
const leaf = s.superior?.();
|
|
227
|
+
if (true === leaf?.isScalarKind &&
|
|
228
|
+
(g.peg === leaf.peg || (0, ScalarKindVal_1.kindSubsumes)(g.peg, leaf.peg))) {
|
|
229
|
+
return 'yes';
|
|
230
|
+
}
|
|
231
|
+
record(state, 'compat_narrowed', path, g, s, 'the general kind does not admit the specific scalar');
|
|
232
|
+
return 'no';
|
|
233
|
+
}
|
|
234
|
+
if (true === s?.isConstraint) {
|
|
235
|
+
// A kind covers a residual of its own domain: `number` admits any
|
|
236
|
+
// numeric residual (the supertype admits every leaf a bound can
|
|
237
|
+
// pin), a numeric LEAF kind admits only a residual pinned to that
|
|
238
|
+
// leaf, and `string` admits any pattern residual. A residual with
|
|
239
|
+
// no domain (sizing-only) admits containers no kind covers.
|
|
240
|
+
const dom = s.domain;
|
|
241
|
+
const skind = s.kind;
|
|
242
|
+
if ('number' === dom &&
|
|
243
|
+
(Number === g.peg ||
|
|
244
|
+
(null != skind && (0, ScalarKindVal_1.kindSubsumes)(g.peg, skind)))) {
|
|
245
|
+
return 'yes';
|
|
246
|
+
}
|
|
247
|
+
if ('string' === dom && String === g.peg) {
|
|
248
|
+
return 'yes';
|
|
249
|
+
}
|
|
250
|
+
record(state, 'compat_narrowed', path, g, s, 'the general kind does not cover the specific residual');
|
|
251
|
+
return 'no';
|
|
252
|
+
}
|
|
253
|
+
record(state, 'compat_narrowed', path, g, s, 'the general kind admits no such value');
|
|
254
|
+
return 'no';
|
|
255
|
+
}
|
|
256
|
+
// Constraint residuals.
|
|
257
|
+
if (true === g?.isConstraint) {
|
|
258
|
+
if (true === s?.isConstraint) {
|
|
259
|
+
const r = (0, ConstraintVal_1.constraintSubsumesConstraint)(g, s);
|
|
260
|
+
if (true === r) {
|
|
261
|
+
return 'yes';
|
|
262
|
+
}
|
|
263
|
+
if ('undecided' === r) {
|
|
264
|
+
record(state, 'sub_evaluate_only', path, g, s, 'an evaluate-only check (must) makes the admitted set opaque');
|
|
265
|
+
return 'undecided';
|
|
266
|
+
}
|
|
267
|
+
record(state, 'compat_narrowed', path, g, s, 'the general residual does not contain the specific residual');
|
|
268
|
+
return 'no';
|
|
269
|
+
}
|
|
270
|
+
if (true === s?.isScalar) {
|
|
271
|
+
const r = (0, ConstraintVal_1.constraintAdmitsScalar)(g, s);
|
|
272
|
+
if (true === r) {
|
|
273
|
+
return 'yes';
|
|
274
|
+
}
|
|
275
|
+
if ('undecided' === r) {
|
|
276
|
+
record(state, 'sub_evaluate_only', path, g, s, 'an evaluate-only check (must) makes the admitted set opaque');
|
|
277
|
+
return 'undecided';
|
|
278
|
+
}
|
|
279
|
+
record(state, 'compat_narrowed', path, g, s, 'the general residual does not admit the specific scalar');
|
|
280
|
+
return 'no';
|
|
281
|
+
}
|
|
282
|
+
record(state, 'compat_narrowed', path, g, s, 'the general residual constrains a domain the specific value is not in');
|
|
283
|
+
return 'no';
|
|
284
|
+
}
|
|
285
|
+
// Concrete scalars subsume only themselves (identity compares kind
|
|
286
|
+
// as well as value).
|
|
287
|
+
if (true === g?.isScalar) {
|
|
288
|
+
if (true === s?.isScalar && true === g.same?.(s)) {
|
|
289
|
+
return 'yes';
|
|
290
|
+
}
|
|
291
|
+
record(state, 'compat_narrowed', path, g, s, 'a concrete value subsumes only itself');
|
|
292
|
+
return 'no';
|
|
293
|
+
}
|
|
294
|
+
// Maps.
|
|
295
|
+
if (true === g?.isMap) {
|
|
296
|
+
if (true !== s?.isMap) {
|
|
297
|
+
record(state, 'compat_narrowed', path, g, s, 'the general value is a map and the specific value is not');
|
|
298
|
+
return 'no';
|
|
299
|
+
}
|
|
300
|
+
return subsumeBag(state, path, g, s, Object.keys(g.peg), Object.keys(s.peg), (v, k) => v.peg[k]);
|
|
301
|
+
}
|
|
302
|
+
// Lists: element-wise by position; the same required/optional shape
|
|
303
|
+
// as maps, with positions as keys.
|
|
304
|
+
if (true === g?.isList) {
|
|
305
|
+
if (true !== s?.isList) {
|
|
306
|
+
record(state, 'compat_narrowed', path, g, s, 'the general value is a list and the specific value is not');
|
|
307
|
+
return 'no';
|
|
308
|
+
}
|
|
309
|
+
const gk = g.peg.map((_, i) => '' + i);
|
|
310
|
+
const sk = s.peg.map((_, i) => '' + i);
|
|
311
|
+
return subsumeBag(state, path, g, s, gk, sk, (v, k) => v.peg[Number(k)]);
|
|
312
|
+
}
|
|
313
|
+
// The ladder above is total in practice: every evaluated former is a
|
|
314
|
+
// scalar, kind, constraint, map, list, disjunct, or top, or is caught
|
|
315
|
+
// by admission (pref) or unresolved (ref, var, conjunct, expect,
|
|
316
|
+
// func). The arm is kept because "in practice" is evaluation's
|
|
317
|
+
// property, not this walk's, and a future value class (or a nil, see
|
|
318
|
+
// the top rule) must land on an honest `undecided`, not fall out of
|
|
319
|
+
// the walk with no answer.
|
|
320
|
+
record(state, 'sub_unresolved', path, g, s, 'no subsumption rule covers this pair of value formers');
|
|
321
|
+
return 'undecided';
|
|
322
|
+
}
|
|
323
|
+
// Maps and lists share one shape: required keys of the general side
|
|
324
|
+
// must be required in the specific side and subsume; optional keys
|
|
325
|
+
// compare when present; closedness bounds the specific key set; spread
|
|
326
|
+
// templates govern the specific side's surplus.
|
|
327
|
+
function subsumeBag(state, path, g, s, gKeys, sKeys, child) {
|
|
328
|
+
let out = 'yes';
|
|
329
|
+
const worse = (r) => {
|
|
330
|
+
if ('no' === r || ('undecided' === r && 'no' !== out)) {
|
|
331
|
+
out = 'no' === r ? 'no' : 'undecided';
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
// Always arrays on an evaluated bag (BagVal initialises them).
|
|
335
|
+
const gOptional = g.optionalKeys;
|
|
336
|
+
const sOptional = s.optionalKeys;
|
|
337
|
+
for (const k of gKeys) {
|
|
338
|
+
const gChild = child(g, k);
|
|
339
|
+
const has = sKeys.includes(k);
|
|
340
|
+
const optional = gOptional.includes(k);
|
|
341
|
+
if (!has) {
|
|
342
|
+
if (optional) {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
record(state, 'compat_required_added', [...path, k], gChild, s, 'the general value requires this key; the specific value admits' +
|
|
346
|
+
' instances without it');
|
|
347
|
+
worse('no');
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
if (!optional && sOptional.includes(k)) {
|
|
351
|
+
record(state, 'compat_required_added', [...path, k], gChild, child(s, k), 'the general value requires this key; the specific value makes' +
|
|
352
|
+
' it optional, so instances without it are admitted');
|
|
353
|
+
worse('no');
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
worse(subsumeNode(state, [...path, k], gChild, child(s, k)));
|
|
357
|
+
}
|
|
358
|
+
// Closedness: a closed general bag admits only key sets it declares,
|
|
359
|
+
// so the specific side must be closed and inside it.
|
|
360
|
+
if (true === g.closed) {
|
|
361
|
+
if (true !== s.closed) {
|
|
362
|
+
record(state, 'compat_narrowed', path, g, s, 'the general value is closed; the open specific value admits' +
|
|
363
|
+
' surplus keys');
|
|
364
|
+
worse('no');
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
for (const k of sKeys) {
|
|
368
|
+
if (!gKeys.includes(k)) {
|
|
369
|
+
record(state, 'compat_narrowed', [...path, k], g, child(s, k), 'the closed general value does not declare this key');
|
|
370
|
+
worse('no');
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Spread templates: a path-dependent template's meaning depends on
|
|
376
|
+
// where it lands, which no structural comparison can decide.
|
|
377
|
+
const gcj = g.spread?.cj;
|
|
378
|
+
const scj = s.spread?.cj;
|
|
379
|
+
if (null != gcj || null != scj) {
|
|
380
|
+
if (true === gcj?.isPathDependent || true === scj?.isPathDependent) {
|
|
381
|
+
record(state, 'sub_path_dependent_spread', path, gcj ?? g, scj ?? s, 'a path-dependent spread template cannot be compared structurally');
|
|
382
|
+
worse('undecided');
|
|
383
|
+
}
|
|
384
|
+
else if (null != gcj) {
|
|
385
|
+
// The general template governs the specific side's surplus keys
|
|
386
|
+
// and its template.
|
|
387
|
+
for (const k of sKeys) {
|
|
388
|
+
if (!gKeys.includes(k)) {
|
|
389
|
+
worse(subsumeNode(state, [...path, k], gcj, child(s, k)));
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
worse(subsumeNode(state, [...path, '&'], gcj, scj ?? topLike()));
|
|
393
|
+
}
|
|
394
|
+
// A specific-only template narrows the specific side; nothing for
|
|
395
|
+
// the (unconstrained) general side to refuse.
|
|
396
|
+
}
|
|
397
|
+
return out;
|
|
398
|
+
}
|
|
399
|
+
// A stand-in TOP for "the specific side leaves this unconstrained".
|
|
400
|
+
let topVal;
|
|
401
|
+
function topLike() {
|
|
402
|
+
if (null == topVal) {
|
|
403
|
+
// A full site, not a partial one: `len` and `src` are as much part
|
|
404
|
+
// of the shape as row and col, and leaving them undefined dropped
|
|
405
|
+
// both keys from the emitted report — so this stand-in was the one
|
|
406
|
+
// site in either port with no `len` at all, and the Go twin (which
|
|
407
|
+
// has no undefined) disagreed. It occupies no source, so the values
|
|
408
|
+
// are the "unknown" ones.
|
|
409
|
+
topVal = {
|
|
410
|
+
isTop: true, canon: 'top',
|
|
411
|
+
site: { row: -1, col: -1, len: -1, src: '' },
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
return topVal;
|
|
415
|
+
}
|
|
416
|
+
// A trial comparison whose findings are DISCARDED: disjunct
|
|
417
|
+
// member-matching asks many "would this member do?" questions, and only
|
|
418
|
+
// the aggregated outcome is a finding.
|
|
419
|
+
// A DISTRIBUTION TRIAL IS NOT A NODE CORRESPONDENCE. It asks whether
|
|
420
|
+
// one ALTERNATIVE of one side admits one alternative of the other,
|
|
421
|
+
// which is a question about admitted sets; the two values it compares
|
|
422
|
+
// are not the same node of the two documents. The `gen` profile's mark
|
|
423
|
+
// rule is a correspondence question -- did a field that used to be
|
|
424
|
+
// generated become hidden -- and firing it here compared a whole
|
|
425
|
+
// disjunction (carrying its enclosing bag's mark) against a member
|
|
426
|
+
// extracted out of one (which does not), so `hide({c: *a|b})` stopped
|
|
427
|
+
// subsuming ITSELF under --profile gen (use-cases/BUGS.md §29). The
|
|
428
|
+
// enclosing node's marks are compared where they correspond: at that
|
|
429
|
+
// node, by the ordinary walk.
|
|
430
|
+
function trialSubsume(state, path, g, s) {
|
|
431
|
+
const trial = { ...state, findings: [], distributing: true };
|
|
432
|
+
return subsumeNode(trial, path, g, s);
|
|
433
|
+
}
|
|
434
|
+
// The defaults comparison (the `defaults` and `gen` profiles): the
|
|
435
|
+
// specific side's effective default must survive into the general side
|
|
436
|
+
// unchanged. Adding a default where none existed is compatible;
|
|
437
|
+
// changing or removing one is not (removal turns previously generable
|
|
438
|
+
// documents incomplete).
|
|
439
|
+
function subsumeDefaults(state, path, g, s) {
|
|
440
|
+
const sd = effectiveDefault(s);
|
|
441
|
+
if (undefined === sd) {
|
|
442
|
+
return 'yes';
|
|
443
|
+
}
|
|
444
|
+
const gd = effectiveDefault(g);
|
|
445
|
+
if ('indeterminate' === sd || 'indeterminate' === gd) {
|
|
446
|
+
record(state, 'sub_default_indeterminate', path, g, s, 'equal-rank preferences disagree, so the effective default is' +
|
|
447
|
+
' not a single value');
|
|
448
|
+
return 'undecided';
|
|
449
|
+
}
|
|
450
|
+
if (undefined === gd || true !== gd.same?.(sd)) {
|
|
451
|
+
record(state, 'compat_default_changed', path, g, s, 'the effective default changed: previously generable documents' +
|
|
452
|
+
' materialise differently or become incomplete');
|
|
453
|
+
return 'no';
|
|
454
|
+
}
|
|
455
|
+
return 'yes';
|
|
456
|
+
}
|
|
457
|
+
// Walk both trees for default agreement wherever the specific side has
|
|
458
|
+
// one: at the node itself and inside every corresponding bag child.
|
|
459
|
+
function subsumeDefaultsWalk(state, path, g, s) {
|
|
460
|
+
let out = subsumeDefaults(state, path, g, s);
|
|
461
|
+
const gm = true === g?.isMap ? g.peg : undefined;
|
|
462
|
+
const sm = true === s?.isMap ? s.peg : undefined;
|
|
463
|
+
if (null != gm && null != sm) {
|
|
464
|
+
for (const k of Object.keys(sm)) {
|
|
465
|
+
if (null != gm[k]) {
|
|
466
|
+
const r = subsumeDefaultsWalk(state, [...path, k], gm[k], sm[k]);
|
|
467
|
+
if ('no' === r || ('undecided' === r && 'no' !== out)) {
|
|
468
|
+
out = 'no' === r ? 'no' : 'undecided';
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return out;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Does `generalSrc` subsume `specificSrc` — is every instance the
|
|
477
|
+
* specific admits admitted by the general too?
|
|
478
|
+
*
|
|
479
|
+
* Both sources are evaluated fresh (single-use trees make this
|
|
480
|
+
* mandatory), and the recursion runs on the finished values. The
|
|
481
|
+
* verdict is three-valued plus `error` (a source that does not stand up
|
|
482
|
+
* on its own, mirroring vet's schema-error verdict); findings reuse
|
|
483
|
+
* G2's object with class `compat`.
|
|
484
|
+
*/
|
|
485
|
+
function subsume(generalSrc, specificSrc, opts) {
|
|
486
|
+
const options = opts ?? {};
|
|
487
|
+
const profile = options.profile ?? 'defaults';
|
|
488
|
+
const state = {
|
|
489
|
+
profile,
|
|
490
|
+
findings: [],
|
|
491
|
+
generalUrl: options.generalUrl ?? DEFAULT_GENERAL_URL,
|
|
492
|
+
specificUrl: options.specificUrl ?? DEFAULT_SPECIFIC_URL,
|
|
493
|
+
};
|
|
494
|
+
const load = (src, path) => {
|
|
495
|
+
const aontu = new aontu_1.Aontu(null == options.trust ? undefined : { trust: options.trust });
|
|
496
|
+
const ctx = aontu.ctx({ collect: true });
|
|
497
|
+
const v = aontu.unify(src, null == path ? undefined : { path }, ctx);
|
|
498
|
+
if (0 < ctx.err.length || true === v?.isNil) {
|
|
499
|
+
return undefined;
|
|
500
|
+
}
|
|
501
|
+
return v;
|
|
502
|
+
};
|
|
503
|
+
let g = load(generalSrc, options.generalPath);
|
|
504
|
+
let s = load(specificSrc, options.specificPath);
|
|
505
|
+
if (null == g || null == s) {
|
|
506
|
+
return { verdict: 'error', findings: [] };
|
|
507
|
+
}
|
|
508
|
+
if (null != options.at) {
|
|
509
|
+
g = (0, vet_1.anchorAt)(g, options.at);
|
|
510
|
+
s = (0, vet_1.anchorAt)(s, options.at);
|
|
511
|
+
if (null == g || null == s) {
|
|
512
|
+
return { verdict: 'error', findings: [] };
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
let out = subsumeNode(state, [], g, s);
|
|
516
|
+
if ('values' !== profile) {
|
|
517
|
+
const d = subsumeDefaultsWalk(state, [], g, s);
|
|
518
|
+
if ('no' === d || ('undecided' === d && 'no' !== out)) {
|
|
519
|
+
out = 'no' === d ? 'no' : 'undecided';
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
const verdict = 'no' === out ? 'does_not_subsume' :
|
|
523
|
+
'undecided' === out ? 'undecided' : 'subsumes';
|
|
524
|
+
return { verdict, findings: state.findings };
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=subsume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsume.js","sourceRoot":"","sources":["../src/subsume.ts"],"names":[],"mappings":"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"}
|
package/dist/trim.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { VetFinding } from './vet';
|
|
2
|
+
import type { TrustOptions } from './type';
|
|
3
|
+
export type TrimVerdict = 'clean' | 'redundant' | 'error';
|
|
4
|
+
export type TrimReport = {
|
|
5
|
+
verdict: TrimVerdict;
|
|
6
|
+
redundant: string[];
|
|
7
|
+
errors?: VetFinding[];
|
|
8
|
+
};
|
|
9
|
+
export type TrimOptions = {
|
|
10
|
+
path?: string;
|
|
11
|
+
trust?: TrustOptions;
|
|
12
|
+
};
|
|
13
|
+
export declare function candidates(v: any, path: string[], out: string[][]): void;
|
|
14
|
+
export declare function deleteAt(root: any, path: string[]): boolean;
|
|
15
|
+
export declare function evalCanon(src: string, opts: TrimOptions, delPath?: string[], sink?: {
|
|
16
|
+
ctx?: any;
|
|
17
|
+
failed?: any;
|
|
18
|
+
}): string | undefined;
|
|
19
|
+
export declare function trimCheck(src: string, opts?: TrimOptions): TrimReport;
|