@forgeax/engine-pack 0.1.6 → 0.1.19

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 (37) hide show
  1. package/README.md +12 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/build.d.ts +1 -1
  4. package/dist/build.d.ts.map +1 -1
  5. package/dist/build.mjs +100 -51
  6. package/dist/build.mjs.map +1 -1
  7. package/dist/catalog-builder.d.ts +12 -0
  8. package/dist/catalog-builder.d.ts.map +1 -1
  9. package/dist/cli-asset.mjs +1 -1
  10. package/dist/cli-asset.mjs.map +1 -1
  11. package/dist/evidence/material-cook.d.ts +28 -6
  12. package/dist/evidence/material-cook.d.ts.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.mjs +97 -42
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/material-cook.d.ts +1 -1
  18. package/dist/material-cook.d.ts.map +1 -1
  19. package/dist/material-cook.mjs +96 -41
  20. package/dist/material-cook.mjs.map +1 -1
  21. package/dist/scanner.mjs +1 -1
  22. package/dist/scanner.mjs.map +1 -1
  23. package/dist/scriptable-pack-node.d.ts.map +1 -1
  24. package/dist/scriptable-pack-node.mjs +1 -1
  25. package/dist/scriptable-pack-node.mjs.map +1 -1
  26. package/package.json +3 -3
  27. package/src/__tests__/material-cook-dependencies.unit.test.ts +111 -0
  28. package/src/__tests__/material-cook-receipt.unit.test.ts +77 -20
  29. package/src/__tests__/material-cook-schema.unit.test.ts +64 -10
  30. package/src/__tests__/pack-v2-fixture-migration.test.ts +24 -1
  31. package/src/build.ts +1 -0
  32. package/src/catalog-builder.ts +42 -5
  33. package/src/evidence/material-cook.ts +133 -54
  34. package/src/index.ts +4 -0
  35. package/src/material-cook.ts +2 -0
  36. package/src/schema/material-cook.schema.json +48 -8
  37. package/src/scriptable-pack-node.ts +4 -1
@@ -11,25 +11,44 @@ export interface MaterialCookArtifact {
11
11
  readonly digest: string;
12
12
  readonly bytes: Uint8Array;
13
13
  }
14
+ export interface MaterialCookWasmProvenance {
15
+ readonly sourceContentKey: string;
16
+ readonly artifactSha256: string;
17
+ readonly glueSha256: string;
18
+ }
19
+ export interface MaterialCookIdentity {
20
+ readonly materialContractDigest: string;
21
+ readonly sourceRevision: string;
22
+ readonly sourceClosureDigest: string;
23
+ readonly layoutIdentity: string;
24
+ readonly programIdentity: string;
25
+ readonly pipelineIdentity: string;
26
+ readonly materialPublicationIdentity: string;
27
+ readonly cookIdentity: string;
28
+ readonly compilerFingerprint: string;
29
+ readonly wasm: MaterialCookWasmProvenance;
30
+ readonly artifactDigest: string;
31
+ readonly valueGeneration: number;
32
+ readonly dependencyGeneration: number;
33
+ readonly cookGeneration: number;
34
+ }
35
+ export type MaterialCookIdentityInput = Omit<MaterialCookIdentity, 'cookIdentity'>;
14
36
  export interface MaterialCookReceipt {
15
- readonly schemaVersion: 'material-cook/2';
37
+ readonly schemaVersion: 'material-cook/3';
16
38
  readonly sourceClosure: readonly string[];
17
39
  readonly profile: string;
18
40
  readonly compilerVersion: string;
19
- readonly inputDigest: string;
20
- readonly outputDigest: string;
21
- readonly layoutIdentity: string;
41
+ readonly identity: MaterialCookIdentity;
22
42
  readonly derivedInterface: {
23
43
  readonly layoutIdentity: string;
24
44
  };
25
- readonly publicationGeneration?: number;
26
45
  }
27
46
  export interface MaterialParameterContract {
28
47
  readonly parameters: readonly MaterialParameter[];
29
48
  readonly values: Readonly<Record<string, MaterialValue | null>>;
30
49
  }
