@ifc-lite/sdk 9.4.0 → 9.6.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.
- package/README.md +57 -16
- package/dist/cost-reference-scan.d.ts.map +1 -1
- package/dist/cost-reference-scan.js +10 -9
- package/dist/cost-reference-scan.js.map +1 -1
- package/dist/headless/align-backend.d.ts +5 -0
- package/dist/headless/align-backend.d.ts.map +1 -0
- package/dist/headless/align-backend.js +15 -0
- package/dist/headless/align-backend.js.map +1 -0
- package/dist/headless/authored-attribute-value.d.ts +3 -0
- package/dist/headless/authored-attribute-value.d.ts.map +1 -0
- package/dist/headless/authored-attribute-value.js +34 -0
- package/dist/headless/authored-attribute-value.js.map +1 -0
- package/dist/headless/backend-query-relationships.d.ts +5 -0
- package/dist/headless/backend-query-relationships.d.ts.map +1 -0
- package/dist/headless/backend-query-relationships.js +55 -0
- package/dist/headless/backend-query-relationships.js.map +1 -0
- package/dist/headless/backend-query.d.ts +20 -0
- package/dist/headless/backend-query.d.ts.map +1 -0
- package/dist/headless/backend-query.js +359 -0
- package/dist/headless/backend-query.js.map +1 -0
- package/dist/headless/backend.d.ts +80 -0
- package/dist/headless/backend.d.ts.map +1 -0
- package/dist/headless/backend.js +317 -0
- package/dist/headless/backend.js.map +1 -0
- package/dist/headless/capabilities.d.ts +22 -0
- package/dist/headless/capabilities.d.ts.map +1 -0
- package/dist/headless/capabilities.js +52 -0
- package/dist/headless/capabilities.js.map +1 -0
- package/dist/headless/effective-entity-membership.d.ts +8 -0
- package/dist/headless/effective-entity-membership.d.ts.map +1 -0
- package/dist/headless/effective-entity-membership.js +23 -0
- package/dist/headless/effective-entity-membership.js.map +1 -0
- package/dist/headless/headless-backend-cost-store.d.ts +14 -0
- package/dist/headless/headless-backend-cost-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-cost-store.js +18 -0
- package/dist/headless/headless-backend-cost-store.js.map +1 -0
- package/dist/headless/headless-backend-modelling.d.ts +50 -0
- package/dist/headless/headless-backend-modelling.d.ts.map +1 -0
- package/dist/headless/headless-backend-modelling.js +128 -0
- package/dist/headless/headless-backend-modelling.js.map +1 -0
- package/dist/headless/headless-backend-room.d.ts +9 -0
- package/dist/headless/headless-backend-room.d.ts.map +1 -0
- package/dist/headless/headless-backend-room.js +22 -0
- package/dist/headless/headless-backend-room.js.map +1 -0
- package/dist/headless/headless-backend-store-stubs.d.ts +13 -0
- package/dist/headless/headless-backend-store-stubs.d.ts.map +1 -0
- package/dist/headless/headless-backend-store-stubs.js +9 -0
- package/dist/headless/headless-backend-store-stubs.js.map +1 -0
- package/dist/headless/headless-backend-store.d.ts +8 -0
- package/dist/headless/headless-backend-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-store.js +42 -0
- package/dist/headless/headless-backend-store.js.map +1 -0
- package/dist/headless/headless-backend-structural-store.d.ts +21 -0
- package/dist/headless/headless-backend-structural-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-structural-store.js +18 -0
- package/dist/headless/headless-backend-structural-store.js.map +1 -0
- package/dist/headless/headless-backend-structural.d.ts +4 -0
- package/dist/headless/headless-backend-structural.d.ts.map +1 -0
- package/dist/headless/headless-backend-structural.js +24 -0
- package/dist/headless/headless-backend-structural.js.map +1 -0
- package/dist/headless/mutation-base.d.ts +5 -0
- package/dist/headless/mutation-base.d.ts.map +1 -0
- package/dist/headless/mutation-base.js +31 -0
- package/dist/headless/mutation-base.js.map +1 -0
- package/dist/headless/options.d.ts +11 -0
- package/dist/headless/options.d.ts.map +1 -0
- package/dist/headless/options.js +13 -0
- package/dist/headless/options.js.map +1 -0
- package/dist/headless/overlay.d.ts +170 -0
- package/dist/headless/overlay.d.ts.map +1 -0
- package/dist/headless/overlay.js +285 -0
- package/dist/headless/overlay.js.map +1 -0
- package/dist/headless/schema-tables.d.ts +42 -0
- package/dist/headless/schema-tables.d.ts.map +1 -0
- package/dist/headless/schema-tables.js +77 -0
- package/dist/headless/schema-tables.js.map +1 -0
- package/dist/headless/session.d.ts +23 -0
- package/dist/headless/session.d.ts.map +1 -0
- package/dist/headless/session.js +125 -0
- package/dist/headless/session.js.map +1 -0
- package/dist/headless.d.ts +13 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +13 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/namespaces/bcf-viewpoint.d.ts +19 -0
- package/dist/namespaces/bcf-viewpoint.d.ts.map +1 -1
- package/dist/namespaces/bcf-viewpoint.js.map +1 -1
- package/dist/namespaces/bcf.d.ts.map +1 -1
- package/dist/namespaces/bcf.js +17 -0
- package/dist/namespaces/bcf.js.map +1 -1
- package/dist/namespaces/viewer.d.ts +20 -1
- package/dist/namespaces/viewer.d.ts.map +1 -1
- package/dist/namespaces/viewer.js +40 -0
- package/dist/namespaces/viewer.js.map +1 -1
- package/dist/review/capture-budget.d.ts.map +1 -1
- package/dist/review/capture-budget.js +9 -0
- package/dist/review/capture-budget.js.map +1 -1
- package/dist/review/capture-ownership.d.ts +12 -0
- package/dist/review/capture-ownership.d.ts.map +1 -0
- package/dist/review/capture-ownership.js +8 -0
- package/dist/review/capture-ownership.js.map +1 -0
- package/dist/review/capture-types.d.ts +14 -0
- package/dist/review/capture-types.d.ts.map +1 -1
- package/dist/review/cards.js +1 -1
- package/dist/review/cards.js.map +1 -1
- package/dist/review/identity.d.ts +1 -1
- package/dist/review/identity.d.ts.map +1 -1
- package/dist/review/identity.js +7 -2
- package/dist/review/identity.js.map +1 -1
- package/dist/review/native-captures.d.ts +4 -0
- package/dist/review/native-captures.d.ts.map +1 -1
- package/dist/review/native-captures.js +9 -6
- package/dist/review/native-captures.js.map +1 -1
- package/dist/review/native-identity-table.d.ts +8 -0
- package/dist/review/native-identity-table.d.ts.map +1 -0
- package/dist/review/native-identity-table.js +29 -0
- package/dist/review/native-identity-table.js.map +1 -0
- package/dist/review/portable-bindings.d.ts +7 -0
- package/dist/review/portable-bindings.d.ts.map +1 -0
- package/dist/review/portable-bindings.js +88 -0
- package/dist/review/portable-bindings.js.map +1 -0
- package/dist/review/portable-native-owners.d.ts +23 -0
- package/dist/review/portable-native-owners.d.ts.map +1 -0
- package/dist/review/portable-native-owners.js +127 -0
- package/dist/review/portable-native-owners.js.map +1 -0
- package/dist/review/portable-projection.d.ts +11 -0
- package/dist/review/portable-projection.d.ts.map +1 -0
- package/dist/review/portable-projection.js +104 -0
- package/dist/review/portable-projection.js.map +1 -0
- package/dist/review/portable-report-metadata.d.ts +1 -0
- package/dist/review/portable-report-metadata.d.ts.map +1 -1
- package/dist/review/portable-report-metadata.js +5 -2
- package/dist/review/portable-report-metadata.js.map +1 -1
- package/dist/review/portable-snapshot.d.ts +89 -0
- package/dist/review/portable-snapshot.d.ts.map +1 -0
- package/dist/review/portable-snapshot.js +164 -0
- package/dist/review/portable-snapshot.js.map +1 -0
- package/dist/review/portable-source-contract.d.ts +3 -0
- package/dist/review/portable-source-contract.d.ts.map +1 -0
- package/dist/review/portable-source-contract.js +8 -0
- package/dist/review/portable-source-contract.js.map +1 -0
- package/dist/review/portable-validation-evidence.d.ts +2 -1
- package/dist/review/portable-validation-evidence.d.ts.map +1 -1
- package/dist/review/portable-validation-evidence.js +3 -1
- package/dist/review/portable-validation-evidence.js.map +1 -1
- package/dist/review/saved-validation.d.ts +2 -0
- package/dist/review/saved-validation.d.ts.map +1 -1
- package/dist/review/saved-validation.js +1 -1
- package/dist/review/saved-validation.js.map +1 -1
- package/dist/review/types.d.ts +2 -0
- package/dist/review/types.d.ts.map +1 -1
- package/dist/review.d.ts +2 -0
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +2 -0
- package/dist/review.js.map +1 -1
- package/dist/section-plane.d.ts +12 -0
- package/dist/section-plane.d.ts.map +1 -0
- package/dist/section-plane.js +5 -0
- package/dist/section-plane.js.map +1 -0
- package/dist/types.d.ts +6 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +19 -14
|
@@ -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;
|
|
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
|
|
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
|
|
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":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,4BAA4B,EAAmC,MAAM,qCAAqC,CAAC;
|
|
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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
/** Full source identity, distinct from the historical sampled fingerprint. */
|
|
5
|
+
export function isFullSourceSHA256(value) {
|
|
6
|
+
return typeof value === 'string' && /^[0-9a-f]{64}$/.test(value);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=portable-source-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-source-contract.js","sourceRoot":"","sources":["../../src/review/portable-source-contract.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/** Canonical saved failure evidence wire contract shared by document import and native Review (#7372). */
|
|
2
1
|
export declare const SAVED_VALIDATION_LIMITS: {
|
|
3
2
|
readonly rows: 2000;
|
|
4
3
|
readonly sourceRows: 50000;
|
|
@@ -15,6 +14,8 @@ export interface SavedValidationElement {
|
|
|
15
14
|
GlobalId: string | null;
|
|
16
15
|
modelName: string | null;
|
|
17
16
|
modelFingerprint?: string;
|
|
17
|
+
/** Optional producer-captured full source identity; absence remains historical/unbound. */
|
|
18
|
+
modelContentHash?: string;
|
|
18
19
|
ifcType: string;
|
|
19
20
|
Name?: string;
|
|
20
21
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-validation-evidence.d.ts","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"portable-validation-evidence.d.ts","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB;;;;;;;;CAG1B,CAAC;AAWX,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,qFAAqF;AACrF,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AACD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0HAA0H;IAC1H,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAgBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CASxF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQlI"}
|
|
@@ -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
|
/** Canonical saved failure evidence wire contract shared by document import and native Review (#7372). */
|
|
5
|
+
import { isFullSourceSHA256 } from './portable-source-contract.js';
|
|
5
6
|
export const SAVED_VALIDATION_LIMITS = {
|
|
6
7
|
rows: 2_000, sourceRows: 50_000, rowBytes: 8_192, totalBytes: 1_048_576,
|
|
7
8
|
text: 1_024, checks: 1_024, definitionBytes: 131_072,
|
|
@@ -14,7 +15,7 @@ const CHECK_LIMIT = SAVED_VALIDATION_LIMITS.checks;
|
|
|
14
15
|
const DEFINITION_BYTE_LIMIT = SAVED_VALIDATION_LIMITS.definitionBytes;
|
|
15
16
|
const DIGEST = /^xxh64:[0-9a-f]{16}$/;
|
|
16
17
|
const EVIDENCE_FIELDS = new Set(['version', 'rows', 'observed', 'omitted', 'gaps', 'definition']);
|
|
17
|
-
const ROW_FIELDS = new Set(['id', 'specificationId', 'GlobalId', 'modelName', 'modelFingerprint', 'ifcType', 'Name', 'title', 'nativeStatus', 'detail', 'signature']);
|
|
18
|
+
const ROW_FIELDS = new Set(['id', 'specificationId', 'GlobalId', 'modelName', 'modelFingerprint', 'modelContentHash', 'ifcType', 'Name', 'title', 'nativeStatus', 'detail', 'signature']);
|
|
18
19
|
const digest = (value) => typeof value === 'string' && DIGEST.test(value);
|
|
19
20
|
function validDefinition(value) {
|
|
20
21
|
if (value === undefined)
|
|
@@ -33,6 +34,7 @@ const count = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
|
|
|
33
34
|
export function isSavedValidationElement(value) {
|
|
34
35
|
if (!record(value) || Object.keys(value).some(key => !ROW_FIELDS.has(key)) || !text(value.id, 128) || !text(value.specificationId) || (value.GlobalId !== null && !text(value.GlobalId, 200))
|
|
35
36
|
|| (value.modelName !== null && !text(value.modelName)) || (value.modelFingerprint !== undefined && !text(value.modelFingerprint, 256))
|
|
37
|
+
|| (value.modelContentHash !== undefined && !isFullSourceSHA256(value.modelContentHash))
|
|
36
38
|
|| !text(value.ifcType, 200) || (value.Name !== undefined && (typeof value.Name !== 'string' || value.Name.length > TEXT_LIMIT))
|
|
37
39
|
|| typeof value.title !== 'string' || value.title.length > TEXT_LIMIT
|
|
38
40
|
|| (value.nativeStatus !== 'failed' && value.nativeStatus !== 'warning') || !Array.isArray(value.detail)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-validation-evidence.js","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,0GAA0G;AAC1G,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS;IACvE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO;CAC5C,CAAC;AACX,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AACzD,MAAM,cAAc,GAAG,uBAAuB,CAAC,QAAQ,CAAC;AACxD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,UAAU,CAAC;AAC5D,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChD,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC;AACnD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,eAAe,CAAC;AACtE,MAAM,MAAM,GAAG,sBAAsB,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAClG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"portable-validation-evidence.js","sourceRoot":"","sources":["../../src/review/portable-validation-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ import type { FindingLifecycle, FindingSourceResult, ReviewMessage, RunGap } fro
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function savedValidationFacts<Message extends ReviewMessage = ReviewMessage>(saved: SavedValidationReport, options?: {
|
|
8
8
|
incomplete?: RunGap<Message>[];
|
|
9
|
+
/** Host-verified full source and GUID proof; absent preserves legacy name-only handling. */
|
|
10
|
+
identityAvailable?: (row: SavedValidationElement) => boolean;
|
|
9
11
|
outcome?: (row: SavedValidationElement) => {
|
|
10
12
|
lifecycle: FindingLifecycle;
|
|
11
13
|
notes?: Message[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-validation.d.ts","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAc,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG3G;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,EAAE,KAAK,EAAE,qBAAqB,EAC9G,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,CAAA;CAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAyBlJ"}
|
|
1
|
+
{"version":3,"file":"saved-validation.d.ts","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAc,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG3G;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,EAAE,KAAK,EAAE,qBAAqB,EAC9G,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,CAAA;CAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAyBlJ"}
|
|
@@ -14,7 +14,7 @@ export function savedValidationFacts(saved, options = {}) {
|
|
|
14
14
|
...(captured?.gaps.map(detail => ({ code: 'partial-source', detail })) ?? [])] };
|
|
15
15
|
return { runs: [run], findings: (captured?.rows ?? []).map(row => {
|
|
16
16
|
const outcome = options.outcome?.(row);
|
|
17
|
-
const identityAvailable = !!row.GlobalId && !!row.modelName;
|
|
17
|
+
const identityAvailable = !!row.GlobalId && (!!row.modelName || options.identityAvailable?.(row) === true);
|
|
18
18
|
return { id: JSON.stringify([run.id, row.id]),
|
|
19
19
|
lineage: JSON.stringify(['saved-validation', snapshot.sourceName, row.specificationId, row.modelName, row.GlobalId, row.id]),
|
|
20
20
|
source: 'validation', run, elements: row.GlobalId ? [{ globalId: row.GlobalId, modelId: null, modelName: row.modelName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-validation.js","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAgD,KAA4B,EAC9G,
|
|
1
|
+
{"version":3,"file":"saved-validation.js","sourceRoot":"","sources":["../../src/review/saved-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/review/types.d.ts
CHANGED
|
@@ -146,6 +146,8 @@ export interface FindingSourceResult<Message extends ReviewMessage = ReviewMessa
|
|
|
146
146
|
}
|
|
147
147
|
/** A model as the review layer sees it: identity plus a GlobalId lookup. */
|
|
148
148
|
export interface ReviewModel {
|
|
149
|
+
/** Full source identity verified by the host for this read. Omit for legacy name-only models. */
|
|
150
|
+
sourceIdentity?: string;
|
|
149
151
|
id: string;
|
|
150
152
|
name: string;
|
|
151
153
|
/** Returns a positive express id, or a value <= 0 when the GlobalId is not in the model. */
|