@cavelang/canonical 0.35.0 → 0.36.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/dist/src/emit.js CHANGED
@@ -7,45 +7,147 @@
7
7
  * order. Qualifier edges re-indent under their parent; grouped claims
8
8
  * (`QUALIFIES` edges) re-indent as full lines.
9
9
  */
10
- import { Claim, Confidence, Tag, Value } from '@cavelang/core';
11
- import { parseDocument, Token } from '@cavelang/parser';
10
+ import { Claim, Confidence, Entity, Tag, Uncertainty, Value, Verb } from '@cavelang/core';
11
+ import { parseDocument, Token, Line } from '@cavelang/parser';
12
+ const checkLiteral = (kind, text) => {
13
+ if (typeof text !== 'string')
14
+ throw new TypeError('CAVE term and value text must be a string');
15
+ const delimiter = kind === 'text' ? '"' : kind === 'code' ? '`' : undefined;
16
+ if (delimiter !== undefined && text.includes(delimiter)) {
17
+ throw new TypeError(`CAVE ${kind} literal cannot contain its own delimiter`);
18
+ }
19
+ };
20
+ const termText = (term) => {
21
+ if (term.kind !== 'entity' && term.kind !== 'text' && term.kind !== 'code') {
22
+ throw new TypeError('CAVE term kind must be entity, text or code');
23
+ }
24
+ checkLiteral(term.kind, term.text);
25
+ return Claim.formatTerm(term);
26
+ };
27
+ // Letter/underscore-led names exclude numeric/date prefixes and payload syntax.
28
+ // The separate NOT check retains the only bare negation token in this subset.
29
+ const simpleObject = /^[A-Za-z_][A-Za-z0-9_./-]*(?![\s\S])/;
30
+ // This subset cannot contain token separators, literal delimiters, comments or metadata.
31
+ const simpleSubject = /^[A-Za-z0-9_][A-Za-z0-9_./:-]*(?![\s\S])/;
32
+ const subjectText = (subject) => {
33
+ if (subject.kind === 'entity') {
34
+ if (typeof subject.text !== 'string')
35
+ throw new TypeError('CAVE entity subject must be one non-metadata atom');
36
+ if (!simpleSubject.test(subject.text)) {
37
+ const head = Token.splitComment(subject.text).head;
38
+ const tokens = Token.tokenize(head);
39
+ const token = tokens[0];
40
+ if (head !== subject.text || tokens.length !== 1 || token?.kind !== 'word' ||
41
+ token.text !== subject.text || Line.isMetaStart(token)) {
42
+ throw new TypeError('CAVE entity subject must be one non-metadata atom; use a text or code literal');
43
+ }
44
+ }
45
+ }
46
+ return termText(subject);
47
+ };
48
+ const valueText = (value) => {
49
+ checkLiteral(value.kind, value.raw);
50
+ const parsed = value.kind === 'text' ? Value.ofText(value.raw) :
51
+ value.kind === 'code' ? Value.ofCode(value.raw) : Value.parse(value.raw);
52
+ if (value.kind !== parsed.kind || value.approx !== parsed.approx ||
53
+ value.num !== parsed.num || value.from !== parsed.from || value.to !== parsed.to || value.unit !== parsed.unit) {
54
+ throw new TypeError('CAVE value fields must agree with their emitted raw text');
55
+ }
56
+ if (value.kind !== 'text' && value.kind !== 'code') {
57
+ const tokens = Token.tokenize(value.raw);
58
+ if (tokens.length === 0 || tokens.some(token => token.kind !== 'word' || Line.isMetaStart(token)) ||
59
+ tokens.map(token => token.text).join(' ') !== value.raw) {
60
+ throw new TypeError('CAVE unquoted value must retain its text and remain outside metadata; use a text or code literal');
61
+ }
62
+ }
63
+ return Value.format(value);
64
+ };
65
+ const attributeText = (attribute) => {
66
+ const text = `${attribute}:`;
67
+ const head = Token.splitComment(text).head;
68
+ const tokens = Token.tokenize(head), token = tokens[0];
69
+ if (typeof attribute !== 'string' || attribute.length === 0 || head !== text ||
70
+ tokens.length !== 1 || token?.kind !== 'word' || token.text !== text || Line.isMetaStart(token)) {
71
+ throw new TypeError('CAVE attribute name must retain one non-metadata word before its value');
72
+ }
73
+ return text;
74
+ };
12
75
  const payloadText = (payload) => {
13
76
  switch (payload.kind) {
14
77
  case 'relation':
15
- return Claim.formatTerm(payload.object);
78
+ return termText(payload.object);
16
79
  case 'attribute':
17
- return `${payload.attribute}: ${Value.format(payload.value)}`;
80
+ return `${attributeText(payload.attribute)} ${valueText(payload.value)}`;
18
81
  case 'metric':
19
- return Value.format(payload.value);
82
+ return valueText(payload.value);
20
83
  case 'none':
21
84
  return undefined;
85
+ default:
86
+ throw new TypeError('CAVE payload kind must be relation, attribute, metric or none');
22
87
  }
23
88
  };
