@primmel/primmel 1.9.1 → 1.11.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 (71) hide show
  1. package/dist/src/check-rules.d.ts.map +1 -1
  2. package/dist/src/check-rules.js +18 -1
  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 +104 -1
  6. package/dist/src/check.js.map +1 -1
  7. package/dist/src/ser-des/config/decisionRule.d.ts +5 -0
  8. package/dist/src/ser-des/config/decisionRule.d.ts.map +1 -0
  9. package/dist/src/ser-des/config/decisionRule.js +357 -0
  10. package/dist/src/ser-des/config/decisionRule.js.map +1 -0
  11. package/dist/src/ser-des/config/declaration.d.ts +9 -0
  12. package/dist/src/ser-des/config/declaration.d.ts.map +1 -0
  13. package/dist/src/ser-des/config/declaration.js +288 -0
  14. package/dist/src/ser-des/config/declaration.js.map +1 -0
  15. package/dist/src/ser-des/config/frameworkDocument.d.ts +9 -0
  16. package/dist/src/ser-des/config/frameworkDocument.d.ts.map +1 -0
  17. package/dist/src/ser-des/config/frameworkDocument.js +254 -0
  18. package/dist/src/ser-des/config/frameworkDocument.js.map +1 -0
  19. package/dist/src/ser-des/config/governanceOrgan.d.ts +5 -0
  20. package/dist/src/ser-des/config/governanceOrgan.d.ts.map +1 -0
  21. package/dist/src/ser-des/config/governanceOrgan.js +111 -0
  22. package/dist/src/ser-des/config/governanceOrgan.js.map +1 -0
  23. package/dist/src/ser-des/config/index.d.ts.map +1 -1
  24. package/dist/src/ser-des/config/index.js +91 -0
  25. package/dist/src/ser-des/config/index.js.map +1 -1
  26. package/dist/src/ser-des/config/participantKind.d.ts +5 -0
  27. package/dist/src/ser-des/config/participantKind.d.ts.map +1 -0
  28. package/dist/src/ser-des/config/participantKind.js +329 -0
  29. package/dist/src/ser-des/config/participantKind.js.map +1 -0
  30. package/dist/src/ser-des/config/scheme.d.ts +7 -0
  31. package/dist/src/ser-des/config/scheme.d.ts.map +1 -0
  32. package/dist/src/ser-des/config/scheme.js +434 -0
  33. package/dist/src/ser-des/config/scheme.js.map +1 -0
  34. package/dist/src/ser-des/package.d.ts +5 -2
  35. package/dist/src/ser-des/package.d.ts.map +1 -1
  36. package/dist/src/ser-des/package.js +76 -6
  37. package/dist/src/ser-des/package.js.map +1 -1
  38. package/dist/src/ser-des/parse.d.ts.map +1 -1
  39. package/dist/src/ser-des/parse.js +12 -0
  40. package/dist/src/ser-des/parse.js.map +1 -1
  41. package/dist/src/ser-des/types.d.ts +19 -0
  42. package/dist/src/ser-des/types.d.ts.map +1 -1
  43. package/dist/src/types/DecisionRule.d.ts +84 -0
  44. package/dist/src/types/DecisionRule.d.ts.map +1 -0
  45. package/dist/src/types/DecisionRule.js +17 -0
  46. package/dist/src/types/DecisionRule.js.map +1 -0
  47. package/dist/src/types/Declaration.d.ts +68 -0
  48. package/dist/src/types/Declaration.d.ts.map +1 -0
  49. package/dist/src/types/Declaration.js +22 -0
  50. package/dist/src/types/Declaration.js.map +1 -0
  51. package/dist/src/types/FrameworkDocument.d.ts +57 -0
  52. package/dist/src/types/FrameworkDocument.d.ts.map +1 -0
  53. package/dist/src/types/FrameworkDocument.js +21 -0
  54. package/dist/src/types/FrameworkDocument.js.map +1 -0
  55. package/dist/src/types/GovernanceOrgan.d.ts +23 -0
  56. package/dist/src/types/GovernanceOrgan.d.ts.map +1 -0
  57. package/dist/src/types/GovernanceOrgan.js +14 -0
  58. package/dist/src/types/GovernanceOrgan.js.map +1 -0
  59. package/dist/src/types/ParticipantKind.d.ts +82 -0
  60. package/dist/src/types/ParticipantKind.d.ts.map +1 -0
  61. package/dist/src/types/ParticipantKind.js +22 -0
  62. package/dist/src/types/ParticipantKind.js.map +1 -0
  63. package/dist/src/types/Scheme.d.ts +99 -0
  64. package/dist/src/types/Scheme.d.ts.map +1 -0
  65. package/dist/src/types/Scheme.js +24 -0
  66. package/dist/src/types/Scheme.js.map +1 -0
  67. package/dist/src/types/Standard.d.ts +19 -0
  68. package/dist/src/types/Standard.d.ts.map +1 -1
  69. package/dist-browser/index.mjs +1119 -298
  70. package/dist-cli/primmel.mjs +1757 -4
  71. package/package.json +1 -1
