@cohesivesystems/processes-presentation 0.1.0-alpha.63 → 0.1.0-alpha.65

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.
@@ -0,0 +1,381 @@
1
+ import {} from '@cohesivesystems/processes';
2
+ import {} from './process-presentation-graph.js';
3
+ import { cloneWireValue, compareOrdinal, deepFreeze, isRecord, } from './process-presentation-values.js';
4
+ export const canonicalProcessRuntimePresentationCompatibility = Object.freeze({
5
+ processPresentationProjectionVersions: Object.freeze([
6
+ 'cohesive-process-presentation/v1',
7
+ ]),
8
+ statusSchemaVersions: Object.freeze([
9
+ 'cohesive-execution-status/v1',
10
+ ]),
11
+ traceArtifactSchemaVersions: Object.freeze([
12
+ 'cohesive-process-execution-traces/v2',
13
+ ]),
14
+ traceSchemaVersions: Object.freeze([
15
+ 'cohesive-execution-trace/v2',
16
+ ]),
17
+ projectionVersion: 'cohesive-process-runtime-presentation/v1',
18
+ });
19
+ export function processRuntimePresentationOverlayId(processInstanceId, definition) {
20
+ return runtimeIdentity('overlay', processInstanceId, definition.definitionId, definition.revisionId, definition.fingerprint.algorithm, definition.fingerprint.canonicalization, definition.fingerprint.value);
21
+ }
22
+ export function projectCanonicalProcessRuntime(graph, status, traceArtifact = null) {
23
+ const diagnostics = new Map();
24
+ validateCompatibility(graph, status, traceArtifact, diagnostics);
25
+ if ([...diagnostics.values()].some((diagnostic) => diagnostic.severity === 'error')) {
26
+ return freezeProjectionResult(null, diagnostics);
27
+ }
28
+ const index = createGraphIndex(graph);
29
+ const context = {
30
+ diagnostics,
31
+ graph,
32
+ index,
33
+ processInstanceId: status.processInstanceId,
34
+ unmatchedEvidence: new Map(),
35
+ };
36
+ projectStatus(status, context);
37
+ if (traceArtifact) {
38
+ projectTraceArtifact(traceArtifact, context);
39
+ }
40
+ else {
41
+ addDiagnostic(context.diagnostics, 'PROCESS_RUNTIME_TRACE_UNAVAILABLE', 'warning', ['traceArtifact'], 'No retained trace artifact was supplied; event absence cannot imply execution or element completion.', null);
42
+ }
43
+ const frozenDiagnostics = freezeDiagnostics(diagnostics);
44
+ const overlay = deepFreeze({
45
+ definition: cloneWireValue(status.definition),
46
+ diagnostics: frozenDiagnostics,
47
+ elementOverlays: [...index.elements.values()]
48
+ .sort((left, right) => compareOrdinal(left.elementId, right.elementId))
49
+ .map((element) => ({
50
+ elementId: element.elementId,
51
+ id: runtimeIdentity('element', status.processInstanceId, element.elementId),
52
+ traceEvents: element.traceEvents.sort(compareEvidenceById),
53
+ tokens: element.tokens.sort(compareEvidenceById),
54
+ waits: element.waits.sort(compareEvidenceById),
55
+ })),
56
+ id: processRuntimePresentationOverlayId(status.processInstanceId, status.definition),
57
+ missingTracePrefixCount: traceArtifact?.missingTracePrefixCount ?? 0,
58
+ processInstanceId: status.processInstanceId,
59
+ projectionVersion: canonicalProcessRuntimePresentationCompatibility.projectionVersion,
60
+ status: cloneWireValue(status),
61
+ traceArtifact: traceArtifact ? cloneWireValue(traceArtifact) : null,
62
+ unmatchedEvidence: [...context.unmatchedEvidence.values()]
63
+ .sort(compareEvidenceById),
64
+ });
65
+ return deepFreeze({ diagnostics: frozenDiagnostics, overlay });
66
+ }
67
+ function validateCompatibility(graph, status, traceArtifact, diagnostics) {
68
+ if (!canonicalProcessRuntimePresentationCompatibility.processPresentationProjectionVersions.includes(graph.projectionVersion)) {
69
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_GRAPH_PROJECTION_UNSUPPORTED', 'error', ['graph', 'projectionVersion'], `Runtime presentation does not support Process graph projection '${graph.projectionVersion}'.`, graph.projectionVersion);
70
+ }
71
+ if (!canonicalProcessRuntimePresentationCompatibility.statusSchemaVersions.includes(status.schemaVersion)) {
72
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_STATUS_SCHEMA_UNSUPPORTED', 'error', ['status', 'schemaVersion'], `Runtime presentation does not support execution status schema '${status.schemaVersion}'.`, status.schemaVersion);
73
+ }
74
+ if (!sameDefinitionReference(graph.document.definition, status.definition)) {
75
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_DEFINITION_MISMATCH', 'error', ['status', 'definition'], 'Execution status does not identify the exact Process definition projected by the graph.', definitionReferenceSubject(status.definition));
76
+ }
77
+ if (!traceArtifact) {
78
+ return;
79
+ }
80
+ if (!canonicalProcessRuntimePresentationCompatibility.traceArtifactSchemaVersions.includes(traceArtifact.schemaVersion)) {
81
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_TRACE_ARTIFACT_SCHEMA_UNSUPPORTED', 'error', ['traceArtifact', 'schemaVersion'], `Runtime presentation does not support trace artifact schema '${traceArtifact.schemaVersion}'.`, traceArtifact.schemaVersion);
82
+ }
83
+ if (!sameDefinitionReference(status.definition, traceArtifact.definition)) {
84
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_DEFINITION_MISMATCH', 'error', ['traceArtifact', 'definition'], 'Trace artifact and execution status do not identify the same exact Process definition.', definitionReferenceSubject(traceArtifact.definition));
85
+ }
86
+ if (status.processInstanceId !== traceArtifact.processInstanceId) {
87
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_INSTANCE_MISMATCH', 'error', ['traceArtifact', 'processInstanceId'], 'Trace artifact and execution status do not identify the same Process instance.', traceArtifact.processInstanceId);
88
+ }
89
+ const attempts = new Set(status.attempts.map((attempt) => attempt.attemptId));
90
+ traceArtifact.traces.forEach((trace, traceIndex) => {
91
+ if (!canonicalProcessRuntimePresentationCompatibility.traceSchemaVersions.includes(trace.schemaVersion)) {
92
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_TRACE_SCHEMA_UNSUPPORTED', 'error', ['traceArtifact', 'traces', String(traceIndex), 'schemaVersion'], `Runtime presentation does not support normalized trace schema '${trace.schemaVersion}'.`, trace.schemaVersion);
93
+ }
94
+ if (trace.kind !== graph.document.kind) {
95
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_TRACE_KIND_UNSUPPORTED', 'error', ['traceArtifact', 'traces', String(traceIndex), 'kind'], `Normalized trace kind '${trace.kind}' does not match graph kind '${graph.document.kind}'.`, trace.kind);
96
+ }
97
+ if (!sameDefinitionReference(status.definition, trace.definition)) {
98
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_DEFINITION_MISMATCH', 'error', ['traceArtifact', 'traces', String(traceIndex), 'definition'], 'Normalized trace does not identify the same exact Process definition as execution status.', definitionReferenceSubject(trace.definition));
99
+ }
100
+ if (!trace.continuation
101
+ || trace.continuation.processInstanceId !== status.processInstanceId) {
102
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_INSTANCE_MISMATCH', 'error', ['traceArtifact', 'traces', String(traceIndex), 'continuation'], 'Normalized Process trace does not identify the status Process instance.', trace.continuation?.processInstanceId ?? null);
103
+ }
104
+ else if (!attempts.has(trace.continuation.processAttemptId)) {
105
+ addDiagnostic(diagnostics, 'PROCESS_RUNTIME_TRACE_ATTEMPT_UNMATCHED', 'error', ['traceArtifact', 'traces', String(traceIndex), 'continuation', 'processAttemptId'], 'Normalized trace attempt is absent from the authoritative execution status lineage.', trace.continuation.processAttemptId);
106
+ }
107
+ });
108
+ }
109
+ function projectStatus(status, context) {
110
+ discloseStatusFacet('tokens', status.runtime.tokensDisclosure, context);
111
+ discloseStatusFacet('waits', status.runtime.waitsDisclosure, context);
112
+ discloseStatusFacet('progress', status.runtime.progressDisclosure, context);
113
+ discloseStatusFacet('demand', status.runtime.demandDisclosure, context);
114
+ discloseStatusFacet('capacity', status.runtime.capacityDisclosure, context);
115
+ if (status.terminalOutcome.detail) {
116
+ discloseStatusValue('terminalOutcome.detail', status.terminalOutcome.detail.disclosure, ['status', 'terminalOutcome', 'detail', 'disclosure'], context);
117
+ }
118
+ status.runtime.extensions.forEach((extension, extensionIndex) => {
119
+ discloseStatusValue(`extension:${extension.id}`, extension.value.disclosure, ['status', 'runtime', 'extensions', String(extensionIndex), 'value', 'disclosure'], context);
120
+ });
121
+ if (status.runtime.health === 'Unknown') {
122
+ addDiagnostic(context.diagnostics, 'PROCESS_RUNTIME_HEALTH_UNKNOWN', 'warning', ['status', 'runtime', 'health'], 'The runtime did not disclose an authoritative health observation.', 'health');
123
+ }
124
+ status.runtime.tokens.forEach((token, tokenIndex) => {
125
+ const id = runtimeIdentity('token', status.processInstanceId, token.tokenId);
126
+ const node = findSingleProcessNode(token.node, context.index);
127
+ if (!node) {
128
+ addUnmatchedEvidence(context, 'status-token-node', id, token.node, token, 'PROCESS_RUNTIME_TOKEN_NODE_UNMATCHED', ['status', 'runtime', 'tokens', String(tokenIndex), 'node'], `Token '${token.tokenId}' references Process node '${token.node}', which is absent or ambiguous in the graph.`);
129
+ return;
130
+ }
131
+ context.index.elements.get(node.id).tokens.push(deepFreeze({
132
+ id,
133
+ token: cloneWireValue(token),
134
+ }));
135
+ });
136
+ status.runtime.waits.forEach((wait, waitIndex) => {
137
+ const id = runtimeIdentity('wait', status.processInstanceId, wait.tokenId, wait.node);
138
+ const node = findSingleProcessNode(wait.node, context.index);
139
+ if (!node) {
140
+ addUnmatchedEvidence(context, 'status-wait-node', id, wait.node, wait, 'PROCESS_RUNTIME_WAIT_NODE_UNMATCHED', ['status', 'runtime', 'waits', String(waitIndex), 'node'], `Wait for token '${wait.tokenId}' references Process node '${wait.node}', which is absent or ambiguous in the graph.`);
141
+ return;
142
+ }
143
+ context.index.elements.get(node.id).waits.push(deepFreeze({
144
+ id,
145
+ wait: cloneWireValue(wait),
146
+ }));
147
+ });
148
+ }
149
+ function discloseStatusFacet(facet, disclosure, context) {
150
+ if (disclosure === 'Disclosed') {
151
+ return;
152
+ }
153
+ const redacted = disclosure === 'Redacted';
154
+ addDiagnostic(context.diagnostics, redacted
155
+ ? 'PROCESS_RUNTIME_STATUS_FACET_REDACTED'
156
+ : 'PROCESS_RUNTIME_STATUS_FACET_UNKNOWN', redacted ? 'info' : 'warning', ['status', 'runtime', `${facet}Disclosure`], redacted
157
+ ? `Runtime ${facet} evidence exists but was redacted.`
158
+ : `The runtime has no authoritative ${facet} observation.`, facet);
159
+ }
160
+ function discloseStatusValue(subject, disclosure, path, context) {
161
+ if (disclosure === 'Disclosed') {
162
+ return;
163
+ }
164
+ const redacted = disclosure === 'Redacted';
165
+ addDiagnostic(context.diagnostics, redacted
166
+ ? 'PROCESS_RUNTIME_STATUS_FACET_REDACTED'
167
+ : 'PROCESS_RUNTIME_STATUS_FACET_UNKNOWN', redacted ? 'info' : 'warning', path, redacted
168
+ ? `Runtime status value '${subject}' exists but was redacted.`
169
+ : `The runtime status value '${subject}' is explicitly unknown.`, subject);
170
+ }
171
+ function projectTraceArtifact(artifact, context) {
172
+ if (artifact.missingTracePrefixCount > 0) {
173
+ addDiagnostic(context.diagnostics, 'PROCESS_RUNTIME_TRACE_PREFIX_MISSING', 'warning', ['traceArtifact', 'missingTracePrefixCount'], `The retained trace omits ${artifact.missingTracePrefixCount} earlier activation(s); absence cannot imply completion.`, String(artifact.missingTracePrefixCount));
174
+ }
175
+ artifact.traces.forEach((trace, traceIndex) => projectTrace(trace, traceIndex, context));
176
+ }
177
+ function projectTrace(trace, traceIndex, context) {
178
+ const attemptId = trace.continuation.processAttemptId;
179
+ trace.events.forEach((event, eventIndex) => {
180
+ const id = runtimeIdentity('trace-event', context.processInstanceId, attemptId, trace.activation, String(event.sequence));
181
+ const elementIds = new Set();
182
+ const primary = findSingleProcessNode(event.node, context.index);
183
+ if (primary) {
184
+ elementIds.add(primary.id);
185
+ }
186
+ else {
187
+ addUnmatchedEvidence(context, 'trace-node', id, event.node, event, 'PROCESS_RUNTIME_TRACE_NODE_UNMATCHED', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'node'], `Trace event references Process node '${event.node}', which is absent or ambiguous in the graph.`);
188
+ }
189
+ const branchOrClause = event.branchOrClause
190
+ ? findOwnedElement(event.node, event.branchOrClause, context.index)
191
+ : null;
192
+ if (event.branchOrClause) {
193
+ if (branchOrClause) {
194
+ elementIds.add(branchOrClause.id);
195
+ }
196
+ else {
197
+ addUnmatchedEvidence(context, 'trace-branch-or-clause', id, event.branchOrClause, event, 'PROCESS_RUNTIME_TRACE_BRANCH_UNMATCHED', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'branchOrClause'], `Trace event branch or clause '${event.branchOrClause}' is absent or ambiguous under Process node '${event.node}'.`);
198
+ }
199
+ }
200
+ const requestOutcome = event.requestOutcome
201
+ ? findRequestOutcome(event.node, event.requestOutcome, context.index)
202
+ : null;
203
+ if (event.requestOutcome) {
204
+ if (requestOutcome) {
205
+ elementIds.add(requestOutcome.id);
206
+ }
207
+ else if (!primary || hasOwnedRequestOutcomes(event.node, context.index)) {
208
+ addUnmatchedEvidence(context, 'trace-request-outcome', id, event.requestOutcome, event, 'PROCESS_RUNTIME_TRACE_OUTCOME_UNMATCHED', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'requestOutcome'], `Trace Request outcome '${event.requestOutcome}' is absent or ambiguous under Process node '${event.node}'.`);
209
+ }
210
+ }
211
+ const relatedDefinition = matchDefinitionReference(event.relatedDefinition ?? null, id, event, ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'relatedDefinition'], context);
212
+ if (relatedDefinition) {
213
+ elementIds.add(relatedDefinition.id);
214
+ }
215
+ let relatedNode = null;
216
+ if (event.relatedNode) {
217
+ if (event.relatedDefinition
218
+ && sameDefinitionReference(event.relatedDefinition, context.graph.document.definition)) {
219
+ relatedNode = findSingleProcessNode(event.relatedNode, context.index);
220
+ if (relatedNode) {
221
+ elementIds.add(relatedNode.id);
222
+ }
223
+ else {
224
+ addUnmatchedEvidence(context, 'trace-related-node', id, event.relatedNode, event, 'PROCESS_RUNTIME_TRACE_NODE_UNMATCHED', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'relatedNode'], `Trace event related node '${event.relatedNode}' claims the current Process definition but is absent or ambiguous.`);
225
+ }
226
+ }
227
+ else if (!event.relatedDefinition) {
228
+ addUnmatchedEvidence(context, 'trace-related-node', id, event.relatedNode, event, 'PROCESS_RUNTIME_TRACE_NODE_UNMATCHED', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'relatedNode'], `Trace event related node '${event.relatedNode}' has no exact related definition for a safe graph join.`);
229
+ }
230
+ }
231
+ const occurrenceDefinition = matchDefinitionReference(event.processOccurrence?.definition ?? null, id, event, ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'processOccurrence', 'definition'], context);
232
+ if (occurrenceDefinition) {
233
+ elementIds.add(occurrenceDefinition.id);
234
+ }
235
+ if (event.processOccurrence && event.processOccurrence.disclosure !== 'Disclosed') {
236
+ const disclosure = event.processOccurrence.disclosure;
237
+ addDiagnostic(context.diagnostics, 'PROCESS_RUNTIME_OCCURRENCE_DISCLOSURE_GAP', disclosure === 'Redacted' ? 'info' : 'warning', ['traceArtifact', 'traces', String(traceIndex), 'events', String(eventIndex), 'processOccurrence', 'disclosure'], `Process occurrence evidence is explicitly ${disclosure.toLowerCase()}; no occurrence completion or lineage may be inferred.`, event.processOccurrence.kind, id);
238
+ }
239
+ const traceEvent = deepFreeze({
240
+ activationId: trace.activation,
241
+ attemptId,
242
+ branchOrClauseElementId: branchOrClause?.id ?? null,
243
+ elementIds: [...elementIds].sort(),
244
+ event: cloneWireValue(event),
245
+ id,
246
+ occurrenceDefinitionElementId: occurrenceDefinition?.id ?? null,
247
+ primaryElementId: primary?.id ?? null,
248
+ relatedDefinitionElementId: relatedDefinition?.id ?? null,
249
+ relatedNodeElementId: relatedNode?.id ?? null,
250
+ requestOutcomeElementId: requestOutcome?.id ?? null,
251
+ traceDisposition: trace.disposition,
252
+ });
253
+ for (const elementId of traceEvent.elementIds) {
254
+ context.index.elements.get(elementId).traceEvents.push(traceEvent);
255
+ }
256
+ });
257
+ }
258
+ function matchDefinitionReference(reference, evidenceId, source, path, context) {
259
+ if (!reference || sameDefinitionReference(reference, context.graph.document.definition)) {
260
+ return null;
261
+ }
262
+ const matches = context.index.definitionReferences.filter((node) => isDefinitionReference(node.details.source)
263
+ && sameDefinitionReference(node.details.source, reference));
264
+ if (matches.length === 1) {
265
+ return matches[0];
266
+ }
267
+ const subject = definitionReferenceSubject(reference);
268
+ addUnmatchedEvidence(context, 'definition-reference', evidenceId, subject, source, 'PROCESS_RUNTIME_TRACE_DEFINITION_REFERENCE_UNMATCHED', path, `Trace lineage definition '${subject}' is absent or ambiguous in the Process presentation graph.`);
269
+ return null;
270
+ }
271
+ function createGraphIndex(graph) {
272
+ const elements = new Map();
273
+ const processNodesByCanonicalId = new Map();
274
+ const definitionReferences = [];
275
+ for (const node of graph.nodes) {
276
+ elements.set(node.id, {
277
+ elementId: node.id,
278
+ traceEvents: [],
279
+ tokens: [],
280
+ waits: [],
281
+ });
282
+ if (node.category === 'process-node') {
283
+ const matches = processNodesByCanonicalId.get(node.canonicalId) ?? [];
284
+ matches.push(node);
285
+ processNodesByCanonicalId.set(node.canonicalId, matches);
286
+ }
287
+ if (node.category === 'definition-reference') {
288
+ definitionReferences.push(node);
289
+ }
290
+ }
291
+ return {
292
+ definitionReferences,
293
+ elements,
294
+ nodes: graph.nodes,
295
+ processNodesByCanonicalId,
296
+ };
297
+ }
298
+ function findSingleProcessNode(canonicalId, index) {
299
+ const matches = index.processNodesByCanonicalId.get(canonicalId) ?? [];
300
+ return matches.length === 1 ? matches[0] : null;
301
+ }
302
+ function findOwnedElement(ownerCanonicalId, canonicalId, index) {
303
+ const matches = index.nodes.filter((node) => node.ownerId === ownerCanonicalId
304
+ && node.canonicalId === canonicalId);
305
+ return matches.length === 1 ? matches[0] : null;
306
+ }
307
+ function findRequestOutcome(ownerCanonicalId, outcome, index) {
308
+ const matches = index.nodes.filter((node) => node.category === 'request-outcome'
309
+ && node.ownerId === ownerCanonicalId
310
+ && node.role === outcome);
311
+ return matches.length === 1 ? matches[0] : null;
312
+ }
313
+ function hasOwnedRequestOutcomes(ownerCanonicalId, index) {
314
+ return index.nodes.some((node) => node.category === 'request-outcome'
315
+ && node.ownerId === ownerCanonicalId);
316
+ }
317
+ function addUnmatchedEvidence(context, kind, evidenceId, reference, source, diagnosticCode, path, message) {
318
+ const id = runtimeIdentity('unmatched', evidenceId, kind, reference);
319
+ if (!context.unmatchedEvidence.has(id)) {
320
+ context.unmatchedEvidence.set(id, deepFreeze({
321
+ evidenceId,
322
+ id,
323
+ kind,
324
+ reference,
325
+ source: cloneWireValue(source),
326
+ }));
327
+ }
328
+ addDiagnostic(context.diagnostics, diagnosticCode, 'warning', path, message, reference, evidenceId);
329
+ }
330
+ function addDiagnostic(diagnostics, code, severity, path, message, subject, evidenceId = null) {
331
+ const id = runtimeIdentity('diagnostic', code, evidenceId ?? '', subject ?? '', ...path);
332
+ if (diagnostics.has(id)) {
333
+ return;
334
+ }
335
+ diagnostics.set(id, deepFreeze({
336
+ code,
337
+ evidenceId,
338
+ id,
339
+ message,
340
+ path: [...path],
341
+ severity,
342
+ subject,
343
+ }));
344
+ }
345
+ function freezeProjectionResult(overlay, diagnostics) {
346
+ return deepFreeze({
347
+ diagnostics: freezeDiagnostics(diagnostics),
348
+ overlay,
349
+ });
350
+ }
351
+ function freezeDiagnostics(diagnostics) {
352
+ return deepFreeze([...diagnostics.values()].sort(compareEvidenceById));
353
+ }
354
+ function sameDefinitionReference(left, right) {
355
+ return left.definitionId === right.definitionId
356
+ && left.revisionId === right.revisionId
357
+ && left.fingerprint.algorithm === right.fingerprint.algorithm
358
+ && left.fingerprint.canonicalization === right.fingerprint.canonicalization
359
+ && left.fingerprint.value === right.fingerprint.value;
360
+ }
361
+ function definitionReferenceSubject(reference) {
362
+ return `${reference.definitionId}@${reference.revisionId}`
363
+ + `#${reference.fingerprint.algorithm}:${reference.fingerprint.canonicalization}:${reference.fingerprint.value}`;
364
+ }
365
+ function isDefinitionReference(value) {
366
+ if (!isRecord(value) || !isRecord(value.fingerprint)) {
367
+ return false;
368
+ }
369
+ return typeof value.definitionId === 'string'
370
+ && typeof value.revisionId === 'string'
371
+ && typeof value.fingerprint.algorithm === 'string'
372
+ && typeof value.fingerprint.canonicalization === 'string'
373
+ && typeof value.fingerprint.value === 'string';
374
+ }
375
+ function runtimeIdentity(kind, ...parts) {
376
+ return `process-runtime/${kind}/${parts.map((part) => encodeURIComponent(part)).join('/')}`;
377
+ }
378
+ function compareEvidenceById(left, right) {
379
+ return compareOrdinal(left.id, right.id);
380
+ }
381
+ //# sourceMappingURL=process-runtime-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-runtime-overlay.js","sourceRoot":"","sources":["../src/process-runtime-overlay.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cohesivesystems/processes-presentation",
3
- "version": "0.1.0-alpha.63",
3
+ "version": "0.1.0-alpha.65",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -15,7 +15,7 @@
15
15
  "!src/**/*.test.ts"