31
50
  export interface CookedMaterialRecord {
32
- readonly schemaVersion: 'material-cook/2';
51
+ readonly schemaVersion: 'material-cook/3';
33
52
  readonly guid: string;
34
53
  readonly authored?: MaterialAsset;
35
54
  readonly materialGuid?: string;
@@ -53,6 +72,8 @@ export interface MaterialCookRecordError {
53
72
  readonly hint: string;
54
73
  readonly detail: {
55
74
  readonly field: string;
75
+ readonly actual?: unknown;
76
+ readonly action: string;
56
77
  };
57
78
  }
58
79
  export interface MaterialCookIdentityExpectation {
@@ -62,6 +83,7 @@ export interface MaterialCookIdentityExpectation {
62
83
  }
63
84
  export declare function collectMaterialCookRefs(material: Partial<MaterialAsset>): MaterialCookRefs;
64
85
  export declare function createMaterialArtifactDigest(bytes: Uint8Array): string;
86
+ export declare function createMaterialCookIdentity(input: MaterialCookIdentityInput): MaterialCookIdentity;
65
87
  export declare function serializeCookedMaterialRecord(record: CookedMaterialRecord): string;
66
88
  export declare function serializeMaterialCookReceipt(receipt: MaterialCookReceipt): string;
67
89
  export declare function validateMaterialCookReceipt(value: unknown, expected?: MaterialCookIdentityExpectation): Result<MaterialCookReceipt, MaterialCookRecordError>;
@@ -1 +1 @@
1
- {"version":3,"file":"material-cook.d.ts","sourceRoot":"","sources":["../../src/evidence/material-cook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"material-cook.d.ts","sourceRoot":"","sources":["../../src/evidence/material-cook.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type CookedMaterialRecord, collectMaterialCookRefs, createMaterialArtifactDigest, type MaterialCookArtifact, type MaterialCookIdentityExpectation, type MaterialCookReceipt, type MaterialCookRecordError, type MaterialCookRefs, projectCookedMaterialRecord, serializeCookedMaterialRecord, serializeMaterialCookReceipt, validateCookedMaterialRecord, validateMaterialCookReceipt, } from './evidence/material-cook.js';
1
+ export { type CookedMaterialRecord, collectMaterialCookRefs, createMaterialArtifactDigest, createMaterialCookIdentity, type MaterialCookArtifact, type MaterialCookIdentity, type MaterialCookIdentityExpectation, type MaterialCookIdentityInput, type MaterialCookReceipt, type MaterialCookRecordError, type MaterialCookRefs, type MaterialCookWasmProvenance, projectCookedMaterialRecord, serializeCookedMaterialRecord, serializeMaterialCookReceipt, validateCookedMaterialRecord, validateMaterialCookReceipt, } from './evidence/material-cook.js';
2
2
  export { buildOfflineAssetEvidence, packageVerification } from './evidence/offline-evidence.js';
3
3
  export { decodeMeshBinHeader, MESH_BIN_DIGEST_BYTES, MESH_BIN_HEADER_V4_BYTES, MESH_BIN_PROJECTION_VERSION, MESH_BIN_VERSION, type MeshBinContractError, type MeshBinHeaderResult, type MeshBinHeaderV4, writeMeshBinHeader, } from './mesh-bin-contract.js';
4
4
  export { validateProducerContract, validateProducerOutputs } from './producer-contract.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,KAAK,+BAA+B,EACpC,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EACL,KAAK,WAAW,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAW,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,YAAY,EACV,aAAa,EACb,cAAc,EACd,KAAK,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,MAAM,EACN,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAWvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EACL,KAAK,WAAW,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iCAAiC,EACtC,KAAK,uBAAuB,EAC5B,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAW,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,YAAY,EACV,aAAa,EACb,cAAc,EACd,KAAK,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,MAAM,EACN,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAWvE"}
package/dist/index.mjs CHANGED
@@ -6868,83 +6868,138 @@ function jsonValue(value) {
6868
6868
  }
6869
6869
  return value;
6870
6870
  }
6871
+ function createMaterialCookIdentity(input) {
6872
+ const cookIdentity = createMaterialArtifactDigest(
6873
+ new TextEncoder().encode(
6874
+ JSON.stringify(
6875
+ jsonValue({
6876
+ materialContractDigest: input.materialContractDigest,
6877
+ sourceRevision: input.sourceRevision,
6878
+ sourceClosureDigest: input.sourceClosureDigest,
6879
+ layoutIdentity: input.layoutIdentity,
6880
+ programIdentity: input.programIdentity,
6881
+ pipelineIdentity: input.pipelineIdentity,
6882
+ compilerFingerprint: input.compilerFingerprint,
6883
+ wasm: input.wasm,
6884
+ artifactDigest: input.artifactDigest
6885
+ })
6886
+ )
6887
+ )
6888
+ );
6889
+ return { ...input, cookIdentity };
6890
+ }
6871
6891
  function serializeCookedMaterialRecord(record) {
6872
6892
  return JSON.stringify(jsonValue(record));
6873
6893
  }
6874
6894
  function serializeMaterialCookReceipt(receipt) {
6875
6895
  return JSON.stringify(jsonValue({ ...receipt, sourceClosure: unique(receipt.sourceClosure) }));
6876
6896
  }
6877
- function invalid(field) {
6897
+ function invalid(field, actual2) {
6878
6898
  return err({
6879
6899
  code: "material-cook-record-invalid",
6880
- expected: "a complete material-cook/2 record with derived layout identity",
6900
+ expected: "a complete material-cook/3 record with layered identity and provenance",
6881
6901
  hint: "re-cook the material and publish its record, artifact, references, and receipt together",
6882
- detail: { field }
6902
+ detail: {
6903
+ field,
6904
+ ...actual2 === void 0 ? {} : { actual: actual2 },
6905
+ action: "inspect the named field and recook the material generation"
6906
+ }
6907
+ });
6908
+ }
6909
+ var IDENTITY_FIELDS = [
6910
+ "materialContractDigest",
6911
+ "sourceRevision",
6912
+ "sourceClosureDigest",
6913
+ "layoutIdentity",
6914
+ "programIdentity",
6915
+ "pipelineIdentity",
6916
+ "materialPublicationIdentity",
6917
+ "cookIdentity",
6918
+ "compilerFingerprint",
6919
+ "artifactDigest"
6920
+ ];
6921
+ function isGeneration(value) {
6922
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 1;
6923
+ }
6924
+ function validateIdentity(value) {
6925
+ if (value === null || typeof value !== "object") return invalid("receipt.identity", value);
6926
+ const candidate = value;
6927
+ for (const field of IDENTITY_FIELDS) {
6928
+ if (typeof candidate[field] !== "string" || candidate[field].length === 0) {
6929
+ return invalid(`receipt.identity.${field}`, candidate[field]);
6930
+ }
6931
+ }
6932
+ if (candidate.wasm === null || typeof candidate.wasm !== "object") {
6933
+ return invalid("receipt.identity.wasm", candidate.wasm);
6934
+ }
6935
+ const wasm = candidate.wasm;
6936
+ for (const field of ["sourceContentKey", "artifactSha256", "glueSha256"]) {
6937
+ if (typeof wasm[field] !== "string" || wasm[field].length === 0) {
6938
+ return invalid(`receipt.identity.wasm.${field}`, wasm[field]);
6939
+ }
6940
+ }
6941
+ for (const field of ["valueGeneration", "dependencyGeneration", "cookGeneration"]) {
6942
+ if (!isGeneration(candidate[field]))
6943
+ return invalid(`receipt.identity.${field}`, candidate[field]);
6944
+ }
6945
+ return ok({
6946
+ ...candidate,
6947
+ wasm
6883
6948
  });
6884
6949
  }
6885
6950
  function validateMaterialCookReceipt(value, expected = {}) {
6886
6951
  if (value === null || typeof value !== "object") return invalid("receipt");
6887
6952
  const candidate = value;
6888
- if (candidate.schemaVersion !== "material-cook/2") return invalid("receipt.schemaVersion");
6889
- if (typeof candidate.layoutIdentity !== "string" || candidate.layoutIdentity.length === 0) {
6890
- return invalid("receipt.layoutIdentity");
6891
- }
6953
+ if (candidate.schemaVersion !== "material-cook/3")
6954
+ return invalid("receipt.schemaVersion", candidate.schemaVersion);
6955
+ const identityResult = validateIdentity(candidate.identity);
6956
+ if (!identityResult.ok) return identityResult;
6957
+ const identity = identityResult.value;
6892
6958
  if (candidate.derivedInterface === null || typeof candidate.derivedInterface !== "object") {
6893
- return invalid("receipt.derivedInterface");
6959
+ return invalid("receipt.derivedInterface", candidate.derivedInterface);
6894
6960
  }
6895
6961
  const derivedInterface = candidate.derivedInterface;
6896
- if (derivedInterface.layoutIdentity !== candidate.layoutIdentity) {
6897
- return invalid("receipt.derivedInterface.layoutIdentity");
6898
- }
6899
- for (const field of [
6900
- "sourceClosure",
6901
- "profile",
6902
- "compilerVersion",
6903
- "inputDigest",
6904
- "outputDigest"
6905
- ]) {
6962
+ if (derivedInterface.layoutIdentity !== identity.layoutIdentity) {
6963
+ return invalid("receipt.derivedInterface.layoutIdentity", derivedInterface.layoutIdentity);
6964
+ }
6965
+ for (const field of ["sourceClosure", "profile", "compilerVersion"]) {
6906
6966
  const fieldValue = candidate[field];
6907
6967
  if (field === "sourceClosure" && !Array.isArray(fieldValue) || field !== "sourceClosure" && typeof fieldValue !== "string") {
6908
- return invalid(`receipt.${field}`);
6968
+ return invalid(`receipt.${field}`, fieldValue);
6909
6969
  }
6910
6970
  }
6911
6971
  const sourceClosure = candidate.sourceClosure;
6912
6972
  if (Array.isArray(sourceClosure) && sourceClosure.some((path) => typeof path !== "string")) {
6913
- return invalid("receipt.sourceClosure");
6914
- }
6915
- if (expected.layoutIdentity !== void 0 && candidate.layoutIdentity !== expected.layoutIdentity) {
6916
- return invalid("receipt.layoutIdentity");
6973
+ return invalid("receipt.sourceClosure", sourceClosure);
6917
6974
  }
6918
- if (expected.artifactDigest !== void 0 && candidate.outputDigest !== expected.artifactDigest) {
6919
- return invalid("receipt.outputDigest");
6975
+ if (expected.layoutIdentity !== void 0 && identity.layoutIdentity !== expected.layoutIdentity) {
6976
+ return invalid("receipt.identity.layoutIdentity", identity.layoutIdentity);
6920
6977
  }
6921
- if (expected.inputDigest !== void 0 && candidate.inputDigest !== expected.inputDigest) {
6922
- return invalid("receipt.inputDigest");
6978
+ if (expected.artifactDigest !== void 0 && identity.artifactDigest !== expected.artifactDigest) {
6979
+ return invalid("receipt.identity.artifactDigest", identity.artifactDigest);
6923
6980
  }
6924
- if (candidate.publicationGeneration !== void 0 && (typeof candidate.publicationGeneration !== "number" || !Number.isSafeInteger(candidate.publicationGeneration) || candidate.publicationGeneration < 1)) {
6925
- return invalid("receipt.publicationGeneration");
6981
+ if (expected.inputDigest !== void 0 && identity.cookIdentity !== expected.inputDigest) {
6982
+ return invalid("receipt.identity.cookIdentity", identity.cookIdentity);
6926
6983
  }
6927
6984
  return ok({
6928
- schemaVersion: "material-cook/2",
6985
+ schemaVersion: "material-cook/3",
6929
6986
  sourceClosure: candidate.sourceClosure,
6930
6987
  profile: candidate.profile,
6931
6988
  compilerVersion: candidate.compilerVersion,
6932
- inputDigest: candidate.inputDigest,
6933
- outputDigest: candidate.outputDigest,
6934
- layoutIdentity: candidate.layoutIdentity,
6935
- derivedInterface: { layoutIdentity: derivedInterface.layoutIdentity },
6936
- ...candidate.publicationGeneration === void 0 ? {} : { publicationGeneration: candidate.publicationGeneration }
6989
+ identity,
6990
+ derivedInterface: { layoutIdentity: derivedInterface.layoutIdentity }
6937
6991
  });
6938
6992
  }
6939
6993
  function validateCookedMaterialRecord(value) {
6940
6994
  if (value === null || typeof value !== "object") return invalid("record");
6941
6995
  const candidate = value;
6942
- if (candidate.schemaVersion !== "material-cook/2") return invalid("schemaVersion");
6996
+ if (candidate.schemaVersion !== "material-cook/3")
6997
+ return invalid("schemaVersion", candidate.schemaVersion);
6943
6998
  if (typeof candidate.guid !== "string" || !candidate.guid) return invalid("guid");
6944
6999
  if (candidate.materialGuid !== void 0 && typeof candidate.materialGuid !== "string")
6945
7000
  return invalid("materialGuid");
6946
- if (candidate.publicationGeneration !== void 0 && (typeof candidate.publicationGeneration !== "number" || !Number.isSafeInteger(candidate.publicationGeneration) || candidate.publicationGeneration < 1))
6947
- return invalid("publicationGeneration");
7001
+ if (candidate.publicationGeneration !== void 0 && !isGeneration(candidate.publicationGeneration))
7002
+ return invalid("publicationGeneration", candidate.publicationGeneration);
6948
7003
  if (candidate.specializationKey !== void 0 && typeof candidate.specializationKey !== "string")
6949
7004
  return invalid("specializationKey");
6950
7005
  if (candidate.artifactDigest !== void 0 && typeof candidate.artifactDigest !== "string")
@@ -6976,9 +7031,9 @@ function validateCookedMaterialRecord(value) {
6976
7031
  });
6977
7032
  if (!receiptResult.ok) return receiptResult;
6978
7033
  if (candidate.artifactDigest !== void 0 && candidate.artifactDigest !== artifact.digest)
6979
- return invalid("artifactDigest");
6980
- if (candidate.publicationGeneration !== void 0 && receiptResult.value.publicationGeneration !== candidate.publicationGeneration)
6981
- return invalid("receipt.publicationGeneration");
7034
+ return invalid("artifactDigest", candidate.artifactDigest);
7035
+ if (candidate.publicationGeneration !== void 0 && receiptResult.value.identity.cookGeneration !== candidate.publicationGeneration)
7036
+ return invalid("receipt.identity.cookGeneration", receiptResult.value.identity.cookGeneration);
6982
7037
  const normalized = {
6983
7038
  ...candidate,
6984
7039
  artifact: {
@@ -8552,6 +8607,6 @@ function parsePackV2(value) {
8552
8607
  return ok(value);
8553
8608
  }
8554
8609
 
8555
- export { MESH_BIN_DIGEST_BYTES, MESH_BIN_HEADER_V4_BYTES, MESH_BIN_PROJECTION_VERSION, MESH_BIN_VERSION, SCRIPTABLE_PACK_ASSET_KINDS, buildOfflineAssetEvidence, calculateTopologyDiff, collectMaterialCookRefs, createMaterialArtifactDigest, decodeMeshBinHeader, diffTopology, isScriptablePackAssetKind, packageVerification, parsePackV2, projectCookedMaterialRecord, projectRuntimePack, projectScriptablePackMeta, serializeCookedMaterialRecord, serializeMaterialCookReceipt, validateArtifactPath, validateCookedMaterialRecord, validateMaterialCookReceipt, validateMeta, validatePack, validatePackV2, validateProducerContract, validateProducerOutputs, validateScriptablePackDefinition, writeMaterialArtifact, writeMeshBinHeader };
8610
+ export { MESH_BIN_DIGEST_BYTES, MESH_BIN_HEADER_V4_BYTES, MESH_BIN_PROJECTION_VERSION, MESH_BIN_VERSION, SCRIPTABLE_PACK_ASSET_KINDS, buildOfflineAssetEvidence, calculateTopologyDiff, collectMaterialCookRefs, createMaterialArtifactDigest, createMaterialCookIdentity, decodeMeshBinHeader, diffTopology, isScriptablePackAssetKind, packageVerification, parsePackV2, projectCookedMaterialRecord, projectRuntimePack, projectScriptablePackMeta, serializeCookedMaterialRecord, serializeMaterialCookReceipt, validateArtifactPath, validateCookedMaterialRecord, validateMaterialCookReceipt, validateMeta, validatePack, validatePackV2, validateProducerContract, validateProducerOutputs, validateScriptablePackDefinition, writeMaterialArtifact, writeMeshBinHeader };
8556
8611
  //# sourceMappingURL=index.mjs.map
8557
8612
  //# sourceMappingURL=index.mjs.map