89
+ const metadataWord = (text) => {
90
+ const head = Token.splitComment(text).head;
91
+ const tokens = Token.tokenize(head), token = tokens[0];
92
+ if (head !== text || tokens.length !== 1 || token?.kind !== 'word' || token.text !== text || text === '@' || text === '#') {
93
+ throw new TypeError('CAVE metadata must retain one nonempty context or tag token');
94
+ }
95
+ return text;
96
+ };
24
97
  const metaText = (claim) => {
98
+ for (const name of ['contexts', 'tags']) {
99
+ if (!Array.isArray(claim[name]))
100
+ throw new TypeError(`CAVE claim ${name} must be an array`);
101
+ }
25
102
  const parts = [];
26
103
  if (claim.delta !== undefined) {
27
- parts.push(`+/- ${Value.format(claim.delta)}`);
104
+ Uncertainty.validateDelta(claim.delta.num);
105
+ parts.push(`+/- ${valueText(claim.delta)}`);
28
106
  }
29
107
  if (claim.sigmaLevel !== undefined) {
30
- parts.push(`(${claim.sigmaLevel}σ)`);
108
+ parts.push(`(${Value.formatNumber(Uncertainty.validateSigmaLevel(claim.sigmaLevel))}σ)`);
31
109
  }
32
110
  for (const context of claim.contexts) {
33
- parts.push(`@${context}`);
111
+ if (typeof context !== 'string')
112
+ throw new TypeError('CAVE context metadata must be a string');
113
+ parts.push(metadataWord(`@${context}`));
34
114
  }
35
115
  for (const tag of claim.tags) {
36
- parts.push(Tag.format(tag));
116
+ const text = metadataWord(Tag.format(tag));
117
+ if (!Tag.equals(Tag.parse(text.slice(1)), tag))
118
+ throw new TypeError('CAVE tag must retain its key and value through emission');
119
+ parts.push(text);
37
120
  }
38
121
  if (claim.conf !== 1) {
39
- parts.push(`@ ${Confidence.format(claim.conf)}`);
122
+ parts.push(`@ ${Confidence.formatExact(claim.conf)}`);
40
123
  }
41
124
  if (claim.importance) {
42
125
  parts.push('!');
43
126
  }
44
127
  return parts;
45
128
  };
