diff --git a/CHANGELOG.md b/CHANGELOG.md index a40ed5d9..4792d9ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,12 @@ ### Changed +- Provider semantic declarations now support explicitly bounded Core byte + aliases, including exact 32-byte identifiers. Byte aliases participate in + bounded record graphs and generate canonical lawpack type definitions. + Inverted ranges, malformed bounds, recursive records and claims on Edict + Core type identities refuse before artifact generation. + - An engine keeps the state root's working memory across commits. Once that memory has grown to the reachable graph, a commit's state-root hash allocates nothing, except when the membership table falls back to the diff --git a/crates/echo-edict-provider-lowerer/src/lib.rs b/crates/echo-edict-provider-lowerer/src/lib.rs index 621dd0b8..20d92851 100644 --- a/crates/echo-edict-provider-lowerer/src/lib.rs +++ b/crates/echo-edict-provider-lowerer/src/lib.rs @@ -823,7 +823,7 @@ pub mod echo_dpo { pub const PROVIDER_SCHEMA_COORDINATE: &str = "echo.provider-artifacts.cddl@1"; /// Raw SHA-256 of the exact self-contained provider CDDL bytes. pub const PROVIDER_SCHEMA_SHA256_HEX: &str = - "139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"; + "0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"; /// Exact generated-artifact profile coordinate owning operation schemas. pub const GENERATED_ARTIFACT_PROFILE: &str = "echo.dpo.registration/v1"; /// Digest-framing domain for the generated-artifact profile. @@ -860,7 +860,7 @@ pub mod echo_dpo { const MUTATION_RULE_NAME: &str = concat!( "cmd/contract/", - "139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7", + "0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111", "/3389142194/a.b@1.t" ); const PROVIDER_OPERATIONS: [ProviderOperationV1<'static>; 1] = [ProviderOperationV1 { diff --git a/crates/echo-edict-provider-lowerer/tests/fixtures/generated_echo_dpo.rs b/crates/echo-edict-provider-lowerer/tests/fixtures/generated_echo_dpo.rs index 79754e48..7ddb797a 100644 --- a/crates/echo-edict-provider-lowerer/tests/fixtures/generated_echo_dpo.rs +++ b/crates/echo-edict-provider-lowerer/tests/fixtures/generated_echo_dpo.rs @@ -71,7 +71,7 @@ pub mod echo_dpo { pub const PROVIDER_SCHEMA_COORDINATE: &str = "echo.provider-artifacts.cddl@1"; /// Raw SHA-256 of the exact self-contained provider CDDL bytes. pub const PROVIDER_SCHEMA_SHA256_HEX: &str = - "139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"; + "0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"; /// Exact generated-artifact profile coordinate owning operation schemas. pub const GENERATED_ARTIFACT_PROFILE: &str = "echo.dpo.registration/v1"; /// Digest-framing domain for the generated-artifact profile. @@ -108,7 +108,7 @@ pub mod echo_dpo { const MUTATION_RULE_NAME: &str = concat!( "cmd/contract/", - "139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7", + "0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111", "/3389142194/a.b@1.t" ); const PROVIDER_OPERATIONS: [ProviderOperationV1<'static>; 1] = [ProviderOperationV1 { diff --git a/crates/echo-edict-provider-lowerer/tests/lowerer_contract.rs b/crates/echo-edict-provider-lowerer/tests/lowerer_contract.rs index b4c0fec7..f9b263dd 100644 --- a/crates/echo-edict-provider-lowerer/tests/lowerer_contract.rs +++ b/crates/echo-edict-provider-lowerer/tests/lowerer_contract.rs @@ -46,7 +46,7 @@ const REVIEW_MEDIA_TYPE: &str = "application/json"; const GENERATED_SOURCE_PATH: &str = "generated/echo_dpo.rs"; const REVIEW_PATH: &str = "review/echo_dpo.json"; const EXPECTED_PROVIDER_SCHEMA_SHA256_HEX: &str = - "139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"; + "0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"; const EXPECTED_OPERATION_ID_LAW: &str = "echo.semantic-operation-id.fnv1-32/v1"; const EXPECTED_OPERATION_ID: u32 = 3_389_142_194; @@ -949,6 +949,11 @@ fn generated_source_exposes_explicit_post_assembly_bundle_binding() { fn generated_source_binds_the_expected_provider_schema_identity() { let source = generated_source(); + let current_schema = include_bytes!( + "../../../schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl" + ); + let current_schema_sha256 = hex::encode(sha2::Sha256::digest(current_schema)); + assert_eq!(EXPECTED_PROVIDER_SCHEMA_SHA256_HEX, current_schema_sha256); assert!( source.contains(&format!("\"{EXPECTED_PROVIDER_SCHEMA_SHA256_HEX}\"")), "generated source did not bind expected provider schema SHA-256 \ diff --git a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm index 1d304026..424970f6 100644 Binary files a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm and b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm differ diff --git a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json index 68b43831..277972db 100644 --- a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json +++ b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/review.provider-generation.json b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/review.provider-generation.json index bc4854f5..4b88f863 100644 --- a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/review.provider-generation.json +++ b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/review.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:c94c42b8205a0a3b82d85c88290a875c1158a96e579a70d52eb1607b1bbdc035","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:ae741baed96ec6121aa06e366319d88cc8be6966e01a85f57a652173ce59b8a7","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl index 7e434496..8b454443 100644 --- a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl +++ b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl @@ -994,12 +994,17 @@ generated-artifact-profile = { operations: { * tstr => generated-operation }, } -echo-generated-type = echo-generated-string-alias / echo-generated-record +echo-generated-type = echo-generated-string-alias / echo-generated-bytes-alias / echo-generated-record echo-generated-string-alias = { kind: "coreStringAlias", maxScalarValues: uint, canonical: "raw-utf8", } +echo-generated-bytes-alias = { + kind: "coreBytesAlias", + minBytes: uint, + maxBytes: uint, +} echo-generated-record = { kind: "record", fields: [* echo-generated-record-field], diff --git a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/provider-manifest.echo.json b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/provider-manifest.echo.json index d54401f6..72f2301b 100644 --- a/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/provider-manifest.echo.json +++ b/crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/provider-manifest.echo.json @@ -3,7 +3,7 @@ "providerAbi": "edict:target-provider@1.0.0", "provider": { "coordinate": "echo.edict-provider@1", - "digest": "sha256:2083dd7057574b040fb9c043b17990e34012004fbed39bdeda253dbb0a522bcc" + "digest": "sha256:36ce20c612c8c46bbe450c93e6fb2235f38e4ec2b14f04f128eee91805cdb26a" }, "artifacts": [ { @@ -21,7 +21,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -40,7 +40,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -59,7 +59,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -78,7 +78,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -87,13 +87,13 @@ "artifactKind": "lowerer", "resource": { "coordinate": "echo.dpo.lowerer/component@1", - "digest": "sha256:04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e" + "digest": "sha256:cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c" }, "source": { "kind": "component", "component": { "coordinate": "echo.dpo.lowerer/component@1", - "digest": "sha256:04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e" + "digest": "sha256:cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c" } } }, @@ -102,7 +102,7 @@ "artifactKind": "generationProvenance", "resource": { "coordinate": "echo.edict-provider-generation-provenance@1", - "digest": "sha256:a1a25c26e70c0d48d2b0e7e9643807077eab113f873a168468a460211d6ab4e2" + "digest": "sha256:2bc9bf98d4f3ff91b31359afe60b30bbf6670c94ba2d36d04baecb686eec4d38" }, "source": { "kind": "generated", @@ -112,7 +112,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -121,7 +121,7 @@ "artifactKind": "reviewArtifact", "resource": { "coordinate": "echo.edict-provider-generation-review@1", - "digest": "sha256:a298384754bc53136c592316aa9728cd95d3c0c4bf51c92cee7d96adbab2e2a6" + "digest": "sha256:29612fb0642a1fea047e9d348e21abb776e3467ccad61fa9e07194e945f39191" }, "source": { "kind": "generated", @@ -131,7 +131,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -140,7 +140,7 @@ "artifactKind": "artifactSchema", "resource": { "coordinate": "echo.provider-artifacts.cddl@1", - "digest": "sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7" + "digest": "sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111" }, "source": { "kind": "generated", @@ -150,7 +150,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -169,7 +169,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, diff --git a/crates/echo-wesley-gen/src/provider_artifacts.rs b/crates/echo-wesley-gen/src/provider_artifacts.rs index 435f1556..3a5dd794 100644 --- a/crates/echo-wesley-gen/src/provider_artifacts.rs +++ b/crates/echo-wesley-gen/src/provider_artifacts.rs @@ -62,12 +62,17 @@ generated-artifact-profile = { operations: { * tstr => generated-operation }, } -echo-generated-type = echo-generated-string-alias / echo-generated-record +echo-generated-type = echo-generated-string-alias / echo-generated-bytes-alias / echo-generated-record echo-generated-string-alias = { kind: "coreStringAlias", maxScalarValues: uint, canonical: "raw-utf8", } +echo-generated-bytes-alias = { + kind: "coreBytesAlias", + minBytes: uint, + maxBytes: uint, +} echo-generated-record = { kind: "record", fields: [* echo-generated-record-field], diff --git a/crates/echo-wesley-gen/src/provider_semantics.rs b/crates/echo-wesley-gen/src/provider_semantics.rs index b1cda1af..72c8e01b 100644 --- a/crates/echo-wesley-gen/src/provider_semantics.rs +++ b/crates/echo-wesley-gen/src/provider_semantics.rs @@ -160,6 +160,13 @@ pub enum SemanticTypeShape { /// Edict Core string canonicalization selected by the alias. canonical: CoreStringCanonicalization, }, + /// Echo-owned alias of a bounded Edict Core byte sequence. + CoreBytesAlias { + /// Inclusive minimum byte length. + min_bytes: u64, + /// Inclusive maximum byte length. + max_bytes: u64, + }, /// Record whose fields form a name-keyed set. Record { /// Record fields. @@ -179,6 +186,16 @@ impl SemanticTypeShape { "String", canonical.as_str() )), + Self::CoreBytesAlias { + min_bytes, + max_bytes, + } => Some(if min_bytes == max_bytes { + format!("Bytes") + } else if *min_bytes == 0 { + format!("Bytes") + } else { + format!("Bytes") + }), Self::Record { .. } => None, } } @@ -196,7 +213,7 @@ impl SemanticTypeShape { } => Some( u64::try_from(value.chars().count()).is_ok_and(|count| count <= *max_scalar_values), ), - Self::Record { .. } => None, + Self::CoreBytesAlias { .. } | Self::Record { .. } => None, } } } @@ -893,6 +910,8 @@ pub enum ProviderSemanticSourceErrorKind { UnknownType, /// A record type graph was recursive and therefore not bounded. UnboundedTypeGraph, + /// A byte alias minimum exceeded its maximum. + InvalidByteBounds, /// An Echo-owned type attempted to claim an Edict Core coordinate. CoreTypeAuthorityMismatch, /// A write-class reference was absent. @@ -988,6 +1007,7 @@ impl ProviderSemanticSourceErrorKind { Self::FactAuthorityMismatch => "fact-authority-mismatch", Self::UnknownType => "unknown-type", Self::UnboundedTypeGraph => "unbounded-type-graph", + Self::InvalidByteBounds => "invalid-byte-bounds", Self::CoreTypeAuthorityMismatch => "core-type-authority-mismatch", Self::UnknownWriteClass => "unknown-write-class", Self::InvalidWriteClass => "invalid-write-class", @@ -2007,6 +2027,19 @@ fn validate_type_references( "edict.core/v1", )); } + if let SemanticTypeShape::CoreBytesAlias { + min_bytes, + max_bytes, + } = declaration.shape + { + if min_bytes > max_bytes { + return Err(ProviderSemanticSourceError::new( + ProviderSemanticSourceErrorKind::InvalidByteBounds, + &declaration.identity.coordinate, + "minBytes<=maxBytes", + )); + } + } if let SemanticTypeShape::Record { fields } = &declaration.shape { ensure_unique_keys("types.fields.name", fields.iter().map(|field| &field.name))?; for field in fields { @@ -2024,8 +2057,12 @@ fn validate_type_references( .types .iter() .filter_map(|declaration| { - matches!(declaration.shape, SemanticTypeShape::CoreStringAlias { .. }) - .then_some(declaration.identity.coordinate.as_str()) + matches!( + declaration.shape, + SemanticTypeShape::CoreStringAlias { .. } + | SemanticTypeShape::CoreBytesAlias { .. } + ) + .then_some(declaration.identity.coordinate.as_str()) }) .collect::>(); loop { @@ -2056,7 +2093,8 @@ fn validate_type_references( .find(|field| !bounded.contains(field.type_coordinate.as_str())) .map(|field| field.type_coordinate.as_str()) .unwrap_or_default(), - SemanticTypeShape::CoreStringAlias { .. } => "", + SemanticTypeShape::CoreStringAlias { .. } + | SemanticTypeShape::CoreBytesAlias { .. } => "", }; return Err(ProviderSemanticSourceError::new( ProviderSemanticSourceErrorKind::UnboundedTypeGraph, diff --git a/crates/echo-wesley-gen/tests/provider_byte_types.rs b/crates/echo-wesley-gen/tests/provider_byte_types.rs new file mode 100644 index 00000000..329d0b7f --- /dev/null +++ b/crates/echo-wesley-gen/tests/provider_byte_types.rs @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: Apache-2.0 +// © James Ross Ω FLYING•ROBOTS +#![allow(clippy::expect_used, clippy::panic)] +//! Byte aliases needed by authored graph catalog declarations. +use echo_wesley_gen::provider_artifacts::generate_provider_primary_artifacts_v1; +use echo_wesley_gen::provider_canonical::CanonicalValueV1 as V; +use echo_wesley_gen::provider_contract_pack::admit_provider_contract_pack_v1; +use echo_wesley_gen::provider_generation::build_provider_generation_input_v1; +use echo_wesley_gen::provider_semantics::{ + parse_provider_semantic_source_v1, ProviderSemanticSourceError, +}; +use serde_json::{json, Value}; +const SOURCE: &[u8] = include_bytes!("../assets/v1/edict-provider/echo-provider-semantics-v1.json"); +fn source() -> Value { + let mut source: Value = serde_json::from_slice(SOURCE).expect("source"); + for (name, min, max) in [ + ("Digest32", 32, 32), + ("AtomBytes", 0, 1024), + ("EmptyBytes", 0, 0), + ("Window", 2, 8), + ] { + source["types"].as_array_mut().expect("types").push(json!({"identity":{"coordinate":format!("graph@1.{name}"),"domain":"echo.edict-provider/value/v1","authority":"echo.provider-semantic-declaration@1"},"shape":{"kind":"coreBytesAlias","minBytes":min,"maxBytes":max}})); + } + source["types"].as_array_mut().expect("types").push(json!({"identity":{"coordinate":"graph@1.ReadAddress","domain":"echo.edict-provider/value/v1","authority":"echo.provider-semantic-declaration@1"},"shape":{"kind":"record","fields":[{"name":"nodeId","type":"graph@1.Digest32"},{"name":"typeId","type":"graph@1.Digest32"},{"name":"warpId","type":"graph@1.Digest32"}]}})); + source +} +fn source_error(value: &Value) -> ProviderSemanticSourceError { + match parse_provider_semantic_source_v1(&serde_json::to_string(value).expect("JSON")) { + Err(error) => error, + Ok(_) => panic!("invalid source was admitted"), + } +} +fn field<'a>(v: &'a V, key: &str) -> &'a V { + let V::Map(fields) = v else { panic!("map") }; + &fields + .iter() + .find(|(k, _)| k == &V::Text(key.into())) + .expect("field") + .1 +} +#[test] +fn byte_aliases_form_bounded_record_fields_and_emit_exact_lawpack_definitions() { + let source = serde_json::to_vec(&source()).expect("JSON"); + let parsed = parse_provider_semantic_source_v1(std::str::from_utf8(&source).expect("UTF8")) + .expect("bounded bytes are legal provider type leaves"); + let pack = admit_provider_contract_pack_v1( + include_bytes!("../assets/v1/edict-provider/contracts/v1/edict-provider-contracts.cddl"), + include_bytes!("../assets/v1/edict-provider/contracts/v1/manifest.json"), + ) + .expect("pack"); + let input = build_provider_generation_input_v1( + &source, + &pack, + include_bytes!("../assets/v1/edict-provider/generation-settings-v1.json"), + ) + .expect("input"); + let artifacts = generate_provider_primary_artifacts_v1(&input, &pack).expect("generation"); + let exports = artifacts + .resource("resource.lawpack-exports") + .expect("exports") + .canonical_value(); + let V::Array(types) = field(exports, "types") else { + panic!("types") + }; + for (name, definition) in [ + ("Digest32", "Bytes"), + ("AtomBytes", "Bytes"), + ("EmptyBytes", "Bytes"), + ("Window", "Bytes"), + ] { + let coordinate = format!("graph@1.{name}"); + let exported = types + .iter() + .find(|v| field(v, "coordinate") == &V::Text(coordinate.clone())) + .expect("byte alias exported"); + assert_eq!(field(exported, "definition"), &V::Text(definition.into())); + let declared = parsed + .source() + .types + .iter() + .find(|v| v.identity.coordinate == coordinate) + .expect("source type"); + assert_eq!( + declared.shape.core_type_coordinate().as_deref(), + Some(definition) + ); + assert_eq!(declared.shape.accepts_raw_string("abc"), None); + } +} +#[test] +fn inverted_byte_ranges_are_rejected_before_generation() { + for (min, max) in [(33, 32), (1, 0), (u64::MAX, u64::MAX - 1)] { + let mut value = source(); + let alias = value["types"] + .as_array_mut() + .expect("types") + .iter_mut() + .find(|v| v["identity"]["coordinate"] == "graph@1.Digest32") + .expect("alias"); + alias["shape"]["minBytes"] = json!(min); + alias["shape"]["maxBytes"] = json!(max); + let error = source_error(&value); + assert_eq!( + error.kind(), + echo_wesley_gen::provider_semantics::ProviderSemanticSourceErrorKind::InvalidByteBounds + ); + assert_eq!(error.subject(), "graph@1.Digest32"); + } +} +#[test] +fn byte_alias_fields_are_explicit_unsigned_and_closed() { + use echo_wesley_gen::provider_semantics::ProviderSemanticSourceErrorKind as K; + for shape in [ + json!({"kind":"coreBytesAlias","minBytes":0}), + json!({"kind":"coreBytesAlias","maxBytes":32}), + json!({"kind":"coreBytesAlias","minBytes":-1,"maxBytes":32}), + json!({"kind":"coreBytesAlias","minBytes":0,"maxBytes":"32"}), + json!({"kind":"coreBytesAlias","minBytes":0,"maxBytes":32,"canonical":"raw-utf8"}), + ] { + let mut value = source(); + value["types"] + .as_array_mut() + .expect("types") + .iter_mut() + .find(|v| v["identity"]["coordinate"] == "graph@1.Digest32") + .expect("alias")["shape"] = shape; + assert_eq!(source_error(&value).kind(), K::MalformedDocument); + } +} +#[test] +fn byte_leaves_do_not_make_recursive_records_or_core_identity_claims_valid() { + use echo_wesley_gen::provider_semantics::ProviderSemanticSourceErrorKind as K; + let mut value = source(); + value["types"] + .as_array_mut() + .expect("types") + .iter_mut() + .find(|v| v["identity"]["coordinate"] == "graph@1.ReadAddress") + .expect("record")["shape"]["fields"] + .as_array_mut() + .expect("fields") + .push(json!({"name":"next","type":"graph@1.ReadAddress"})); + assert_eq!(source_error(&value).kind(), K::UnboundedTypeGraph); + for coordinate in ["Bytes", "Bytes"] { + let mut value = source(); + value["types"].as_array_mut().expect("types").push(json!({"identity":{"coordinate":coordinate,"domain":"echo.edict-provider/value/v1","authority":"echo.provider-semantic-declaration@1"},"shape":{"kind":"coreBytesAlias","minBytes":32,"maxBytes":32}})); + assert_eq!(source_error(&value).kind(), K::CoreTypeAuthorityMismatch); + } +} diff --git a/crates/echo-wesley-gen/tests/provider_package.rs b/crates/echo-wesley-gen/tests/provider_package.rs index c42b848d..c49b25d4 100644 --- a/crates/echo-wesley-gen/tests/provider_package.rs +++ b/crates/echo-wesley-gen/tests/provider_package.rs @@ -65,7 +65,7 @@ const SEMANTIC_DIGEST: &str = const RELEASE_DIGEST: &str = "sha256:c39449495281b51f978468d08c21e93bcfa423176063b41675da61e4674b0066"; const PACKAGE_ARTIFACT_SHA256: &str = - "2083dd7057574b040fb9c043b17990e34012004fbed39bdeda253dbb0a522bcc"; + "36ce20c612c8c46bbe450c93e6fb2235f38e4ec2b14f04f128eee91805cdb26a"; const OTHER_PACKAGE_ARTIFACT_SHA256: &str = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; diff --git a/crates/echo-wesley-gen/tests/provider_package_corpus.rs b/crates/echo-wesley-gen/tests/provider_package_corpus.rs index 13feaf52..a91abf8c 100644 --- a/crates/echo-wesley-gen/tests/provider_package_corpus.rs +++ b/crates/echo-wesley-gen/tests/provider_package_corpus.rs @@ -11,9 +11,9 @@ use std::sync::atomic::{AtomicU64, Ordering}; use sha2::{Digest as _, Sha256}; const EXPECTED_PROVIDER_DIGEST: &str = - "sha256:2083dd7057574b040fb9c043b17990e34012004fbed39bdeda253dbb0a522bcc"; + "sha256:36ce20c612c8c46bbe450c93e6fb2235f38e4ec2b14f04f128eee91805cdb26a"; const EXPECTED_MANIFEST_RAW_SHA256: &str = - "933201583b043c3b0bdb4be3d6ece5fb2d21ea0aecf5c447c1a9d20639bc39a8"; + "8bb6c675598fc457513a953c2aee65316f80315583df418a5ef96788321cd649"; const PACKAGE_PATHS: [&str; 25] = [ "components/lowerer.echo-dpo.component.wasm", diff --git a/docs/topics/GeneratedRules.md b/docs/topics/GeneratedRules.md index eb87087f..c84d20e4 100644 --- a/docs/topics/GeneratedRules.md +++ b/docs/topics/GeneratedRules.md @@ -92,6 +92,27 @@ a Rust dependency consumer can explicitly enable the feature. It is not an access-control or security seal. Echo product and adapter code must not use it as an application authoring escape hatch. +### Provider semantic type declarations + +The current `echo.edict-provider-semantics/v1` type model supports bounded +Core string aliases, bounded Core byte aliases, and records with name-keyed +references to declared types. A byte alias uses `shape.kind: coreBytesAlias` +with explicit unsigned `minBytes` and `maxBytes`. Source admission requires +`minBytes <= maxBytes`; an inverted interval yields `InvalidByteBounds` before +artifact generation. Missing, mistyped or extra shape fields refuse. + +Byte aliases are bounded leaves for record-graph validation. A record that +also references itself still refuses as `UnboundedTypeGraph`; an Echo-owned +alias cannot claim an Edict Core `Bytes` coordinate. Lawpack exports retain +exact source alias identities and emit canonical definitions: equal bounds +use `Bytes`, a zero lower bound uses `Bytes`, and other intervals +use `Bytes`. The empty exact-zero interval is valid. + +These declarations provide catalog and lawpack type metadata. Byte-valued +Rust helper codecs and graph-effect lowering require their own implementation +and verification. Catalog-to-export nominal agreement remains a separate +required check. + ## Execution Corridors ### Bounded compiler-package computation diff --git a/schemas/edict-provider/README.md b/schemas/edict-provider/README.md index 53167d55..958c9489 100644 --- a/schemas/edict-provider/README.md +++ b/schemas/edict-provider/README.md @@ -181,7 +181,7 @@ reproduce all three completed outcomes identically. Both checked components remain uninstalled package material; neither they nor the generated authority-facts documents are runtime Echo authority. The promoted lowerer is 485,983 bytes with SHA-256 -`04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e`; the +`cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c`; the promoted verifier is 504,431 bytes with SHA-256 `3451e95a7d084d4874c30833f90f5c21012e8341f35ed0f0888d4d268a768b11`. diff --git a/schemas/edict-provider/components/v1/README.md b/schemas/edict-provider/components/v1/README.md index 71ab66ae..d17349a3 100644 --- a/schemas/edict-provider/components/v1/README.md +++ b/schemas/edict-provider/components/v1/README.md @@ -24,7 +24,7 @@ The source WIT is the exact 7,392-byte Edict contract with SHA-256 `2971fe44def7e51d5271dfc0f04f3088aa58754cffdc847681a587605aac749e`. The checked component is 485,983 bytes with SHA-256 -`04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e`. +`cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c`. Its sole contract attestation is the top-level custom section `edict:target-provider-contract` containing `edict:target-provider/lowerer@1.0.0`. Its only imports are the frozen WIT's diff --git a/schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm b/schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm index 1d304026..424970f6 100644 Binary files a/schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm and b/schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm differ diff --git a/schemas/edict-provider/generated/v1/evidence/provenance.provider-generation.json b/schemas/edict-provider/generated/v1/evidence/provenance.provider-generation.json index 68b43831..277972db 100644 --- a/schemas/edict-provider/generated/v1/evidence/provenance.provider-generation.json +++ b/schemas/edict-provider/generated/v1/evidence/provenance.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/schemas/edict-provider/generated/v1/evidence/review.provider-generation.json b/schemas/edict-provider/generated/v1/evidence/review.provider-generation.json index bc4854f5..4b88f863 100644 --- a/schemas/edict-provider/generated/v1/evidence/review.provider-generation.json +++ b/schemas/edict-provider/generated/v1/evidence/review.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:c94c42b8205a0a3b82d85c88290a875c1158a96e579a70d52eb1607b1bbdc035","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:ae741baed96ec6121aa06e366319d88cc8be6966e01a85f57a652173ce59b8a7","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl b/schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl index 7e434496..8b454443 100644 --- a/schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl +++ b/schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl @@ -994,12 +994,17 @@ generated-artifact-profile = { operations: { * tstr => generated-operation }, } -echo-generated-type = echo-generated-string-alias / echo-generated-record +echo-generated-type = echo-generated-string-alias / echo-generated-bytes-alias / echo-generated-record echo-generated-string-alias = { kind: "coreStringAlias", maxScalarValues: uint, canonical: "raw-utf8", } +echo-generated-bytes-alias = { + kind: "coreBytesAlias", + minBytes: uint, + maxBytes: uint, +} echo-generated-record = { kind: "record", fields: [* echo-generated-record-field], diff --git a/schemas/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm b/schemas/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm index 1d304026..424970f6 100644 Binary files a/schemas/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm and b/schemas/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm differ diff --git a/schemas/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json b/schemas/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json index 68b43831..277972db 100644 --- a/schemas/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json +++ b/schemas/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-provenance-manifest/v1","contractVersions":{"generatorAbi":"wesley.extension-generator/v1","inputSchema":"wesley.extension-generation-input/v1","provenanceSchema":"wesley.generation-provenance-manifest/v1"},"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"settingsDigest":"sha256:0f708e76898de6fdb8186352e81d0f5c445adf94bb6c7de9204952d9fe913d4a","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/schemas/edict-provider/package/v1/generated/evidence/review.provider-generation.json b/schemas/edict-provider/package/v1/generated/evidence/review.provider-generation.json index bc4854f5..4b88f863 100644 --- a/schemas/edict-provider/package/v1/generated/evidence/review.provider-generation.json +++ b/schemas/edict-provider/package/v1/generated/evidence/review.provider-generation.json @@ -1 +1 @@ -{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:c94c42b8205a0a3b82d85c88290a875c1158a96e579a70d52eb1607b1bbdc035","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file +{"apiVersion":"wesley.generation-review/v1","authoritative":false,"emittedArtifacts":[{"coordinate":"echo.dpo-authority-facts@1","digest":"sha256:e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6"},{"coordinate":"echo.dpo-lawpack-authority-facts@1","digest":"sha256:ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9"},{"coordinate":"echo.dpo-lawpack@1","digest":"sha256:8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c"},{"coordinate":"echo.dpo.registration/v1","digest":"sha256:4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34"},{"coordinate":"echo.dpo@1","digest":"sha256:1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e"},{"coordinate":"echo.provider-artifacts.cddl@1","digest":"sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111"}],"generationInputDigest":"sha256:0c07274803d465ec212c313f74dd46396851f43019fa0f97da9571a167c84587","generator":{"coordinate":"echo-wesley-gen.provider-artifact-generator@1","digest":"sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b","version":"0.1.0"},"projectionRoles":["authority-facts.echo-dpo","authority-facts.echo-lawpack","generated-artifact-profile.echo-dpo-registration","lawpack.echo-dpo","schema.echo-provider-artifacts","target-profile.echo-dpo"],"provenanceManifestDigest":"sha256:ae741baed96ec6121aa06e366319d88cc8be6966e01a85f57a652173ce59b8a7","sourceArtifacts":[{"coordinate":"echo.semantic-schema@1","digest":"sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852"},{"coordinate":"edict.provider-contract-pack.cddl@1","digest":"sha256:8d77c84ecbd7d7e38496479b2f8346c15504a56f076170d79c0eca2a57fdb3a5"},{"coordinate":"edict.provider-contract-pack.manifest@1","digest":"sha256:bc222c4a669b888a60df6f398412bae232967c11841b9a27c7ba6c18eb41e362"}]} \ No newline at end of file diff --git a/schemas/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl b/schemas/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl index 7e434496..8b454443 100644 --- a/schemas/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl +++ b/schemas/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl @@ -994,12 +994,17 @@ generated-artifact-profile = { operations: { * tstr => generated-operation }, } -echo-generated-type = echo-generated-string-alias / echo-generated-record +echo-generated-type = echo-generated-string-alias / echo-generated-bytes-alias / echo-generated-record echo-generated-string-alias = { kind: "coreStringAlias", maxScalarValues: uint, canonical: "raw-utf8", } +echo-generated-bytes-alias = { + kind: "coreBytesAlias", + minBytes: uint, + maxBytes: uint, +} echo-generated-record = { kind: "record", fields: [* echo-generated-record-field], diff --git a/schemas/edict-provider/package/v1/provider-manifest.echo.json b/schemas/edict-provider/package/v1/provider-manifest.echo.json index d54401f6..72f2301b 100644 --- a/schemas/edict-provider/package/v1/provider-manifest.echo.json +++ b/schemas/edict-provider/package/v1/provider-manifest.echo.json @@ -3,7 +3,7 @@ "providerAbi": "edict:target-provider@1.0.0", "provider": { "coordinate": "echo.edict-provider@1", - "digest": "sha256:2083dd7057574b040fb9c043b17990e34012004fbed39bdeda253dbb0a522bcc" + "digest": "sha256:36ce20c612c8c46bbe450c93e6fb2235f38e4ec2b14f04f128eee91805cdb26a" }, "artifacts": [ { @@ -21,7 +21,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -40,7 +40,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -59,7 +59,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -78,7 +78,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -87,13 +87,13 @@ "artifactKind": "lowerer", "resource": { "coordinate": "echo.dpo.lowerer/component@1", - "digest": "sha256:04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e" + "digest": "sha256:cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c" }, "source": { "kind": "component", "component": { "coordinate": "echo.dpo.lowerer/component@1", - "digest": "sha256:04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e" + "digest": "sha256:cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c" } } }, @@ -102,7 +102,7 @@ "artifactKind": "generationProvenance", "resource": { "coordinate": "echo.edict-provider-generation-provenance@1", - "digest": "sha256:a1a25c26e70c0d48d2b0e7e9643807077eab113f873a168468a460211d6ab4e2" + "digest": "sha256:2bc9bf98d4f3ff91b31359afe60b30bbf6670c94ba2d36d04baecb686eec4d38" }, "source": { "kind": "generated", @@ -112,7 +112,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -121,7 +121,7 @@ "artifactKind": "reviewArtifact", "resource": { "coordinate": "echo.edict-provider-generation-review@1", - "digest": "sha256:a298384754bc53136c592316aa9728cd95d3c0c4bf51c92cee7d96adbab2e2a6" + "digest": "sha256:29612fb0642a1fea047e9d348e21abb776e3467ccad61fa9e07194e945f39191" }, "source": { "kind": "generated", @@ -131,7 +131,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -140,7 +140,7 @@ "artifactKind": "artifactSchema", "resource": { "coordinate": "echo.provider-artifacts.cddl@1", - "digest": "sha256:139ac50b29f4a6b524febd37e1735e9de3c905fe4b234779b705d68a19cd29e7" + "digest": "sha256:0a4e7ddf2f4087ef53fd3116db1623097c0df08658d9ddc7a80e02da04fba111" }, "source": { "kind": "generated", @@ -150,7 +150,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, @@ -169,7 +169,7 @@ }, "generator": { "coordinate": "echo-wesley-gen.provider-artifact-generator@1", - "digest": "sha256:7f16189048b2dcd0a7a15f32ed1f3ee9d3ac0ba5f6ea03af9baa3cabcb8727e5" + "digest": "sha256:b3b575626164e4639545e3d25b31602274f9458e9dafc4f8076c832a72aa262b" } } }, diff --git a/xtask/src/provider_lowerer_component.rs b/xtask/src/provider_lowerer_component.rs index 7b40d528..49cc91a9 100644 --- a/xtask/src/provider_lowerer_component.rs +++ b/xtask/src/provider_lowerer_component.rs @@ -53,7 +53,7 @@ const PINNED_CARGO_COMMIT: &str = "840b83a10fb0e039a83f4d70ad032892c287570a"; /// Reviewed identity that the portable promotion command is permitted to install. pub(crate) const APPROVED_CHECKED_COMPONENT_SHA256: &str = - "04d5162202ca2ce9b4496c3eff5b7b249d31b33d72e97a23f2e2a86f8d4ed93e"; + "cd81874f971f290f74987b39479ef89ddb5060e56df54044d2359e6e89b2430c"; pub(crate) const CHECKED_COMPONENT_REPOSITORY_PATH: &str = "schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm";