@milehimikey/em 1.7.2 → 1.8.1

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.
Files changed (119) hide show
  1. package/.claude/skills/event-modeling/SKILL.md +92 -65
  2. package/.claude/skills/event-modeling/reference/conform.md +45 -20
  3. package/.claude/skills/event-modeling/reference/em-dsl.md +132 -55
  4. package/.claude/skills/event-modeling/reference/extract.md +5 -4
  5. package/.claude/skills/event-modeling/reference/implement.md +34 -22
  6. package/.claude/skills/event-modeling/templates/model-readme.md +8 -5
  7. package/.claude/skills/event-modeling/templates/slice.md +19 -5
  8. package/README.md +6 -4
  9. package/dist/catalog/docJoin.d.ts +28 -3
  10. package/dist/catalog/docJoin.js +82 -13
  11. package/dist/catalog/docJoin.js.map +1 -1
  12. package/dist/catalog/docModelConsistencyValidate.d.ts +8 -0
  13. package/dist/catalog/docModelConsistencyValidate.js +335 -0
  14. package/dist/catalog/docModelConsistencyValidate.js.map +1 -0
  15. package/dist/catalog/noteBindingValidate.d.ts +8 -0
  16. package/dist/catalog/noteBindingValidate.js +133 -0
  17. package/dist/catalog/noteBindingValidate.js.map +1 -0
  18. package/dist/catalog/pages.js +3 -3
  19. package/dist/catalog/pages.js.map +1 -1
  20. package/dist/catalog/sliceDoc.d.ts +14 -0
  21. package/dist/catalog/sliceDoc.js +22 -0
  22. package/dist/catalog/sliceDoc.js.map +1 -1
  23. package/dist/catalog/sliceReadyValidate.d.ts +18 -0
  24. package/dist/catalog/sliceReadyValidate.js +25 -1
  25. package/dist/catalog/sliceReadyValidate.js.map +1 -1
  26. package/dist/cli/agentsMd.d.ts +15 -0
  27. package/dist/cli/agentsMd.js +72 -0
  28. package/dist/cli/agentsMd.js.map +1 -0
  29. package/dist/cli/conformScope.d.ts +86 -0
  30. package/dist/cli/conformScope.js +156 -0
  31. package/dist/cli/conformScope.js.map +1 -0
  32. package/dist/cli/contract.d.ts +7 -0
  33. package/dist/cli/contract.js +27 -0
  34. package/dist/cli/contract.js.map +1 -0
  35. package/dist/cli/coverage.d.ts +71 -0
  36. package/dist/cli/coverage.js +177 -0
  37. package/dist/cli/coverage.js.map +1 -0
  38. package/dist/cli/markImplemented.d.ts +34 -0
  39. package/dist/cli/markImplemented.js +180 -0
  40. package/dist/cli/markImplemented.js.map +1 -0
  41. package/dist/cli/migrateReactionShape.d.ts +62 -0
  42. package/dist/cli/migrateReactionShape.js +283 -0
  43. package/dist/cli/migrateReactionShape.js.map +1 -0
  44. package/dist/cli/sliceIndex.d.ts +49 -0
  45. package/dist/cli/sliceIndex.js +115 -0
  46. package/dist/cli/sliceIndex.js.map +1 -0
  47. package/dist/cli/sliceNew.d.ts +18 -0
  48. package/dist/cli/sliceNew.js +53 -0
  49. package/dist/cli/sliceNew.js.map +1 -0
  50. package/dist/cli/stateFile.d.ts +74 -0
  51. package/dist/cli/stateFile.js +191 -0
  52. package/dist/cli/stateFile.js.map +1 -0
  53. package/dist/cli.js +535 -43
  54. package/dist/cli.js.map +1 -1
  55. package/dist/emit/coverageJson.d.ts +8 -0
  56. package/dist/emit/coverageJson.js +30 -0
  57. package/dist/emit/coverageJson.js.map +1 -0
  58. package/dist/emit/diffJson.d.ts +9 -1
  59. package/dist/emit/diffJson.js +44 -1
  60. package/dist/emit/diffJson.js.map +1 -1
  61. package/dist/emit/dot.js +41 -10
  62. package/dist/emit/dot.js.map +1 -1
  63. package/dist/emit/json.d.ts +77 -4
  64. package/dist/emit/json.js +78 -4
  65. package/dist/emit/json.js.map +1 -1
  66. package/dist/emit/validateJson.d.ts +52 -0
  67. package/dist/emit/validateJson.js +120 -0
  68. package/dist/emit/validateJson.js.map +1 -0
  69. package/dist/mcp/main.d.ts +2 -0
  70. package/dist/mcp/main.js +20 -0
  71. package/dist/mcp/main.js.map +1 -0
  72. package/dist/mcp/server.d.ts +11 -0
  73. package/dist/mcp/server.js +260 -0
  74. package/dist/mcp/server.js.map +1 -0
  75. package/dist/model/model.d.ts +30 -1
  76. package/dist/model/model.js +26 -0
  77. package/dist/model/model.js.map +1 -1
  78. package/dist/model/rules.d.ts +114 -0
  79. package/dist/model/rules.js +116 -4
  80. package/dist/model/rules.js.map +1 -1
  81. package/dist/model/validate.js +92 -8
  82. package/dist/model/validate.js.map +1 -1
  83. package/dist/parser/ast.d.ts +47 -0
  84. package/dist/parser/lexer.d.ts +16 -0
  85. package/dist/parser/lexer.js +44 -2
  86. package/dist/parser/lexer.js.map +1 -1
  87. package/dist/parser/parser.js +354 -20
  88. package/dist/parser/parser.js.map +1 -1
  89. package/dist/render/drawNotes.d.ts +11 -1
  90. package/dist/render/drawNotes.js +28 -3
  91. package/dist/render/drawNotes.js.map +1 -1
  92. package/dist/render/render.js +116 -23
  93. package/dist/render/render.js.map +1 -1
  94. package/dist/render/serve.d.ts +4 -0
  95. package/dist/render/serve.js +27 -239
  96. package/dist/render/serve.js.map +1 -1
  97. package/dist/render/sliceOverlay.d.ts +7 -2
  98. package/dist/render/sliceOverlay.js +19 -7
  99. package/dist/render/sliceOverlay.js.map +1 -1
  100. package/dist/render/sliceStatus.d.ts +7 -3
  101. package/dist/render/sliceStatus.js +48 -12
  102. package/dist/render/sliceStatus.js.map +1 -1
  103. package/dist/render/viewerHtml.d.ts +1 -0
  104. package/dist/render/viewerHtml.js +5 -0
  105. package/dist/render/viewerHtml.js.map +1 -0
  106. package/dist/render/watch.d.ts +10 -0
  107. package/dist/render/watch.js +29 -0
  108. package/dist/render/watch.js.map +1 -1
  109. package/dist/templates.d.ts +20 -1
  110. package/dist/templates.js +172 -3
  111. package/dist/templates.js.map +1 -1
  112. package/dist/util/markers.d.ts +13 -0
  113. package/dist/util/markers.js +30 -0
  114. package/dist/util/markers.js.map +1 -0
  115. package/dist/util/walkDir.d.ts +10 -1
  116. package/dist/util/walkDir.js +11 -7
  117. package/dist/util/walkDir.js.map +1 -1
  118. package/package.json +12 -3
  119. package/.claude/skills/event-modeling/templates/live.html +0 -117
