@primmel/primmel 1.11.1 → 1.12.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.
Files changed (64) hide show
  1. package/dist/src/check-rules.d.ts.map +1 -1
  2. package/dist/src/check-rules.js +29 -0
  3. package/dist/src/check-rules.js.map +1 -1
  4. package/dist/src/check.d.ts.map +1 -1
  5. package/dist/src/check.js +254 -3
  6. package/dist/src/check.js.map +1 -1
  7. package/dist/src/model-diff.d.ts.map +1 -1
  8. package/dist/src/model-diff.js +17 -0
  9. package/dist/src/model-diff.js.map +1 -1
  10. package/dist/src/ser-des/config/documentModule.d.ts +5 -0
  11. package/dist/src/ser-des/config/documentModule.d.ts.map +1 -0
  12. package/dist/src/ser-des/config/documentModule.js +109 -0
  13. package/dist/src/ser-des/config/documentModule.js.map +1 -0
  14. package/dist/src/ser-des/config/index.d.ts.map +1 -1
  15. package/dist/src/ser-des/config/index.js +46 -0
  16. package/dist/src/ser-des/config/index.js.map +1 -1
  17. package/dist/src/ser-des/config/informativeAnnex.d.ts +5 -0
  18. package/dist/src/ser-des/config/informativeAnnex.d.ts.map +1 -0
  19. package/dist/src/ser-des/config/informativeAnnex.js +185 -0
  20. package/dist/src/ser-des/config/informativeAnnex.js.map +1 -0
  21. package/dist/src/ser-des/config/process.d.ts.map +1 -1
  22. package/dist/src/ser-des/config/process.js +369 -3
  23. package/dist/src/ser-des/config/process.js.map +1 -1
  24. package/dist/src/ser-des/config/processModel.d.ts +13 -0
  25. package/dist/src/ser-des/config/processModel.d.ts.map +1 -0
  26. package/dist/src/ser-des/config/processModel.js +163 -0
  27. package/dist/src/ser-des/config/processModel.js.map +1 -0
  28. package/dist/src/ser-des/config/schemeType.d.ts +7 -0
  29. package/dist/src/ser-des/config/schemeType.d.ts.map +1 -0
  30. package/dist/src/ser-des/config/schemeType.js +232 -0
  31. package/dist/src/ser-des/config/schemeType.js.map +1 -0
  32. package/dist/src/ser-des/package.d.ts.map +1 -1
  33. package/dist/src/ser-des/package.js +31 -8
  34. package/dist/src/ser-des/package.js.map +1 -1
  35. package/dist/src/ser-des/parse.d.ts.map +1 -1
  36. package/dist/src/ser-des/parse.js +8 -0
  37. package/dist/src/ser-des/parse.js.map +1 -1
  38. package/dist/src/ser-des/types.d.ts +12 -0
  39. package/dist/src/ser-des/types.d.ts.map +1 -1
  40. package/dist/src/types/DocumentModule.d.ts +27 -0
  41. package/dist/src/types/DocumentModule.d.ts.map +1 -0
  42. package/dist/src/types/DocumentModule.js +38 -0
  43. package/dist/src/types/DocumentModule.js.map +1 -0
  44. package/dist/src/types/InformativeAnnex.d.ts +44 -0
  45. package/dist/src/types/InformativeAnnex.d.ts.map +1 -0
  46. package/dist/src/types/InformativeAnnex.js +35 -0
  47. package/dist/src/types/InformativeAnnex.js.map +1 -0
  48. package/dist/src/types/Package.d.ts +7 -3
  49. package/dist/src/types/Package.d.ts.map +1 -1
  50. package/dist/src/types/ProcessModel.d.ts +27 -0
  51. package/dist/src/types/ProcessModel.d.ts.map +1 -0
  52. package/dist/src/types/ProcessModel.js +31 -0
  53. package/dist/src/types/ProcessModel.js.map +1 -0
  54. package/dist/src/types/SchemeType.d.ts +51 -0
  55. package/dist/src/types/SchemeType.d.ts.map +1 -0
  56. package/dist/src/types/SchemeType.js +41 -0
  57. package/dist/src/types/SchemeType.js.map +1 -0
  58. package/dist/src/types/Standard.d.ts +16 -0
  59. package/dist/src/types/Standard.d.ts.map +1 -1
  60. package/dist/src/types/process.d.ts +99 -1
  61. package/dist/src/types/process.d.ts.map +1 -1
  62. package/dist-browser/index.mjs +1448 -984
  63. package/dist-cli/primmel.mjs +1311 -119
  64. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────