@@ -0,0 +1,434 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────
3
+ // The scheme-architecture constructs (smart TODO.roadmap/40; the
4
+ // packages-as-SSOT epic) — B 18:2025 3.37/3.38, §5.4, clause 15:
5
+ //
6
+ // scheme_definition scheme_a {
7
+ // label "Scheme A"
8
+ // term "3.37"
9
+ // clause "5.4.3"
10
+ // definition "Advanced level of the OIML-CS where accreditation or
11
+ // peer assessment is used as the basis for demonstrating
12
+ // compliance."
13
+ // demonstration {
14
+ // method peer_evaluation
15
+ // clause "5.4.3.1"
16
+ // basis { accreditation peer_assessment }
17
+ // note "Compliance demonstrated by peer evaluation on the basis
18
+ // of an accreditation assessment or a peer assessment …"
19
+ // }
20
+ // source { doc "urn:oiml:pub:b:18:2025" clause "3.37" }
21
+ // }
22
+ //
23
+ // scheme_lifecycle category_scheme {
24
+ // applies_to instrument_category
25
+ // initial SCHEME_B
26
+ // entry {
27
+ // action category_included
28
+ // automatic true
29
+ // clause "15.1"
30
+ // conditions_ref auto_inclusion
31
+ // description "A category of measuring instrument … is
32
+ // automatically included in the OIML-CS in Scheme B when the
33
+ // conditions of §4.2 are met (§15.1) …"
34
+ // }
35
+ // transition SCHEME_B -> SCHEME_A action transition_period_elapsed {
36
+ // clause "15.2"
37
+ // description "Two years after inclusion in the OIML-CS, the
38
+ // category automatically transitions to Scheme A (§15.2) …"
39
+ // }
40
+ // trigger two-year-transition {
41
+ // kind timer
42
+ // action transition_period_elapsed
43
+ // window { years 2 }
44
+ // clause "15.2"
45
+ // deferrable true
46
+ // deferral_note "The Management Committee may propose to the CIML
47
+ // that a category does not automatically transition …"
48
+ // description "The two-year Scheme-B window opened by the
49
+ // category's inclusion …"
50
+ // }
51
+ // source { doc "urn:oiml:pub:b:18:2025" clause "15" }
52
+ // }
53
+ //
54
+ // The transition surface deliberately mirrors the state_machine grammar
55
+ // (`transition <From> -> <To> action <Action> { … }`).
56
+ // ─────────────────────────────────────────────────────────────────────
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.dumpSchemeLifecycle = exports.parseSchemeLifecycle = exports.dumpSchemeDefinition = exports.parseSchemeDefinition = void 0;
59
+ const tokenize_1 = require("../tokenize");
60
+ const parse_block_1 = require("../parse-block");
61
+ const field_parser_1 = require("./field-parser");
62
+ function parseDemonstration(block) {
63
+ const demonstration = {
64
+ method: '',
65
+ clause: '',
66
+ basis: [],
67
+ note: '',
68
+ };
69
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
70
+ if (keyword === 'method') {
71
+ demonstration.method = (0, tokenize_1.stripWrapping)(value());
72
+ }
73
+ else if (keyword === 'clause') {
74
+ demonstration.clause = (0, tokenize_1.stripWrapping)(value());
75
+ }
76
+ else if (keyword === 'basis') {
77
+ demonstration.basis = (0, tokenize_1.tokenizePackage)((0, tokenize_1.unwrapBlock)(value())).filter(s => s.length > 0);
78
+ }
79
+ else if (keyword === 'note') {
80
+ demonstration.note = (0, tokenize_1.stripWrapping)(value());
81
+ }
82
+ else {
83
+ return false;
84
+ }
85
+ return true;
86
+ }, { construct: 'scheme_definition demonstration', id: '' });
87
+ return demonstration;
88
+ }
89
+ const parseSchemeDefinition = (id, data) => {
90
+ const scheme = {
91
+ id,
92
+ label: '',
93
+ term: '',
94
+ clause: '',
95
+ definition: '',
96
+ demonstration: null,
97
+ source: { doc: '', clause: '' },
98
+ };
99
+ (0, parse_block_1.forEachEntry)(data, (keyword, value) => {
100
+ if (keyword === 'label') {
101
+ scheme.label = (0, tokenize_1.stripWrapping)(value());
102
+ }
103
+ else if (keyword === 'term') {
104
+ scheme.term = (0, tokenize_1.stripWrapping)(value());
105
+ }
106
+ else if (keyword === 'clause') {
107
+ scheme.clause = (0, tokenize_1.stripWrapping)(value());
108
+ }
109
+ else if (keyword === 'definition') {
110
+ scheme.definition = (0, tokenize_1.stripWrapping)(value());
111
+ }
112
+ else if (keyword === 'demonstration') {
113
+ scheme.demonstration = parseDemonstration((0, tokenize_1.unwrapBlock)(value()));
114
+ }
115
+ else if (keyword === 'source') {
116
+ scheme.source = (0, field_parser_1.readSource)((0, tokenize_1.unwrapBlock)(value()));
117
+ }
118
+ else {
119
+ return false;
120
+ }
121
+ return true;
122
+ }, { construct: 'scheme_definition', id });
123
+ return ctx => {
124
+ ctx.schemeDefinitions[id] = scheme;
125
+ return ctx;
126
+ };
127
+ };
128
+ exports.parseSchemeDefinition = parseSchemeDefinition;
129
+ function dumpSourceBlock(src) {
130
+ let out = ' source {\n';
131
+ if (src.doc) {
132
+ out += ' doc "' + (0, tokenize_1.escapeString)(src.doc) + '"\n';
133
+ }
134
+ if (src.clause) {
135
+ out += ' clause "' + (0, tokenize_1.escapeString)(src.clause) + '"\n';
136
+ }
137
+ out += ' }\n';
138
+ return out;
139
+ }
140
+ const dumpSchemeDefinition = function (s) {
141
+ let out = 'scheme_definition ' + s.id + ' {\n';
142
+ if (s.label) {
143
+ out += ' label "' + (0, tokenize_1.escapeString)(s.label) + '"\n';
144
+ }
145
+ if (s.term) {
146
+ out += ' term "' + (0, tokenize_1.escapeString)(s.term) + '"\n';
147
+ }
148
+ if (s.clause) {
149
+ out += ' clause "' + (0, tokenize_1.escapeString)(s.clause) + '"\n';
150
+ }
151
+ if (s.definition) {
152
+ out += ' definition "' + (0, tokenize_1.escapeString)(s.definition) + '"\n';
153
+ }
154
+ if (s.demonstration) {
155
+ const d = s.demonstration;
156
+ out += ' demonstration {\n';
157
+ if (d.method) {
158
+ out += ' method ' + (0, field_parser_1.dumpBareSafe)(d.method) + '\n';
159
+ }
160
+ if (d.clause) {
161
+ out += ' clause "' + (0, tokenize_1.escapeString)(d.clause) + '"\n';
162
+ }
163
+ if (d.basis.length > 0) {
164
+ out += ' basis { ' + d.basis.map(field_parser_1.dumpBareSafe).join(' ') + ' }\n';
165
+ }
166
+ if (d.note) {
167
+ out += ' note "' + (0, tokenize_1.escapeString)(d.note) + '"\n';
168
+ }
169
+ out += ' }\n';
170
+ }
171
+ if (s.source.doc || s.source.clause) {
172
+ out += dumpSourceBlock(s.source);
173
+ }
174
+ out += '}\n';
175
+ return out;
176
+ };
177
+ exports.dumpSchemeDefinition = dumpSchemeDefinition;
178
+ function parseEntry(block) {
179
+ const entry = {
180
+ action: '',
181
+ automatic: false,
182
+ clause: '',
183
+ conditions_ref: '',
184
+ description: '',
185
+ };
186
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
187
+ if (keyword === 'action') {
188
+ entry.action = (0, tokenize_1.stripWrapping)(value());
189
+ }
190
+ else if (keyword === 'automatic') {
191
+ entry.automatic = value() === 'true';
192
+ }
193
+ else if (keyword === 'clause') {
194
+ entry.clause = (0, tokenize_1.stripWrapping)(value());
195
+ }
196
+ else if (keyword === 'conditions_ref') {
197
+ entry.conditions_ref = (0, tokenize_1.stripWrapping)(value());
198
+ }
199
+ else if (keyword === 'description') {
200
+ entry.description = (0, tokenize_1.stripWrapping)(value());
201
+ }
202
+ else {
203
+ return false;
204
+ }
205
+ return true;
206
+ }, { construct: 'scheme_lifecycle entry', id: '' });
207
+ return entry;
208
+ }
209
+ function parseTransition(block) {
210
+ const facets = {
211
+ clause: '',
212
+ decided_by: '',
213
+ on_proposal_of: '',
214
+ description: '',
215
+ };
216
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
217
+ if (keyword === 'clause') {
218
+ facets.clause = (0, tokenize_1.stripWrapping)(value());
219
+ }
220
+ else if (keyword === 'decided_by') {
221
+ facets.decided_by = (0, tokenize_1.stripWrapping)(value());
222
+ }
223
+ else if (keyword === 'on_proposal_of') {
224
+ facets.on_proposal_of = (0, tokenize_1.stripWrapping)(value());
225
+ }
226
+ else if (keyword === 'description') {
227
+ facets.description = (0, tokenize_1.stripWrapping)(value());
228
+ }
229
+ else {
230
+ return false;
231
+ }
232
+ return true;
233
+ }, { construct: 'scheme_lifecycle transition', id: '' });
234
+ return facets;
235
+ }
236
+ function parseTrigger(id, block) {
237
+ const trigger = {
238
+ id,
239
+ kind: '',
240
+ action: '',
241
+ windowYears: 0,
242
+ windowMonths: 0,
243
+ clause: '',
244
+ deferrable: false,
245
+ deferral_note: '',
246
+ description: '',
247
+ };
248
+ (0, parse_block_1.forEachEntry)(block, (keyword, value) => {
249
+ if (keyword === 'kind') {
250
+ trigger.kind = (0, tokenize_1.stripWrapping)(value());
251
+ }
252
+ else if (keyword === 'action') {
253
+ trigger.action = (0, tokenize_1.stripWrapping)(value());
254
+ }
255
+ else if (keyword === 'window') {
256
+ const wt = (0, tokenize_1.tokenizePackage)((0, tokenize_1.unwrapBlock)(value()));
257
+ for (let i = 0; i + 1 < wt.length; i += 2) {
258
+ if (wt[i] === 'years') {
259
+ trigger.windowYears = parseInt((0, tokenize_1.stripWrapping)(wt[i + 1]), 10) || 0;
260
+ }
261
+ else if (wt[i] === 'months') {
262
+ trigger.windowMonths = parseInt((0, tokenize_1.stripWrapping)(wt[i + 1]), 10) || 0;
263
+ }
264
+ }
265
+ }
266
+ else if (keyword === 'clause') {
267
+ trigger.clause = (0, tokenize_1.stripWrapping)(value());
268
+ }
269
+ else if (keyword === 'deferrable') {
270
+ trigger.deferrable = value() === 'true';
271
+ }
272
+ else if (keyword === 'deferral_note') {
273
+ trigger.deferral_note = (0, tokenize_1.stripWrapping)(value());
274
+ }
275
+ else if (keyword === 'description') {
276
+ trigger.description = (0, tokenize_1.stripWrapping)(value());
277
+ }
278
+ else {
279
+ return false;
280
+ }
281
+ return true;
282
+ }, { construct: 'scheme_lifecycle trigger', id });
283
+ return trigger;
284
+ }
285
+ const parseSchemeLifecycle = (id, data) => {
286
+ const lifecycle = {
287
+ id,
288
+ applies_to: '',
289
+ initial: '',
290
+ entry: null,
291
+ transitions: [],
292
+ triggers: [],
293
+ source: { doc: '', clause: '' },
294
+ };
295
+ (0, parse_block_1.forEachEntry)(data, (keyword, value, peek) => {
296
+ if (keyword === 'applies_to') {
297
+ lifecycle.applies_to = (0, tokenize_1.stripWrapping)(value());
298
+ }
299
+ else if (keyword === 'initial') {
300
+ lifecycle.initial = (0, tokenize_1.stripWrapping)(value());
301
+ }
302
+ else if (keyword === 'entry') {
303
+ lifecycle.entry = parseEntry((0, tokenize_1.unwrapBlock)(value()));
304
+ }
305
+ else if (keyword === 'transition') {
306
+ // transition <From> -> <To> action <ActionName> { … } — the
307
+ // state_machine surface, with framework facets in the block.
308
+ const from = (0, tokenize_1.stripWrapping)(value());
309
+ const arrow = peek();
310
+ if (arrow === undefined || (arrow !== '->' && arrow !== '→')) {
311
+ throw new Error(`Parsing error: scheme_lifecycle. ID ${id}: transition ${from} is missing its '->'`);
312
+ }
313
+ value(); // the arrow
314
+ const to = (0, tokenize_1.stripWrapping)(value());
315
+ let action = '';
316
+ if (peek() === 'action') {
317
+ value(); // 'action'
318
+ action = (0, tokenize_1.stripWrapping)(value());
319
+ }
320
+ const head = peek();
321
+ if (head === undefined || !head.startsWith('{')) {
322
+ throw new Error(`Parsing error: scheme_lifecycle. ID ${id}: transition ${from} -> ${to} is missing its block`);
323
+ }
324
+ const facets = parseTransition((0, tokenize_1.unwrapBlock)(value()));
325
+ lifecycle.transitions.push({ from, to, action, ...facets });
326
+ }
327
+ else if (keyword === 'trigger') {
328
+ const trigId = (0, tokenize_1.stripWrapping)(value());
329
+ const head = peek();
330
+ if (head === undefined || !head.startsWith('{')) {
331
+ throw new Error(`Parsing error: scheme_lifecycle. ID ${id}: trigger ${trigId} is missing its block`);
332
+ }
333
+ lifecycle.triggers.push(parseTrigger(trigId, (0, tokenize_1.unwrapBlock)(value())));
334
+ }
335
+ else if (keyword === 'source') {
336
+ lifecycle.source = (0, field_parser_1.readSource)((0, tokenize_1.unwrapBlock)(value()));
337
+ }
338
+ else {
339
+ return false;
340
+ }
341
+ return true;
342
+ }, { construct: 'scheme_lifecycle', id });
343
+ return ctx => {
344
+ ctx.schemeLifecycles[id] = lifecycle;
345
+ return ctx;
346
+ };
347
+ };
348
+ exports.parseSchemeLifecycle = parseSchemeLifecycle;
349
+ const dumpSchemeLifecycle = function (l) {
350
+ let out = 'scheme_lifecycle ' + l.id + ' {\n';
351
+ if (l.applies_to) {
352
+ out += ' applies_to ' + (0, field_parser_1.dumpBareSafe)(l.applies_to) + '\n';
353
+ }
354
+ if (l.initial) {
355
+ out += ' initial ' + (0, field_parser_1.dumpBareSafe)(l.initial) + '\n';
356
+ }
357
+ if (l.entry) {
358
+ const e = l.entry;
359
+ out += ' entry {\n';
360
+ if (e.action) {
361
+ out += ' action ' + (0, field_parser_1.dumpBareSafe)(e.action) + '\n';
362
+ }
363
+ out += ' automatic ' + (e.automatic ? 'true' : 'false') + '\n';
364
+ if (e.clause) {
365
+ out += ' clause "' + (0, tokenize_1.escapeString)(e.clause) + '"\n';
366
+ }
367
+ if (e.conditions_ref) {
368
+ out += ' conditions_ref ' + (0, field_parser_1.dumpBareSafe)(e.conditions_ref) + '\n';
369
+ }
370
+ if (e.description) {
371
+ out += ' description "' + (0, tokenize_1.escapeString)(e.description) + '"\n';
372
+ }
373
+ out += ' }\n';
374
+ }
375
+ for (const t of l.transitions) {
376
+ out += ' transition ' + (0, field_parser_1.dumpBareSafe)(t.from) + ' -> ' + (0, field_parser_1.dumpBareSafe)(t.to);
377
+ if (t.action) {
378
+ out += ' action ' + (0, field_parser_1.dumpBareSafe)(t.action);
379
+ }
380
+ out += ' {\n';
381
+ if (t.clause) {
382
+ out += ' clause "' + (0, tokenize_1.escapeString)(t.clause) + '"\n';
383
+ }
384
+ if (t.decided_by) {
385
+ out += ' decided_by ' + (0, field_parser_1.dumpBareSafe)(t.decided_by) + '\n';
386
+ }
387
+ if (t.on_proposal_of) {
388
+ out += ' on_proposal_of ' + (0, field_parser_1.dumpBareSafe)(t.on_proposal_of) + '\n';
389
+ }
390
+ if (t.description) {
391
+ out += ' description "' + (0, tokenize_1.escapeString)(t.description) + '"\n';
392
+ }
393
+ out += ' }\n';
394
+ }
395
+ for (const tr of l.triggers) {
396
+ out += ' trigger ' + (0, field_parser_1.dumpBareSafe)(tr.id) + ' {\n';
397
+ if (tr.kind) {
398
+ out += ' kind ' + (0, field_parser_1.dumpBareSafe)(tr.kind) + '\n';
399
+ }
400
+ if (tr.action) {
401
+ out += ' action ' + (0, field_parser_1.dumpBareSafe)(tr.action) + '\n';
402
+ }
403
+ if (tr.windowYears > 0 || tr.windowMonths > 0) {
404
+ let w = ' window {';
405
+ if (tr.windowYears > 0) {
406
+ w += ' years ' + tr.windowYears;
407
+ }
408
+ if (tr.windowMonths > 0) {
409
+ w += ' months ' + tr.windowMonths;
410
+ }
411
+ out += w + ' }\n';
412
+ }
413
+ if (tr.clause) {
414
+ out += ' clause "' + (0, tokenize_1.escapeString)(tr.clause) + '"\n';
415
+ }
416
+ if (tr.deferrable) {
417
+ out += ' deferrable true\n';
418
+ }
419
+ if (tr.deferral_note) {
420
+ out += ' deferral_note "' + (0, tokenize_1.escapeString)(tr.deferral_note) + '"\n';
421
+ }
422
+ if (tr.description) {
423
+ out += ' description "' + (0, tokenize_1.escapeString)(tr.description) + '"\n';
424
+ }
425
+ out += ' }\n';
426
+ }
427
+ if (l.source.doc || l.source.clause) {
428
+ out += dumpSourceBlock(l.source);
429
+ }
430
+ out += '}\n';
431
+ return out;
432
+ };
433
+ exports.dumpSchemeLifecycle = dumpSchemeLifecycle;
434
+ //# sourceMappingURL=scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheme.js","sourceRoot":"","sources":["../../../../src/ser-des/config/scheme.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import Standard from '../types/Standard';
2
2
  import type { LoadOptions, LoadResult } from './index';