@@ -16,7 +16,7 @@
16
16
  // arrow <From Element> -> <To Element>
17
17
  // type "Name" { field: Type, ... }
18
18
  import { AUTOMATION_KINDS, } from "./ast.js";
19
- import { decodeQuoted, hasUnterminatedQuote, indexOfUnquoted, lastIndexOfUnquoted, matchQuote, splitQuotedList, stripComment, unquote, } from "./lexer.js";
19
+ import { decodeQuoted, hasUnterminatedQuote, indexOfUnquoted, lastIndexOfUnquoted, matchQuote, splitQuotedList, splitTopLevel, stripComment, unquote, } from "./lexer.js";
20
20
  export class ParseError extends Error {
21
21
  line;
22
22
  constructor(message, line) {
@@ -89,21 +89,54 @@ export function parse(source) {
89
89
  }
90
90
  throw new ParseError("unexpected '}'", lineNo);
91
91
  }
92
- // Inside an open field block: each line is a field declaration.
92
+ // Inside an open field block: each line is a field declaration — except a line that is
93
+ // itself an element-level `tag <key> from …`/`tag <key> external "…` clause, which reads
94
+ // as a standalone `tag` line's canonical position (after the event's closing `}`, MIL-66)
95
+ // and would otherwise be silently swallowed as junk fields (e.g. a bare identifier list
96
+ // parsed as one-field-per-name) with no diagnostic at all.
93
97
  if (currentElement) {
94
- for (const f of parseInlineFields(line))
98
+ if (isTagClauseLineShape(line)) {
99
+ throw new ParseError(currentElement.kind === "event"
100
+ ? "a `tag` clause belongs after the event's closing '}', not inside its field block " +
101
+ "— move this line below the '}'"
102
+ : "`tag` is only valid on event — identity/composite/external tags describe an " +
103
+ `event's DCB tag, not a ${currentElement.kind} field`, lineNo);
104
+ }
105
+ for (const f of parseInlineFields(line, lineNo, currentElement.kind))
95
106
  (currentElement.fields ??= []).push(f);
96
107
  continue;
97
108
  }
98
- // Inside an open `type` block: each line is a field declaration too.
109
+ // Inside an open `type` block: each line is a field declaration too, with the same guard —
110
+ // `tag` is events-only, so a `type` block never has a legal position for it at all.
99
111
  if (currentTypeDecl) {
100
- currentTypeDecl.fields.push(...parseInlineFields(line));
112
+ if (isTagClauseLineShape(line)) {
113
+ throw new ParseError("`tag` is only valid on event — identity/composite/external tags describe an event's " +
114
+ "DCB tag, not a type field", lineNo);
115
+ }
116
+ currentTypeDecl.fields.push(...parseInlineFields(line, lineNo, "type-decl"));
101
117
  continue;
102
118
  }
103
119
  const [keyword, ...rest] = splitFirstWord(line);
104
120
  const remainder = rest.join(" ").trim();
105
- // Inside a slice: only element declarations are allowed.
121
+ // Inside a slice: only element declarations are allowed, plus a standalone `tag ...` line
122
+ // (MIL-66's canonical form), which attaches to the most recently declared element rather
123
+ // than opening one of its own. Checked before the element-keyword gate below since `tag`
124
+ // is not itself an ELEMENT_KEYWORD.
106
125
  if (currentSlice) {
126
+ if (keyword === "tag") {
127
+ const target = currentSlice.elements[currentSlice.elements.length - 1];
128
+ if (!target) {
129
+ throw new ParseError("a standalone `tag` line must follow an event declared earlier in this slice", lineNo);
130
+ }
131
+ if (target.kind !== "event") {
132
+ throw new ParseError(`a standalone \`tag\` line must follow an event — "${target.name}" is a ${target.kind}`, lineNo);
133
+ }
134
+ const leftover = extractTagClauses(target, `tag ${remainder}`, lineNo);
135
+ if (leftover) {
136
+ throw new ParseError(`unrecognized trailing text in 'tag' clause: '${leftover}'`, lineNo);
137
+ }
138
+ continue;
139
+ }
107
140
  if (!ELEMENT_KEYWORDS.has(keyword)) {
108
141
  throw new ParseError(`'${keyword}' is not valid inside a slice (expected ui/command/view/event/automation/processor/saga/translation or '}')`, lineNo);
109
142
  }
@@ -118,7 +151,7 @@ export function parse(source) {
118
151
  const after = remainder.slice(braceAt + 1);
119
152
  const closeAt = indexOfUnquoted(after, "}");
120
153
  const inner = closeAt >= 0 ? after.slice(0, closeAt) : after;
121
- el.fields.push(...parseInlineFields(inner));
154
+ el.fields.push(...parseInlineFields(inner, lineNo, el.kind));
122
155
  if (closeAt < 0) {
123
156
  currentElement = el; // block stays open across lines
124
157
  }
@@ -188,7 +221,7 @@ export function parse(source) {
188
221
  const after = remainder.slice(braceAt + 1);
189
222
  const closeAt = indexOfUnquoted(after, "}");
190
223
  const inner = closeAt >= 0 ? after.slice(0, closeAt) : after;
191
- decl.fields.push(...parseInlineFields(inner));
224
+ decl.fields.push(...parseInlineFields(inner, lineNo, "type-decl"));
192
225
  if (closeAt < 0) {
193
226
  currentTypeDecl = decl; // block stays open across lines
194
227
  }
@@ -226,6 +259,39 @@ function parseElement(kind, raw, line) {
226
259
  throw new ParseError(`${kind} requires a name`, line);
227
260
  return node;
228
261
  }
262
+ /**
263
+ * Pulls a `keyword "A", "B", ...` clause out of `rest`: `keywordPattern` (a regex source
264
+ * fragment, e.g. `renamed\\s+from`) must be immediately followed by an opening quote, then a
265
+ * quoted item, optionally followed by `,` + another quoted item, repeated for as many items as
266
+ * are actually there. Unlike `extractQuotedClause`, this is deliberately NOT greedy to
267
+ * end-of-line: it stops consuming as soon as the text after a closing quote isn't `, "` — so a
268
+ * trailing `@Tag`/`public`/`{ … }` on the same line is left in `rest` for its own clause to
269
+ * find (MIL-68's `renamed from "Old" @Payment { … }` needs the list to end cleanly before
270
+ * `@Payment`). `keywordLabel` is the human-readable name used in the unterminated-string error.
271
+ * Returns `null` if `keywordPattern` isn't immediately followed by a quote (clause absent).
272
+ */
273
+ function extractQuotedListClause(rest, keywordPattern, keywordLabel, line) {
274
+ const kwMatch = rest.match(new RegExp(`(?:^|\\s)${keywordPattern}\\s+(?=")`));
275
+ if (!kwMatch || kwMatch.index === undefined)
276
+ return null;
277
+ let idx = kwMatch.index + kwMatch[0].length;
278
+ const values = [];
279
+ for (;;) {
280
+ const close = matchQuote(rest, idx);
281
+ if (close < 0)
282
+ throw new ParseError(`unterminated string literal in '${keywordLabel}' clause`, line);
283
+ values.push(decodeQuoted(rest.slice(idx + 1, close)));
284
+ idx = close + 1;
285
+ const commaMatch = rest.slice(idx).match(/^\s*,\s*(?=")/);
286
+ if (!commaMatch)
287
+ break;
288
+ idx += commaMatch[0].length;
289
+ }
290
+ return {
291
+ values,
292
+ rest: (rest.slice(0, kwMatch.index) + rest.slice(idx)).trim(),
293
+ };
294
+ }
229
295
  /**
230
296
  * Pulls a `keyword "value"` clause out of `rest`, case-insensitively, honouring
231
297
  * `\"`/`\\` escapes inside the string (decoded in the returned `value`) and a
@@ -288,6 +354,28 @@ function extractClauses(node, raw, line) {
288
354
  node.divergence = divergenceClause.value;
289
355
  rest = divergenceClause.rest;
290
356
  }
357
+ // Element-level `tag` clause(s) (event only, MIL-66): `tag <key> from a, b` (composite) or
358
+ // `tag <key> external "text"` (external). Extracted before `from` below — though the two
359
+ // never actually collide (this `from` is an unquoted bare-identifier list, the view/reaction
360
+ // `from` below requires a quote immediately after — see `extractTagClauses`) — so both belong
361
+ // in this same note/issue/divergence "extract before `from`" cluster. May match more than
362
+ // once: `tag` clauses accumulate, unlike every other clause here.
363
+ rest = extractTagClauses(node, rest, line);
364
+ // `renamed from "Old1", "Old2"` clause (event or command only, MIL-68): the prior name(s)
365
+ // this element was known as, for payload-conversion codegen. Extracted here, before the
366
+ // plain `from` clause below, because `renamed from` itself ends in the word `from` — the
367
+ // general clause's `from\s+(?=")` regex would otherwise match the `from "..."` inside this
368
+ // one's own text. Non-greedy (see `extractQuotedListClause`), so a trailing `@Context`/
369
+ // `public`/`{ … }` on the same header line is untouched. `em diff` deliberately does not
370
+ // read this — it stays remove+add, no-inference (see docs/dsl.md).
371
+ const renamedFromClause = extractQuotedListClause(rest, "renamed\\s+from", "renamed from", line);
372
+ if (renamedFromClause) {
373
+ if (node.kind !== "event" && node.kind !== "command")
374
+ throw new ParseError("`renamed from` is only valid on event or command — only elements with a wire/API " +
375
+ "identity can be renamed", line);
376
+ node.renamedFrom = renamedFromClause.values;
377
+ rest = renamedFromClause.rest;
378
+ }
291
379
  // `from "A", "B"` clause (views and reactions). The keyword is case-sensitive
292
380
  // and its operand must open with a quote, so a capitalized `From` — or a bare
293
381
  // lowercase `from` — inside an element name (`event Widget Removed From
@@ -355,27 +443,273 @@ function extractClauses(node, raw, line) {
355
443
  }
356
444
  return rest;
357
445
  }
358
- /** Parse one field spec: `name` or `name: Type`. Returns null for blanks. */
359
- function parseFieldSpec(raw) {
446
+ /** Bare-identifier grammar shared by every element-level `tag` clause: the composite/external
447
+ * tag key itself, and each field name in a composite tag's field list. */
448
+ const TAG_IDENT = "[A-Za-z_][A-Za-z0-9_]*";
449
+ /** Matches an element-level composite tag clause, `tag <key> from a, b[, c …]`, anywhere in a
450
+ * clause-text string — group 1 is the key, group 2 the raw (still comma-joined) field list.
451
+ * The key is constrained to `TAG_IDENT`, not `\S+`: a quoted or punctuated key (`tag "x" from
452
+ * a, b`, `tag pro-duct from a, b`) must never silently match with the junk folded into the
453
+ * exported key — see `TAG_CLAUSE_LEFTOVER_RE` below. Shared between `extractTagClauses` (which
454
+ * matches anywhere via the `(?:^|\s)` alternation) and `isTagClauseLineShape` (which requires
455
+ * the match to start at index 0) so both recognize the exact same clause shape. */
456
+ const TAG_COMPOSITE_RE = new RegExp(`(?:^|\\s)tag\\s+(${TAG_IDENT})\\s+from\\s+(${TAG_IDENT}(?:\\s*,\\s*${TAG_IDENT})*)`);
457
+ /** Matches an element-level external tag clause, `tag <key> external "…`, anywhere in a
458
+ * clause-text string, up to (not including) the opening quote — same key constraint and
459
+ * sharing rationale as `TAG_COMPOSITE_RE`. */
460
+ const TAG_EXTERNAL_RE = new RegExp(`(?:^|\\s)tag\\s+(${TAG_IDENT})\\s+external\\s+(?=")`);
461
+ /** Catches a malformed tag key — quoted, punctuated, or otherwise not a bare identifier — that
462
+ * `TAG_COMPOSITE_RE`/`TAG_EXTERNAL_RE` deliberately never match, so it would otherwise sit
463
+ * unmentioned in a clause's leftover text (silently folding into the element's free-text name,
464
+ * or surfacing only as a confusing downstream "unrecognized trailing text"). Checked once,
465
+ * after `extractTagClauses`'s extraction loop has taken everything a well-formed clause could
466
+ * give it: anything still shaped like `tag <junk> from …`/`tag <junk> external …` at that point
467
+ * can only be a malformed key. */
468
+ const TAG_CLAUSE_LEFTOVER_RE = /(?:^|\s)tag\s+\S+\s+(?:from\b|external\b)/;
469
+ /** True when `line` — already trimmed, the full text of one field-block line — OPENS with an
470
+ * element-level `tag <key> from …`/`tag <key> external "…` clause shape. Used to reject a
471
+ * standalone element-level tag line written INSIDE an open element/type field block (MIL-66's
472
+ * canonical standalone form only follows the event's closing `}`, at the slice level, or
473
+ * trails an inline block on the same line) instead of silently swallowing it as junk fields.
474
+ * Anchored to the START of `line` — unlike `extractTagClauses`'s `(?:^|\s)` match-anywhere,
475
+ * which is right for scanning trailing clause text — so a field merely NAMED `tag` (bare
476
+ * `tag`, `tag: UUID`) or a field like `tagline: string` never trips this: neither has the
477
+ * clause shape starting at position 0. */
478
+ function isTagClauseLineShape(line) {
479
+ const c = line.match(TAG_COMPOSITE_RE);
480
+ if (c && c.index === 0)
481
+ return true;
482
+ const e = line.match(TAG_EXTERNAL_RE);
483
+ return !!e && e.index === 0;
484
+ }
485
+ /**
486
+ * Pulls every element-level `tag <key> from a, b` (composite) or `tag <key> external "text"`
487
+ * (external) clause out of `raw`, in a loop — `tag` clauses accumulate, unlike every other
488
+ * clause `extractClauses` handles. Applies each to `node.tags` and returns whatever text is
489
+ * left. Events only (event or nothing — same posture as the `public` kind check above); a
490
+ * non-event `node` throws as soon as a `tag` clause is actually found, so an element that
491
+ * merely has "tag" nowhere in its trailing text pays no penalty.
492
+ *
493
+ * Shared by `extractClauses` (the trailing-clause position, on the header line, after an
494
+ * inline `{ … }` block, or on a multi-line block's closing `}` line) and the standalone
495
+ * `tag ...` line handler in `parse()` (which prepends the literal `"tag "` back on before
496
+ * calling this, so both entry points share one matcher/error-message implementation).
497
+ *
498
+ * The composite field list is a bounded bare-identifier grammar (`a`, `a, b`, `a, b, c`, …),
499
+ * not "everything to end of line" the way the quoted `from`/`note`/etc. clauses are — so a
500
+ * `tag` clause never has to be the line's last token; a trailing `public`/`@Context`/etc.
501
+ * simply isn't valid identifier-list syntax and is left for those clauses to find afterward.
502
+ */
503
+ function extractTagClauses(node, raw, line) {
504
+ let rest = raw;
505
+ for (;;) {
506
+ const cMatch = rest.match(TAG_COMPOSITE_RE);
507
+ const eMatch = rest.match(TAG_EXTERNAL_RE);
508
+ let which = null;
509
+ if (cMatch && eMatch)
510
+ which = (cMatch.index ?? 0) <= (eMatch.index ?? 0) ? "composite" : "external";
511
+ else if (cMatch)
512
+ which = "composite";
513
+ else if (eMatch)
514
+ which = "external";
515
+ if (!which)
516
+ break;
517
+ if (node.kind !== "event") {
518
+ throw new ParseError("`tag` is only valid on event — identity/composite/external tags describe an event's " +
519
+ "DCB tag, not a command/view/ui", line);
520
+ }
521
+ if (which === "composite") {
522
+ const m = cMatch;
523
+ const key = m[1];
524
+ const fields = m[2].split(",").map((s) => s.trim());
525
+ if (fields.length < 2)
526
+ throw new ParseError(`tag "${key}": a composite tag needs at least 2 fields (got ${fields.length})`, line);
527
+ (node.tags ??= []).push({ key, kind: "composite", fields, line });
528
+ rest = (rest.slice(0, m.index) + rest.slice((m.index ?? 0) + m[0].length)).trim();
529
+ }
530
+ else {
531
+ const m = eMatch;
532
+ const key = m[1];
533
+ const openIdx = (m.index ?? 0) + m[0].length;
534
+ const closeIdx = matchQuote(rest, openIdx);
535
+ if (closeIdx < 0)
536
+ throw new ParseError(`unterminated string literal in tag "${key}" external clause`, line);
537
+ const description = decodeQuoted(rest.slice(openIdx + 1, closeIdx));
538
+ (node.tags ??= []).push({ key, kind: "external", description, line });
539
+ rest = (rest.slice(0, m.index) + rest.slice(closeIdx + 1)).trim();
540
+ }
541
+ }
542
+ if (TAG_CLAUSE_LEFTOVER_RE.test(rest)) {
543
+ throw new ParseError("a `tag` clause's key must be a bare identifier (letters, digits, underscore) — " +
544
+ "quoted or punctuated keys aren't supported", line);
545
+ }
546
+ return rest;
547
+ }
548
+ /**
549
+ * Pulls recognized trailing clauses off one field spec's raw text (a single comma-separated
550
+ * entry from a `{ … }` block's inner text, BEFORE the `name`/`name: Type` split — a clause
551
+ * trails the type, or the bare name for a typeless field). Returns the leftover text (still to
552
+ * be split on `:`) plus whatever clauses were found.
553
+ *
554
+ * The reusable field-level counterpart to `extractClauses` (element-level) — kept a separate
555
+ * step from the name/type split below so a second field clause slots in as a new case here
556
+ * instead of a restructure. `context` is the enclosing block's element kind (or `"type-decl"`);
557
+ * a clause legal only on certain kinds throws a ParseError naming the actual context, mirroring
558
+ * `extractClauses`'s per-clause kind checks.
559
+ *
560
+ * Anchored as a genuinely TRAILING word requiring non-blank content before it (`/^(.*\S)\s+tag$/`)
561
+ * so a field literally NAMED `tag` (bare `tag`, or `tag: UUID`) is a field declaration, never a
562
+ * clause — the text "tag" alone can't satisfy "something, then whitespace, then tag" against
563
+ * itself. Same discipline `extractClauses` uses for `public`/`again` against a same-named
564
+ * element.
565
+ *
566
+ * Runs as a fixpoint loop over all clauses so `tag`, `renamed from`, and `assigned` may trail a
567
+ * field in ANY order (`paymentId: UUID renamed from "id" tag` and `paymentId: UUID tag renamed
568
+ * from "id"` both work, MIL-68): each pass tries whichever clause hasn't been found yet, and
569
+ * stops once a pass finds nothing new. At most as many passes as there are clauses ever do real
570
+ * work (each clause can only unblock another once), so this never loops meaningfully longer than
571
+ * a fixed clause chain would.
572
+ */
573
+ function extractFieldClauses(raw, line, context) {
574
+ const clauses = {};
575
+ let rest = raw;
576
+ for (;;) {
577
+ let progressed = false;
578
+ if (clauses.tag === undefined) {
579
+ const tagMatch = rest.match(/^(.*\S)\s+tag$/);
580
+ if (tagMatch) {
581
+ if (context !== "event") {
582
+ throw new ParseError("`tag` is only valid on an event field — identity/composite/external tags describe " +
583
+ `an event's DCB tag, not a ${context === "type-decl" ? "type" : context} field`, line);
584
+ }
585
+ clauses.tag = true;
586
+ rest = tagMatch[1];
587
+ progressed = true;
588
+ }
589
+ }
590
+ if (clauses.renamedFrom === undefined) {
591
+ const renamedFromClause = extractQuotedListClause(rest, "renamed\\s+from", "renamed from", line);
592
+ if (renamedFromClause) {
593
+ if (context !== "event" && context !== "command") {
594
+ throw new ParseError("`renamed from` is only valid on an event or command field — only elements with a " +
595
+ `wire/API identity can be renamed, not a ${context === "type-decl" ? "type" : context} field`, line);
596
+ }
597
+ clauses.renamedFrom = renamedFromClause.values;
598
+ rest = renamedFromClause.rest;
599
+ progressed = true;
600
+ }
601
+ }
602
+ if (clauses.assigned === undefined) {
603
+ const assignedMatch = rest.match(/^(.*\S)\s+assigned$/);
604
+ if (assignedMatch) {
605
+ if (context !== "event") {
606
+ throw new ParseError("`assigned` is only valid on an event field — it marks a field the server/handler " +
607
+ `sets, not one the triggering command supplies, so it can't describe a ${context === "type-decl" ? "type" : context} field`, line);
608
+ }
609
+ clauses.assigned = true;
610
+ rest = assignedMatch[1];
611
+ progressed = true;
612
+ }
613
+ }
614
+ if (!progressed)
615
+ break;
616
+ }
617
+ return { rest, clauses };
618
+ }
619
+ /** Parse one field spec: `name` or `name: Type`, plus any trailing field-level clauses
620
+ * (`extractFieldClauses`). Returns null for blanks. */
621
+ function parseFieldSpec(raw, line, context) {
360
622
  const s = raw.trim();
361
623
  if (!s)
362
624
  return null;
363
- const colon = s.indexOf(":");
625
+ const { rest, clauses } = extractFieldClauses(s, line, context);
626
+ const spec = rest.trim();
627
+ if (!spec)
628
+ return null;
629
+ const colon = spec.indexOf(":");
630
+ let field;
364
631
  if (colon >= 0) {
365
- const name = unquote(s.slice(0, colon).trim());
366
- const type = unquote(s.slice(colon + 1).trim());
367
- return name ? { name, ...(type ? { type } : {}) } : null;
632
+ const name = unquote(spec.slice(0, colon).trim());
633
+ const type = unquote(spec.slice(colon + 1).trim());
634
+ field = name ? { name, ...(type ? { type } : {}) } : null;
635
+ }
636
+ else {
637
+ const name = unquote(spec);
638
+ field = name ? { name } : null;
639
+ }
640
+ if (field && clauses.tag)
641
+ field.tag = true;
642
+ if (field && clauses.renamedFrom)
643
+ field.renamedFrom = clauses.renamedFrom;
644
+ if (field && clauses.assigned)
645
+ field.assigned = true;
646
+ return field;
647
+ }
648
+ /** Matches a fragment ending in an in-progress `renamed from` list: `renamed from` followed by
649
+ * one or more quoted items, comma-separated, the LAST one flush against the fragment's end —
650
+ * exactly the shape `splitTopLevel` leaves on the fragment that owns the list once it's split
651
+ * the top-level commas BETWEEN list items apart (see `mergeRenamedFromContinuations`). */
652
+ const RENAMED_FROM_TAIL = /(?:^|\s)renamed\s+from\s+"(?:[^"\\]|\\.)*"(?:\s*,\s*"(?:[^"\\]|\\.)*")*$/;
653
+ /** Matches a fragment that, trimmed, STARTS with a quoted string — capturing that leading
654
+ * quoted span so the caller can inspect what (if anything) follows it (see
655
+ * `mergeRenamedFromContinuations`). */
656
+ const LEADING_QUOTED_STRING = /^"(?:[^"\\]|\\.)*"/;
657
+ /**
658
+ * Re-merges `splitTopLevel`'s fragments across a field-level `renamed from "Old1", "Old2"`
659
+ * list's own internal commas (MIL-68, hazard 4). `splitTopLevel` only treats a comma as
660
+ * literal WHILE INSIDE a single quoted span — the commas BETWEEN two list items are
661
+ * themselves top-level separators, so `{ a: X renamed from "A", "B", b: Y }` splits into
662
+ * THREE raw fragments (`a: X renamed from "A"`, `"B"`, `b: Y`), not two fields. Worse, a
663
+ * continuation fragment need not be JUST the quoted string — `{ paymentId: UUID renamed from
664
+ * "id", "pid" tag }` splits into `paymentId: UUID renamed from "id"` and `"pid" tag`, and that
665
+ * second fragment must fold in WHOLE (quote and trailing ` tag` both) or the ` tag` survives as
666
+ * a fabricated field of its own — a phantom identity tag flowing into the export with no
667
+ * diagnostic.
668
+ *
669
+ * A fragment whose trimmed text STARTS with a quoted string is folded back into the PREVIOUS
670
+ * fragment in full (`prev + ", " + frag`) whenever both (a) that previous fragment's own
671
+ * trailing text is itself an in-progress `renamed from` list, and (b) the text right after the
672
+ * fragment's leading quote is not a `:` (allowing leading whitespace) — otherwise it's left
673
+ * alone. Condition (b) preserves the documented escape hatch: a quoted field name immediately
674
+ * followed by `: Type` (`{ a: X renamed from "A", "B": Type }`) is an ordinary field with a
675
+ * quoted name, not a list continuation, unchanged from pre-MIL-68 behavior. Anything else
676
+ * trailing the quote (a bare quoted field, or trailing clause text like ` tag`) is swept into
677
+ * the list fragment and left for `extractFieldClauses`'s fixpoint loop to sort out — this makes
678
+ * the ambiguous case always resolve to "continuation of the rename list", never "next field
679
+ * (or fields)"; see docs/dsl.md for the two escape hatches (multi-line field blocks, or giving
680
+ * the quoted-name field a type).
681
+ */
682
+ function mergeRenamedFromContinuations(fragments) {
683
+ const merged = [];
684
+ for (const raw of fragments) {
685
+ const trimmed = raw.trim();
686
+ const prev = merged.length > 0 ? merged[merged.length - 1] : undefined;
687
+ const leadingQuote = trimmed.match(LEADING_QUOTED_STRING);
688
+ const afterQuote = leadingQuote ? trimmed.slice(leadingQuote[0].length).trimStart() : undefined;
689
+ if (prev !== undefined &&
690
+ leadingQuote !== null &&
691
+ !afterQuote.startsWith(":") &&
692
+ RENAMED_FROM_TAIL.test(prev)) {
693
+ merged[merged.length - 1] = `${prev}, ${trimmed}`;
694
+ }
695
+ else {
696
+ merged.push(trimmed);
697
+ }
368
698
  }
369
- const name = unquote(s);
370
- return name ? { name } : null;
699
+ return merged;
371
700
  }
372
701
  /** Parse comma-separated field specs from the inner text of a `{ … }` block (or a single
373
702
  * line inside an already-open one). Shared by element field blocks and `type` blocks —
374
- * every field-bearing `{ … }` block in the grammar splits and parses fields the same way. */
375
- function parseInlineFields(inner) {
703
+ * every field-bearing `{ … }` block in the grammar splits and parses fields the same way.
704
+ * The split is quote-aware (`splitTopLevel`, identical to native `.split(",")` when `inner`
705
+ * has no quotes at all) so a field clause carrying a quoted, comma-bearing list (MIL-68's
706
+ * `renamed from "Old1", "Old2"`) isn't broken apart mid-string; `mergeRenamedFromContinuations`
707
+ * then re-joins the fragments the split still leaves apart BETWEEN list items. */
708
+ function parseInlineFields(inner, line, context) {
376
709
  const fields = [];
377
- for (const spec of inner.split(",")) {
378
- const f = parseFieldSpec(spec);
710
+ const fragments = mergeRenamedFromContinuations(splitTopLevel(inner, ","));
711
+ for (const spec of fragments) {
712
+ const f = parseFieldSpec(spec, line, context);
379
713
  if (f)
380
714
  fields.push(f);
381
715
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import { Element, NormalizedModel } from "../model/model.js";
2
2
  import { Rect } from "./svgGeometry.js";
3
- /** Elements carrying a note, in document order. Index + 1 is the footnote number. */
3
+ /**
4
+ * Elements carrying a note, in document order, EXCLUDING an element whose `.note` is its
5
+ * own slice's canonical doc-binding self-reference (`note "slices/<key>.md"` naming this
6
+ * same element's slice — see `catalog/docJoin.ts`'s `NOTE_SLICE_PATH`/`resolveSliceDocJoin`).
7
+ * That's bookkeeping metadata for `em export`/`sliceReadyValidate` to join the element to
8
+ * its slice's design doc, not a real annotation — since MIL-153 the doc itself is directly
9
+ * reachable by clicking the slice in the live view, so flagging it here would just be
10
+ * clutter. A `.note` naming any OTHER path (including a different slice's doc, e.g. a
11
+ * MIL-121 cross-binding) is a genuine note and still renders normally.
12
+ * Index + 1 is the footnote number.
13
+ */
4
14
  export declare function notedElements(model: NormalizedModel): Element[];
5
15
  /** Elements carrying an open issue, in document order. Index + 1 is the footnote number. */
6
16
  export declare function issuedElements(model: NormalizedModel): Element[];
@@ -27,6 +27,13 @@
27
27
  // Marker coordinates come from parseNodeRects (the box coordinate space, inside
28
28
  // Graphviz's transform group). The legend is laid out in the SVG's root/viewBox
29
29
  // space, so it is appended after the diagram and the canvas is grown to fit.
30
+ //
31
+ // MIL-153: a note that's only a slice's own doc-binding self-reference (`note
32
+ // "slices/<key>.md"`, see catalog/docJoin.ts's NOTE_SLICE_PATH) never gets a marker or
33
+ // legend row — see notedElements()'s own comment. Since the live view's slice click
34
+ // (src/render/sliceOverlay.ts) opens that same doc directly, flagging the binding note
35
+ // too would just be clutter.
36
+ import { computeRefs } from "../model/refs.js";
30
37
  const FOLD = 13; // leg length of the dog-ear, in user units
31
38
  const INSET = 5; // pull off the bounding corner so it clears rounded box corners
32
39
  const FILL = "#F4C430"; // sticky-note amber (notes)
@@ -35,9 +42,20 @@ const ISSUE_FILL = "#E53935"; // red sticky (open issues)
35
42
  const ISSUE_STROKE = "#8B0000"; // dark red
36
43
  const DIVERGENCE_FILL = "#26A69A"; // muted teal (accepted divergences — settled, not open)
37
44
  const DIVERGENCE_STROKE = "#00695C"; // dark teal
38
- /** Elements carrying a note, in document order. Index + 1 is the footnote number. */
45
+ /**
46
+ * Elements carrying a note, in document order, EXCLUDING an element whose `.note` is its
47
+ * own slice's canonical doc-binding self-reference (`note "slices/<key>.md"` naming this
48
+ * same element's slice — see `catalog/docJoin.ts`'s `NOTE_SLICE_PATH`/`resolveSliceDocJoin`).
49
+ * That's bookkeeping metadata for `em export`/`sliceReadyValidate` to join the element to
50
+ * its slice's design doc, not a real annotation — since MIL-153 the doc itself is directly
51
+ * reachable by clicking the slice in the live view, so flagging it here would just be
52
+ * clutter. A `.note` naming any OTHER path (including a different slice's doc, e.g. a
53
+ * MIL-121 cross-binding) is a genuine note and still renders normally.
54
+ * Index + 1 is the footnote number.
55
+ */
39
56
  export function notedElements(model) {
40
- return model.elements.filter((el) => el.note);
57
+ const { sliceKeys } = computeRefs(model);
58
+ return model.elements.filter((el) => el.note && el.note !== `slices/${sliceKeys[el.sliceIndex]}.md`);
41
59
  }
42
60
  /** Elements carrying an open issue, in document order. Index + 1 is the footnote number. */
43
61
  export function issuedElements(model) {
@@ -94,7 +112,14 @@ function cornerGlyph(r, num, corner, vAlign, fill, stroke) {
94
112
  const numX = corner === "right" ? foldX - 2 : foldX + 2;
95
113
  const numY = vAlign === "top" ? y + 9 : y - 5;
96
114
  const anchor = corner === "right" ? "end" : "start";
97
- return (`<path d="${tri}" fill="${fill}" stroke="${stroke}" stroke-width="1" stroke-linejoin="round"/>` +
115
+ return (
116
+ // MIL-26 (theming): a white halo behind the triangle, independent of note/issue/
117
+ // divergence color, so the marker reads clearly on every element-kind fill —
118
+ // amber-on-orange (a note on an `event` box) was the specific low-contrast case
119
+ // that motivated this; the halo fixes it for all five box colors at once instead
120
+ // of special-casing that one pairing.
121
+ `<path d="${tri}" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linejoin="round"/>` +
122
+ `<path d="${tri}" fill="${fill}" stroke="${stroke}" stroke-width="1" stroke-linejoin="round"/>` +
98
123
  `<path d="${crease}" fill="none" stroke="${stroke}" stroke-width="0.7"/>` +
99
124
  `<text x="${n(numX)}" y="${n(numY)}" text-anchor="${anchor}" font-family="Helvetica" ` +
100
125
  `font-weight="bold" font-size="10" fill="${stroke}">${num}</text>`);