3
+ // `informative_annex` construct (smart TODO.roadmap/40 batch 2; the
4
+ // packages-as-SSOT epic) — a guidance document bound into a document
5
+ // module (types/InformativeAnnex.ts carries the banner and the grammar
6
+ // sketch).
7
+ //
8
+ // `highlight <id> { … }` is a two-token facet (the id, then the block),
9
+ // so it claims through peek/value manually. The document role vocabulary
10
+ // is parse-enforced (the fail-closed precedent) — single-valued today
11
+ // (informative), expected to grow.
12
+ // ─────────────────────────────────────────────────────────────────────
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.dumpInformativeAnnex = exports.parseInformativeAnnex = void 0;
15
+ const tokenize_1 = require("../tokenize");
16
+ const parse_block_1 = require("../parse-block");
17
+ const field_parser_1 = require("./field-parser");
18
+ const ANNEX_DOCUMENT_ROLES = ['informative'];
19
+ function parseAnnexDocument(block, annexId) {
20
+ const doc = {
21
+ id: '',
22
+ title: '',
23
+ edition: 0,
24
+ year: 0,
25
+ role: '',
26
+ source: '',
27
+ };
28
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
29
+ if (keyword === 'id') {
30
+ doc.id = (0, tokenize_1.stripWrapping)(value());
31
+ }
32
+ else if (keyword === 'title') {
33
+ doc.title = (0, tokenize_1.stripWrapping)(value());
34
+ }
35
+ else if (keyword === 'edition') {
36
+ doc.edition = parseInt((0, tokenize_1.stripWrapping)(value()), 10) || 0;
37
+ }
38
+ else if (keyword === 'year') {
39
+ doc.year = parseInt((0, tokenize_1.stripWrapping)(value()), 10) || 0;
40
+ }
41
+ else if (keyword === 'role') {
42
+ const role = (0, tokenize_1.stripWrapping)(value());
43
+ if (!ANNEX_DOCUMENT_ROLES.includes(role)) {
44
+ throw new Error(`Parsing error: informative_annex. ID ${annexId}: Unknown document role "${role}" (valid: ${ANNEX_DOCUMENT_ROLES.join(', ')})`);
45
+ }
46
+ doc.role = role;
47
+ }
48
+ else if (keyword === 'source') {
49
+ doc.source = (0, tokenize_1.stripWrapping)(value());
50
+ }
51
+ else {
52
+ return false;
53
+ }
54
+ return true;
55
+ }, { construct: 'informative_annex document', id: annexId });
56
+ return doc;
57
+ }
58
+ function parseAnnexHighlight(id, block) {
59
+ const highlight = {
60
+ id,
61
+ clause: '',
62
+ title: '',
63
+ statement: '',
64
+ dischargedBy: '',
65
+ };
66
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
67
+ if (keyword === 'clause') {
68
+ highlight.clause = (0, tokenize_1.stripWrapping)(value());
69
+ }
70
+ else if (keyword === 'title') {
71
+ highlight.title = (0, tokenize_1.stripWrapping)(value());
72
+ }
73
+ else if (keyword === 'statement') {
74
+ highlight.statement = (0, tokenize_1.stripWrapping)(value());
75
+ }
76
+ else if (keyword === 'discharged_by') {
77
+ highlight.dischargedBy = (0, tokenize_1.stripWrapping)(value());
78
+ }
79
+ else {
80
+ return false;
81
+ }
82
+ return true;
83
+ }, { construct: 'informative_annex highlight', id });
84
+ return highlight;
85
+ }
86
+ const parseInformativeAnnex = (id, data) => {
87
+ const annex = {
88
+ id,
89
+ document: { id: '', title: '', edition: 0, year: 0, role: '', source: '' },
90
+ appliesTo: '',
91
+ appliedBy: '',
92
+ scope: '',
93
+ numberingCaution: '',
94
+ highlights: [],
95
+ };
96
+ (0, parse_block_1.forEachEntry)(data, (keyword, value, peek) => {
97
+ if (keyword === 'document') {
98
+ annex.document = parseAnnexDocument((0, tokenize_1.unwrapBlock)(value()), id);
99
+ }
100
+ else if (keyword === 'applies_to') {
101
+ annex.appliesTo = (0, tokenize_1.stripWrapping)(value());
102
+ }
103
+ else if (keyword === 'applied_by') {
104
+ annex.appliedBy = (0, tokenize_1.stripWrapping)(value());
105
+ }
106
+ else if (keyword === 'scope') {
107
+ annex.scope = (0, tokenize_1.stripWrapping)(value());
108
+ }
109
+ else if (keyword === 'numbering_caution') {
110
+ annex.numberingCaution = (0, tokenize_1.stripWrapping)(value());
111
+ }
112
+ else if (keyword === 'highlight') {
113
+ const hlId = (0, tokenize_1.stripWrapping)(value());
114
+ const head = peek();
115
+ if (head === undefined || !head.startsWith('{')) {
116
+ throw new Error(`Parsing error: informative_annex. ID ${id}: highlight ${hlId} is missing its block`);
117
+ }
118
+ annex.highlights.push(parseAnnexHighlight(hlId, (0, tokenize_1.unwrapBlock)(value())));
119
+ }
120
+ else {
121
+ return false;
122
+ }
123
+ return true;
124
+ }, { construct: 'informative_annex', id });
125
+ return ctx => {
126
+ ctx.informativeAnnexes[id] = annex;
127
+ return ctx;
128
+ };
129
+ };
130
+ exports.parseInformativeAnnex = parseInformativeAnnex;
131
+ const dumpInformativeAnnex = function (a) {
132
+ let out = 'informative_annex ' + a.id + ' {\n';
133
+ out += ' document {\n';
134
+ if (a.document.id) {
135
+ out += ' id "' + (0, tokenize_1.escapeString)(a.document.id) + '"\n';
136
+ }
137
+ if (a.document.title) {
138
+ out += ' title "' + (0, tokenize_1.escapeString)(a.document.title) + '"\n';
139
+ }
140
+ if (a.document.edition) {
141
+ out += ' edition ' + a.document.edition + '\n';
142
+ }
143
+ if (a.document.year) {
144
+ out += ' year ' + a.document.year + '\n';
145
+ }
146
+ if (a.document.role) {
147
+ out += ' role ' + (0, field_parser_1.dumpBareSafe)(a.document.role) + '\n';
148
+ }
149
+ if (a.document.source) {
150
+ out += ' source "' + (0, tokenize_1.escapeString)(a.document.source) + '"\n';
151
+ }
152
+ out += ' }\n';
153
+ if (a.appliesTo) {
154
+ out += ' applies_to ' + (0, field_parser_1.dumpBareSafe)(a.appliesTo) + '\n';
155
+ }
156
+ if (a.appliedBy) {
157
+ out += ' applied_by "' + (0, tokenize_1.escapeString)(a.appliedBy) + '"\n';
158
+ }
159
+ if (a.scope) {
160
+ out += ' scope "' + (0, tokenize_1.escapeString)(a.scope) + '"\n';
161
+ }
162
+ if (a.numberingCaution) {
163
+ out += ' numbering_caution "' + (0, tokenize_1.escapeString)(a.numberingCaution) + '"\n';
164
+ }
165
+ for (const h of a.highlights) {
166
+ out += ' highlight ' + (0, field_parser_1.dumpBareSafe)(h.id) + ' {\n';
167
+ if (h.clause) {
168
+ out += ' clause "' + (0, tokenize_1.escapeString)(h.clause) + '"\n';
169
+ }
170
+ if (h.title) {
171
+ out += ' title "' + (0, tokenize_1.escapeString)(h.title) + '"\n';
172
+ }
173
+ if (h.statement) {
174
+ out += ' statement "' + (0, tokenize_1.escapeString)(h.statement) + '"\n';
175
+ }
176
+ if (h.dischargedBy) {
177
+ out += ' discharged_by "' + (0, tokenize_1.escapeString)(h.dischargedBy) + '"\n';
178
+ }
179
+ out += ' }\n';
180
+ }
181
+ out += '}\n';
182
+ return out;
183
+ };
184
+ exports.dumpInformativeAnnex = dumpInformativeAnnex;
185
+ //# sourceMappingURL=informativeAnnex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"informativeAnnex.js","sourceRoot":"","sources":["../../../../src/ser-des/config/informativeAnnex.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/process.ts"],"names":[],"mappings":"AA8GA,OAAO,OAAO,EAAE,EAQd,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAkC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AA4gB5C,eAAO,MAAM,YAAY,EAAE,MAsL1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CA2C/D,CAAC;AASF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,UAAQ,GACb,MAAM,CAeR;AA0GD,eAAO,MAAM,WAAW,EAAE,CACxB,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACvB,MAyJJ,CAAC"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/ser-des/config/process.ts"],"names":[],"mappings":"AAsJA,OAAO,OAAO,EAAE,EAYd,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAkC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AA+qB5C,eAAO,MAAM,YAAY,EAAE,MA+O1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CA2C/D,CAAC;AASF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,UAAQ,GACb,MAAM,CAeR;AA0GD,eAAO,MAAM,WAAW,EAAE,CACxB,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACvB,MA8PJ,CAAC"}
@@ -107,6 +107,46 @@
107
107
  // hand), never roles — a scheme may bind one role to evaluation, review
