@ifc-lite/sdk 9.4.0 → 9.5.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 (63) hide show
  1. package/README.md +29 -0
  2. package/dist/review/capture-budget.d.ts.map +1 -1
  3. package/dist/review/capture-budget.js +9 -0
  4. package/dist/review/capture-budget.js.map +1 -1
  5. package/dist/review/capture-ownership.d.ts +12 -0
  6. package/dist/review/capture-ownership.d.ts.map +1 -0
  7. package/dist/review/capture-ownership.js +8 -0
  8. package/dist/review/capture-ownership.js.map +1 -0
  9. package/dist/review/capture-types.d.ts +14 -0
  10. package/dist/review/capture-types.d.ts.map +1 -1
  11. package/dist/review/cards.js +1 -1
  12. package/dist/review/cards.js.map +1 -1
  13. package/dist/review/identity.d.ts +1 -1
  14. package/dist/review/identity.d.ts.map +1 -1
  15. package/dist/review/identity.js +7 -2
  16. package/dist/review/identity.js.map +1 -1
  17. package/dist/review/native-captures.d.ts +4 -0
  18. package/dist/review/native-captures.d.ts.map +1 -1
  19. package/dist/review/native-captures.js +9 -6
  20. package/dist/review/native-captures.js.map +1 -1
  21. package/dist/review/native-identity-table.d.ts +8 -0
  22. package/dist/review/native-identity-table.d.ts.map +1 -0
  23. package/dist/review/native-identity-table.js +29 -0
  24. package/dist/review/native-identity-table.js.map +1 -0
  25. package/dist/review/portable-bindings.d.ts +7 -0
  26. package/dist/review/portable-bindings.d.ts.map +1 -0
  27. package/dist/review/portable-bindings.js +88 -0
  28. package/dist/review/portable-bindings.js.map +1 -0
  29. package/dist/review/portable-native-owners.d.ts +23 -0
  30. package/dist/review/portable-native-owners.d.ts.map +1 -0
  31. package/dist/review/portable-native-owners.js +127 -0
  32. package/dist/review/portable-native-owners.js.map +1 -0
  33. package/dist/review/portable-projection.d.ts +11 -0
  34. package/dist/review/portable-projection.d.ts.map +1 -0
  35. package/dist/review/portable-projection.js +104 -0
  36. package/dist/review/portable-projection.js.map +1 -0
  37. package/dist/review/portable-report-metadata.d.ts +1 -0
  38. package/dist/review/portable-report-metadata.d.ts.map +1 -1
  39. package/dist/review/portable-report-metadata.js +5 -2
  40. package/dist/review/portable-report-metadata.js.map +1 -1
  41. package/dist/review/portable-snapshot.d.ts +89 -0
  42. package/dist/review/portable-snapshot.d.ts.map +1 -0
  43. package/dist/review/portable-snapshot.js +164 -0
  44. package/dist/review/portable-snapshot.js.map +1 -0
  45. package/dist/review/portable-source-contract.d.ts +3 -0
  46. package/dist/review/portable-source-contract.d.ts.map +1 -0
  47. package/dist/review/portable-source-contract.js +8 -0
  48. package/dist/review/portable-source-contract.js.map +1 -0
  49. package/dist/review/portable-validation-evidence.d.ts +2 -1
  50. package/dist/review/portable-validation-evidence.d.ts.map +1 -1
  51. package/dist/review/portable-validation-evidence.js +3 -1
  52. package/dist/review/portable-validation-evidence.js.map +1 -1
  53. package/dist/review/saved-validation.d.ts +2 -0
  54. package/dist/review/saved-validation.d.ts.map +1 -1
  55. package/dist/review/saved-validation.js +1 -1
  56. package/dist/review/saved-validation.js.map +1 -1
  57. package/dist/review/types.d.ts +2 -0
  58. package/dist/review/types.d.ts.map +1 -1
  59. package/dist/review.d.ts +2 -0
  60. package/dist/review.d.ts.map +1 -1
  61. package/dist/review.js +2 -0
  62. package/dist/review.js.map +1 -1
  63. package/package.json +9 -9