16
16
  ],
17
17
  "dependencies": {
18
- "@cohesivesystems/processes": "0.1.0-alpha.63"
18
+ "@cohesivesystems/processes": "0.1.0-alpha.65"
19
19
  },
20
20
  "devDependencies": {
21
21
  "typescript": "~5.9.3",
@@ -25,7 +25,7 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "description": "Renderer-neutral semantic graph projection for canonical Cohesive Processes.",
28
+ "description": "Renderer-neutral semantic graph and runtime evidence projection for canonical Cohesive Processes.",
29
29
  "keywords": [
30
30
  "cohesive",
31
31
  "processes",
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './process-presentation-graph'
2
+ export * from './process-runtime-overlay'
@@ -18,6 +18,14 @@ import {
18
18
  type ProcessRequestOutcomeBranch,
19
19
  type ValueContract,
20
20
  } from '@cohesivesystems/processes'
21
+ import {
22
+ cloneWireValue,
23
+ deepFreeze,
24
+ isRecord,
25
+ type DeepReadonly,
26
+ } from './process-presentation-values'
27
+
28
+ export type { DeepReadonly } from './process-presentation-values'
21
29
 
22
30
  export const canonicalProcessPresentationCompatibility = Object.freeze({
23
31
  definitionKind: 'process',
@@ -149,15 +157,6 @@ export interface ProcessPresentationProjectionResult {
149
157
  readonly graph: ProcessPresentationGraph | null
150
158
  }
151
159
 
152
- export type DeepReadonly<T> =
153
- T extends (...args: never[]) => unknown
154
- ? T
155
- : T extends readonly (infer TItem)[]
156
- ? readonly DeepReadonly<TItem>[]
157
- : T extends object
158
- ? { readonly [TKey in keyof T]: DeepReadonly<T[TKey]> }
159
- : T
160
-
161
160
  interface MutableElementDetails {
162
161
  definitionReferences: ProcessPresentationDefinitionEvidence[]
163
162
  source: unknown
@@ -1492,10 +1491,6 @@ function isCanonicalProcessAwaitClauseKind(value: string): value is CanonicalPro
1492
1491
  return (canonicalProcessAwaitClauseKinds as readonly string[]).includes(value)
1493
1492
  }
1494
1493
 
1495
- function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
1496
- return typeof value === 'object' && value !== null && !Array.isArray(value)
1497
- }
1498
-
1499
1494
  function readString(value: unknown): string | null {
1500
1495
  return typeof value === 'string' && value.trim().length > 0 ? value : null
1501
1496
  }
@@ -1517,42 +1512,3 @@ function formatPath(path: readonly string[]) {
1517
1512
  ? '/'
1518
1513
  : `/${path.map((segment) => segment.replaceAll('~', '~0').replaceAll('/', '~1')).join('/')}`
1519
1514
  }
1520
-
1521
- function cloneWireValue<T>(value: T): DeepReadonly<T> {
1522
- return cloneWireValueCore(value, new WeakMap()) as DeepReadonly<T>
1523
- }
1524
-
1525
- function cloneWireValueCore(value: unknown, seen: WeakMap<object, unknown>): unknown {
1526
- if (typeof value !== 'object' || value === null) {
1527
- return value
1528
- }
1529
- const existing = seen.get(value)
1530
- if (existing !== undefined) {
1531
- return existing
1532
- }
1533
- if (Array.isArray(value)) {
1534
- const clone: unknown[] = []
1535
- seen.set(value, clone)
1536
- for (const item of value) {
1537
- clone.push(cloneWireValueCore(item, seen))
1538
- }
1539
- return Object.freeze(clone)
1540
- }
1541
-
1542
- const clone: Record<string, unknown> = {}
1543
- seen.set(value, clone)
1544
- for (const [key, item] of Object.entries(value)) {
1545
- clone[key] = cloneWireValueCore(item, seen)
1546
- }
1547
- return Object.freeze(clone)
1548
- }
1549
-
1550
- function deepFreeze<T>(value: T): T {
1551
- if (typeof value !== 'object' || value === null || Object.isFrozen(value)) {
1552
- return value
1553
- }
1554
- for (const nested of Object.values(value)) {
1555
- deepFreeze(nested)
1556
- }
1557
- return Object.freeze(value)
1558
- }
@@ -0,0 +1,55 @@
1
+ export type DeepReadonly<T> =
2
+ T extends (...args: never[]) => unknown
3
+ ? T
4
+ : T extends readonly (infer TItem)[]
5
+ ? readonly DeepReadonly<TItem>[]
6
+ : T extends object
7
+ ? { readonly [TKey in keyof T]: DeepReadonly<T[TKey]> }
8
+ : T
9
+
10
+ export function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
11
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
12
+ }
13
+
14
+ export function compareOrdinal(left: string, right: string): number {
15
+ return left < right ? -1 : left > right ? 1 : 0
16
+ }
17
+
18
+ export function cloneWireValue<T>(value: T): DeepReadonly<T> {
19
+ return cloneWireValueCore(value, new WeakMap()) as DeepReadonly<T>
20
+ }
21
+
22
+ function cloneWireValueCore(value: unknown, seen: WeakMap<object, unknown>): unknown {
23
+ if (typeof value !== 'object' || value === null) {
24
+ return value
25
+ }
26
+ const existing = seen.get(value)
27
+ if (existing !== undefined) {
28
+ return existing
29
+ }
30
+ if (Array.isArray(value)) {
31
+ const clone: unknown[] = []
32
+ seen.set(value, clone)
33
+ for (const item of value) {
34
+ clone.push(cloneWireValueCore(item, seen))
35
+ }
36
+ return Object.freeze(clone)
37
+ }
38
+
39
+ const clone: Record<string, unknown> = {}
40
+ seen.set(value, clone)
41
+ for (const [key, item] of Object.entries(value)) {
42
+ clone[key] = cloneWireValueCore(item, seen)
43
+ }
44
+ return Object.freeze(clone)
45
+ }
46
+
47
+ export function deepFreeze<T>(value: T): T {
48
+ if (typeof value !== 'object' || value === null || Object.isFrozen(value)) {
49
+ return value
50
+ }
51
+ for (const nested of Object.values(value)) {
52
+ deepFreeze(nested)
53
+ }
54
+ return Object.freeze(value)
55
+ }