wabachi 0.1.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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/architecture/canon/authority.d.ts +35 -0
  4. package/dist/architecture/canon/authority.js +76 -0
  5. package/dist/architecture/canon/authority.js.map +1 -0
  6. package/dist/architecture/canon/boundaries.d.ts +31 -0
  7. package/dist/architecture/canon/boundaries.js +73 -0
  8. package/dist/architecture/canon/boundaries.js.map +1 -0
  9. package/dist/architecture/canon/codec.d.ts +10 -0
  10. package/dist/architecture/canon/codec.js +516 -0
  11. package/dist/architecture/canon/codec.js.map +1 -0
  12. package/dist/architecture/canon/constraints.d.ts +60 -0
  13. package/dist/architecture/canon/constraints.js +116 -0
  14. package/dist/architecture/canon/constraints.js.map +1 -0
  15. package/dist/architecture/canon/decisions.d.ts +62 -0
  16. package/dist/architecture/canon/decisions.js +192 -0
  17. package/dist/architecture/canon/decisions.js.map +1 -0
  18. package/dist/architecture/canon/deployment.d.ts +89 -0
  19. package/dist/architecture/canon/deployment.js +156 -0
  20. package/dist/architecture/canon/deployment.js.map +1 -0
  21. package/dist/architecture/canon/document.d.ts +60 -0
  22. package/dist/architecture/canon/document.js +106 -0
  23. package/dist/architecture/canon/document.js.map +1 -0
  24. package/dist/architecture/canon/elements.d.ts +21 -0
  25. package/dist/architecture/canon/elements.js +87 -0
  26. package/dist/architecture/canon/elements.js.map +1 -0
  27. package/dist/architecture/canon/flows.d.ts +37 -0
  28. package/dist/architecture/canon/flows.js +82 -0
  29. package/dist/architecture/canon/flows.js.map +1 -0
  30. package/dist/architecture/canon/identity.d.ts +45 -0
  31. package/dist/architecture/canon/identity.js +83 -0
  32. package/dist/architecture/canon/identity.js.map +1 -0
  33. package/dist/architecture/canon/relationships.d.ts +48 -0
  34. package/dist/architecture/canon/relationships.js +181 -0
  35. package/dist/architecture/canon/relationships.js.map +1 -0
  36. package/dist/architecture/canon/repository-mappings.d.ts +51 -0
  37. package/dist/architecture/canon/repository-mappings.js +134 -0
  38. package/dist/architecture/canon/repository-mappings.js.map +1 -0
  39. package/dist/architecture/canon/responsibilities.d.ts +40 -0
  40. package/dist/architecture/canon/responsibilities.js +89 -0
  41. package/dist/architecture/canon/responsibilities.js.map +1 -0
  42. package/dist/architecture/canon/validate.d.ts +14 -0
  43. package/dist/architecture/canon/validate.js +389 -0
  44. package/dist/architecture/canon/validate.js.map +1 -0
  45. package/dist/architecture/canon/views.d.ts +101 -0
  46. package/dist/architecture/canon/views.js +182 -0
  47. package/dist/architecture/canon/views.js.map +1 -0
  48. package/dist/architecture/cli.d.ts +2 -0
  49. package/dist/architecture/cli.js +158 -0
  50. package/dist/architecture/cli.js.map +1 -0
  51. package/dist/architecture/documentation/html.d.ts +3 -0
  52. package/dist/architecture/documentation/html.js +143 -0
  53. package/dist/architecture/documentation/html.js.map +1 -0
  54. package/dist/architecture/documentation/model.d.ts +46 -0
  55. package/dist/architecture/documentation/model.js +13 -0
  56. package/dist/architecture/documentation/model.js.map +1 -0
  57. package/dist/architecture/documentation/project.d.ts +4 -0
  58. package/dist/architecture/documentation/project.js +166 -0
  59. package/dist/architecture/documentation/project.js.map +1 -0
  60. package/dist/architecture/documentation/site.d.ts +43 -0
  61. package/dist/architecture/documentation/site.js +147 -0
  62. package/dist/architecture/documentation/site.js.map +1 -0
  63. package/dist/architecture/projection/structurizr-export.d.ts +65 -0
  64. package/dist/architecture/projection/structurizr-export.js +136 -0
  65. package/dist/architecture/projection/structurizr-export.js.map +1 -0
  66. package/dist/architecture/projection/structurizr.d.ts +34 -0
  67. package/dist/architecture/projection/structurizr.js +667 -0
  68. package/dist/architecture/projection/structurizr.js.map +1 -0
  69. package/dist/cli.d.ts +1 -0
  70. package/dist/cli.js +143 -0
  71. package/dist/cli.js.map +1 -0
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/runtime/correlation.d.ts +143 -0
  76. package/dist/runtime/correlation.js +919 -0
  77. package/dist/runtime/correlation.js.map +1 -0
  78. package/dist/runtime/facts.d.ts +138 -0
  79. package/dist/runtime/facts.js +614 -0
  80. package/dist/runtime/facts.js.map +1 -0
  81. package/dist/runtime/fixtureProvider.d.ts +10 -0
  82. package/dist/runtime/fixtureProvider.js +30 -0
  83. package/dist/runtime/fixtureProvider.js.map +1 -0
  84. package/dist/runtime/graftProvider.d.ts +8 -0
  85. package/dist/runtime/graftProvider.js +107 -0
  86. package/dist/runtime/graftProvider.js.map +1 -0
  87. package/dist/runtime/graftWiring.d.ts +30 -0
  88. package/dist/runtime/graftWiring.js +3 -0
  89. package/dist/runtime/graftWiring.js.map +1 -0
  90. package/dist/runtime/manifest.d.ts +17 -0
  91. package/dist/runtime/manifest.js +39 -0
  92. package/dist/runtime/manifest.js.map +1 -0
  93. package/dist/runtime/matrix.d.ts +337 -0
  94. package/dist/runtime/matrix.js +1485 -0
  95. package/dist/runtime/matrix.js.map +1 -0
  96. package/dist/runtime/observation.d.ts +36 -0
  97. package/dist/runtime/observation.js +3 -0
  98. package/dist/runtime/observation.js.map +1 -0
  99. package/dist/runtime/provider.d.ts +34 -0
  100. package/dist/runtime/provider.js +2 -0
  101. package/dist/runtime/provider.js.map +1 -0
  102. package/dist/runtime/repository.d.ts +20 -0
  103. package/dist/runtime/repository.js +55 -0
  104. package/dist/runtime/repository.js.map +1 -0
  105. package/dist/runtime/run.d.ts +21 -0
  106. package/dist/runtime/run.js +80 -0
  107. package/dist/runtime/run.js.map +1 -0
  108. package/dist/runtime/scipProvider.d.ts +11 -0
  109. package/dist/runtime/scipProvider.js +126 -0
  110. package/dist/runtime/scipProvider.js.map +1 -0
  111. package/dist/runtime/typescriptProvider.d.ts +10 -0
  112. package/dist/runtime/typescriptProvider.js +289 -0
  113. package/dist/runtime/typescriptProvider.js.map +1 -0
  114. package/dist/runtime/workflow.d.ts +30 -0
  115. package/dist/runtime/workflow.js +153 -0
  116. package/dist/runtime/workflow.js.map +1 -0
  117. package/package.json +72 -0