@@ -0,0 +1,127 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { reviewSHA256 } from './capture-budget.js';
5
+ import { targetState } from './capture-ownership.js';
6
+ const refused = (refusal) => ({ ok: false, refusal });
7
+ /** Read-only source binding does not attest that an imported producer ran.
8
+ * All target leases are acquired synchronously before the FIRST source await.
9
+ * Projection stays inside the final lease/permission check's synchronous turn.
10
+ */
11
+ export async function withPortableOwners(liveModels, allowed, project, signal) {
12
+ try {
13
+ return await readOwners(liveModels, allowed, project, signal);
14
+ }
15
+ catch {
16
+ console.warn('Portable Review ownership is unavailable; imported evidence remains unbound.');
17
+ return refused(signal?.aborted ? 'aborted' : 'source-unavailable');
18
+ }
19
+ }
20
+ async function readOwners(liveModels, allowed, project, signal) {
21
+ const models = liveModels();
22
+ // The same model/source/value bounds as native Review. No partial index.
23
+ if (models.length > 64 || models.some(model => model.id.length > 1_024 || model.name.length > 4_096)
24
+ || models.reduce((sum, model) => sum + model.source.byteLength, 0) > 67_108_864)
25
+ return refused('work-bound');
26
+ if (new Set(models.map(model => model.id)).size !== models.length)
27
+ return refused('identity-ambiguous');
28
+ const targets = [];
29
+ let declaredRows = 0;
30
+ for (const model of models) {
31
+ if (!allowed(model.id))
32
+ return refused('scope');
33
+ const view = model.mutationView(), revision = view?.getMutationRevision() ?? 0;
34
+ const identity = model.identityTable;
35
+ if (identity && (!Number.isSafeInteger(identity.count) || identity.count < 0))
36
+ return refused('identity-unavailable');
37
+ declaredRows += identity?.count ?? 0;
38
+ if (declaredRows > 100_000)
39
+ return refused('work-bound');
40
+ targets.push({ model, view, revision, identity, sourceBytes: model.source.byteLength, sourceKey: model.source.contentKey });
41
+ }
42
+ const ownership = () => {
43
+ if (signal?.aborted)
44
+ return 'aborted';
45
+ const current = liveModels();
46
+ if (current.length !== models.length || current.length > 64)
47
+ return 'target-changed';
48
+ for (const target of targets) {
49
+ if (!allowed(target.model.id))
50
+ return 'scope';
51
+ const live = current.find(model => model.id === target.model.id);
52
+ if (targetState(target, current).stale || !live
53
+ || live.source.byteLength !== target.sourceBytes || live.source.contentKey !== target.sourceKey
54
+ || (!!live.identityTable !== !!target.identity)
55
+ || (target.identity && (live.identityTable?.owner !== target.identity.owner
56
+ || live.identityTable.count !== target.identity.count
57
+ || live.identityTable.expressIdColumn !== target.identity.expressIdColumn
58
+ || live.identityTable.GlobalIdColumn !== target.identity.GlobalIdColumn
59
+ || live.identityTable.stringTable !== target.identity.stringTable)))
60
+ return 'target-changed';
61
+ }
62
+ return null;
63
+ };
64
+ const owners = [];
65
+ const hashes = new Set();
66
+ const unavailable = new Map();
67
+ let rows = 0, identityText = 0;
68
+ try {
69
+ for (const target of targets) {
70
+ const before = ownership();
71
+ if (before)
72
+ return refused(before);
73
+ // Unprovable peers remain leased but cannot bind supplied records.
74
+ if (!target.sourceBytes || !target.sourceKey)
75
+ continue;
76
+ const sourceSHA256 = await target.model.source.withMaterializedAsync(reviewSHA256);
77
+ const after = ownership();
78
+ if (after)
79
+ return refused(after);
80
+ if (hashes.has(sourceSHA256))
81
+ return refused('source-ambiguous');
82
+ hashes.add(sourceSHA256);
83
+ // Source-bearing ineligible peers still participate in collision checks.
84
+ const identity = target.identity;
85
+ if (target.revision !== 0 || !identity) {
86
+ unavailable.set(sourceSHA256, target.revision !== 0 ? 'model-edited' : 'identity-unavailable');
87
+ continue;
88
+ }
89
+ const identities = new Map(), GlobalIds = new Map(), expressIds = new Set();
90
+ let modelRows = 0;
91
+ for (const row of identity.rows()) {
92
+ if (++rows > 100_000 || ++modelRows > identity.count)
93
+ return refused('work-bound');
94
+ if (!Number.isSafeInteger(row.expressId) || row.expressId <= 0 || typeof row.GlobalId !== 'string'
95
+ || row.GlobalId.length > 200)
96
+ return refused('identity-unavailable');
97
+ if ((identityText += row.GlobalId.length) > 1_048_576)
98
+ return refused('work-bound');
99
+ if (expressIds.has(row.expressId))
100
+ return refused('identity-ambiguous');
101
+ expressIds.add(row.expressId);
102
+ // Non-root entities legitimately have no IFC GlobalId.
103
+ if (!row.GlobalId)
104
+ continue;
105
+ if (identities.has(row.GlobalId))
106
+ return refused('identity-ambiguous');
107
+ identities.set(row.GlobalId, row.expressId);
108
+ GlobalIds.set(row.expressId, row.GlobalId);
109
+ }
110
+ if (modelRows !== identity.count)
111
+ return refused('identity-unavailable');
112
+ owners.push({ model: target.model, sourceSHA256, identities, GlobalIds });
113
+ }
114
+ const final = ownership();
115
+ if (final)
116
+ return refused(final);
117
+ const value = project(owners, unavailable);
118
+ const projected = ownership();
119
+ return projected ? refused(projected) : { ok: true, value };
120
+ }
121
+ catch {
122
+ // No source/adapter exception or unauthorized name leaves this boundary.
123
+ console.warn('Portable Review source or identity read failed; imported evidence remains unbound.');
124
+ return refused(signal?.aborted ? 'aborted' : 'source-unavailable');
125
+ }
126
+ }
127
+ //# sourceMappingURL=portable-native-owners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-native-owners.js","sourceRoot":"","sources":["../../src/review/portable-native-owners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SavedAnalysisRun } from './portable-analysis.js';
2
+ import type { SavedValidationReport } from './portable-saved-validation.js';
3
+ import type { PortableOwner } from './portable-native-owners.js';
4
+ import type { FindingSourceResult } from './types.js';
5
+ /** Shared canonical adapters, with no mutation of the supplied decoded wire. */
6
+ export declare function projectPortableAnalysis(saved: SavedAnalysisRun, owners: readonly PortableOwner[]): FindingSourceResult;
7
+ /** Saved failure evidence keeps its recorded detail, gaps and identity. A
8
+ * name/fingerprint match alone cannot bind an imported row to a live source.
9
+ */
10
+ export declare function projectPortableValidation(saved: SavedValidationReport, owners: readonly PortableOwner[]): FindingSourceResult;
11
+ //# sourceMappingURL=portable-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-projection.d.ts","sourceRoot":"","sources":["../../src/review/portable-projection.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAA8B,MAAM,YAAY,CAAC;AA0ClF,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,mBAAmB,CAmCtH;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,mBAAmB,CAkB7H"}
@@ -0,0 +1,104 @@
1
+ import { clashFindings } from './clash.js';
2
+ import { validationFindings } from './validation.js';
3
+ import { savedValidationFacts } from './saved-validation.js';
4
+ /** These models are aliases within the imported wire, not live model ids.
5
+ * Only a verified full source hash binds them to actual columnar identities.
6
+ */
7
+ function analysisModels(saved, owners) {
8
+ return saved.models.map(model => {
9
+ const owner = owners.find(item => item.sourceSHA256 === model.sourceContentHash);
10
+ return { id: model.key, name: owner?.model.name ?? model.name,
11
+ ...(owner ? { sourceIdentity: owner.sourceSHA256 } : {}),
12
+ expressIdOf: GlobalId => owner?.identities.get(GlobalId) ?? 0,
13
+ globalIdOf: expressId => owner?.GlobalIds.get(expressId) ?? '',
14
+ ...(owner?.model.storeyOf ? { storeyOf: (expressId) => owner.model.storeyOf?.(expressId) ?? null } : {}) };
15
+ });
16
+ }
17
+ /** Preserve native evidence and statuses; import never attests a new run or
18
+ * turns saved freshness/currentness into independent evaluation.
19
+ */
20
+ function historical(result, id, capturedAt) {
21
+ const runs = result.runs.map(run => ({ ...run, id, capturedAt, temporal: 'historical', complete: false,
22
+ incomplete: [...run.incomplete, ...(run.incomplete.some(gap => gap.code === 'partial-source'
23
+ && gap.detail === 'Imported history is not independent native execution.') ? [] : [{ code: 'partial-source',
24
+ detail: 'Imported history is not independent native execution.' }])] }));
25
+ const findings = result.findings.map(finding => {
26
+ const index = result.runs.indexOf(finding.run), run = runs[index];
27
+ if (!run)
28
+ throw new Error('Imported Review run ownership is unavailable');
29
+ return { ...finding, id: JSON.stringify([id, finding.id]), run, lifecycle: 'not-evaluated' };
30
+ });
31
+ return { runs, findings };
32
+ }
33
+ function missingIdentity(finding, models) {
34
+ return { ...finding, elements: finding.elements.map(element => {
35
+ const model = models.find(item => item.id === element.modelId);
36
+ const expressId = model?.expressIdOf(element.globalId) ?? 0;
37
+ const recorded = finding.evidence.kind === 'validation' ? finding.evidence.expressId : null;
38
+ return model?.sourceIdentity && expressId > 0 && (recorded === null || recorded === expressId) ? { ...element }
39
+ : { ...element, modelId: null, nativeUnresolved: 'unmatched' };
40
+ }) };
41
+ }
42
+ /** Shared canonical adapters, with no mutation of the supplied decoded wire. */
43
+ export function projectPortableAnalysis(saved, owners) {
44
+ const models = analysisModels(saved, owners);
45
+ let result;
46
+ if (saved.kind === 'validation') {
47
+ result = validationFindings({ report: { ...saved.report, timestamp: new Date(saved.report.timestamp) }, stale: false }, models);
48
+ }
49
+ else {
50
+ // The canonical baseline adapter consumes no renderer geometry. `ref`
51
+ // retains the recorded local EXPRESS id; it is never an invented offset.
52
+ const native = { ...saved.result, clashes: saved.result.clashes.map(clash => ({ ...clash,
53
+ a: { ...clash.a, ref: clash.a.expressId }, b: { ...clash.b, ref: clash.b.expressId },
54
+ distance: typeof clash.distance === 'number' ? clash.distance : Number(clash.distance) })) };
55
+ result = clashFindings({ current: null, baseline: { result: native,
56
+ modelNames: Object.fromEntries(saved.models.map(model => [model.key, model.name])), takenAt: Date.parse(saved.capturedAt) } }, models);
57
+ // The baseline adapter intentionally emits no live model id. Rebind each
58
+ // occurrence only via its original saved model key and full source proof.
59
+ result.findings = result.findings.map((finding, index) => ({ ...finding,
60
+ elements: finding.elements.map((element, side) => {
61
+ const ref = side === 0 ? saved.result.clashes[index].a : saved.result.clashes[index].b;
62
+ const model = models.find(item => item.id === ref.model);
63
+ const actualGuid = model?.globalIdOf(ref.expressId) ?? '';
64
+ const recordedGuid = ref.key.startsWith('expressid:') ? '' : element.globalId;
65
+ return { ...element, globalId: recordedGuid || actualGuid, modelId: ref.model,
66
+ ...(!actualGuid || (recordedGuid && recordedGuid !== actualGuid)
67
+ ? { modelId: null, nativeUnresolved: 'unmatched' } : {}) };
68
+ }) }));
69
+ }
70
+ result.findings = result.findings.map(finding => {
71
+ const checked = missingIdentity(finding, models);
72
+ return { ...checked, elements: checked.elements.map(element => {
73
+ const savedModel = saved.models.find(model => model.key === element.modelId);
74
+ const owner = owners.find(item => item.sourceSHA256 === savedModel?.sourceContentHash);
75
+ return { ...element, modelId: owner?.model.id ?? null };
76
+ }) };
77
+ });
78
+ return historical(result, JSON.stringify(['imported-analysis', saved.id]), saved.capturedAt);
79
+ }
80
+ /** Saved failure evidence keeps its recorded detail, gaps and identity. A
81
+ * name/fingerprint match alone cannot bind an imported row to a live source.
82
+ */
83
+ export function projectPortableValidation(saved, owners) {
84
+ const result = savedValidationFacts(saved, { identityAvailable: row => !!row.GlobalId
85
+ && !!owners.find(owner => owner.sourceSHA256 === row.modelContentHash)?.identities.has(row.GlobalId) });
86
+ if (saved.snapshot.kind !== 'ids-report')
87
+ return result;
88
+ const rows = saved.snapshot.elementEvidence?.rows ?? [];
89
+ result.findings = result.findings.map((finding, index) => {
90
+ const row = rows[index];
91
+ const owner = row?.modelContentHash ? owners.find(item => item.sourceSHA256 === row.modelContentHash) : undefined;
92
+ return { ...finding, elements: finding.elements.map(element => {
93
+ if (!owner || !owner.identities.has(element.globalId))
94
+ return { ...element, modelId: null, nativeUnresolved: 'unmatched' };
95
+ const bound = { ...element, modelId: owner.model.id, modelName: owner.model.name };
96
+ // The legacy adapter's missing-name marker is not a native identity
97
+ // failure. Full source/GUID proof binds independently of display names.
98
+ delete bound.nativeUnresolved;
99
+ return bound;
100
+ }) };
101
+ });
102
+ return historical(result, JSON.stringify(['imported-saved-validation', saved.id]), saved.snapshot.generatedAt);
103
+ }
104
+ //# sourceMappingURL=portable-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-projection.js","sourceRoot":"","sources":["../../src/review/portable-projection.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ export declare function validateBlockTitle(block: Record<string, unknown>, at: s
26
26
  export interface ReportModelScope {
27
27
  name: string;
28
28
  fingerprint?: string;
29
+ sourceContentHash?: string;
29
30
  }