108
108
  // AND decision, so the norms quantify over process involvement. C59
109
109
  // (segregation-members-resolve) checks declaration well-formedness.
110
+ //
111
+ // The abstract-process model (smart TODO.roadmap/40 batch 2; the
112
+ // packages-as-SSOT epic — the OIML-CS / CASCO evaluation pipelines) adds
113
+ // the framework-binding facets:
114
+ //
115
+ // process ia_application {
116
+ // name "IA application"
117
+ // summary "The manufacturer … applies to an OIML Issuing Authority …"
118
+ // executor actor
119
+ // roles { applicant } # the role binding list —
120
+ // # DISTINCT from executor
121
+ // organs { management_committee } # → governance_organ (C121)
122
+ // participant_kinds { issuing_authority } # → participant_kind
123
+ // signature { in { } out { applications } } # bare name = untyped
124
+ // # entity-store reference
125
+ // evidence {
126
+ // application_record { description "…" required true }
127
+ // }
128
+ // decision { rule mc_80_vote clause "PD-03, 5.3.2" }
129
+ // declaration { kind issuing_authority_declaration action sign }
130
+ // discharges_gate declaration-signed-before-issuance
131
+ // realized_by { submit_application } # documentary
132
+ // approved_by { ia_accept_application }# documentary
133
+ // windows {
134
+ // window lodging_window {
135
+ // kind max_elapsed # max_elapsed | min_elapsed
136
+ // clause "PD-01, 8.2/8.3"
137
+ // anchor informed_at
138
+ // applies_to lodged_at
139
+ // window { months 1 } # the scheme_lifecycle window
140
+ // # duration sub-grammar
141
+ // breach rule_inadmissible # optional
142
+ // description "…"
143
+ // }
144
+ // }
145
+ // }
146
+ //
147
+ // The cross-references resolve at check time, per-register gated (C121
148
+ // abstract-process-references-resolve, the C58 doctrine); the codec stays
149
+ // total.
110
150
  // ─────────────────────────────────────────────────────────────────────