@@ -0,0 +1,614 @@
1
+ import { createHash } from "node:crypto";
2
+ import { correlateProviderEntities, normalizeRepositoryPath, normalizeSourceRange, providerEntitiesFromAllObservations, providerEntitiesFromObservations, } from "./correlation.js";
3
+ /** Version of the minimal normalized fact interchange envelope. */
4
+ export const FACT_SCHEMA_VERSION = 1;
5
+ const COMMON_PREDICATES = new Set([
6
+ "defines",
7
+ "references",
8
+ "calls",
9
+ "imports",
10
+ "exports",
11
+ "extends",
12
+ "implements",
13
+ "type-of",
14
+ "reads",
15
+ "writes",
16
+ "flows-to",
17
+ "depends-on",
18
+ ]);
19
+ /**
20
+ * Normalizes provider observations and correlates their endpoints with the
21
+ * existing deterministic entity layer. Provider-native IDs, payloads and
22
+ * source evidence remain present on every output record.
23
+ */
24
+ export function normalizeFacts(observations, options = {}) {
25
+ const runtimeObservations = observations;
26
+ const preferredEntities = providerEntitiesFromObservations(runtimeObservations);
27
+ const allEntities = providerEntitiesFromAllObservations(runtimeObservations);
28
+ const preferredByNative = groupByNative(preferredEntities);
29
+ const allByNative = groupByNative(allEntities);
30
+ const selectedEntities = selectEntityInputs(preferredByNative, allByNative);
31
+ const correlation = correlateProviderEntities(selectedEntities);
32
+ const assignments = indexAssignments(correlation);
33
+ const facts = [];
34
+ const unsupported = [];
35
+ for (const observation of observations) {
36
+ const endpointInputs = endpointInputsForObservation(observation, preferredByNative, allByNative);
37
+ const subjectInput = endpointInputs.find((input) => input.id === observation.subject.id);
38
+ const subject = toFactEntityReference(subjectInput ?? fallbackEntityInput(observation, observation.subject), assignments);
39
+ let object;
40
+ if (isObservationEntity(observation.object)) {
41
+ const objectEntity = observation.object;
42
+ object = toFactEntityReference(endpointInputs.find((input) => input.id === objectEntity.id) ?? fallbackEntityInput(observation, objectEntity), assignments);
43
+ }
44
+ else {
45
+ object = { value: observation.object.value.trim() };
46
+ }
47
+ if (isCommonPredicate(observation.predicate)) {
48
+ const normalized = normalizePredicateEndpoints(observation, subject, object);
49
+ facts.push(toFactEnvelope(observation, normalized.subject, normalized.object));
50
+ }
51
+ else {
52
+ unsupported.push(toUnsupportedEvidence(observation, subject, object));
53
+ }
54
+ }
55
+ const sortedFacts = sortFactsForOutput(facts);
56
+ facts.length = 0;
57
+ for (const fact of sortedFacts)
58
+ facts.push(fact);
59
+ unsupported.sort(compareUnsupportedForOutput);
60
+ const comparisons = options.includeComparisons === false ? [] : compareFactSets(facts, { providers: options.providers, unsupported });
61
+ return {
62
+ schemaVersion: FACT_SCHEMA_VERSION,
63
+ facts,
64
+ unsupported,
65
+ correlation,
66
+ comparisons,
67
+ };
68
+ }
69
+ /**
70
+ * Providers encode a definition in opposite directions: TypeScript commonly
71
+ * emits `module defines symbol`, while SCIP emits `symbol defines document`.
72
+ * The comparable form is `defined symbol defines source path`; the original
73
+ * observation and native payload remain in the evidence fields.
74
+ */
75
+ function normalizePredicateEndpoints(observation, subject, object) {
76
+ if (observation.predicate !== "defines")
77
+ return { subject, object };
78
+ const definedEntity = isObservationEntity(observation.object) ? object : subject;
79
+ return {
80
+ subject: definedEntity,
81
+ object: { value: normalizeRepositoryPath(observation.source.path) },
82
+ };
83
+ }
84
+ /** Alias using the vocabulary of the provider observation layer. */
85
+ export const normalizeObservations = normalizeFacts;
86
+ /** Returns true when a predicate has a defined common semantic mapping. */
87
+ export function isCommonPredicate(value) {
88
+ return COMMON_PREDICATES.has(value);
89
+ }
90
+ /**
91
+ * Equality deliberately excludes provider version, source span, native
92
+ * payload and factId. Canonical entity IDs and the pinned repository revision
93
+ * are the cross-provider comparison basis.
94
+ */
95
+ export function factEqualityKey(fact) {
96
+ return stableSerialize({
97
+ repository: fact.repository,
98
+ subject: factEntityEqualityKey(fact.subject),
99
+ predicate: fact.predicate,
100
+ object: isFactEntityReference(fact.object)
101
+ ? { entity: factEntityEqualityKey(fact.object) }
102
+ : { value: fact.object.value.trim() },
103
+ });
104
+ }
105
+ /** Deterministic equality comparison for normalized facts. */
106
+ export function areEquivalentFacts(left, right) {
107
+ return factEqualityKey(left) === factEqualityKey(right);
108
+ }
109
+ /**
110
+ * Compares one logical fact group. No facts means absence of evidence; an
111
+ * unsupported record is kept distinct from that absence; differing values
112
+ * are a conflict rather than a winner-takes-all merge.
113
+ */
114
+ export function compareFacts(facts, options = {}) {
115
+ const orderedFacts = sortFactsForOutput(facts);
116
+ const unsupported = [...(options.unsupported ?? [])].sort(compareUnsupportedForOutput);
117
+ const keys = [...new Set(orderedFacts.map(factEqualityKey))].sort();
118
+ const providerMap = new Map();
119
+ for (const fact of orderedFacts)
120
+ providerMap.set(providerKey(fact.provider), fact.provider);
121
+ for (const evidence of unsupported)
122
+ providerMap.set(providerKey(evidence.provider), evidence.provider);
123
+ const providers = [...providerMap.values()].sort(compareProviders);
124
+ let state;
125
+ if (orderedFacts.length === 0) {
126
+ state = unsupported.length > 0 ? "unsupported" : "absent";
127
+ }
128
+ else if (keys.length > 1) {
129
+ state = "conflict";
130
+ }
131
+ else {
132
+ const expected = uniqueProviderKeys(options.providers ?? []);
133
+ const observed = new Set(orderedFacts.map((fact) => providerKey(fact.provider)));
134
+ const unsupportedExpected = unsupported.some((evidence) => expected.has(providerKey(evidence.provider)));
135
+ const coversExpected = expected.size > 0 && [...expected].every((key) => observed.has(key));
136
+ state =
137
+ coversExpected && !unsupportedExpected
138
+ ? "equivalent"
139
+ : observed.size > 1 && expected.size === 0 && !unsupportedExpected
140
+ ? "equivalent"
141
+ : "provider-only";
142
+ }
143
+ const firstFact = orderedFacts[0];
144
+ const firstUnsupported = unsupported[0];
145
+ return {
146
+ key: firstFact === undefined
147
+ ? firstUnsupported === undefined
148
+ ? "absent"
149
+ : comparisonGroupKey(firstUnsupported)
150
+ : comparisonGroupKey(firstFact),
151
+ state,
152
+ subject: firstFact?.subject ?? firstUnsupported?.subject,
153
+ predicate: firstFact?.predicate ?? firstUnsupported?.predicate,
154
+ facts: orderedFacts,
155
+ unsupported,
156
+ providers,
157
+ };
158
+ }
159
+ /** Groups facts by subject/predicate and reports overlap and disagreement. */
160
+ export function compareFactSets(facts, options = {}) {
161
+ const groups = new Map();
162
+ for (const fact of facts) {
163
+ const group = groups.get(comparisonGroupKey(fact)) ?? { facts: [], unsupported: [] };
164
+ group.facts.push(fact);
165
+ groups.set(comparisonGroupKey(fact), group);
166
+ }
167
+ for (const evidence of options.unsupported ?? []) {
168
+ const group = groups.get(comparisonGroupKey(evidence)) ?? { facts: [], unsupported: [] };
169
+ group.unsupported.push(evidence);
170
+ groups.set(comparisonGroupKey(evidence), group);
171
+ }
172
+ return [...groups.entries()]
173
+ .sort(([left], [right]) => left.localeCompare(right))
174
+ .map(([, group]) => compareFacts(group.facts, { providers: options.providers, unsupported: group.unsupported }));
175
+ }
176
+ /** Alias for callers that use the normalized-fact terminology. */
177
+ export const compareNormalizedFacts = compareFacts;
178
+ /** Runtime validation for a versioned fact envelope. */
179
+ export function validateFactEnvelope(value) {
180
+ const errors = [];
181
+ const record = asRecord(value);
182
+ if (record === undefined)
183
+ return invalid("envelope must be an object");
184
+ if (record.schemaVersion !== FACT_SCHEMA_VERSION)
185
+ errors.push("schemaVersion must be 1");
186
+ if (record.status !== "present")
187
+ errors.push("status must be present");
188
+ if (typeof record.factId !== "string" || record.factId.length === 0)
189
+ errors.push("factId must be a non-empty string");
190
+ if (!isCommonPredicate(record.predicate))
191
+ errors.push("predicate is not a supported common predicate");
192
+ validateEntityReference(record.subject, "subject", errors);
193
+ validateFactObject(record.object, "object", errors);
194
+ validateProvider(record.provider, "provider", errors);
195
+ validateRepository(record.repository, "repository", errors);
196
+ validateSource(record.source, "source", errors);
197
+ if (record.derivationClass !== "deterministic" && record.derivationClass !== "non-deterministic") {
198
+ errors.push("derivationClass must be deterministic or non-deterministic");
199
+ }
200
+ if (record.determinism !== record.derivationClass)
201
+ errors.push("determinism must equal derivationClass");
202
+ validateNativeEvidence(record.nativeEvidence, errors);
203
+ return { valid: errors.length === 0, errors };
204
+ }
205
+ /** Runtime validation for the provider observation envelope before normalization. */
206
+ export function validateObservationEnvelope(value) {
207
+ const errors = [];
208
+ const record = asRecord(value);
209
+ if (record === undefined)
210
+ return invalid("observation must be an object");
211
+ if (record.schemaVersion !== 1)
212
+ errors.push("schemaVersion must be 1");
213
+ if (!isCommonPredicate(record.predicate))
214
+ errors.push("predicate is not a supported observation predicate");
215
+ validateObservationEntity(record.subject, "subject", errors);
216
+ validateObservationObject(record.object, "object", errors);
217
+ validateProvider(record.provider, "provider", errors);
218
+ validateRepository(record.repository, "repository", errors);
219
+ validateSource(record.source, "source", errors);
220
+ if (record.determinism !== "deterministic" && record.determinism !== "non-deterministic") {
221
+ errors.push("determinism must be deterministic or non-deterministic");
222
+ }
223
+ if (!("providerNative" in record))
224
+ errors.push("providerNative is required");
225
+ return { valid: errors.length === 0, errors };
226
+ }
227
+ export function isFactEnvelope(value) {
228
+ return validateFactEnvelope(value).valid;
229
+ }
230
+ export function assertValidFactEnvelope(value) {
231
+ const result = validateFactEnvelope(value);
232
+ if (!result.valid)
233
+ throw new Error(`invalid fact envelope: ${result.errors.join("; ")}`);
234
+ }
235
+ function toFactEnvelope(observation, subject, object) {
236
+ const nativeEvidence = nativeEvidenceReference(observation);
237
+ const base = {
238
+ schemaVersion: FACT_SCHEMA_VERSION,
239
+ factId: "",
240
+ status: "present",
241
+ subject,
242
+ predicate: observation.predicate,
243
+ object,
244
+ provider: observation.provider,
245
+ repository: observation.repository,
246
+ source: normalizedSource(observation.source),
247
+ derivationClass: observation.determinism,
248
+ determinism: observation.determinism,
249
+ nativeEvidence,
250
+ providerNative: observation.providerNative,
251
+ };
252
+ return {
253
+ ...base,
254
+ factId: digest({ equality: factEqualityKey(base), nativeEvidence: nativeEvidence.id }),
255
+ };
256
+ }
257
+ function toUnsupportedEvidence(observation, subject, object) {
258
+ return {
259
+ schemaVersion: FACT_SCHEMA_VERSION,
260
+ status: "unsupported",
261
+ subject,
262
+ predicate: observation.predicate,
263
+ object,
264
+ provider: observation.provider,
265
+ repository: observation.repository,
266
+ source: normalizedSource(observation.source),
267
+ derivationClass: observation.determinism,
268
+ determinism: observation.determinism,
269
+ nativeEvidence: nativeEvidenceReference(observation),
270
+ providerNative: observation.providerNative,
271
+ };
272
+ }
273
+ function nativeEvidenceReference(observation) {
274
+ return {
275
+ id: `ne_${digest({
276
+ provider: observation.provider,
277
+ repository: observation.repository,
278
+ subject: observation.subject,
279
+ predicate: observation.predicate,
280
+ object: observation.object,
281
+ source: observation.source,
282
+ providerNative: observation.providerNative,
283
+ })}`,
284
+ provider: observation.provider,
285
+ source: normalizedSource(observation.source),
286
+ observation,
287
+ providerNative: observation.providerNative,
288
+ };
289
+ }
290
+ function normalizedSource(source) {
291
+ return {
292
+ path: normalizeRepositoryPath(source.path),
293
+ ...(source.span === undefined ? {} : { span: source.span }),
294
+ };
295
+ }
296
+ function selectEntityInputs(preferredByNative, allByNative) {
297
+ const selected = [...preferredByNative.values()].flat();
298
+ for (const [nativeKey, candidates] of allByNative) {
299
+ // Definitions are the correlation authority when a provider emits them.
300
+ // Relation occurrences still remain in nativeEvidence and are resolved
301
+ // against this smaller index while normalizing each fact. Keeping every
302
+ // occurrence here turns large repositories into an O(n²) ambiguity graph.
303
+ if ((preferredByNative.get(nativeKey) ?? []).length > 0)
304
+ continue;
305
+ const representative = [...candidates].sort((left, right) => {
306
+ const fingerprint = entityFingerprint(left).localeCompare(entityFingerprint(right));
307
+ return fingerprint !== 0
308
+ ? fingerprint
309
+ : stableSerialize(left.providerNative).localeCompare(stableSerialize(right.providerNative));
310
+ })[0];
311
+ if (representative !== undefined)
312
+ selected.push(representative);
313
+ }
314
+ return deduplicateEntityInputs(selected);
315
+ }
316
+ function endpointInputsForObservation(observation, preferredByNative, allByNative) {
317
+ const endpointInputs = providerEntitiesFromAllObservations([observation]);
318
+ return endpointInputs.map((input) => {
319
+ const preferredCandidates = preferredByNative.get(providerNativeKey(input)) ?? [];
320
+ if (preferredCandidates.length === 1)
321
+ return preferredCandidates[0];
322
+ const allCandidates = allByNative.get(providerNativeKey(input)) ?? [];
323
+ const exact = allCandidates.filter((candidate) => entityFingerprint(candidate) === entityFingerprint(input));
324
+ if (exact.length === 1)
325
+ return exact[0];
326
+ return input;
327
+ });
328
+ }
329
+ function fallbackEntityInput(observation, entity) {
330
+ return {
331
+ provider: observation.provider,
332
+ repository: observation.repository,
333
+ id: entity.id,
334
+ kind: entity.kind,
335
+ path: observation.source.path,
336
+ span: observation.source.span,
337
+ providerNative: observation.providerNative,
338
+ };
339
+ }
340
+ function groupByNative(inputs) {
341
+ const result = new Map();
342
+ for (const input of inputs) {
343
+ const key = providerNativeKey(input);
344
+ const list = result.get(key) ?? [];
345
+ list.push(input);
346
+ result.set(key, list);
347
+ }
348
+ return result;
349
+ }
350
+ function deduplicateEntityInputs(inputs) {
351
+ const byKey = new Map();
352
+ for (const input of inputs) {
353
+ const key = entityFingerprint(input);
354
+ const previous = byKey.get(key);
355
+ if (previous === undefined ||
356
+ stableSerialize(input.providerNative).localeCompare(stableSerialize(previous.providerNative)) < 0) {
357
+ byKey.set(key, input);
358
+ }
359
+ }
360
+ return [...byKey.values()].sort((left, right) => entityFingerprint(left).localeCompare(entityFingerprint(right)));
361
+ }
362
+ function indexAssignments(correlation) {
363
+ const byNative = new Map();
364
+ const byFingerprint = new Map();
365
+ for (const entity of correlation.canonicalEntities) {
366
+ for (const member of entity.members) {
367
+ const assignment = { entity, member };
368
+ addAssignment(byNative, memberNativeKey(member), assignment);
369
+ addAssignment(byFingerprint, memberFingerprint(member), assignment);
370
+ }
371
+ }
372
+ return { byNative, byFingerprint };
373
+ }
374
+ function addAssignment(map, key, assignment) {
375
+ const existing = map.get(key) ?? [];
376
+ if (!existing.some((item) => item.entity.canonicalId === assignment.entity.canonicalId))
377
+ existing.push(assignment);
378
+ map.set(key, existing);
379
+ }
380
+ function toFactEntityReference(input, assignments) {
381
+ const exact = assignments.byFingerprint.get(entityFingerprint(input)) ?? [];
382
+ const native = assignments.byNative.get(providerNativeKey(input)) ?? [];
383
+ // `indexAssignments` already deduplicates each native/fingerprint bucket by
384
+ // canonical entity. Rebuilding a Map for every high-volume occurrence made
385
+ // ambiguous native IDs dominate large-repository normalization.
386
+ const candidates = exact.length > 0 ? exact : native;
387
+ const only = candidates.length === 1 ? candidates[0] : undefined;
388
+ const correlationStatus = candidates.length > 1 ? "ambiguous" : (only?.entity.status ?? "unmatched");
389
+ const candidateCanonicalIds = (candidates.length > 1
390
+ ? candidates.map((candidate) => candidate.entity.canonicalId)
391
+ : [...(only?.entity.candidateCanonicalIds ?? [])]).sort();
392
+ return {
393
+ ...(only === undefined || correlationStatus === "ambiguous" ? {} : { canonicalId: only.entity.canonicalId }),
394
+ candidateCanonicalIds,
395
+ id: input.id.trim(),
396
+ nativeId: input.id.trim(),
397
+ kind: input.kind.trim() || "unknown",
398
+ provider: input.provider,
399
+ correlationStatus,
400
+ ...(input.path === undefined && input.source?.path === undefined
401
+ ? {}
402
+ : { path: normalizeRepositoryPath(input.path ?? input.source?.path ?? ".") }),
403
+ ...(normalizeInputRange(input) === undefined ? {} : { range: normalizeInputRange(input) }),
404
+ };
405
+ }
406
+ function entityFingerprint(input) {
407
+ return stableSerialize({
408
+ provider: providerKey(input.provider),
409
+ id: input.id.trim(),
410
+ kind: input.kind.trim() || "unknown",
411
+ path: input.path === undefined && input.source?.path === undefined
412
+ ? undefined
413
+ : normalizeRepositoryPath(input.path ?? input.source?.path ?? "."),
414
+ range: normalizeInputRange(input),
415
+ });
416
+ }
417
+ function memberFingerprint(member) {
418
+ return stableSerialize({
419
+ provider: providerKey(member.provider),
420
+ id: member.nativeId,
421
+ kind: member.kind,
422
+ path: member.path,
423
+ range: member.range,
424
+ });
425
+ }
426
+ function providerNativeKey(input) {
427
+ return `${providerKey(input.provider)}\u0000${input.id.trim()}`;
428
+ }
429
+ function memberNativeKey(member) {
430
+ return `${providerKey(member.provider)}\u0000${member.nativeId}`;
431
+ }
432
+ function normalizeInputRange(input) {
433
+ return normalizeSourceRange(input.range ?? input.span ?? input.source?.span, input.provider.id, input.rangeBase);
434
+ }
435
+ function comparisonGroupKey(value) {
436
+ return stableSerialize({
437
+ repository: value.repository,
438
+ subject: factEntityEqualityKey(value.subject),
439
+ predicate: value.predicate,
440
+ });
441
+ }
442
+ function factEntityEqualityKey(entity) {
443
+ return entity.canonicalId === undefined
444
+ ? {
445
+ candidates: entity.candidateCanonicalIds,
446
+ provider: providerKey(entity.provider),
447
+ nativeId: entity.nativeId,
448
+ kind: entity.kind,
449
+ }
450
+ : { canonicalId: entity.canonicalId };
451
+ }
452
+ function isFactEntityReference(value) {
453
+ return "nativeId" in value && "provider" in value;
454
+ }
455
+ function isObservationEntity(value) {
456
+ const record = asRecord(value);
457
+ return record !== undefined && typeof record.id === "string" && typeof record.kind === "string";
458
+ }
459
+ function sortFactsForOutput(values) {
460
+ const equalityKeys = new WeakMap();
461
+ const keyFor = (fact) => {
462
+ const cached = equalityKeys.get(fact);
463
+ if (cached !== undefined)
464
+ return cached;
465
+ const key = factEqualityKey(fact);
466
+ equalityKeys.set(fact, key);
467
+ return key;
468
+ };
469
+ return [...values].sort((left, right) => {
470
+ const leftKey = keyFor(left);
471
+ const rightKey = keyFor(right);
472
+ if (leftKey < rightKey)
473
+ return -1;
474
+ if (leftKey > rightKey)
475
+ return 1;
476
+ if (left.factId < right.factId)
477
+ return -1;
478
+ if (left.factId > right.factId)
479
+ return 1;
480
+ return 0;
481
+ });
482
+ }
483
+ function compareUnsupportedForOutput(left, right) {
484
+ const leftKey = stableSerialize({ group: comparisonGroupKey(left), native: left.nativeEvidence.id });
485
+ const rightKey = stableSerialize({ group: comparisonGroupKey(right), native: right.nativeEvidence.id });
486
+ return leftKey.localeCompare(rightKey);
487
+ }
488
+ function compareProviders(left, right) {
489
+ return providerKey(left).localeCompare(providerKey(right));
490
+ }
491
+ function providerKey(provider) {
492
+ return `${provider.id}\u0000${provider.version}\u0000${provider.determinism}`;
493
+ }
494
+ function uniqueProviderKeys(providers) {
495
+ return new Set(providers.map(providerKey));
496
+ }
497
+ function digest(value) {
498
+ return createHash("sha256").update(stableSerialize(value)).digest("hex");
499
+ }
500
+ function invalid(message) {
501
+ return { valid: false, errors: [message] };
502
+ }
503
+ function validateEntityReference(value, path, errors) {
504
+ const record = asRecord(value);
505
+ if (record === undefined) {
506
+ errors.push(`${path} must be an entity reference`);
507
+ return;
508
+ }
509
+ if (typeof record.id !== "string" || typeof record.nativeId !== "string" || typeof record.kind !== "string") {
510
+ errors.push(`${path} must retain id, nativeId and kind`);
511
+ }
512
+ if (record.canonicalId !== undefined && typeof record.canonicalId !== "string") {
513
+ errors.push(`${path}.canonicalId must be a string when present`);
514
+ }
515
+ if (!Array.isArray(record.candidateCanonicalIds) ||
516
+ !record.candidateCanonicalIds.every((id) => typeof id === "string")) {
517
+ errors.push(`${path}.candidateCanonicalIds must be a string array`);
518
+ }
519
+ validateProvider(record.provider, `${path}.provider`, errors);
520
+ if (record.correlationStatus !== "matched" &&
521
+ record.correlationStatus !== "probable" &&
522
+ record.correlationStatus !== "ambiguous" &&
523
+ record.correlationStatus !== "unmatched") {
524
+ errors.push(`${path}.correlationStatus is invalid`);
525
+ }
526
+ }
527
+ function validateFactObject(value, path, errors) {
528
+ const record = asRecord(value);
529
+ if (record === undefined) {
530
+ errors.push(`${path} must be an entity or scalar value`);
531
+ return;
532
+ }
533
+ if (typeof record.value === "string" && Object.keys(record).length === 1)
534
+ return;
535
+ validateEntityReference(value, path, errors);
536
+ }
537
+ function validateObservationEntity(value, path, errors) {
538
+ const record = asRecord(value);
539
+ if (record === undefined || typeof record.id !== "string" || typeof record.kind !== "string") {
540
+ errors.push(`${path} must contain string id and kind`);
541
+ }
542
+ }
543
+ function validateObservationObject(value, path, errors) {
544
+ const record = asRecord(value);
545
+ if (record === undefined) {
546
+ errors.push(`${path} must be an entity or scalar value`);
547
+ return;
548
+ }
549
+ if (typeof record.value === "string" && Object.keys(record).length === 1)
550
+ return;
551
+ validateObservationEntity(value, path, errors);
552
+ }
553
+ function validateProvider(value, path, errors) {
554
+ const record = asRecord(value);
555
+ if (record === undefined || typeof record.id !== "string" || typeof record.version !== "string") {
556
+ errors.push(`${path} must contain string id and version`);
557
+ return;
558
+ }
559
+ if (record.determinism !== "deterministic" && record.determinism !== "non-deterministic") {
560
+ errors.push(`${path}.determinism is invalid`);
561
+ }
562
+ }
563
+ function validateRepository(value, path, errors) {
564
+ const record = asRecord(value);
565
+ if (record === undefined ||
566
+ typeof record.source !== "string" ||
567
+ typeof record.commitSha !== "string" ||
568
+ record.commitSha.length === 0) {
569
+ errors.push(`${path} must contain source and pinned commitSha`);
570
+ }
571
+ }
572
+ function validateSource(value, path, errors) {
573
+ const record = asRecord(value);
574
+ if (record === undefined || typeof record.path !== "string" || record.path.length === 0) {
575
+ errors.push(`${path} must contain a path`);
576
+ }
577
+ }
578
+ function validateNativeEvidence(value, errors) {
579
+ const record = asRecord(value);
580
+ if (record === undefined || typeof record.id !== "string" || record.id.length === 0) {
581
+ errors.push("nativeEvidence must contain a stable id");
582
+ return;
583
+ }
584
+ validateProvider(record.provider, "nativeEvidence.provider", errors);
585
+ validateSource(record.source, "nativeEvidence.source", errors);
586
+ }
587
+ function asRecord(value) {
588
+ return typeof value === "object" && value !== null && !Array.isArray(value)
589
+ ? value
590
+ : undefined;
591
+ }
592
+ function stableSerialize(value) {
593
+ if (value === null)
594
+ return "null";
595
+ if (value === undefined)
596
+ return "undefined";
597
+ if (typeof value === "string")
598
+ return JSON.stringify(value);
599
+ if (typeof value === "number" || typeof value === "boolean")
600
+ return JSON.stringify(value);
601
+ if (typeof value === "bigint")
602
+ return `${value.toString()}n`;
603
+ if (Array.isArray(value))
604
+ return `[${value.map((item) => stableSerialize(item)).join(",")}]`;
605
+ if (typeof value === "object") {
606
+ const record = value;
607
+ return `{${Object.keys(record)
608
+ .sort()
609
+ .map((key) => `${JSON.stringify(key)}:${stableSerialize(record[key])}`)
610
+ .join(",")}}`;
611
+ }
612
+ return JSON.stringify(String(value));
613
+ }
614
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/runtime/facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Provider } from "./provider.js";
2
+ /**
3
+ * Minimal deterministic provider used to exercise the provider contract in
4
+ * tests and as a template for future concrete providers. It writes one raw
5
+ * artifact listing the workspace's top-level entries.
6
+ */
7
+ export declare function createFixtureProvider(options?: {
8
+ readonly id?: string;
9
+ readonly available?: boolean;
10
+ }): Provider;