30
31
  /** The author's choice to print or omit a report's stamp rows (#6566, #6678).
31
32
  * Absent means shown, so every document saved before the choice printed the same. */
@@ -1 +1 @@
1
- {"version":3,"file":"portable-report-metadata.d.ts","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACpH,MAAM,WAAW,6BAA6B;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAEhF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,6GAA6G;AAC7G,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,0FAA0F;AAC1F,MAAM,WAAW,UAAW,SAAQ,sBAAsB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAS5H;AAED,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AACxE;qFACqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAalI"}
1
+ {"version":3,"file":"portable-report-metadata.d.ts","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEpH,MAAM,WAAW,6BAA6B;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAEhF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,6GAA6G;AAC7G,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,0FAA0F;AAC1F,MAAM,WAAW,UAAW,SAAQ,sBAAsB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAS5H;AAED,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE;AACpG;qFACqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,IAAI,CAelI"}
@@ -2,6 +2,7 @@
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { isAutomationReportProvenance } from './portable-automation-provenance.js';
5
+ import { isFullSourceSHA256 } from './portable-source-contract.js';
5
6
  /** Opaque sRGB document colours; named/alpha/short forms are intentionally excluded. */
6
7
  export function isRgbColor(value) {
7
8
  return typeof value === 'string' && /^#[0-9a-f]{6}$/i.test(value);
@@ -34,8 +35,10 @@ export function validateReportProvenance(block, at, errors) {
34
35
  if (typeof model !== 'object' || model === null || Array.isArray(model))
35
36
  return false;
36
37
  const m = model;
37
- return typeof m.name === 'string' && m.name.trim().length > 0 && (m.fingerprint === undefined || (typeof m.fingerprint === 'string' && m.fingerprint.length > 0));
38
+ return typeof m.name === 'string' && m.name.trim().length > 0
39
+ && (m.fingerprint === undefined || (typeof m.fingerprint === 'string' && m.fingerprint.length > 0))
40
+ && (m.sourceContentHash === undefined || isFullSourceSHA256(m.sourceContentHash));
38
41
  })))