3
3
  import type { PackageManifest } from '../types/Package';
4
+ import type { ParseContext } from './types';
4
5
  export interface PackageFile {
5
6
  path: string;
6
7
  role: 'manifest' | 'content';
@@ -106,9 +107,9 @@ export interface CompositionInfo {
106
107
  /** Package ids in merge order: dependencies first, root last. */
107
108
  order: string[];
108
109
  }
109
- export type CompositionRule = 'uses-resolves' | 'uses-no-redefine' | 'uses-cycle' | 'requires-satisfied';
110
+ export type CompositionRule = 'uses-resolves' | 'uses-no-redefine' | 'uses-cycle' | 'requires-satisfied' | 'namespace-pin-violation';
110
111
  /** A composition failure — a hard load error. checkPackage reports these
111
- * as linter issues C27–C29 and C31 instead of throwing. */
112
+ * as linter issues C27–C29, C31 and C119 instead of throwing. */
112
113
  export declare class CompositionError extends Error {
113
114
  readonly rule: CompositionRule;
114
115
  constructor(rule: CompositionRule, message: string);
@@ -118,4 +119,6 @@ export declare class CompositionError extends Error {
118
119
  * `extends` (treated as one more uses entry), first occurrence wins.
119
120
  */
120
121
  export declare function effectiveUses(manifest: PackageManifest): string[];
122
+ /** The id-keyed ParseContext collections that merge across packages. */
123
+ export declare const MERGE_FIELDS: (keyof ParseContext)[];
121
124
  //# sourceMappingURL=package.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/ser-des/package.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/ser-des/package.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@
23
23
  // untouched: same joined stream, same parse, same resolution.
24
24
  // ─────────────────────────────────────────────────────────────────────
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.CompositionError = void 0;
26
+ exports.MERGE_FIELDS = exports.CompositionError = void 0;
27
27
  exports.packageFiles = packageFiles;
28
28
  exports.loadPackage = loadPackage;
29
29
  exports.groupBySourceFile = groupBySourceFile;
@@ -261,7 +261,7 @@ function loadPackageWithIssues(dir, options = {}) {
261
261
  return loadPackageInternal(dir, options);
262
262
  }
263
263
  /** A composition failure — a hard load error. checkPackage reports these
264
- * as linter issues C27–C29 and C31 instead of throwing. */
264
+ * as linter issues C27–C29, C31 and C119 instead of throwing. */
265
265
  class CompositionError extends Error {
266
266
  rule;
267
267
  constructor(rule, message) {
@@ -300,7 +300,11 @@ function extendsDeprecationIssue(m) {
300
300
  };
301
301
  }
302
302
  /** The id-keyed ParseContext collections that merge across packages. */
303
- const MERGE_FIELDS = [
303
+ // The composition contract (TODO.roadmap/05): every id-keyed
304
+ // ParseContext collection MUST appear here — a missing field is
305
+ // silently dropped from `uses` composition. test/merge-fields.test.ts
306
+ // guards the equivalence at runtime.
307
+ exports.MERGE_FIELDS = [
304
308
  'approvals',
305
309
  'roles',
306
310
  'processes',
@@ -360,6 +364,37 @@ const MERGE_FIELDS = [
360
364
  // protection.
361
365
  'formulasUsed',
362
366
  'texts',
367
+ // The certification-framework registers (smart TODO.roadmap/40; the
368
+ // packages-as-SSOT epic) — the framework package's participant kinds
369
+ // and organs compose into every scheme-side model through `uses`.
370
+ 'participantKinds',
371
+ 'governanceOrgans',
372
+ 'declarationKinds',
373
+ 'declarationStatuses',
374
+ 'declarationGates',
375
+ 'schemeDefinitions',
376
+ 'schemeLifecycles',
377
+ 'frameworkDocuments',
378
+ 'documentPrecedences',
379
+ 'autoInclusions',
380
+ 'decisionRules',
381
+ // The pre-existing drift closed (the packages-as-SSOT epic): these
382
+ // collections existed as constructs but were never merged, so `uses`
383
+ // composition silently dropped them — comments, predicates, the
384
+ // artifact registers, the activity archetypes, connector profiles,
385
+ // monitors, passports, dataspaces, policies, and the top-level
386
+ // dimensions all compose with the same no-redefine semantics now.
387
+ 'comments',
388
+ 'predicates',
389
+ 'artifactDefinitions',
390
+ 'artifactInstances',
391
+ 'activityArchetypes',
392
+ 'connectorProfiles',
393
+ 'monitors',
394
+ 'passports',
395
+ 'dataspaces',
396
+ 'policies',
397
+ 'dimensions',
363
398
  ];
364
399
  /** Parse one package's content files (manifest excluded) as a single
365
400
  * stream, keeping each file's joined-stream range for provenance. */
@@ -435,18 +470,52 @@ function composePackage(rootDir, options, rootManifest, withProvenance = false)
435
470
  pkgChunks.set(id, parsed.chunks);
436
471
  }
437
472
  const provenance = new Map();
438
- for (const field of MERGE_FIELDS) {
473
+ for (const field of exports.MERGE_FIELDS) {
439
474
  provenance.set(field, new Map());
440
475
  }
441
476
  const acc = ctxs.get(order[0]);
442
- for (const field of MERGE_FIELDS) {
477
+ for (const field of exports.MERGE_FIELDS) {
443
478
  for (const key of Object.keys(acc[field])) {
444
479
  provenance.get(field).set(key, order[0]);
445
480
  }
446
481
  }
482
+ // Requirement-namespace pins (the smart AGENTS.d/07 pin doctrine,
483
+ // TODO.editor/05 Q3 — linter rule C119): a requirement scope (a
484
+ // requirement_class id path, e.g. /req/cs) declared by an upstream
485
+ // package is OWNED by that package — a downstream package may reference
486
+ // its provisions but MUST NOT declare a requirement class or a
487
+ // requirement whose id sits at or under an owned namespace (the REC-WINS
488
+ // merge would otherwise silently redefine scheme provisions). The
489
+ // exact-id case is uses-no-redefine above; this guard is the
490
+ // strict-descendant leg.
491
+ const ownedScopes = new Map(); // scope id → owning package
492
+ const harvestScopes = (id, ctx) => {
493
+ for (const key of Object.keys(ctx.requirementClasses)) {
494
+ if (!ownedScopes.has(key)) {
495
+ ownedScopes.set(key, id);
496
+ }
497
+ }
498
+ };
499
+ const pinGuard = (id, next) => {
500
+ if (ownedScopes.size === 0) {
501
+ return;
502
+ }
503
+ for (const field of ['requirementClasses', 'requirements']) {
504
+ const label = field === 'requirementClasses' ? 'requirement class' : 'requirement';
505
+ for (const key of Object.keys(next[field])) {
506
+ for (const [scope, owner] of ownedScopes) {
507
+ if (key.startsWith(scope + '/')) {
508
+ throw new CompositionError('namespace-pin-violation', `package "${id}" declares ${label} "${key}" under the requirement namespace "${scope}" owned by package "${owner}" — a layer-owned namespace is single-sourced: a downstream package may reference its provisions, never declare scopes or requirements at or under it (namespace-pin-violation)`);
509
+ }
510
+ }
511
+ }
512
+ }
513
+ };
514
+ harvestScopes(order[0], acc);
447
515
  for (const id of order.slice(1)) {
448
516
  const next = ctxs.get(id);
449
- for (const field of MERGE_FIELDS) {
517
+ pinGuard(id, next);
518
+ for (const field of exports.MERGE_FIELDS) {
450
519
  const target = acc[field];
451
520
  const pm = provenance.get(field);
452
521
  for (const [key, value] of Object.entries(next[field])) {
@@ -475,6 +544,7 @@ function composePackage(rootDir, options, rootManifest, withProvenance = false)
475
544
  if (!acc.metadata && next.metadata) {
476
545
  acc.metadata = next.metadata;
477
546
  }
547
+ harvestScopes(id, next);
478
548
  }
479
549
  // Post-merge: every requires entry names a composed package id or one
480
550
  // of its provides entries (satisfied by the composed set, not by the