111
151
  Object.defineProperty(exports, "__esModule", { value: true });
112
152
  exports.dumpProcess = exports.resolveProcess = exports.parseProcess = void 0;
@@ -148,15 +188,25 @@ function parseParamList(block, allowInitial = false) {
148
188
  const t = (0, tokenize_1.default)(block);
149
189
  let i = 0;
150
190
  while (i < t.length) {
151
- const name = (0, field_parser_1.stripColon)(t[i++]);
191
+ const head = t[i++];
192
+ const name = (0, field_parser_1.stripColon)(head);
152
193
  if (!name) {
153
194
  break;
154
195
  }
155
- let type = '';
196
+ // The type token is OPTIONAL (smart TODO.roadmap/40 batch 2): a bare
197
+ // name is an untyped entity-store reference — the abstract-process
198
+ // model's signatures quantify over record stores (`in { applications
199
+ // }`), not quantity kinds. A type is read only when a colon marker
200
+ // was present — attached (`name:`) or separate (`name : type`);
201
+ // without one the next token is the next ENTRY's head, never this
202
+ // entry's type.
203
+ let typed = head.endsWith(':');
156
204
  if (i < t.length && t[i] === ':') {
205
+ typed = true;
157
206
  i++;
158
207
  }
159
- if (i < t.length) {
208
+ let type = '';
209
+ if (typed && i < t.length) {
160
210
  type = (0, tokenize_1.stripWrapping)(t[i++]);
161
211
  }
162
212
  const param = { name, type };
@@ -346,6 +396,153 @@ function parseSegregation(block) {
346
396
  }
347
397
  return out;
348
398
  }
399
+ /**
400
+ * Evidence-record slots (smart TODO.roadmap/40 batch 2): `<id> { … }`
401
+ * entries of an `evidence { … }` block — the records a run of the
402
+ * abstract process must produce into the evidence store.
403
+ */
404
+ function parseProcessEvidence(block) {
405
+ const out = [];
406
+ const t = (0, tokenize_1.default)(block);
407
+ let i = 0;
408
+ while (i < t.length) {
409
+ const eid = (0, tokenize_1.stripWrapping)(t[i++]);
410
+ if (!eid) {
411
+ break;
412
+ }
413
+ const entry = { id: eid, description: '', required: false };
414
+ if (i < t.length && t[i].startsWith('{')) {
415
+ (0, parse_block_1.forEachEntry)((0, tokenize_1.unwrapBlock)(t[i++]), (keyword, value) => {
416
+ if (keyword === 'description') {
417
+ entry.description = (0, tokenize_1.stripWrapping)(value());
418
+ }
419
+ else if (keyword === 'required') {
420
+ entry.required = (0, tokenize_1.stripWrapping)(value()) === 'true';
421
+ }
422
+ else {
423
+ return false;
424
+ }
425
+ return true;
426
+ }, { construct: 'process evidence', id: eid });
427
+ }
428
+ out.push(entry);
429
+ }
430
+ return out;
431
+ }
432
+ /**
433
+ * The decision facet (smart TODO.roadmap/40 batch 2):
434
+ * `decision { rule <decision_rule-id> clause "…" }`.
435
+ */
436
+ function parseProcessDecision(block) {
437
+ const decision = { rule: '', clause: '' };
438
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
439
+ if (keyword === 'rule') {
440
+ decision.rule = (0, tokenize_1.stripWrapping)(value());
441
+ }
442
+ else if (keyword === 'clause') {
443
+ decision.clause = (0, tokenize_1.stripWrapping)(value());
444
+ }
445
+ else {
446
+ return false;
447
+ }
448
+ return true;
449
+ }, { construct: 'process decision', id: '' });
450
+ return decision;
451
+ }
452
+ /**
453
+ * The declaration facet (smart TODO.roadmap/40 batch 2):
454
+ * `declaration { kind <declaration_kind-id> action sign|update }`. The
455
+ * action vocabulary is check-time (C121) — the codec stays total.
456
+ */
457
+ function parseProcessDeclaration(block) {
458
+ const declaration = { kind: '', action: '' };
459
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
460
+ if (keyword === 'kind') {
461
+ declaration.kind = (0, tokenize_1.stripWrapping)(value());
462
+ }
463
+ else if (keyword === 'action') {
464
+ declaration.action = (0, tokenize_1.stripWrapping)(value());
465
+ }
466
+ else {
467
+ return false;
468
+ }
469
+ return true;
470
+ }, { construct: 'process declaration', id: '' });
471
+ return declaration;
472
+ }
473
+ /**
474
+ * The calendar windows (smart TODO.roadmap/40 batch 2): `window <id>
475
+ * { … }` entries of a `windows { … }` block. The duration reuses the
476
+ * scheme_lifecycle window sub-grammar — `window { years 2 }` /
477
+ * `window { months 1 }` (config/scheme.ts parseTrigger); the shape
478
+ * discipline (kind vocabulary, exactly one of years/months) is
479
+ * check-time (C121).
480
+ */
481
+ function parseProcessWindows(block) {
482
+ const out = [];
483
+ const t = (0, tokenize_1.default)(block);
484
+ let i = 0;
485
+ while (i < t.length) {
486
+ const cmd = t[i++];
487
+ if (cmd !== 'window') {
488
+ i = skipUnknownEntry(t, i);
489
+ continue;
490
+ }
491
+ const wid = (0, tokenize_1.stripWrapping)(t[i++]);
492
+ const entry = {
493
+ id: wid,
494
+ kind: '',
495
+ clause: '',
496
+ anchor: '',
497
+ applies_to: '',
498
+ windowYears: 0,
499
+ windowMonths: 0,
500
+ breach: '',
501
+ description: '',
502
+ };
503
+ if (i < t.length && t[i].startsWith('{')) {
504
+ (0, parse_block_1.forEachEntry)((0, tokenize_1.unwrapBlock)(t[i++]), (keyword, value) => {
505
+ if (keyword === 'kind') {
506
+ entry.kind = (0, tokenize_1.stripWrapping)(value());
507
+ }
508
+ else if (keyword === 'clause') {
509
+ entry.clause = (0, tokenize_1.stripWrapping)(value());
510
+ }
511
+ else if (keyword === 'anchor') {
512
+ entry.anchor = (0, tokenize_1.stripWrapping)(value());
513
+ }
514
+ else if (keyword === 'applies_to') {
515
+ entry.applies_to = (0, tokenize_1.stripWrapping)(value());
516
+ }
517
+ else if (keyword === 'window') {
518
+ const wt = (0, tokenize_1.tokenizePackage)((0, tokenize_1.unwrapBlock)(value()));
519
+ for (let k = 0; k + 1 < wt.length; k += 2) {
520
+ if (wt[k] === 'years') {
521
+ entry.windowYears =
522
+ parseInt((0, tokenize_1.stripWrapping)(wt[k + 1]), 10) || 0;
523
+ }
524
+ else if (wt[k] === 'months') {
525
+ entry.windowMonths =
526
+ parseInt((0, tokenize_1.stripWrapping)(wt[k + 1]), 10) || 0;
527
+ }
528
+ }
529
+ }
530
+ else if (keyword === 'breach') {
531
+ entry.breach = (0, tokenize_1.stripWrapping)(value());
532
+ }
533
+ else if (keyword === 'description') {
534
+ entry.description = (0, tokenize_1.stripWrapping)(value());
535
+ }
536
+ else {
537
+ return false;
538
+ }
539
+ return true;
540
+ }, { construct: 'process window', id: wid });
541
+ }
542
+ out.push(entry);
543
+ }
544
+ return out;
545
+ }
349
546
  /** Per-classification instances: `by <dimension> values { V { k: n } … }`. */ function parseProcessInstances(block) {
350
547
  const out = { by: '', values: {} };
351
548
  const t = (0, tokenize_1.default)(block);
@@ -641,6 +838,18 @@ const parseProcess = function (id, data) {
641
838
  instances: null,
642
839
  childComposition: 'all',
643
840
  does: null,
841
+ // The abstract-process model (smart TODO.roadmap/40 batch 2)
842
+ summary: '',
843
+ roles: [],
844
+ organs: [],
845
+ participantKinds: [],
846
+ evidence: [],
847
+ decision: null,
848
+ declaration: null,
849
+ dischargesGate: '',
850
+ realizedBy: [],
851
+ approvedBy: [],
852
+ windows: [],
644
853
  source: null,
645
854
  provisionRefs: [],
646
855
  _relations: {
@@ -742,6 +951,62 @@ const parseProcess = function (id, data) {
742
951
  .map(tokenize_1.stripWrapping)
743
952
  .filter(s => s.length > 0);
744
953
  }
954
+ else if (keyword === 'summary') {
955
+ // The abstract-process model (smart TODO.roadmap/40 batch 2).
956
+ result.summary = (0, parse_block_1.unwrapped)(value);
957
+ }
958
+ else if (keyword === 'roles') {
959
+ // roles { applicant … } — the role binding list; kept DISTINCT
960
+ // from `executor` (the typing token) — never collapsed.
961
+ result.roles = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
962
+ .map(field_parser_1.stripColon)
963
+ .map(tokenize_1.stripWrapping)
964
+ .filter(s => s.length > 0);
965
+ }
966
+ else if (keyword === 'organs') {
967
+ result.organs = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
968
+ .map(field_parser_1.stripColon)
969
+ .map(tokenize_1.stripWrapping)
970
+ .filter(s => s.length > 0);
971
+ }
972
+ else if (keyword === 'participant_kinds') {
973
+ result.participantKinds = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
974
+ .map(field_parser_1.stripColon)
975
+ .map(tokenize_1.stripWrapping)
976
+ .filter(s => s.length > 0);
977
+ }
978
+ else if (keyword === 'evidence') {
979
+ // evidence { <id> { description "…" required true } … }
980
+ result.evidence = parseProcessEvidence((0, tokenize_1.unwrapBlock)(value()));
981
+ }
982
+ else if (keyword === 'decision') {
983
+ // decision { rule <decision_rule-id> clause "…" }
984
+ result.decision = parseProcessDecision((0, tokenize_1.unwrapBlock)(value()));
985
+ }
986
+ else if (keyword === 'declaration') {
987
+ // declaration { kind <declaration_kind-id> action sign|update }
988
+ result.declaration = parseProcessDeclaration((0, tokenize_1.unwrapBlock)(value()));
989
+ }
990
+ else if (keyword === 'discharges_gate') {
991
+ result.dischargesGate = (0, tokenize_1.stripWrapping)(value());
992
+ }
993
+ else if (keyword === 'realized_by') {
994
+ result.realizedBy = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
995
+ .map(field_parser_1.stripColon)
996
+ .map(tokenize_1.stripWrapping)
997
+ .filter(s => s.length > 0);
998
+ }
999
+ else if (keyword === 'approved_by') {
1000
+ result.approvedBy = (0, tokenize_1.default)((0, tokenize_1.stripWrapping)(value()))
1001
+ .map(field_parser_1.stripColon)
1002
+ .map(tokenize_1.stripWrapping)
1003
+ .filter(s => s.length > 0);
1004
+ }
1005
+ else if (keyword === 'windows') {
1006
+ // windows { window <id> { … } … } — the calendar windows, reusing
1007
+ // the scheme_lifecycle window duration sub-grammar.
1008
+ result.windows = parseProcessWindows((0, tokenize_1.unwrapBlock)(value()));
1009
+ }
745
1010
  else if (keyword === 'segregation') {
746
1011
  // segregation { constraint <id> { … } … } — ISO/IEC 17065 role
747
1012
  // segregation (TODO.roadmap/39b; C59).
@@ -974,6 +1239,9 @@ function dumpDoes(flow) {
974
1239
  const dumpProcess = function (process, ctx) {
975
1240
  let out = 'process ' + process.id + ' {\n';
976
1241
  out += ' name "' + (0, tokenize_1.escapeString)(process.name) + '"\n';
1242
+ if (process.summary) {
1243
+ out += ' summary "' + (0, tokenize_1.escapeString)(process.summary) + '"\n';
1244
+ }
977
1245
  if (process.actor !== null) {
978
1246
  out += ' actor ' + process.actor.id + '\n';
979
1247
  }
@@ -1028,6 +1296,104 @@ const dumpProcess = function (process, ctx) {
1028
1296
  process.activityKinds.map(field_parser_1.dumpBareSafe).join(' ') +
1029
1297
  ' }\n';
1030
1298
  }
1299
+ // ── The abstract-process model (smart TODO.roadmap/40 batch 2) ──
1300
+ if (process.roles && process.roles.length > 0) {
1301
+ out += ' roles { ' + process.roles.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
1302
+ }
1303
+ if (process.organs && process.organs.length > 0) {
1304
+ out += ' organs { ' + process.organs.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
1305
+ }
1306
+ if (process.participantKinds && process.participantKinds.length > 0) {
1307
+ out +=
1308
+ ' participant_kinds { ' +
1309
+ process.participantKinds.map(field_parser_1.dumpBareSafe).join(' ') +
1310
+ ' }\n';
1311
+ }
1312
+ if (process.evidence && process.evidence.length > 0) {
1313
+ out += ' evidence {\n';
1314
+ for (const e of process.evidence) {
1315
+ out += ' ' + (0, field_parser_1.dumpBareSafe)(e.id) + ' {';
1316
+ if (e.description) {
1317
+ out += ' description "' + (0, tokenize_1.escapeString)(e.description) + '"';
1318
+ }
1319
+ if (e.required) {
1320
+ out += ' required true';
1321
+ }
1322
+ out += ' }\n';
1323
+ }
1324
+ out += ' }\n';
1325
+ }
1326
+ if (process.decision) {
1327
+ out += ' decision {';
1328
+ if (process.decision.rule) {
1329
+ out += ' rule ' + (0, field_parser_1.dumpBareSafe)(process.decision.rule);
1330
+ }
1331
+ if (process.decision.clause) {
1332
+ out += ' clause "' + (0, tokenize_1.escapeString)(process.decision.clause) + '"';
1333
+ }
1334
+ out += ' }\n';
1335
+ }
1336
+ if (process.declaration) {
1337
+ out += ' declaration {';
1338
+ if (process.declaration.kind) {
1339
+ out += ' kind ' + (0, field_parser_1.dumpBareSafe)(process.declaration.kind);
1340
+ }
1341
+ if (process.declaration.action) {
1342
+ out += ' action ' + (0, field_parser_1.dumpBareSafe)(process.declaration.action);
1343
+ }
1344
+ out += ' }\n';
1345
+ }
1346
+ if (process.dischargesGate) {
1347
+ out += ' discharges_gate ' + (0, field_parser_1.dumpBareSafe)(process.dischargesGate) + '\n';
1348
+ }
1349
+ if (process.realizedBy && process.realizedBy.length > 0) {
1350
+ out +=
1351
+ ' realized_by { ' +
1352
+ process.realizedBy.map(field_parser_1.dumpBareSafe).join(' ') +
1353
+ ' }\n';
1354
+ }
1355
+ if (process.approvedBy && process.approvedBy.length > 0) {
1356
+ out +=
1357
+ ' approved_by { ' +
1358
+ process.approvedBy.map(field_parser_1.dumpBareSafe).join(' ') +
1359
+ ' }\n';
1360
+ }
1361
+ if (process.windows && process.windows.length > 0) {
1362
+ out += ' windows {\n';
1363
+ for (const w of process.windows) {
1364
+ out += ' window ' + (0, field_parser_1.dumpBareSafe)(w.id) + ' {\n';
1365
+ if (w.kind) {
1366
+ out += ' kind ' + (0, field_parser_1.dumpBareSafe)(w.kind) + '\n';
1367
+ }
1368
+ if (w.clause) {
1369
+ out += ' clause "' + (0, tokenize_1.escapeString)(w.clause) + '"\n';
1370
+ }
1371
+ if (w.anchor) {
1372
+ out += ' anchor ' + (0, field_parser_1.dumpBareSafe)(w.anchor) + '\n';
1373
+ }
1374
+ if (w.applies_to) {
1375
+ out += ' applies_to ' + (0, field_parser_1.dumpBareSafe)(w.applies_to) + '\n';
1376
+ }
1377
+ if (w.windowYears > 0 || w.windowMonths > 0) {
1378
+ out += ' window {';
1379
+ if (w.windowYears > 0) {
1380
+ out += ' years ' + w.windowYears;
1381
+ }
1382
+ if (w.windowMonths > 0) {
1383
+ out += ' months ' + w.windowMonths;
1384
+ }
1385
+ out += ' }\n';
1386
+ }
1387
+ if (w.breach) {
1388
+ out += ' breach ' + (0, field_parser_1.dumpBareSafe)(w.breach) + '\n';
1389
+ }
1390
+ if (w.description) {
1391
+ out += ' description "' + (0, tokenize_1.escapeString)(w.description) + '"\n';
1392
+ }
1393
+ out += ' }\n';
1394
+ }
1395
+ out += ' }\n';
1396
+ }
1031
1397
  if (process.segregation && process.segregation.length > 0) {
1032
1398
  out += ' segregation {\n';
1033
1399
  for (const s of process.segregation) {