129
+ const singleLine = (line) => {
130
+ if (line.includes('\n'))
131
+ throw new TypeError('CAVE claim fields cannot contain a newline; use comment lines for multiline commentary');
132
+ if (/["`;]/.test(line) && Token.splitComment(`${line};`).head !== line) {
133
+ throw new TypeError('CAVE claim fields must not open a comment or leave an unmatched literal delimiter');
134
+ }
135
+ return line;
136
+ };
137
+ const validateFlags = (claim) => {
138
+ for (const name of ['negated', 'importance']) {
139
+ if (typeof claim[name] !== 'boolean')
140
+ throw new TypeError(`CAVE claim ${name} must be a boolean`);
141
+ }
142
+ };
46
143
  /** @returns the canonical claim line without its comment. */
47
144
  const claimLine = (claim) => {
48
- const parts = [Claim.formatTerm(claim.subject), claim.verb];
145
+ validateFlags(claim);
146
+ if (typeof claim.verb !== 'string' || !Verb.isVerbToken(claim.verb))
147
+ throw new TypeError('CAVE claim verb must be an uppercase atom');
148
+ if (claim.payload.kind === 'none' && claim.verb !== 'EXISTS')
149
+ throw new TypeError('CAVE claim requires an object or value payload unless its verb is EXISTS');
150
+ const parts = [subjectText(claim.subject), claim.verb];
49
151
  if (claim.negated) {
50
152
  parts.push('NOT');
51
153
  }
@@ -53,25 +155,56 @@ const claimLine = (claim) => {
53
155
  if (payload !== undefined) {
54
156
  parts.push(payload);
55
157
  }
56
- parts.push(...metaText(claim));
57
- return parts.join(' ');
158
+ for (const metadata of metaText(claim))
159
+ parts.push(metadata);
160
+ const line = singleLine(parts.join(' '));
161
+ if (claim.payload.kind === 'metric' && !['number', 'date', 'trajectory'].includes(claim.payload.value.kind)) {
162
+ throw new TypeError('CAVE metric payload requires a number, date or trajectory; use a relation or attribute for other values');
163
+ }
164
+ if (claim.payload.kind === 'relation' && claim.payload.object.kind === 'entity' &&
165
+ (claim.payload.object.text === 'NOT' || !simpleObject.test(claim.payload.object.text))) {
166
+ const parsed = Line.parseBody(Token.tokenize(`${claim.verb} ${payload}`));
167
+ if (!parsed.ok || parsed.problems.length > 0 || parsed.value.negated ||
168
+ parsed.value.payload.kind !== 'relation' || parsed.value.payload.object.kind !== 'entity' ||
169
+ Entity.normalize(parsed.value.payload.object.text) !== Entity.normalize(claim.payload.object.text)) {
170
+ throw new TypeError('CAVE entity relation object must retain its payload identity; use an explicit value or literal when needed');
171
+ }
172
+ }
173
+ return line;
174
+ };
175
+ const fullClaimLine = (claim) => {
176
+ const line = claimLine(claim);
177
+ if (claim.subject.kind === 'entity' && Verb.isVerbToken(claim.subject.text) &&
178
+ parseDocument(line).lines[0]?.kind !== 'claim')
179
+ return `@claim ${line}`;
180
+ return line;
58
181
  };
59
182
  /**
60
183
  * @returns the canonical text of one claim (no indentation): a single line,
61
184
  * or — when the comment spans several lines (§6.4) — its leading comment
62
185
  * lines above the claim line, the last comment line riding on the claim.
63
186
  */
64
- export const emitClaim = (claim) => Token.joinComment(claimLine(claim), claim.comment);
187
+ export const emitClaim = (claim) => Token.joinComment(fullClaimLine(claim), claim.comment);
65
188
  /**
66
- * @returns the qualifier-payload text of a condition claim. Negation always
67
- * emits as a `NOT` *prefix* — the §8.2 canonical `WHEN NOT x` shape — never
68
- * as the claim-internal `VERB NOT` form: a postfix `NOT` after a symbolic
189
+ * @returns the qualifier-payload text of a condition claim. Negation
190
+ * normally emits as a `NOT` *prefix* — the §8.2 canonical `WHEN NOT x` shape —
191
+ * rather than the claim-internal `VERB NOT` form: a postfix `NOT` after a symbolic
69
192
  * comparison verb (`WHEN cpu >= NOT 900`) would be unreadable to the
70
- * parser and silently invert the condition on round trip.
193
+ * parser and silently invert the condition on round trip. The reserved entity
194
+ * name NOT uses an explicit claim marker for an affirmative condition, as does
195
+ * a condition whose verb is NOT.
71
196
  */
72
197
  const conditionText = (claim) => {
198
+ validateFlags(claim);
199
+ // A leading entity named NOT would be consumed as qualifier negation.
200
+ // An explicit full claim preserves its affirmative reading and also allows
201
+ // NOT in the verb position, which unmarked qualifier parsing excludes.
202
+ if (claim.verb === 'NOT' || (claim.subject.kind === 'entity' && claim.subject.text === 'NOT' && !claim.negated)) {
203
+ const body = `@claim ${claimLine({ ...claim, negated: false })}`;
204
+ return claim.negated ? `NOT ${body}` : body;
205
+ }
73
206
  const body = claim.verb === 'EXISTS' && claim.payload.kind === 'none' ?
74
- [Claim.formatTerm(claim.subject), ...metaText(claim)].join(' ') :
207
+ singleLine([subjectText(claim.subject), ...metaText(claim)].join(' ')) :
75
208
  claimLine({ ...claim, negated: false });
76
209
  return claim.negated ? `NOT ${body}` : body;
77
210
  };
@@ -90,6 +223,8 @@ export const txComment = (tx) => `;@ ${tx}`;
90
223
  * caller validates the id shape.
91
224
  */
92
225
  export const txOfLine = Token.txOfLine;
226
+ /** Optional annotation payload, interpreted by the interchange reader. */
227
+ export const txDataOfLine = Token.txDataOfLine;
93
228
  const tokenText = (token) => {
94
229
  switch (token.kind) {
95
230
  case 'text':
@@ -101,7 +236,7 @@ const tokenText = (token) => {
101
236
  }
102
237
  };
103
238
  const commonPrefixLength = (items) => {
104
- const shortest = Math.min(...items.map(item => item.tokens.length));
239
+ const shortest = items.reduce((minimum, item) => Math.min(minimum, item.tokens.length), Infinity);
105
240
  let length = 0;
106
241
  while (length < shortest &&
107
242
  items.every(item => item.tokens[length] === items[0].tokens[length])) {
@@ -121,17 +256,31 @@ const isIncomplete = (tokens, topLevel) => {
121
256
  return document.lines[document.lines.length - 1].kind === 'invalid';
122
257
  };
123
258
  const emitForest = (forest, depth, topLevel, inherited, lines) => {
124
- let at = 0;
125
- while (at < forest.length) {
259
+ const stack = [{ forest, depth, topLevel, inherited, at: 0, runEnd: 0, canFactor: undefined }];
260
+ while (stack.length > 0) {
261
+ const frame = stack[stack.length - 1];
262
+ const { forest, depth, topLevel, inherited, at } = frame;
263
+ if (at >= forest.length) {
264
+ stack.pop();
265
+ continue;
266
+ }
126
267
  const firstToken = forest[at].tokens[0];
127
- let end = at + 1;
128
- while (end < forest.length && forest[end].tokens[0] === firstToken) {
129
- end += 1;
268
+ if (at >= frame.runEnd) {
269
+ frame.canFactor = undefined;
270
+ frame.runEnd = at + 1;
271
+ while (frame.runEnd < forest.length && forest[frame.runEnd].tokens[0] === firstToken) {
272
+ frame.runEnd += 1;
273
+ }
130
274
  }
131
- const run = forest.slice(at, end);
132
- if (run.length > 1) {
275
+ const end = frame.runEnd;
276
+ // A one-token line cannot lose a prefix and still retain a leaf token.
277
+ // Every suffix shares this first token. If it already completes a claim,
278
+ // none can form a safe header, so avoid copying and scanning each suffix.
279
+ if (end - at > 1 && forest[at].tokens.length > 1 &&
280
+ (frame.canFactor ??= isIncomplete([...inherited, firstToken], topLevel))) {
281
+ const run = forest.slice(at, end);
133
282
  const common = commonPrefixLength(run);
134
- const shortest = Math.min(...run.map(item => item.tokens.length));
283
+ const shortest = run.reduce((minimum, item) => Math.min(minimum, item.tokens.length), Infinity);
135
284
  const maximum = Math.min(common, shortest - 1);
136
285
  let safe = 0;
137
286
  for (let length = 1; length <= maximum; length += 1) {
@@ -144,8 +293,16 @@ const emitForest = (forest, depth, topLevel, inherited, lines) => {
144
293
  if (safe > 0) {
145
294
  const prefix = run[0].tokens.slice(0, safe);
146
295
  lines.push(`${' '.repeat(depth)}${prefix.join(' ')}`);
147
- emitForest(run.map(item => ({ node: item.node, tokens: item.tokens.slice(safe) })), depth + 1, topLevel, [...inherited, ...prefix], lines);
148
- at = end;
296
+ frame.at = end;
297
+ stack.push({
298
+ forest: run.map(item => ({ node: item.node, tokens: item.tokens.slice(safe) })),
299
+ depth: depth + 1,
300
+ topLevel,
301
+ inherited: [...inherited, ...prefix],
302
+ at: 0,
303
+ runEnd: 0,
304
+ canFactor: undefined
305
+ });
149
306
  continue;
150
307
  }
151
308
  }
@@ -155,13 +312,24 @@ const emitForest = (forest, depth, topLevel, inherited, lines) => {
155
312
  // annotation stays the line directly above the claim.
156
313
  const rendered = Token.joinComment(item.tokens.join(' '), item.node.comment).split('\n');
157
314
  const last = rendered.pop();
158
- lines.push(...rendered.map(line => `${indent}${line}`));
315
+ for (const line of rendered)
316
+ lines.push(`${indent}${line}`);
159
317
  if (item.node.annotation !== undefined) {
160
318
  lines.push(`${indent}${item.node.annotation}`);
161
319
  }
162
320
  lines.push(`${indent}${last}`);
163
- emitForest(item.node.children.map(node => ({ node, tokens: node.tokens })), depth + 1, false, [], lines);
164
- at += 1;
321
+ frame.at += 1;
322
+ if (item.node.children.length > 0) {
323
+ stack.push({
324
+ forest: item.node.children.map(node => ({ node, tokens: node.tokens })),
325
+ depth: depth + 1,
326
+ topLevel: false,
327
+ inherited: [],
328
+ at: 0,
329
+ runEnd: 0,
330
+ canFactor: undefined
331
+ });
332
+ }
165
333
  }
166
334
  };
167
335
  /**
@@ -179,9 +347,24 @@ const emitForest = (forest, depth, topLevel, inherited, lines) => {
179
347
  * the re-statement.
180
348
  */
181
349
  export const emit = (result, options = {}) => {
350
+ if (!Array.isArray(result.claims))
351
+ throw new TypeError('CAVE claims must be a dense array');
352
+ for (let index = 0; index < result.claims.length; index++) {
353
+ if (!Object.hasOwn(result.claims, index))
354
+ throw new TypeError('CAVE claims must be a dense array');
355
+ }
182
356
  const childEdges = new Map();
183
357
  const isChild = new Set();
184
- for (const edge of result.edges) {
358
+ for (const { parent, child, role } of result.edges) {
359
+ for (const [field, index] of [['parent', parent], ['child', child]]) {
360
+ if (!Number.isSafeInteger(index) || index < 0 || index >= result.claims.length) {
361
+ throw new TypeError(`CAVE edge ${field} must index an existing claim`);
362
+ }
363
+ }
364
+ if (role !== 'WHEN' && role !== 'VIA' && role !== 'BECAUSE' && role !== 'QUALIFIES') {
365
+ throw new TypeError('CAVE edge role must be WHEN, VIA, BECAUSE or QUALIFIES');
366
+ }
367
+ const edge = { parent, child, role };
185
368
  isChild.add(edge.child);
186
369
  const existing = childEdges.get(edge.parent);
187
370
  if (existing === undefined) {
@@ -193,29 +376,33 @@ export const emit = (result, options = {}) => {
193
376
  }
194
377
  const expanded = new Set();
195
378
  const nodeAt = (index, role) => {
196
- const { claim } = result.claims[index];
197
- const text = role === undefined || role === 'QUALIFIES' ?
198
- claimLine(claim) :
199
- `${role} ${conditionText(claim)}`;
200
- const tokens = Token.tokenize(text).map(tokenText);
201
- const annotation = options.annotate?.(index);
202
- if (expanded.has(index)) {
203
- return {
379
+ const roots = [];
380
+ const pending = [{ index, role, target: roots }];
381
+ while (pending.length > 0) {
382
+ const { index, role, target } = pending.pop();
383
+ const { claim } = result.claims[index];
384
+ const text = role === undefined || role === 'QUALIFIES' ?
385
+ fullClaimLine(claim) : `${role} ${conditionText(claim)}`;
386
+ const tokens = Token.tokenize(text).map(tokenText);
387
+ const annotation = options.annotate?.(index);
388
+ const children = [];
389
+ target.push({
204
390
  index,
205
391
  tokens,
206
392
  ...claim.comment === undefined ? {} : { comment: claim.comment },
207
393
  ...annotation === undefined ? {} : { annotation },
208
- children: []
209
- };
394
+ children
395
+ });
396
+ if (expanded.has(index))
397
+ continue;
398
+ expanded.add(index);
399
+ const edges = childEdges.get(index) ?? [];
400
+ for (let at = edges.length - 1; at >= 0; at--) {
401
+ const edge = edges[at];
402
+ pending.push({ index: edge.child, role: edge.role, target: children });
403
+ }
210
404
  }
211
- expanded.add(index);
212
- return {
213
- index,
214
- tokens,
215
- ...claim.comment === undefined ? {} : { comment: claim.comment },
216
- ...annotation === undefined ? {} : { annotation },
217
- children: (childEdges.get(index) ?? []).map(edge => nodeAt(edge.child, edge.role))
218
- };
405
+ return roots[0];
219
406
  };
220
407
  const forest = [];
221
408
  result.claims.forEach((_, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGvD,MAAM,WAAW,GAAG,CAAC,OAAsB,EAAsB,EAAE;IACjE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACzC,KAAK,WAAW;YACd,OAAO,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAA;QAC/D,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpC,KAAK,MAAM;YACT,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAY,EAAE;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,CAAA;IACtC,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE;IAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAClD,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;AAEpD;;;;;;GAMG;AACH,MAAM,aAAa,GAAG,CAAC,KAAc,EAAU,EAAE;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACrE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAU,EAAE,CAC9C,MAAM,EAAE,EAAE,CAAA;AAEZ;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;AAyBtC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,CAAA;QAC1B,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,CAAC,IAAI,IAAI,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,CAAA;IACrB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,KAA4B,EAAU,EAAE;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IACnE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,OACE,MAAM,GAAG,QAAQ;QACjB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EACrE,CAAC;QACD,MAAM,IAAI,CAAC,CAAA;IACb,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,YAAY,GAAG,CAAC,MAAyB,EAAE,QAAiB,EAAW,EAAE;IAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAA;IACjF,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,KAAK,SAAS,CAAA;AACtE,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CACjB,MAA6B,EAC7B,KAAa,EACb,QAAiB,EACjB,SAA4B,EAC5B,KAAe,EACT,EAAE;IACR,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACxC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;QAChB,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACpE,GAAG,IAAI,CAAC,CAAA;QACV,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACjC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;YAC9C,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;gBACpD,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;gBACpE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACvC,MAAK;gBACP,CAAC;gBACD,IAAI,GAAG,MAAM,CAAA;YACf,CAAC;YACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;gBAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACtD,UAAU,CACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EACvE,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,CAAC,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,EACzB,KAAK,CACN,CAAA;gBACD,EAAE,GAAG,GAAG,CAAA;gBACR,SAAQ;YACV,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAE,CAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,oEAAoE;QACpE,sDAAsD;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAG,CAAA;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QAChD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAA;QAC9B,UAAU,CACR,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAC/D,KAAK,GAAG,CAAC,EACT,KAAK,EACL,EAAE,EACF,KAAK,CACN,CAAA;QACD,EAAE,IAAI,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAqD,EAAE,UAAuB,EAAE,EAAU,EAAE;IAC/G,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAA;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAuC,EAAc,EAAE;QACpF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAE,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC;YACvD,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAClB,GAAG,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAA;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK;gBACL,MAAM;gBACN,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;gBAChE,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE;gBACjD,QAAQ,EAAE,EAAE;aACb,CAAA;QACH,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO;YACL,KAAK;YACL,MAAM;YACN,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAChE,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE;YACjD,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACnF,CAAA;IACH,CAAC,CAAA;IACD,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IACnF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAC1D,CAAC,CAAA"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/emit.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@
17
17
  export * as Registry from './registry.ts';
18
18
  export { canonicalize, canonicalizeText } from './canonicalize.ts';
19
19
  export type { Edge, EdgeRole, Entry, Problem, Result } from './canonicalize.ts';
20
- export { emit, emitClaim, txComment, txOfLine } from './emit.ts';
20
+ export { emit, emitClaim, txComment, txOfLine, txDataOfLine } from './emit.ts';
21
21
  export type { EmitOptions } from './emit.ts';
22
22
  export { standardPrelude, standardRegistry } from './prelude.ts';
23
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAClE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAClE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC9E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
package/dist/src/index.js CHANGED
@@ -16,6 +16,6 @@
16
16
  */
17
17
  export * as Registry from "./registry.js";
18
18
  export { canonicalize, canonicalizeText } from "./canonicalize.js";
19
- export { emit, emitClaim, txComment, txOfLine } from "./emit.js";
19
+ export { emit, emitClaim, txComment, txOfLine, txDataOfLine } from "./emit.js";
20
20
  export { standardPrelude, standardRegistry } from "./prelude.js";
21
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavelang/canonical",
3
- "version": "0.35.0",
3
+ "version": "0.36.0",
4
4
  "type": "module",
5
5
  "description": "CAVE canonicalization — verb lifecycle and inverse registry, continuation expansion, canonical emitter.",
6
6
  "keywords": [
@@ -21,7 +21,7 @@
21
21
  "directory": "packages/canonical"
22
22
  },
23
23
  "engines": {
24
- "node": "^22.18.0 || ^24.0.0 || ^26.0.0"
24
+ "node": "^24.16.0 || ^26.1.0"
25
25
  },
26
26
  "exports": {
27
27
  ".": {
@@ -43,8 +43,8 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@cavelang/core": "0.35.0",
47
- "@cavelang/parser": "0.35.0"
46
+ "@cavelang/core": "0.36.0",
47
+ "@cavelang/parser": "0.36.0"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "tsc -b",
@@ -23,6 +23,7 @@
23
23
  import { Claim, Entity, Value, Verb } from '@cavelang/core'
24
24
  import { parseDocument, type Ast } from '@cavelang/parser'
25
25
  import * as Registry from './registry.ts'
26
+ import { emitClaim } from './emit.ts'
26
27
 
27
28
  /** Edge roles persisted in `cave_edge` (spec §13.2). */
28
29
  export type EdgeRole = 'WHEN' | 'VIA' | 'BECAUSE' | 'QUALIFIES'
@@ -103,6 +104,18 @@ const payloadOfTerm = (term: Claim.Term): Claim.Payload => {
103
104
  return Claim.relation(term)
104
105
  }
105
106
 
107
+ /** Match ordinary claim parsing so comparison emission keeps its payload identity. */
108
+ const comparisonPayload = (value: Value.t): Claim.Payload => {
109
+ switch (value.kind) {
110
+ case 'number':
111
+ case 'date':
112
+ case 'trajectory': return Claim.metric(value)
113
+ case 'text': return Claim.relation(Claim.text(value.raw))
114
+ case 'code': return Claim.relation(Claim.code(value.raw))
115
+ default: return Claim.relation(Claim.entity(Entity.normalize(value.raw)))
116
+ }
117
+ }
118
+
106
119
  const initOf = (meta: Ast.Meta): Partial<Claim.Init> => ({
107
120
  contexts: meta.contexts,
108
121
  tags: meta.tags,
@@ -156,7 +169,14 @@ export const canonicalize = (document: Ast.Document, registry: Registry.t = Regi
156
169
  return { claim, writtenSubject }
157
170
  }
158
171
 
159
- const append = (claim: Claim.t, line: number, writtenSubject: Claim.Term, lineIndex: number): number => {
172
+ const append = (claim: Claim.t, line: number, writtenSubject: Claim.Term, lineIndex: number): number | undefined => {
173
+ try {
174
+ emitClaim(claim)
175
+ } catch (error) {
176
+ if (!(error instanceof TypeError)) throw error
177
+ problem(line, error.message)
178
+ return undefined
179
+ }
160
180
  const index = claims.length
161
181
  claims.push({ claim, line })
162
182
  byLine.set(lineIndex, { index, writtenSubject })
@@ -212,7 +232,7 @@ export const canonicalize = (document: Ast.Document, registry: Registry.t = Regi
212
232
  subject: payload.left,
213
233
  verb: comparisonVerbs[payload.op],
214
234
  negated: payload.negated !== unless,
215
- payload: Claim.metric(payload.value),
235
+ payload: comparisonPayload(payload.value),
216
236
  meta: payload.meta
217
237
  }
218
238
  }
@@ -223,10 +243,13 @@ export const canonicalize = (document: Ast.Document, registry: Registry.t = Regi
223
243
  case 'claim': {
224
244
  const { claim, writtenSubject } = buildClaim(line.claim, line.expanded ?? line.raw, line.line)
225
245
  const index = append(claim, line.line, writtenSubject, lineIndex)
246
+ if (index === undefined) return
226
247
  if (line.parent !== undefined) {
227
248
  const parent = byLine.get(line.parent)
228
249
  if (parent !== undefined) {
229
250
  edges.push({ parent: parent.index, role: 'QUALIFIES', child: index })
251
+ } else {
252
+ problem(line.line, 'grouped claim has no canonicalized parent — keeping the independent claim (spec §8.4)')
230
253
  }
231
254
  }
232
255
  applyDeclarations(claim, line.line)
@@ -240,7 +263,7 @@ export const canonicalize = (document: Ast.Document, registry: Registry.t = Regi
240
263
  }
241
264
  const full: Ast.Full = { subject: parent.writtenSubject, ...line.body }
242
265
  const { claim, writtenSubject } = buildClaim(full, line.expanded ?? line.raw, line.line)
243
- append(claim, line.line, writtenSubject, lineIndex)
266
+ if (append(claim, line.line, writtenSubject, lineIndex) === undefined) return
244
267
  // §8.3: each continuation is an ordinary independent claim, so an
245
268
  // in-band declaration works here exactly as on a full line (§5.4).
246
269
  applyDeclarations(claim, line.line)
@@ -255,6 +278,7 @@ export const canonicalize = (document: Ast.Document, registry: Registry.t = Regi
255
278
  const full = conditionOf(line.payload, line.qualifier === 'UNLESS')
256
279
  const { claim, writtenSubject } = buildClaim(full, line.expanded ?? line.raw, line.line)
257
280
  const index = append(claim, line.line, writtenSubject, lineIndex)
281
+ if (index === undefined) return
258
282
  edges.push({ parent: parent.index, role: roleOf[line.qualifier], child: index })
259
283
  return
260
284
  }