39
- errors.push({ path: `${at}.reportModels`, message: 'expected non-empty model names and optional non-empty fingerprints' });
42
+ errors.push({ path: `${at}.reportModels`, message: 'expected non-empty model names, optional non-empty fingerprints and optional lowercase 64-hex sourceContentHash' });
40
43
  }
41
44
  //# sourceMappingURL=portable-report-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-report-metadata.js","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portable-report-metadata.js","sourceRoot":"","sources":["../../src/review/portable-report-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { NativeReviewModel } from './capture-types.js';
2
+ import type { NativeReviewCaptures } from './native-captures.js';
3
+ import { type SavedAnalysisRun } from './portable-analysis.js';
4
+ import { type SavedValidationReport } from './portable-saved-validation.js';
5
+ import { type FindingSourceKind, type ReviewFinding, type FindingRun } from './types.js';
6
+ export interface PortableReviewRequest {
7
+ sources?: unknown;
8
+ modelIds?: unknown;
9
+ maxFindings?: unknown;
10
+ savedAnalysisRuns?: unknown;
11
+ savedValidationReports?: unknown;
12
+ }
13
+ /** Supplied records remain imported history, even when full source bytes and GUIDs bind.
14
+ * No producer, storage, editor, reconciliation or publication is invoked here.
15
+ */
16
+ export declare function readPortableReview(captures: NativeReviewCaptures, liveModels: () => readonly NativeReviewModel[], request: PortableReviewRequest, allowed: (id: string) => boolean): Promise<{
17
+ origin: "imported";
18
+ retention: null;
19
+ latestAttempt: null;
20
+ findings: ReviewFinding[];
21
+ runs: FindingRun[];
22
+ provenance: never[];
23
+ coverage: never[];
24
+ records: Array<{
25
+ format: string;
26
+ value: SavedAnalysisRun | SavedValidationReport;
27
+ }>;
28
+ bindings: Array<{
29
+ id: string;
30
+ format: string;
31
+ state: string;
32
+ refusal: string | null;
33
+ }>;
34
+ cards: import("./cards.js").CoordinationCard<import("./types.js").ReviewMessage>[];
35
+ totals: import("./cards.js").ReviewTotals;
36
+ sources: {
37
+ source: FindingSourceKind;
38
+ state: string;
39
+ refusal: string;
40
+ }[];
41
+ bounds: {
42
+ knownFindings: number | null;
43
+ omittedFindings: number | null;
44
+ rowLimit: number;
45
+ textLimit: number;
46
+ clippedTextFields: number;
47
+ knownFindingsScope: "supplied-historical-records";
48
+ nativeCoverageComplete: boolean;
49
+ presentationComplete: boolean;
50
+ };
51
+ } | {
52
+ findings: ReviewFinding<import("./types.js").ReviewMessage>[];
53
+ runs: FindingRun<import("./types.js").ReviewMessage>[];
54
+ bindings: {
55
+ id: string;
56
+ format: string;
57
+ state: string;
58
+ refusal: string | null;
59
+ }[];
60
+ records: ({
61
+ format: string;
62
+ value: SavedAnalysisRun;
63
+ } | {
64
+ format: string;
65
+ value: SavedValidationReport;
66
+ })[];
67
+ cards: import("./cards.js").CoordinationCard<import("./types.js").ReviewMessage>[];
68
+ totals: import("./cards.js").ReviewTotals;
69
+ sources: {
70
+ source: FindingSourceKind;
71
+ state: string;
72
+ }[];
73
+ bounds: {
74
+ knownFindings: number | null;
75
+ omittedFindings: number | null;
76
+ rowLimit: number;
77
+ textLimit: number;
78
+ clippedTextFields: number;
79
+ knownFindingsScope: "supplied-historical-records";
80
+ nativeCoverageComplete: boolean;
81
+ presentationComplete: boolean;
82
+ };
83
+ origin: "imported";
84
+ retention: null;
85
+ latestAttempt: null;
86
+ provenance: never[];
87
+ coverage: never[];
88
+ }>;
89
+ //# sourceMappingURL=portable-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-snapshot.d.ts","sourceRoot":"","sources":["../../src/review/portable-snapshot.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAIjG,OAAO,EAAwB,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAA4B,MAAM,YAAY,CAAC;AAEzI,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC/D;AAaD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,SAAS,iBAAiB,EAAE,EACrH,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO;;;;cAU8B,aAAa,EAAE;UAAc,UAAU,EAAE;;;aACtF,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,gBAAgB,GAAG,qBAAqB,CAAA;KAAE,CAAC;cAAkB,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;;;;gBAEhK,iBAAiB;;;;;uBACrC,MAAM,GAAG,IAAI;yBAA2B,MAAM,GAAG,IAAI;;;;;;;;;;;;YA4BH,MAAM;gBAAU,MAAM;eAAS,MAAM;iBAAW,MAAM,GAAG,IAAI;;;;;;;;;;;;gBA4D3F,iBAAiB;;;;;;;;;;;;;;;;;;GAY3E"}
@@ -0,0 +1,164 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { buildCards } from './cards.js';
5
+ import { reviewValueFits } from './capture-budget.js';
6
+ import { decodeSavedAnalysisRun } from './portable-analysis.js';
7
+ import { validateSavedReport } from './portable-saved-validation.js';
8
+ import { analysisBinding, validationBinding } from './portable-bindings.js';
9
+ import { withPortableOwners } from './portable-native-owners.js';
10
+ import { projectPortableAnalysis, projectPortableValidation } from './portable-projection.js';
11
+ import { FINDING_SOURCE_KINDS } from './types.js';
12
+ function selectors(value, maximum) {
13
+ if (value === undefined)
14
+ return undefined;
15
+ if (!Array.isArray(value) || value.length > maximum || value.some(x => typeof x !== 'string' || x.length > 1_024)) {
16
+ throw new Error('Review selectors must be bounded string arrays');
17
+ }
18
+ return value.slice();
19
+ }
20
+ function records(value) {
21
+ if (value === undefined)
22
+ return [];
23
+ if (!Array.isArray(value) || value.length > 32)
24
+ throw new Error('Portable Review libraries must be arrays of at most 32 records');
25
+ return value;
26
+ }
27
+ /** Supplied records remain imported history, even when full source bytes and GUIDs bind.
28
+ * No producer, storage, editor, reconciliation or publication is invoked here.
29
+ */
30
+ export async function readPortableReview(captures, liveModels, request, allowed) {
31
+ const selected = selectors(request.sources, 5) ?? [...FINDING_SOURCE_KINDS];
32
+ if (selected.some(x => !FINDING_SOURCE_KINDS.some(kind => kind === x)))
33
+ throw new Error('Unknown Review source kind');
34
+ const requested = selectors(request.modelIds, 64);
35
+ const cap = request.maxFindings ?? 128;
36
+ if (typeof cap !== 'number' || !Number.isSafeInteger(cap) || cap < 0 || cap > 512)
37
+ throw new Error('Review row limit must be an integer from 0 to 512');
38
+ const admitted = (id) => allowed(id) && (!requested || requested.includes(id));
39
+ const scopedModels = () => liveModels().filter(model => admitted(model.id));
40
+ const empty = (refusal) => {
41
+ const cards = buildCards([], []);
42
+ return { origin: 'imported', retention: null, latestAttempt: null, findings: [], runs: [],
43
+ provenance: [], coverage: [], records: [], bindings: [],
44
+ cards: cards.cards, totals: cards.totals,
45
+ sources: selected.map(source => ({ source: source, state: source === 'validation' || source === 'clash' ? 'unavailable' : 'unsupported', refusal })),
46
+ bounds: { knownFindings: null, omittedFindings: null, rowLimit: cap, textLimit: 512,
47
+ clippedTextFields: 0, knownFindingsScope: 'supplied-historical-records', nativeCoverageComplete: false, presentationComplete: false } };
48
+ };
49
+ if (requested?.some(id => !allowed(id)))
50
+ return empty('scope');
51
+ if (!reviewValueFits(request))
52
+ return empty('work-bound');
53
+ const preflight = captures.portableEvidenceRefusal(request);
54
+ if (preflight)
55
+ return empty(preflight);
56
+ // Copy after the bounded walk, so caller mutation during source awaits cannot
57
+ // substitute another library for the one admitted at this boundary.
58
+ const frozen = structuredClone(request);
59
+ const analyses = [], reports = [];
60
+ for (const value of records(frozen.savedAnalysisRuns)) {
61
+ const saved = decodeSavedAnalysisRun(value);
62
+ if (!saved)
63
+ return empty('invalid-record');
64
+ analyses.push(saved);
65
+ }
66
+ for (const value of records(frozen.savedValidationReports)) {
67
+ if (!validateSavedReport(value))
68
+ return empty('invalid-record');
69
+ reports.push(value);
70
+ }
71
+ if (analyses.length + reports.length > 32)
72
+ return empty('work-bound');
73
+ const ids = [...analyses.map(run => `analysis:${run.id}`), ...reports.map(report => `report:${report.id}`)];
74
+ if (new Set(ids).size !== ids.length)
75
+ return empty('record-ambiguous');
76
+ // A mixed analysis library declares no kind by its mere presence. A typed
77
+ // validation-report collection, including an explicit empty one, does.
78
+ const present = (source) => source === 'clash' ? analyses.some(saved => saved.kind === 'clash')
79
+ : source === 'validation' ? analyses.some(saved => saved.kind === 'validation') || frozen.savedValidationReports !== undefined : false;
80
+ const project = (owners, unavailable = new Map()) => {
81
+ const findings = [], runs = [], bindings = [];
82
+ const append = (result, format, id, refusal) => {
83
+ for (const run of result.runs)
84
+ runs.push(run);
85
+ for (const finding of result.findings) {
86
+ const identities = finding.elements.map(element => [owners.find(owner => owner.model.id === element.modelId)?.sourceSHA256 ?? null, element.globalId]);
87
+ finding.lineage = JSON.stringify([refusal ? ['unbound-record', format, id] : ['verified-source-elements', identities], finding.lineage]);
88
+ findings.push(finding);
89
+ }
90
+ };
91
+ for (const saved of analyses) {
92
+ if (!selected.includes(saved.kind === 'clash' ? 'clash' : 'validation'))
93
+ continue;
94
+ const refusal = analysisBinding(saved, owners, unavailable);
95
+ bindings.push({ id: saved.id, format: 'saved-analysis-run', state: refusal ? 'unbound' : 'bound', refusal });
96
+ const result = projectPortableAnalysis(saved, refusal ? [] : owners);
97
+ append(result, 'saved-analysis-run', saved.id, refusal);
98
+ }
99
+ for (const saved of reports) {
100
+ if (!selected.includes('validation'))
101
+ continue;
102
+ const refusal = validationBinding(saved, owners, unavailable);
103
+ bindings.push({ id: saved.id, format: 'saved-validation-report', state: refusal ? 'unbound' : 'bound', refusal });
104
+ const result = projectPortableValidation(saved, refusal ? [] : owners);
105
+ append(result, 'saved-validation-report', saved.id, refusal);
106
+ }
107
+ let clippedTextFields = 0;
108
+ const text = (value) => {
109
+ if (value.length <= 512)
110
+ return value;
111
+ clippedTextFields++;
112
+ const split = value.charCodeAt(511) >= 0xD800 && value.charCodeAt(511) <= 0xDBFF
113
+ && value.charCodeAt(512) >= 0xDC00 && value.charCodeAt(512) <= 0xDFFF;
114
+ return value.slice(0, split ? 511 : 512);
115
+ };
116
+ // Bounds describe the complete supplied finding inventory, not merely the
117
+ // retained rows. Source truncation or gaps keep population/omission unknown.
118
+ const inventoryKnown = reports.filter(() => selected.includes('validation')).every(saved => saved.snapshot.kind === 'ids-report' && saved.snapshot.elementEvidence !== undefined
119
+ && saved.snapshot.elementEvidence.omitted === 0 && saved.snapshot.elementEvidence.gaps.length === 0
120
+ // #7372: summaries count failed entities (warnings have their own bucket
121
+ // for rules), not failed specifications/cardinality-only outcomes.
122
+ && saved.snapshot.elementEvidence.rows.length === saved.snapshot.summary.failed + (saved.snapshot.summary.warnings ?? 0))
123
+ && analyses.filter(saved => selected.includes(saved.kind === 'clash' ? 'clash' : 'validation')).every(saved => saved.kind === 'clash' ? !saved.result.truncated : saved.report.specificationResults.every(spec => !spec.error && !spec.setResultsTruncated && spec.passedCount + spec.failedCount === spec.applicableCount
124
+ && spec.entityResults.reduce((failed, row) => failed + Number(!row.passed), 0) === spec.failedCount));
125
+ const visible = findings.slice(0, cap);
126
+ for (const finding of visible) {
127
+ finding.title = text(finding.title);
128
+ finding.detail = finding.detail.map(text);
129
+ finding.storeys = finding.storeys.map(text);
130
+ finding.disciplines = finding.disciplines.map(text);
131
+ for (const element of finding.elements)
132
+ if (element.name !== undefined)
133
+ element.name = text(element.name);
134
+ }
135
+ for (const run of runs) {
136
+ run.label = text(run.label);
137
+ for (const gap of run.incomplete)
138
+ if (gap.detail !== undefined)
139
+ gap.detail = text(gap.detail);
140
+ }
141
+ const models = owners.map(owner => ({ ...owner.model, sourceIdentity: owner.sourceSHA256,
142
+ expressIdOf: (GlobalId) => owner.identities.get(GlobalId) ?? 0,
143
+ globalIdOf: (expressId) => owner.GlobalIds.get(expressId) ?? '' }));
144
+ const cards = buildCards(visible, models);
145
+ const response = { ...empty(''), findings: visible, runs, bindings,
146
+ records: [...analyses.filter(saved => selected.includes(saved.kind === 'clash' ? 'clash' : 'validation')).map(value => ({ format: 'saved-analysis-run', value })),
147
+ ...reports.filter(() => selected.includes('validation')).map(value => ({ format: 'saved-validation-report', value }))], cards: cards.cards, totals: cards.totals,
148
+ sources: selected.map(source => ({ source: source, state: source === 'validation' || source === 'clash' ? present(source) ? 'available' : 'not-run' : 'unsupported' })),
149
+ bounds: { knownFindings: inventoryKnown ? findings.length : null, omittedFindings: inventoryKnown ? findings.length - visible.length : null, rowLimit: cap, textLimit: 512,
150
+ clippedTextFields, knownFindingsScope: 'supplied-historical-records', nativeCoverageComplete: false,
151
+ presentationComplete: inventoryKnown && findings.length <= cap && !clippedTextFields } };
152
+ if (!reviewValueFits(response))
153
+ return empty('work-bound');
154
+ const final = captures.portableEvidenceRefusal(response);
155
+ return final ? empty(final) : response;
156
+ };
157
+ if (frozen.savedAnalysisRuns === undefined && frozen.savedValidationReports === undefined)
158
+ return empty('records-unavailable');
159
+ if (!analyses.length && !reports.length)
160
+ return project([]);
161
+ const result = await withPortableOwners(scopedModels, admitted, project);
162
+ return result.ok ? result.value : empty(result.refusal);
163
+ }
164
+ //# sourceMappingURL=portable-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-snapshot.js","sourceRoot":"","sources":["../../src/review/portable-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Full source identity, distinct from the historical sampled fingerprint. */
2
+ export declare function isFullSourceSHA256(value: unknown): value is string;
3
+ //# sourceMappingURL=portable-source-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-source-contract.d.ts","sourceRoot":"","sources":["../../src/review/portable-source-contract.ts"],"names":[],"mappings":"AAIA,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE"}