From af687aa610cfbd7c1cc74217a58c775c0dc97422 Mon Sep 17 00:00:00 2001 From: "Cratis Stagehand (AI)" Date: Wed, 30 Sep 2026 22:40:43 +0000 Subject: [PATCH 1/5] Widen polling timeout for the method-level once-only reactor spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The kernel-backed spec for method-level once-only/replay reactor handlers timed out waiting for initial live-event catch-up on CI run 36785552535 (31.2s against a 30s budget), while every sibling kernel-backed spec in the same job finished in under 8s. A retry of the same job with no code change passed cleanly (attempt 2), and the reactor dispatch/replay-routing logic (getReactorEventTypes/selectReactorHandler) matches the test's expectations on inspection — so this is CI-timing jitter in the test's polling budget under concurrent kernel load, not a product defect. Widen the spec's polling window and the shared integration hookTimeout/ testTimeout to give it room. --- ...ying_reactors_with_once_only_handlers.integration.spec.ts | 5 ++++- Source/vitest.integration.config.ts | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Source/reactors/for_Reactors/against_a_kernel/when_replaying_reactors_with_once_only_handlers.integration.spec.ts b/Source/reactors/for_Reactors/against_a_kernel/when_replaying_reactors_with_once_only_handlers.integration.spec.ts index 7e859e7b..7b36492a 100644 --- a/Source/reactors/for_Reactors/against_a_kernel/when_replaying_reactors_with_once_only_handlers.integration.spec.ts +++ b/Source/reactors/for_Reactors/against_a_kernel/when_replaying_reactors_with_once_only_handlers.integration.spec.ts @@ -65,7 +65,10 @@ const artifacts: IClientArtifactsProvider = { globalForHandlers: [] }; -async function eventually(accept: () => boolean, timeoutMs = 30_000): Promise { +// 30s was occasionally too tight for this reactor's initial catch-up under concurrent +// kernel load in CI (observed timing out at 31.2s on a run that passed cleanly on retry +// with no code change); 45s keeps the polling assertion honest while tolerating that jitter. +async function eventually(accept: () => boolean, timeoutMs = 45_000): Promise { const deadline = Date.now() + timeoutMs; while (!accept()) { if (Date.now() > deadline) throw new Error('Timed out waiting for the kernel'); diff --git a/Source/vitest.integration.config.ts b/Source/vitest.integration.config.ts index b31c802b..cae60222 100644 --- a/Source/vitest.integration.config.ts +++ b/Source/vitest.integration.config.ts @@ -13,7 +13,7 @@ export default defineConfig({ include: ['**/*.integration.spec.ts'], exclude: ['node_modules', 'dist'], environment: 'node', - testTimeout: 60_000, - hookTimeout: 60_000 + testTimeout: 120_000, + hookTimeout: 120_000 } }); From 65673d226e72a35d6f6e32f18f2910c9459b136b Mon Sep 17 00:00:00 2001 From: woksin Date: Thu, 1 Oct 2026 19:48:08 +0200 Subject: [PATCH 2/5] Update Cratis client dependencies to Chronicle 19.26.2 --- Source/package.json | 6 +++--- package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Source/package.json b/Source/package.json index d7cc9fee..9afc018d 100644 --- a/Source/package.json +++ b/Source/package.json @@ -173,7 +173,7 @@ }, "dependencies": { "@bufbuild/protobuf": "^2.16.0", - "@cratis/chronicle.contracts": "19.26.0", + "@cratis/chronicle.contracts": "19.26.2", "@grpc/grpc-js": "^1.14.5", "@opentelemetry/api": "^1.9.1", "glob": "^13.0.6", @@ -183,7 +183,7 @@ "undici": "^8.11.2" }, "devDependencies": { - "@cratis/fundamentals": "7.19.8", + "@cratis/fundamentals": "7.20.0", "@types/node": "^26.6.3", "@typescript/native": "npm:typescript@^7.0.2", "esbuild": "^0.28.2", @@ -192,6 +192,6 @@ "vitest": "^5.0.3" }, "peerDependencies": { - "@cratis/fundamentals": "^7.19.8" + "@cratis/fundamentals": "^7.20.0" } } diff --git a/package.json b/package.json index 523919dc..a76e0654 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "publish-version": "node ./publish-version.js" }, "dependencies": { - "@cratis/chronicle.contracts": "19.26.0", + "@cratis/chronicle.contracts": "19.26.2", "glob": "^13.0.6" }, "resolutions": { diff --git a/yarn.lock b/yarn.lock index 29c9b2e9..310e6bc2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,14 +41,14 @@ __metadata: languageName: unknown linkType: soft -"@cratis/chronicle.contracts@npm:19.26.0": - version: 19.26.0 - resolution: "@cratis/chronicle.contracts@npm:19.26.0" +"@cratis/chronicle.contracts@npm:19.26.2": + version: 19.26.2 + resolution: "@cratis/chronicle.contracts@npm:19.26.2" dependencies: "@bufbuild/protobuf": "npm:^2.14.0" "@grpc/grpc-js": "npm:^1.14.4" nice-grpc: "npm:^2.1.17" - checksum: 10c0/77928d3b56355f3c4585a03615356d43004669581e0e246c3b39c7751d0cb4fd03e53fa5f38694679788accf8f525183440f4862fbe78f87ffeaf6b5630cc6fc + checksum: 10c0/0b06c998441ea1d13e9f4a8ffbca3ae7f1eddea74642a42b1feb6ffb8e8802047cddc9548a66cfb68287d902be4990d19c3941d0612fe13e8807fcc58da90c8e languageName: node linkType: hard @@ -57,8 +57,8 @@ __metadata: resolution: "@cratis/chronicle@workspace:Source" dependencies: "@bufbuild/protobuf": "npm:^2.16.0" - "@cratis/chronicle.contracts": "npm:19.26.0" - "@cratis/fundamentals": "npm:7.19.8" + "@cratis/chronicle.contracts": "npm:19.26.2" + "@cratis/fundamentals": "npm:7.20.0" "@grpc/grpc-js": "npm:^1.14.5" "@opentelemetry/api": "npm:^1.9.1" "@types/node": "npm:^26.6.3" @@ -73,14 +73,14 @@ __metadata: vite: "npm:^8.3.2" vitest: "npm:^5.0.3" peerDependencies: - "@cratis/fundamentals": ^7.19.8 + "@cratis/fundamentals": ^7.20.0 languageName: unknown linkType: soft -"@cratis/fundamentals@npm:7.19.8": - version: 7.19.8 - resolution: "@cratis/fundamentals@npm:7.19.8" - checksum: 10c0/e30b44a993416126b2ec45611f6f2f18825d7e1218059e3202d0b25362e6fb2f17ab546ac020ee5405f31da7f34e37260168fa0943fb381d61cbda86463f77a8 +"@cratis/fundamentals@npm:7.20.0": + version: 7.20.0 + resolution: "@cratis/fundamentals@npm:7.20.0" + checksum: 10c0/5f2e58b632148437b7524d9019a64d44b437ea116cb378ab1c2326d7081ec1d8a627b1ff5e47d8faaf497cb8056c718f8eece7528acba3138284ef78fa349781 languageName: node linkType: hard @@ -2056,7 +2056,7 @@ __metadata: version: 0.0.0-use.local resolution: "chronicle-typescript-workspace@workspace:." dependencies: - "@cratis/chronicle.contracts": "npm:19.26.0" + "@cratis/chronicle.contracts": "npm:19.26.2" glob: "npm:^13.0.6" languageName: unknown linkType: soft From 8ace2ed6a3585e846281794a839dafd5104c7c53 Mon Sep 17 00:00:00 2001 From: woksin Date: Thu, 1 Oct 2026 19:48:15 +0200 Subject: [PATCH 3/5] Update the packaged kernel oracle to Chronicle 19.26.2 --- Documentation/testing.md | 2 +- Source/testing/fixtures/alternate.json | 8 +- .../fixtures/batch-omitted-routes.json | 8 +- Source/testing/fixtures/batch-rollback.json | 8 +- Source/testing/fixtures/batches.json | 8 +- Source/testing/fixtures/boundary.json | 8 +- Source/testing/fixtures/builders.json | 8 +- Source/testing/fixtures/client-causation.json | 8 +- .../fixtures/constraints-composite.json | 10 +- .../constraints-event-type-cycles.json | 10 +- .../constraints-event-type-siblings.json | 10 +- .../fixtures/constraints-ignore-casing.json | 10 +- .../fixtures/constraints-isolation.json | 10 +- .../fixtures/constraints-key-domain.json | 10 +- .../constraints-property-covered-removal.json | 10 +- .../constraints-property-lifecycle.json | 10 +- Source/testing/fixtures/constraints.json | 8 +- Source/testing/fixtures/empty.json | 8 +- .../testing/fixtures/explicit-metadata.json | 8 +- Source/testing/fixtures/interleaved.json | 8 +- Source/testing/fixtures/single.json | 8 +- .../fixtures/source-tail-before-global.json | 8 +- .../fixtures/aggregate-only-automap.json | 8 +- .../projections/fixtures/arithmetic.json | 8 +- .../case-colliding-event-properties.json | 8 +- .../fixtures/case-insensitive-automap.json | 8 +- .../fixtures/children-from-keyed.json | 8 +- .../fixtures/children-identified-removed.json | 8 +- .../fixtures/children-untyped-items.json | 8 +- .../fixtures/compatible-mappings.json | 8 +- .../fixtures/concept-shaped-objects.json | 8 +- .../fixtures/datetime-boundaries.json | 8 +- .../projections/fixtures/empty-mappings.json | 8 +- .../fixtures/flat-set-from-automap.json | 8 +- .../fixtures/guid-datetime-defaults.json | 8 +- .../fixtures/guid-keys-and-literals.json | 8 +- .../fixtures/initial-scalar-defaults.json | 8 +- .../projections/fixtures/initial-values.json | 8 +- .../projections/fixtures/int32-overflow.json | 8 +- .../fixtures/mapped-and-removed.json | 8 +- .../fixtures/mapped-id-key-wins.json | 8 +- .../fixtures/no-automap-properties.json | 8 +- .../fixtures/null-accumulator.json | 8 +- .../projections/fixtures/null-vs-missing.json | 8 +- .../projections/fixtures/numeric-keys.json | 8 +- .../fixtures/reject-protected-fields.json | 8 +- .../fixtures/reject-protected-identifier.json | 8 +- .../projections/fixtures/remove-absent.json | 8 +- .../projections/fixtures/remove-recreate.json | 8 +- .../fixtures/rounded-integer-operand.json | 8 +- .../fixtures/scalar-context-roots.json | 8 +- .../fixtures/scalar-matrix-and-clearing.json | 8 +- .../fixtures/unmapped-structures-empty.json | 8 +- .../fixtures/unmapped-structures-initial.json | 8 +- .../ProjectionOracle/ProjectionOracle.csproj | 4 +- Tools/ProjectionOracle/README.md | 4 +- Tools/ProjectionOracle/packages.lock.json | 109 ++++++++++-------- 57 files changed, 284 insertions(+), 275 deletions(-) diff --git a/Documentation/testing.md b/Documentation/testing.md index 8468f4e9..83a06709 100644 --- a/Documentation/testing.md +++ b/Documentation/testing.md @@ -104,7 +104,7 @@ Rejecting non-ASCII keys under `ignoreCasing` is a deliberate, permanent default | Atomic batches | A remover earlier in the batch releases the cycle for later events in the batch; a second covered event after an in-batch claim is blocked. A rejected batch commits nothing, including its releases. The raw kernel violation reports the durable holder's sequence number (the first covered event after the source's latest committed remover), or `18446744073709551615` when only an earlier event in the batch holds the cycle. | | Still rejected | One covered type with removers, several covered types without removers, any other count or overlap of covered and removal types, a cycle definition next to any other definition, fieldless event-type removers and scopes. Use a kernel-backed test. | -The committed `Source/testing/fixtures/*.json` snapshots run through the real in-process kernel via the pinned `Cratis.Chronicle.Testing` 19.8.1 oracle. `yarn oracle:check` verifies them alongside projection fixtures. The fixture tests also compare the TypeScript client’s serialized content, context fields, hash, result shape and essential reads. The boundary fixture covers an empty string, the supported printable ASCII range, a mixed-case property name and exclusion of a different event type on the same source. The source-tail fixture distinguishes the last event for A from the global tail. `batches.json` checks kernel-stored resolved per-entry metadata, the tag merge (including duplicate removal), correlation ID, ordering, hashes, batch causation, read filters and empty-batch rejection. Its .NET client-path oracle resolves per-entry versus shared route, subject and occurrence options **before** sending each event and supplies explicit route defaults; it does not independently prove those precedence rules. Those rules come from production `prepareBatchAppend` shared with the scenario. The separate `batch-omitted-routes.json` fixture bypasses the .NET convenience type and sends genuinely omitted and empty routes through the pinned kernel's batch service, verifying `Default`/`All`/`Default` resolution without claiming client-path notifications. Empty route and subject metadata are outside the scenario's supported domain. `builders.json` proves .NET's sequential setup/action semantics; `batch-rollback.json` proves rejected unique-constraint batches are atomic and leave no sequence gap. `constraints.json` proves string key ownership across event types and sources, ordinal casing and significant spaces, decorated and fluent unique-event-type rejection, raw wire violation fields, default property messages for in-batch conflicts and post-reclaim cross-source conflicts, successful same-source same-key batches with both sequences committed and a subsequent cross-source conflict reporting the last sequence, multiple failures on different events in one batch, and atomic rollback. It does not prove the violation order when one event violates multiple definitions; scenarios reject that overlap. These cases exercise the packaged kernel; the TypeScript spec compares every result and committed-history snapshot to the fixture. `constraints-isolation.json` selects only its declared text definition, and `constraints-key-domain.json` installs a shared string/boolean definition with explicit schemas. Both capture raw kernel violations, mapped results, routes, content, hashes and accepted history after each single or batch operation; failed appends assert unchanged history and sequence. The oracle checks effective installed definitions against fixture order, property names, scope, removal and casing and pins both the sequence and constraint contract descriptors. `constraints-property-lifecycle.json` and `constraints-property-covered-removal.json` separately capture replacement, removal, and batch non-release from pinned kernel storage: raw and mapped violations, every stored hash and history snapshot, and atomic rollback. The removal fixture checks three alternative removers, including a fieldless event; the covered-removal fixture shows validation before release. `constraints-event-type-siblings.json` and `constraints-event-type-cycles.json` each install one unique-event-type definition and capture cycle claims, releases by each remover, other-source removers, repeated removers, a covered remover, in-batch release and reclaim, blocked batches and their rollback, with raw and mapped violations and every stored hash. Composite keys are not inferred from these fixtures; `constraints-composite.json` separately installs a two-property definition shared across three event types (including a reversed declared order and a single key) and a three-property definition, and captures declared-order joining, delimiter collisions, empty components, per-property violations and messages, reclaim, replacement, removal and batch collisions. `constraints-ignore-casing.json` installs a case-insensitive single key with a remover and a case-insensitive composite, and captures ASCII case pairs, punctuation/digit/space significance, case-only same-source reclaim, original-cased details, replacement, removal, batch collisions and folding across component boundaries. Blank or whitespace-padded source filters are rejected until their normalization is fixture-backed. They do not establish production storage, concurrency, compliance or scheduler fidelity; use a kernel-backed test for those behaviors. +The committed `Source/testing/fixtures/*.json` snapshots run through the real in-process kernel via the pinned `Cratis.Chronicle.Testing` 19.26.2 oracle. `yarn oracle:check` verifies them alongside projection fixtures. The fixture tests also compare the TypeScript client’s serialized content, context fields, hash, result shape and essential reads. The boundary fixture covers an empty string, the supported printable ASCII range, a mixed-case property name and exclusion of a different event type on the same source. The source-tail fixture distinguishes the last event for A from the global tail. `batches.json` checks kernel-stored resolved per-entry metadata, the tag merge (including duplicate removal), correlation ID, ordering, hashes, batch causation, read filters and empty-batch rejection. Its .NET client-path oracle resolves per-entry versus shared route, subject and occurrence options **before** sending each event and supplies explicit route defaults; it does not independently prove those precedence rules. Those rules come from production `prepareBatchAppend` shared with the scenario. The separate `batch-omitted-routes.json` fixture bypasses the .NET convenience type and sends genuinely omitted and empty routes through the pinned kernel's batch service, verifying `Default`/`All`/`Default` resolution without claiming client-path notifications. Empty route and subject metadata are outside the scenario's supported domain. `builders.json` proves .NET's sequential setup/action semantics; `batch-rollback.json` proves rejected unique-constraint batches are atomic and leave no sequence gap. `constraints.json` proves string key ownership across event types and sources, ordinal casing and significant spaces, decorated and fluent unique-event-type rejection, raw wire violation fields, default property messages for in-batch conflicts and post-reclaim cross-source conflicts, successful same-source same-key batches with both sequences committed and a subsequent cross-source conflict reporting the last sequence, multiple failures on different events in one batch, and atomic rollback. It does not prove the violation order when one event violates multiple definitions; scenarios reject that overlap. These cases exercise the packaged kernel; the TypeScript spec compares every result and committed-history snapshot to the fixture. `constraints-isolation.json` selects only its declared text definition, and `constraints-key-domain.json` installs a shared string/boolean definition with explicit schemas. Both capture raw kernel violations, mapped results, routes, content, hashes and accepted history after each single or batch operation; failed appends assert unchanged history and sequence. The oracle checks effective installed definitions against fixture order, property names, scope, removal and casing and pins both the sequence and constraint contract descriptors. `constraints-property-lifecycle.json` and `constraints-property-covered-removal.json` separately capture replacement, removal, and batch non-release from pinned kernel storage: raw and mapped violations, every stored hash and history snapshot, and atomic rollback. The removal fixture checks three alternative removers, including a fieldless event; the covered-removal fixture shows validation before release. `constraints-event-type-siblings.json` and `constraints-event-type-cycles.json` each install one unique-event-type definition and capture cycle claims, releases by each remover, other-source removers, repeated removers, a covered remover, in-batch release and reclaim, blocked batches and their rollback, with raw and mapped violations and every stored hash. Composite keys are not inferred from these fixtures; `constraints-composite.json` separately installs a two-property definition shared across three event types (including a reversed declared order and a single key) and a three-property definition, and captures declared-order joining, delimiter collisions, empty components, per-property violations and messages, reclaim, replacement, removal and batch collisions. `constraints-ignore-casing.json` installs a case-insensitive single key with a remover and a case-insensitive composite, and captures ASCII case pairs, punctuation/digit/space significance, case-only same-source reclaim, original-cased details, replacement, removal, batch collisions and folding across component boundaries. Blank or whitespace-padded source filters are rejected until their normalization is fixture-backed. They do not establish production storage, concurrency, compliance or scheduler fidelity; use a kernel-backed test for those behaviors. ## ReactorScenario: live event deliveries and recorded effects diff --git a/Source/testing/fixtures/alternate.json b/Source/testing/fixtures/alternate.json index 90a7bd7d..aac50825 100644 --- a/Source/testing/fixtures/alternate.json +++ b/Source/testing/fixtures/alternate.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/batch-omitted-routes.json b/Source/testing/fixtures/batch-omitted-routes.json index 7516f57c..527fd4be 100644 --- a/Source/testing/fixtures/batch-omitted-routes.json +++ b/Source/testing/fixtures/batch-omitted-routes.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "routeCases": [ { "source": "A", "name": "omitted", "active": true }, diff --git a/Source/testing/fixtures/batch-rollback.json b/Source/testing/fixtures/batch-rollback.json index befd6dc5..3f8e12b9 100644 --- a/Source/testing/fixtures/batch-rollback.json +++ b/Source/testing/fixtures/batch-rollback.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "operations": [ { diff --git a/Source/testing/fixtures/batches.json b/Source/testing/fixtures/batches.json index d1d5fae3..a67c4663 100644 --- a/Source/testing/fixtures/batches.json +++ b/Source/testing/fixtures/batches.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "operations": [ { diff --git a/Source/testing/fixtures/boundary.json b/Source/testing/fixtures/boundary.json index 5209456e..b5474c12 100644 --- a/Source/testing/fixtures/boundary.json +++ b/Source/testing/fixtures/boundary.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/builders.json b/Source/testing/fixtures/builders.json index 01284059..59e23485 100644 --- a/Source/testing/fixtures/builders.json +++ b/Source/testing/fixtures/builders.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "operations": [ { diff --git a/Source/testing/fixtures/client-causation.json b/Source/testing/fixtures/client-causation.json index 4cc09039..e65e4579 100644 --- a/Source/testing/fixtures/client-causation.json +++ b/Source/testing/fixtures/client-causation.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/constraints-composite.json b/Source/testing/fixtures/constraints-composite.json index 74b70fa4..374468d0 100644 --- a/Source/testing/fixtures/constraints-composite.json +++ b/Source/testing/fixtures/constraints-composite.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints-event-type-cycles.json b/Source/testing/fixtures/constraints-event-type-cycles.json index 82828f52..21d9d896 100644 --- a/Source/testing/fixtures/constraints-event-type-cycles.json +++ b/Source/testing/fixtures/constraints-event-type-cycles.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "first": { "eventTypeId": "OracleCycleFirst", diff --git a/Source/testing/fixtures/constraints-event-type-siblings.json b/Source/testing/fixtures/constraints-event-type-siblings.json index d10313ab..881f43f0 100644 --- a/Source/testing/fixtures/constraints-event-type-siblings.json +++ b/Source/testing/fixtures/constraints-event-type-siblings.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "first": { "eventTypeId": "OracleCycleFirst", diff --git a/Source/testing/fixtures/constraints-ignore-casing.json b/Source/testing/fixtures/constraints-ignore-casing.json index 4ac4a20a..0cc44824 100644 --- a/Source/testing/fixtures/constraints-ignore-casing.json +++ b/Source/testing/fixtures/constraints-ignore-casing.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints-isolation.json b/Source/testing/fixtures/constraints-isolation.json index c7364fcb..e40f2ed3 100644 --- a/Source/testing/fixtures/constraints-isolation.json +++ b/Source/testing/fixtures/constraints-isolation.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints-key-domain.json b/Source/testing/fixtures/constraints-key-domain.json index 4a4e9309..a1ec8192 100644 --- a/Source/testing/fixtures/constraints-key-domain.json +++ b/Source/testing/fixtures/constraints-key-domain.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints-property-covered-removal.json b/Source/testing/fixtures/constraints-property-covered-removal.json index a8502320..23ec5a0a 100644 --- a/Source/testing/fixtures/constraints-property-covered-removal.json +++ b/Source/testing/fixtures/constraints-property-covered-removal.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints-property-lifecycle.json b/Source/testing/fixtures/constraints-property-lifecycle.json index d094ac06..8770b485 100644 --- a/Source/testing/fixtures/constraints-property-lifecycle.json +++ b/Source/testing/fixtures/constraints-property-lifecycle.json @@ -4,14 +4,14 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, - "constraintDescriptorSha256": "8de18d804165220f6c491cfed59ca31bf55c84eb6eb7a94a2a83b092b12bbf84", + "constraintDescriptorSha256": "6c5ec2367fdfbe95fd9f09c05fcf40645dd43db5c98a3d616443845828d3e253", "eventSchemas": { "string": { "eventTypeId": "OracleDomainText", diff --git a/Source/testing/fixtures/constraints.json b/Source/testing/fixtures/constraints.json index b8f0a382..0196e4f2 100644 --- a/Source/testing/fixtures/constraints.json +++ b/Source/testing/fixtures/constraints.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "constraintOperations": [ { diff --git a/Source/testing/fixtures/empty.json b/Source/testing/fixtures/empty.json index 8abe3a04..611bbb2e 100644 --- a/Source/testing/fixtures/empty.json +++ b/Source/testing/fixtures/empty.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [], "expected": { diff --git a/Source/testing/fixtures/explicit-metadata.json b/Source/testing/fixtures/explicit-metadata.json index 48a6842b..cd83b3bc 100644 --- a/Source/testing/fixtures/explicit-metadata.json +++ b/Source/testing/fixtures/explicit-metadata.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/interleaved.json b/Source/testing/fixtures/interleaved.json index b67b679c..9a9bb0fc 100644 --- a/Source/testing/fixtures/interleaved.json +++ b/Source/testing/fixtures/interleaved.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/single.json b/Source/testing/fixtures/single.json index 14664785..14623007 100644 --- a/Source/testing/fixtures/single.json +++ b/Source/testing/fixtures/single.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/fixtures/source-tail-before-global.json b/Source/testing/fixtures/source-tail-before-global.json index fc54018e..97a28d90 100644 --- a/Source/testing/fixtures/source-tail-before-global.json +++ b/Source/testing/fixtures/source-tail-before-global.json @@ -4,12 +4,12 @@ "oracle": "eventScenario", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "aee2206b2c79b36a34be7c0cf59eab1dfd9e35d9c0dff03c03de7eb659c12a2c" + "version": "19.26.2", + "descriptorSha256": "4b867c47b2e4d125306bb3cb062b106fa19d7a500accb5650fc1ac709e97596f" }, "actions": [ { diff --git a/Source/testing/projections/fixtures/aggregate-only-automap.json b/Source/testing/projections/fixtures/aggregate-only-automap.json index 8ad81bb1..384a144d 100644 --- a/Source/testing/projections/fixtures/aggregate-only-automap.json +++ b/Source/testing/projections/fixtures/aggregate-only-automap.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p12: aggregate-only mappings suppress AutoMap even with a same-named event field; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/arithmetic.json b/Source/testing/projections/fixtures/arithmetic.json index d98a46d5..996e85aa 100644 --- a/Source/testing/projections/fixtures/arithmetic.json +++ b/Source/testing/projections/fixtures/arithmetic.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Phase-one arithmetic contract, generated expectations from the pinned production kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/case-colliding-event-properties.json b/Source/testing/projections/fixtures/case-colliding-event-properties.json index 60039483..86233893 100644 --- a/Source/testing/projections/fixtures/case-colliding-event-properties.json +++ b/Source/testing/projections/fixtures/case-colliding-event-properties.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe exact-case mappings of two event properties differing only by case against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/case-insensitive-automap.json b/Source/testing/projections/fixtures/case-insensitive-automap.json index e2598e1e..e7fcae59 100644 --- a/Source/testing/projections/fixtures/case-insensitive-automap.json +++ b/Source/testing/projections/fixtures/case-insensitive-automap.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p7: case-insensitive AutoMap; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/children-from-keyed.json b/Source/testing/projections/fixtures/children-from-keyed.json index 4e65344d..cf062091 100644 --- a/Source/testing/projections/fixtures/children-from-keyed.json +++ b/Source/testing/projections/fixtures/children-from-keyed.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Shape emitted by the TypeScript ProjectionDefinitionCompiler for @fromEvent(ItemAdded) and @childrenFrom(ItemAdded, { childType, key: 'itemId' }) plus a second child event (child item schema given explicitly); verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/children-identified-removed.json b/Source/testing/projections/fixtures/children-identified-removed.json index aeabd3a0..3e78b575 100644 --- a/Source/testing/projections/fixtures/children-identified-removed.json +++ b/Source/testing/projections/fixtures/children-identified-removed.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Shape emitted by the TypeScript ProjectionDefinitionCompiler for a fluent children(m => m.lines, c => c.identifiedBy(l => l.lineId).from(ItemAdded/ItemRenamed, f => f.usingKey(e => e.itemId)).removedWith(ItemRemoved, r => r.usingKey(e => e.itemId))) (child item schema given explicitly); verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/children-untyped-items.json b/Source/testing/projections/fixtures/children-untyped-items.json index eb7c44ae..6b43bc56 100644 --- a/Source/testing/projections/fixtures/children-untyped-items.json +++ b/Source/testing/projections/fixtures/children-untyped-items.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Exact shape emitted by the TypeScript ProjectionDefinitionCompiler for legacy-decorator @fromEvent(ItemAdded) and @childrenFrom(ItemAdded, { childType, key: 'itemId' }), whose child items schema is untyped; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/compatible-mappings.json b/Source/testing/projections/fixtures/compatible-mappings.json index 721647ec..c3c8fcd6 100644 --- a/Source/testing/projections/fixtures/compatible-mappings.json +++ b/Source/testing/projections/fixtures/compatible-mappings.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against the generated 19.6.1 contract; int32/uint32 and text to unformatted TypeScript Number fields, and decimal text to int32 rejection.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/concept-shaped-objects.json b/Source/testing/projections/fixtures/concept-shaped-objects.json index cbaa73cb..8bb75073 100644 --- a/Source/testing/projections/fixtures/concept-shaped-objects.json +++ b/Source/testing/projections/fixtures/concept-shaped-objects.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against generated 19.6.1 contract; initial top-level value and nested event object must retain their schema-bound shapes.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/datetime-boundaries.json b/Source/testing/projections/fixtures/datetime-boundaries.json index 4b078728..1b163d02 100644 --- a/Source/testing/projections/fixtures/datetime-boundaries.json +++ b/Source/testing/projections/fixtures/datetime-boundaries.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe earliest/latest UTC DateTime content and clearing against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/empty-mappings.json b/Source/testing/projections/fixtures/empty-mappings.json index e2b19377..7379ba67 100644 --- a/Source/testing/projections/fixtures/empty-mappings.json +++ b/Source/testing/projections/fixtures/empty-mappings.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written in the generated @cratis/chronicle.contracts 19.6.1 ProjectionDefinition wire shape; converted and executed by packaged Chronicle 19.8.1 kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/flat-set-from-automap.json b/Source/testing/projections/fixtures/flat-set-from-automap.json index 582bc2a5..1f202801 100644 --- a/Source/testing/projections/fixtures/flat-set-from-automap.json +++ b/Source/testing/projections/fixtures/flat-set-from-automap.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition (model-bound setFrom and AutoMap output); verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/guid-datetime-defaults.json b/Source/testing/projections/fixtures/guid-datetime-defaults.json index 02039af8..ba4a6e44 100644 --- a/Source/testing/projections/fixtures/guid-datetime-defaults.json +++ b/Source/testing/projections/fixtures/guid-datetime-defaults.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p1: missing GUID and date-time defaults, uppercase GUID content; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/guid-keys-and-literals.json b/Source/testing/projections/fixtures/guid-keys-and-literals.json index b8ee5dfb..ffa6dcbf 100644 --- a/Source/testing/projections/fixtures/guid-keys-and-literals.json +++ b/Source/testing/projections/fixtures/guid-keys-and-literals.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p13: canonical GUID key and uppercase GUID $value normalization; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/initial-scalar-defaults.json b/Source/testing/projections/fixtures/initial-scalar-defaults.json index 69b4e557..19113dd0 100644 --- a/Source/testing/projections/fixtures/initial-scalar-defaults.json +++ b/Source/testing/projections/fixtures/initial-scalar-defaults.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p9: schema-converted non-empty initial state; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/initial-values.json b/Source/testing/projections/fixtures/initial-values.json index 6ee9d6eb..454a022f 100644 --- a/Source/testing/projections/fixtures/initial-values.json +++ b/Source/testing/projections/fixtures/initial-values.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/int32-overflow.json b/Source/testing/projections/fixtures/int32-overflow.json index 49d6738e..520c45ea 100644 --- a/Source/testing/projections/fixtures/int32-overflow.json +++ b/Source/testing/projections/fixtures/int32-overflow.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p3: the kernel wraps int32 overflow; phase-one evaluator throws rather than emulate unchecked arithmetic.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/mapped-and-removed.json b/Source/testing/projections/fixtures/mapped-and-removed.json index 72e08eaf..5ff24ef6 100644 --- a/Source/testing/projections/fixtures/mapped-and-removed.json +++ b/Source/testing/projections/fixtures/mapped-and-removed.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/mapped-id-key-wins.json b/Source/testing/projections/fixtures/mapped-id-key-wins.json index 272e44c7..ac8ca819 100644 --- a/Source/testing/projections/fixtures/mapped-id-key-wins.json +++ b/Source/testing/projections/fixtures/mapped-id-key-wins.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written generated 19.6.1 contract; id is overwritten by both AutoMap and an explicit content expression.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/no-automap-properties.json b/Source/testing/projections/fixtures/no-automap-properties.json index 9b6584ef..e7de27f5 100644 --- a/Source/testing/projections/fixtures/no-automap-properties.json +++ b/Source/testing/projections/fixtures/no-automap-properties.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p8: NoAutoMapProperties suppresses one field; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/null-accumulator.json b/Source/testing/projections/fixtures/null-accumulator.json index 4c574209..0dcf9dfb 100644 --- a/Source/testing/projections/fixtures/null-accumulator.json +++ b/Source/testing/projections/fixtures/null-accumulator.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p5: clearing a present int32 accumulator before increment fails in the kernel; phase-one evaluator rejects at replay with a clear error.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/null-vs-missing.json b/Source/testing/projections/fixtures/null-vs-missing.json index 3312d59b..1ef8b816 100644 --- a/Source/testing/projections/fixtures/null-vs-missing.json +++ b/Source/testing/projections/fixtures/null-vs-missing.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/numeric-keys.json b/Source/testing/projections/fixtures/numeric-keys.json index 1a8de927..aa61bd18 100644 --- a/Source/testing/projections/fixtures/numeric-keys.json +++ b/Source/testing/projections/fixtures/numeric-keys.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p13: numeric 1.5 key; executed against the packaged kernel.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/reject-protected-fields.json b/Source/testing/projections/fixtures/reject-protected-fields.json index dd3f4f81..326f54c4 100644 --- a/Source/testing/projections/fixtures/reject-protected-fields.json +++ b/Source/testing/projections/fixtures/reject-protected-fields.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verifies the protected-fields boundary fails closed.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/reject-protected-identifier.json b/Source/testing/projections/fixtures/reject-protected-identifier.json index f8724c41..f656c8d7 100644 --- a/Source/testing/projections/fixtures/reject-protected-identifier.json +++ b/Source/testing/projections/fixtures/reject-protected-identifier.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Verify the protected identifier reaches the kernel compliance boundary without mappings or initial values.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/remove-absent.json b/Source/testing/projections/fixtures/remove-absent.json index cae5c8f1..665ffc4e 100644 --- a/Source/testing/projections/fixtures/remove-absent.json +++ b/Source/testing/projections/fixtures/remove-absent.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/remove-recreate.json b/Source/testing/projections/fixtures/remove-recreate.json index 2adb68a5..7611ef98 100644 --- a/Source/testing/projections/fixtures/remove-recreate.json +++ b/Source/testing/projections/fixtures/remove-recreate.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written against @cratis/chronicle.contracts 19.6.1 generated ProjectionDefinition; verified by kernel conversion and execution.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/rounded-integer-operand.json b/Source/testing/projections/fixtures/rounded-integer-operand.json index 73ccaceb..b496b177 100644 --- a/Source/testing/projections/fixtures/rounded-integer-operand.json +++ b/Source/testing/projections/fixtures/rounded-integer-operand.json @@ -3,12 +3,12 @@ "kind": "oracleGuard", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe p2: kernel rounds fractional double operands to int32; phase-one evaluator rejects the mismatch before replay.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/scalar-context-roots.json b/Source/testing/projections/fixtures/scalar-context-roots.json index bcda0f23..74794692 100644 --- a/Source/testing/projections/fixtures/scalar-context-roots.json +++ b/Source/testing/projections/fixtures/scalar-context-roots.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Hand-written generated 19.6.1 contract; scalar context paths, explicit metadata and omitted Subject, Hash and CausedBy defaults.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/scalar-matrix-and-clearing.json b/Source/testing/projections/fixtures/scalar-matrix-and-clearing.json index 84e73b7f..e3b04c59 100644 --- a/Source/testing/projections/fixtures/scalar-matrix-and-clearing.json +++ b/Source/testing/projections/fixtures/scalar-matrix-and-clearing.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe scalar content, literal and event-source mappings; clear populated nullable and nonnullable properties, then read.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/unmapped-structures-empty.json b/Source/testing/projections/fixtures/unmapped-structures-empty.json index 03a866ad..7e2c75f2 100644 --- a/Source/testing/projections/fixtures/unmapped-structures-empty.json +++ b/Source/testing/projections/fixtures/unmapped-structures-empty.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe unmapped array and object fields when the initial model state is empty.", "wireDefinition": { diff --git a/Source/testing/projections/fixtures/unmapped-structures-initial.json b/Source/testing/projections/fixtures/unmapped-structures-initial.json index bd908601..5baa8607 100644 --- a/Source/testing/projections/fixtures/unmapped-structures-initial.json +++ b/Source/testing/projections/fixtures/unmapped-structures-initial.json @@ -3,12 +3,12 @@ "kind": "kernelSemantics", "license": "Copyright (c) Cratis. MIT; see LICENSE.", "chronicle": { - "version": "19.8.1", - "commit": "8fe5d30" + "version": "19.26.2", + "commit": "1f8d832" }, "tsContracts": { - "version": "19.8.1", - "descriptorSha256": "c56d4fb2797c57aa1f21cec1a07b6f75c92d32cbd936c61872dfbb18cef85edb" + "version": "19.26.2", + "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, "definitionSource": "Probe unmapped array and object fields with non-empty scalar initial model state.", "wireDefinition": { diff --git a/Tools/ProjectionOracle/ProjectionOracle.csproj b/Tools/ProjectionOracle/ProjectionOracle.csproj index 62f78d6c..1df44e37 100644 --- a/Tools/ProjectionOracle/ProjectionOracle.csproj +++ b/Tools/ProjectionOracle/ProjectionOracle.csproj @@ -8,12 +8,12 @@ enable true true - 19.8.1 + 19.26.2 - + diff --git a/Tools/ProjectionOracle/README.md b/Tools/ProjectionOracle/README.md index ca9a873e..42551000 100644 --- a/Tools/ProjectionOracle/README.md +++ b/Tools/ProjectionOracle/README.md @@ -5,11 +5,11 @@ From the repository root, run `yarn install --immutable`, then `yarn oracle:check`. This requires the .NET SDK pinned by the repository-root `global.json` (10.0.401, no roll-forward). Ordinary `yarn test` does not require .NET. To inspect the compatibility boundary alone, run `dotnet run --project Tools/ProjectionOracle -- --smoke`. To intentionally replace committed expectations **after reviewing an engine upgrade or fixture change**, run `dotnet run --project Tools/ProjectionOracle -- --update` and inspect the diff. CI never updates them. The oracle pins `TZ=UTC` and the invariant .NET culture before loading the kernel, so date-time output does not depend on the host. The weekly NuGet probe skips prereleases and executes the fixtures against the latest stable package in a temporary project; drift and incompatible releases are reported without updating the pin or failing the scheduled job. -The oracle pins `Cratis.Chronicle.Testing` **19.8.1** (Chronicle commit `8fe5d30`) in `ProjectionOracle.csproj`. At check time, it compares each fixture's engine version and commit prefix with the loaded package assembly's informational version; the installed contracts package version and descriptor SHA-256 are checked against every fixture too. It was the latest version in NuGet's published index when this tool was written. The package contains Core, Concepts, Contracts, Grpc, Infrastructure, Storage and Storage.InMemory under `lib/net10.0`, but only Testing is exposed under `ref/net10.0`. The project adds aliased compile references to **those same packaged DLLs** using `GeneratePathProperty` and a lockfile, not to a separate kernel checkout. The one internal access is `ProjectionDefinitionBridge`: it reflects the package's transport-to-kernel `ToChronicle` converter and asserts its exact parameter/return signature on every run. This is version-fragile; do not silently fall back to a copied converter. The packaged Core's generated type discovery also requires the matching `Cratis.Arc` runtime assembly. The package embeds Roslyn 5.9 while a transitive dependency exposes a Roslyn 5.0 compile asset, so the project excludes that older compile asset. +The oracle pins `Cratis.Chronicle.Testing` **19.26.2** (Chronicle commit `1f8d832`) in `ProjectionOracle.csproj`. At check time, it compares each fixture's engine version and commit prefix with the loaded package assembly's informational version; the installed contracts package version and descriptor SHA-256 are checked against every fixture too. The package contains Core, Concepts, Contracts, Grpc, Infrastructure, Storage and Storage.InMemory under `lib/net10.0`, but only Testing is exposed under `ref/net10.0`. The project adds aliased compile references to **those same packaged DLLs** using `GeneratePathProperty` and a lockfile, not to a separate kernel checkout. The one internal access is `ProjectionDefinitionBridge`: it reflects the package's transport-to-kernel `ToChronicle` converter and asserts its exact parameter/return signature on every run. This is version-fragile; do not silently fall back to a copied converter. The packaged Core's generated type discovery also requires the matching `Cratis.Arc` runtime assembly. The package embeds Roslyn 5.9 while a transitive dependency exposes a Roslyn 5.0 compile asset, so the project excludes that older compile asset. The isolated constraint fixtures (`constraints-isolation.json`, `constraints-key-domain.json`, `constraints-property-lifecycle.json`, `constraints-property-covered-removal.json`, `constraints-event-type-siblings.json`, `constraints-event-type-cycles.json`, `constraints-composite.json`, and `constraints-ignore-casing.json`) explicitly select their unscoped client definitions, declare all event schemas and their definition provenance, and assert the effective kernel definitions installed by the packaged testing adapter (ordered event properties, scope, removal and casing). The lifecycle fixtures prove owner-based replacement/removal, fieldless removal events, covered-and-removal validation, and the fact that property claims are never released during whole-batch validation; their accepted history includes hashes for every event. The event-type fixtures install one explicit definition for the complete covered type set (not merged .NET class attributes), include alternative removers and a covered-and-removal event, and capture single and atomic batch cycle releases and rejections. The composite fixture installs multi-property definitions in declared property order (composite events use a `values` object instead of `value`); the oracle passes the order and the fixture's `ignoreCasing` flag through, asserts both on the installed kernel definition, and never joins, folds or compares values itself. They pin the generated `events_constraints.ts` descriptor in addition to the event-sequence descriptor. Each single or batch operation captures the mapped client result, raw contract violations on rejected appends, full accepted content/routes/hashes, and next sequence; rejected operations assert unchanged history and sequence. Only rejected appends are resent to the packaged kernel service to capture its raw response. The original `constraints.json` increment-4 regression fixture keeps its previous runner and meanings. These fixtures cover only unscoped constraints. The separate `oracleGuard` fixture for unsupported key conversions is deferred; the TypeScript specs reject those inputs but do not claim packaged-kernel behavior for them. Add new fixture names to `Program.Main`'s required list so `oracle:check` cannot pass without them. `--update-events` rewrites all event fixtures; inspect its diff and retain unrelated fixtures unchanged. -The fixtures use the generated `@cratis/chronicle.contracts` 19.6.1 wire layout, including key/value **arrays** for event-type dictionaries. Their definitions were hand-written against that generated contract before the shared `ProjectionDefinitionCompiler` landed, then converted by the packaged Grpc converter and executed by the packaged engine; see `definitionSource` in each fixture. The descriptor SHA-256 of the installed generated `projections.ts` file detects TS contract drift. Each fixture records its format version, a `kind` (`kernelSemantics` for kernel behavior a TypeScript evaluator must reproduce, or `oracleGuard` for kernel behavior outside the phase-1 evaluator boundary or the oracle's own fail-closed boundaries; the evaluator asserts rejection rather than comparing snapshots), engine version/commit, contract version/hash, read-model and participating event schemas, explicit ordered event contexts (lossless string sequence numbers), wire definition and per-event expectations. Unknown event/context and wire fields fail closed. Children are read one level deep with `From` and `RemovedWith` only; any other child operation fails closed. Contexts can supply `eventSourceType`, `eventStreamType`, `eventStreamId`, `correlationId` (GUID), `causation` (`occurred`, `type`, string `properties`), `causedBy` (`subject`, `name`, `userName`, recursive `onBehalfOf`), `tags`, `hash` and `subject`; omitted values use the kernel defaults. Events within one fixture must share an event store and namespace; omitted values use the kernel's `NotSet` sentinels. For a failing final step, put `expectedError: { "type": "...", "message": "..." }` on the event; the corresponding expected snapshot includes `error` beside `engineState` and `publicRead`. An unexpected exception fails the run rather than producing an expected error. +The fixtures use the generated `@cratis/chronicle.contracts` 19.26.2 wire layout, including key/value **arrays** for event-type dictionaries. Their definitions were hand-written against that generated contract before the shared `ProjectionDefinitionCompiler` landed, then converted by the packaged Grpc converter and executed by the packaged engine; see `definitionSource` in each fixture. The descriptor SHA-256 of the installed generated `projections.ts` file detects TS contract drift. Each fixture records its format version, a `kind` (`kernelSemantics` for kernel behavior a TypeScript evaluator must reproduce, or `oracleGuard` for kernel behavior outside the phase-1 evaluator boundary or the oracle's own fail-closed boundaries; the evaluator asserts rejection rather than comparing snapshots), engine version/commit, contract version/hash, read-model and participating event schemas, explicit ordered event contexts (lossless string sequence numbers), wire definition and per-event expectations. Unknown event/context and wire fields fail closed. Children are read one level deep with `From` and `RemovedWith` only; any other child operation fails closed. Contexts can supply `eventSourceType`, `eventStreamType`, `eventStreamId`, `correlationId` (GUID), `causation` (`occurred`, `type`, string `properties`), `causedBy` (`subject`, `name`, `userName`, recursive `onBehalfOf`), `tags`, `hash` and `subject`; omitted values use the kernel defaults. Events within one fixture must share an event store and namespace; omitted values use the kernel's `NotSet` sentinels. For a failing final step, put `expectedError: { "type": "...", "message": "..." }` on the event; the corresponding expected snapshot includes `error` beside `engineState` and `publicRead`. An unexpected exception fails the run rather than producing an expected error. The runner creates a real `ProjectionFactory` projection and calls the public `ProjectionPipeline.Handle` with the complete production step sequence: `ResolveKey → SetInitialState → DecryptInitialState → HandleEvent → EncryptChangeset → StoreFutures → ResolveFutures → SaveChanges`. Events are appended to the in-memory sequence before handling. Strict proxies guard the factory lookups, compliance and replay-cache dependencies, and unsupported futures operations. The one permitted futures call is `GetFutures()`: the production tracker probes durable storage once on its first event, so the empty in-memory store returns no futures. Plain schemas do not call compliance. It skips unrelated events as the production subscription filter does. Snapshots contain the sink's **engine state**, including `__initialized` and explicit nulls, alongside the schema-normalized **public read** produced by the same `ExpandoObjectConverter.ToJsonObject` used by `ReadModels.GetInstanceById`. Keys absent from `publicRead` mean no materialized instance; missing fields and explicit null fields remain distinguishable in `engineState`. The separate `ProjectionReadModelProcessor` replay loop in Chronicle.Testing is never called. diff --git a/Tools/ProjectionOracle/packages.lock.json b/Tools/ProjectionOracle/packages.lock.json index ea6f607a..36d9f3bc 100644 --- a/Tools/ProjectionOracle/packages.lock.json +++ b/Tools/ProjectionOracle/packages.lock.json @@ -4,13 +4,13 @@ "net10.0": { "Cratis.Arc": { "type": "Direct", - "requested": "[22.23.0, )", - "resolved": "22.23.0", - "contentHash": "428iq+QyJ2PupazMtPuOgpbJu3bqcGUQzwlUmeUSKzlPprt7g4RXTA8KXyI2aWZjTseFMYuKo6aw0tKenyIodg==", + "requested": "[22.44.0, )", + "resolved": "22.44.0", + "contentHash": "qYYRTSis5pYPQgS2eUXIoR8ylqThXCGNK6bn+x+WgqfNByAMWkh6zi2FVsfco60PY8PkPBsrDxSkAtBWIGIBLQ==", "dependencies": { - "Cratis.Arc.Core": "22.23.0", - "Cratis.Fundamentals": "7.19.3", - "Cratis.Metrics.Roslyn": "7.19.3", + "Cratis.Arc.Core": "22.44.0", + "Cratis.Fundamentals": "7.19.6", + "Cratis.Metrics.Roslyn": "7.19.4", "FluentValidation": "12.1.1", "Microsoft.Extensions.DependencyModel": "10.0.12", "Microsoft.Extensions.Telemetry": "10.10.0", @@ -19,16 +19,19 @@ }, "Cratis.Chronicle.Testing": { "type": "Direct", - "requested": "[19.8.1, )", - "resolved": "19.8.1", - "contentHash": "8KYgWz2CwowDLYkIGtPWPeWebcDWF8LnhCpS1EF4j8kCC42Hc99YNKe+7a62q4wYX/jm0rt9fAgVbyxuz9SyoA==", - "dependencies": { - "Cratis.Chronicle": "19.8.1", - "Cratis.Chronicle.Connections": "19.8.1", - "Cratis.Fundamentals": "7.19.4", - "Cratis.Orleans": "1.10.1", - "Cratis.Orleans.Storage": "1.10.1", - "Cratis.Orleans.Storage.MongoDB": "1.10.1", + "requested": "[19.26.2, )", + "resolved": "19.26.2", + "contentHash": "I8QJYTtULg8EtTo5oh1aQyLW4QjQ9hlNkcxxInX8+0lGc6FomZX9/jHAnQBxMCeSTVvru9S8zoFqPs3lRrpdmw==", + "dependencies": { + "Cratis.Arc": "22.30.0", + "Cratis.Arc.Core": "22.30.0", + "Cratis.Chronicle": "19.26.2", + "Cratis.Chronicle.Connections": "19.26.2", + "Cratis.Fundamentals": "7.19.6", + "Cratis.Orleans": "1.12.2", + "Cratis.Orleans.Storage": "1.12.2", + "Cratis.Orleans.Storage.MongoDB": "1.12.2", + "JsonCons.JmesPath": "1.0.0", "Microsoft.Extensions.Logging": "10.0.12", "Microsoft.Extensions.Logging.Abstractions": "10.0.12" } @@ -88,12 +91,12 @@ }, "Cratis.Arc.Core": { "type": "Transitive", - "resolved": "22.23.0", - "contentHash": "cc67BF2qW4lEKXxR6HiWwanpI46IbkJAkTL3ccd3PsuyOGIIR7XhT272XRAo7UNw0aGqM+4XZ9Xc37t5jBnTdQ==", + "resolved": "22.44.0", + "contentHash": "eUQPQmPMeJb9CKmBhEYYILkEkNazyMoFYI19URmbATiQyl3EaXJ7qOokHRTw8PPgI74nigV9HGBdgrPUqD5g4A==", "dependencies": { - "Cratis.Arc.Core.CodeAnalysis": "22.23.0", - "Cratis.Fundamentals": "7.19.3", - "Cratis.Metrics.Roslyn": "7.19.3", + "Cratis.Arc.Core.CodeAnalysis": "22.44.0", + "Cratis.Fundamentals": "7.19.6", + "Cratis.Metrics.Roslyn": "7.19.4", "FluentValidation": "12.1.1", "Microsoft.Extensions.Configuration.FileExtensions": "10.0.12", "Microsoft.Extensions.DependencyModel": "10.0.12", @@ -106,15 +109,15 @@ }, "Cratis.Arc.Core.CodeAnalysis": { "type": "Transitive", - "resolved": "22.23.0", - "contentHash": "YCAZ5iOeOuU2WIR4xCaCkx47rPz5N7vNWCD8Qk5ICG/Nf4Rm5CtvzY0mWjfFFAMbBuJIzSB0StZlrRjLbObfQw==" + "resolved": "22.44.0", + "contentHash": "2iELBMXCRQdhg4opYmVq7s0alpkHgnElxeMP2ad4wN3pxo/+3EWz5s8pI+lRo04zICuOaMijXLN/N1UZrqE8zg==" }, "Cratis.Arc.MongoDB": { "type": "Transitive", - "resolved": "22.23.0", - "contentHash": "3EYnkEIFNsQ/0m7LKfLDZfljbwSnws5DhcjDpcn1pb+b7Hh7rKZv570frA40N/eaTgJl8tb0NRX8V6reQaXl2w==", + "resolved": "22.30.0", + "contentHash": "7p0keThdlUrhhgEgXVkK0qKFtHW1WpPiMxbV/iMv7Kdv+qQ1LaaR7xvBE/6dNTPGtc2JMs1ITo09XNRjmeDD6Q==", "dependencies": { - "Cratis.Arc.Core": "22.23.0", + "Cratis.Arc.Core": "22.30.0", "Cratis.Fundamentals": "7.19.3", "Cratis.Metrics.Roslyn": "7.19.3", "FluentValidation": "12.1.1", @@ -130,12 +133,12 @@ }, "Cratis.Chronicle": { "type": "Transitive", - "resolved": "19.8.1", - "contentHash": "hzEJcmMgnhfhJsKL2twgvtEjczP2CphZOfv9ijrDtN4X9qeGYZ7D7et449LSXkLTdfMcjoU3Hc2+BAr3vSMdjg==", + "resolved": "19.26.2", + "contentHash": "L2ILIUINyw2EN1vEDP9BRIj79imy/8xKBBmRX832WNtS4ku2PQO9HN3nO3OwYOPJp8yhKgt9besgXu164j+7MQ==", "dependencies": { - "Cratis.Chronicle.CodeAnalysis": "19.8.1", - "Cratis.Chronicle.Connections": "19.8.1", - "Cratis.Fundamentals": "7.19.4", + "Cratis.Chronicle.CodeAnalysis": "19.26.2", + "Cratis.Chronicle.Connections": "19.26.2", + "Cratis.Fundamentals": "7.19.6", "Cratis.Metrics.Roslyn": "7.19.4", "Grpc.Net.Client": "2.84.0", "Microsoft.Extensions.Hosting": "10.0.12", @@ -147,15 +150,15 @@ }, "Cratis.Chronicle.CodeAnalysis": { "type": "Transitive", - "resolved": "19.8.1", - "contentHash": "XJXqenrPV5yS1Dv/u/fbnBKV9zHZUk062pZ4HlXXG6gTcnBPmiu1BM2jyzoE0WH9ZCtJ1H9PPC6SzdGLYJma8w==" + "resolved": "19.26.2", + "contentHash": "sRrs6xgDRZ6hgQSB+jd/saohwckT2ADA0t9U3u3evJomRXzuIM5U8R+nkYzojKn9kq8+8RCrS5IXZsxcpczoLQ==" }, "Cratis.Chronicle.Connections": { "type": "Transitive", - "resolved": "19.8.1", - "contentHash": "PuF88z++TluX828dA/iJIg/oLSO46brL5vHztxdAJ8CcYqIikZtIb7ZHp6zDDdBU+iUhVtg9lpDnMBvCz8WZJQ==", + "resolved": "19.26.2", + "contentHash": "J914h+Nkg06nndEXiJBalQuKLFlzJCtrlBiIeOkAPijjjZTpXxyHOsPgmMiVBcJtDPu9qCI2Njd8FUORaQ5utw==", "dependencies": { - "Cratis.Fundamentals": "7.19.4", + "Cratis.Fundamentals": "7.19.6", "DnsClient": "1.8.0", "Grpc.Net.Client": "2.84.0", "Microsoft.Extensions.Hosting": "10.0.12", @@ -168,8 +171,8 @@ }, "Cratis.Fundamentals": { "type": "Transitive", - "resolved": "7.19.4", - "contentHash": "rSsnHuAlTUhrjpc+sEMIlx6Fn7uweJ9t3ldaPCVIqXXWIY72495EAU/7ISdraUZ3Iqzdh5xU/wVg1k5pL2E8aw==", + "resolved": "7.19.6", + "contentHash": "/Gmt2GvQnlD35ru1w0OZSAkrtGCCAinEEE9r7Yw0vPoehC9ZGLDjMuVz6KLWtP05GbZatBBs55gl40aZugyOeQ==", "dependencies": { "Humanizer": "3.0.10", "Microsoft.Extensions.DependencyInjection": "10.0.12", @@ -187,12 +190,13 @@ }, "Cratis.Orleans": { "type": "Transitive", - "resolved": "1.10.1", - "contentHash": "XEA9/O1GAfv9fG6zWDTPo++SFsO19U+hwrhMWCS0RigGY7yEOMsiaN3OFe4XCSQawLUXN/ZhCfh0tqibikBzLg==", + "resolved": "1.12.2", + "contentHash": "/8ncRe3n9e/ILuRcewxK1tpIXcn8mfNKFMjqvofDD7FLvSzuqbOdPluZF/O7pUghCLHvxr6BQobQljvsdcb1oQ==", "dependencies": { - "Cratis.Fundamentals": "7.19.4", - "Cratis.Orleans.Storage": "1.10.1", + "Cratis.Fundamentals": "7.19.6", + "Cratis.Orleans.Storage": "1.12.2", "Microsoft.Orleans.Core.Abstractions": "10.3.1", + "Microsoft.Orleans.Reminders": "10.3.1", "Microsoft.Orleans.Sdk": "10.3.1", "Microsoft.Orleans.Serialization": "10.3.1", "Microsoft.Orleans.Serialization.SystemTextJson": "10.3.1", @@ -206,10 +210,10 @@ }, "Cratis.Orleans.Storage": { "type": "Transitive", - "resolved": "1.10.1", - "contentHash": "mYs11hwfLLYsA6v4XgnJTMT89fqGtQH96ket2u+QrY6Dm3gmDD0GJxNB4J2B4E3gPN/beMl+Ta2XH4y6ZPE6gw==", + "resolved": "1.12.2", + "contentHash": "LauhzqUzn7vOcwbCn0RQOkCKjhq04HM3v+/+gH5Gb8xG6/c0PLYJuggFtARmUAebrOB2PRVI84KFdkSAyDSHxg==", "dependencies": { - "Cratis.Fundamentals": "7.19.4", + "Cratis.Fundamentals": "7.19.6", "Microsoft.Orleans.Core.Abstractions": "10.3.1", "OneOf": "3.0.271", "System.Reactive": "7.0.0" @@ -217,12 +221,12 @@ }, "Cratis.Orleans.Storage.MongoDB": { "type": "Transitive", - "resolved": "1.10.1", - "contentHash": "sy0WxDVnp7FZI9Jx+5WZAfVP0olFUjAtYI7dmpl/hhBY749omHsaxAENOicSUeMoB0RRJlS1t1EVNwvEkvDr3A==", + "resolved": "1.12.2", + "contentHash": "ikp0P80Lfso+LfMOnW6lytEhJDEdAqdBc315VprEuhlQbYGS1edJCsx4Qc95N6rOCAIfSwleT9abjVyuLtNyvQ==", "dependencies": { - "Cratis.Arc.MongoDB": "22.23.0", - "Cratis.Orleans": "1.10.1", - "Cratis.Orleans.Storage": "1.10.1", + "Cratis.Arc.MongoDB": "22.30.0", + "Cratis.Orleans": "1.12.2", + "Cratis.Orleans.Storage": "1.12.2", "MongoDB.Driver": "3.12.0", "System.Reactive": "7.0.0" } @@ -730,6 +734,11 @@ "Humanizer.Core": "[3.0.10]" } }, + "JsonCons.JmesPath": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "nAaoyrfGnUH2gaGqK62GAnlts2gWDXh27Z4vynUey0ZodNGWR8IrfuzcTdocNF/BZY4IOuHuCg6CDjgcB+F5FQ==" + }, "Microsoft.AspNetCore.Connections.Abstractions": { "type": "Transitive", "resolved": "10.0.3", From 23f36e321756f16a977d6ce24562cd8a5974d5b7 Mon Sep 17 00:00:00 2001 From: woksin Date: Thu, 1 Oct 2026 19:48:22 +0200 Subject: [PATCH 4/5] Use Chronicle 19.26.2 for kernel-backed specifications --- .github/workflows/build.yml | 2 +- Documentation/connecting.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fabbffb..1d7fe1ce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: # A development kernel (MongoDB included) that the kernel-backed specifications (*.integration.spec.ts) run against. services: chronicle: - image: cratis/chronicle:19.22.1-development + image: cratis/chronicle:19.26.2-development ports: - 35000:35000 diff --git a/Documentation/connecting.md b/Documentation/connecting.md index 637fe9bd..ddcb38d3 100644 --- a/Documentation/connecting.md +++ b/Documentation/connecting.md @@ -139,7 +139,7 @@ The TypeScript client and the Chronicle kernel have separate version numbers, an Instead, the client sends its contract descriptor to the kernel on every new connection, and the kernel reports whether it can serve it. When the kernel reports an incompatibility, or does not implement the check, the client throws `IncompatibleChronicleServer`, does not retry, and rejects every later call. Deploy a compatible kernel and create a new client. Unlike the .NET client, the TypeScript client has no option to skip this check. -There is no published compatibility matrix. The examples in these guides were run against the `cratis/chronicle:19.4.8-development` image. Before you upgrade in production, test the client against the kernel version you run. [Preserve existing append routes](./migrate-append-routing.md) describes the upgrade that needs a kernel supporting kernel-owned append routing. +There is no published compatibility matrix. The kernel-backed specifications use the `cratis/chronicle:19.26.2-development` image. Before you upgrade in production, test the client against the kernel version you run. [Preserve existing append routes](./migrate-append-routing.md) describes the upgrade that needs a kernel supporting kernel-owned append routing. ## Shut down From 36d860fca31f55b2ddb89ec09fd503d951bf2c43 Mon Sep 17 00:00:00 2001 From: woksin Date: Thu, 1 Oct 2026 19:57:41 +0200 Subject: [PATCH 5/5] Separate fixture authoring provenance from the validating kernel version --- Source/testing/projections/fixtures/empty-mappings.json | 2 +- Tools/ProjectionOracle/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/testing/projections/fixtures/empty-mappings.json b/Source/testing/projections/fixtures/empty-mappings.json index 7379ba67..da086f34 100644 --- a/Source/testing/projections/fixtures/empty-mappings.json +++ b/Source/testing/projections/fixtures/empty-mappings.json @@ -10,7 +10,7 @@ "version": "19.26.2", "descriptorSha256": "a903fcf649d56800fd8c3c9598087feebca11c7a3faa2cd50c725f65d87c0e70" }, - "definitionSource": "Hand-written in the generated @cratis/chronicle.contracts 19.6.1 ProjectionDefinition wire shape; converted and executed by packaged Chronicle 19.8.1 kernel.", + "definitionSource": "Hand-written in the generated @cratis/chronicle.contracts 19.6.1 ProjectionDefinition wire shape; converted and executed by the packaged Chronicle kernel recorded in this fixture's engine version.", "wireDefinition": { "EventSequenceId": "event-log", "Identifier": "oracle-empty", diff --git a/Tools/ProjectionOracle/README.md b/Tools/ProjectionOracle/README.md index 42551000..5c5cb30f 100644 --- a/Tools/ProjectionOracle/README.md +++ b/Tools/ProjectionOracle/README.md @@ -9,7 +9,7 @@ The oracle pins `Cratis.Chronicle.Testing` **19.26.2** (Chronicle commit `1f8d83 The isolated constraint fixtures (`constraints-isolation.json`, `constraints-key-domain.json`, `constraints-property-lifecycle.json`, `constraints-property-covered-removal.json`, `constraints-event-type-siblings.json`, `constraints-event-type-cycles.json`, `constraints-composite.json`, and `constraints-ignore-casing.json`) explicitly select their unscoped client definitions, declare all event schemas and their definition provenance, and assert the effective kernel definitions installed by the packaged testing adapter (ordered event properties, scope, removal and casing). The lifecycle fixtures prove owner-based replacement/removal, fieldless removal events, covered-and-removal validation, and the fact that property claims are never released during whole-batch validation; their accepted history includes hashes for every event. The event-type fixtures install one explicit definition for the complete covered type set (not merged .NET class attributes), include alternative removers and a covered-and-removal event, and capture single and atomic batch cycle releases and rejections. The composite fixture installs multi-property definitions in declared property order (composite events use a `values` object instead of `value`); the oracle passes the order and the fixture's `ignoreCasing` flag through, asserts both on the installed kernel definition, and never joins, folds or compares values itself. They pin the generated `events_constraints.ts` descriptor in addition to the event-sequence descriptor. Each single or batch operation captures the mapped client result, raw contract violations on rejected appends, full accepted content/routes/hashes, and next sequence; rejected operations assert unchanged history and sequence. Only rejected appends are resent to the packaged kernel service to capture its raw response. The original `constraints.json` increment-4 regression fixture keeps its previous runner and meanings. These fixtures cover only unscoped constraints. The separate `oracleGuard` fixture for unsupported key conversions is deferred; the TypeScript specs reject those inputs but do not claim packaged-kernel behavior for them. Add new fixture names to `Program.Main`'s required list so `oracle:check` cannot pass without them. `--update-events` rewrites all event fixtures; inspect its diff and retain unrelated fixtures unchanged. -The fixtures use the generated `@cratis/chronicle.contracts` 19.26.2 wire layout, including key/value **arrays** for event-type dictionaries. Their definitions were hand-written against that generated contract before the shared `ProjectionDefinitionCompiler` landed, then converted by the packaged Grpc converter and executed by the packaged engine; see `definitionSource` in each fixture. The descriptor SHA-256 of the installed generated `projections.ts` file detects TS contract drift. Each fixture records its format version, a `kind` (`kernelSemantics` for kernel behavior a TypeScript evaluator must reproduce, or `oracleGuard` for kernel behavior outside the phase-1 evaluator boundary or the oracle's own fail-closed boundaries; the evaluator asserts rejection rather than comparing snapshots), engine version/commit, contract version/hash, read-model and participating event schemas, explicit ordered event contexts (lossless string sequence numbers), wire definition and per-event expectations. Unknown event/context and wire fields fail closed. Children are read one level deep with `From` and `RemovedWith` only; any other child operation fails closed. Contexts can supply `eventSourceType`, `eventStreamType`, `eventStreamId`, `correlationId` (GUID), `causation` (`occurred`, `type`, string `properties`), `causedBy` (`subject`, `name`, `userName`, recursive `onBehalfOf`), `tags`, `hash` and `subject`; omitted values use the kernel defaults. Events within one fixture must share an event store and namespace; omitted values use the kernel's `NotSet` sentinels. For a failing final step, put `expectedError: { "type": "...", "message": "..." }` on the event; the corresponding expected snapshot includes `error` beside `engineState` and `publicRead`. An unexpected exception fails the run rather than producing an expected error. +The fixtures are checked against the generated `@cratis/chronicle.contracts` 19.26.2 wire layout, including key/value **arrays** for event-type dictionaries. Their definitions were hand-written against the contract version recorded in each fixture's `definitionSource` (19.6.1 for the original projection fixtures) before the shared `ProjectionDefinitionCompiler` landed, then converted by the packaged Grpc converter and executed by the packaged engine; see `definitionSource` in each fixture. The descriptor SHA-256 of the installed generated `projections.ts` file detects TS contract drift. Each fixture records its format version, a `kind` (`kernelSemantics` for kernel behavior a TypeScript evaluator must reproduce, or `oracleGuard` for kernel behavior outside the phase-1 evaluator boundary or the oracle's own fail-closed boundaries; the evaluator asserts rejection rather than comparing snapshots), engine version/commit, contract version/hash, read-model and participating event schemas, explicit ordered event contexts (lossless string sequence numbers), wire definition and per-event expectations. Unknown event/context and wire fields fail closed. Children are read one level deep with `From` and `RemovedWith` only; any other child operation fails closed. Contexts can supply `eventSourceType`, `eventStreamType`, `eventStreamId`, `correlationId` (GUID), `causation` (`occurred`, `type`, string `properties`), `causedBy` (`subject`, `name`, `userName`, recursive `onBehalfOf`), `tags`, `hash` and `subject`; omitted values use the kernel defaults. Events within one fixture must share an event store and namespace; omitted values use the kernel's `NotSet` sentinels. For a failing final step, put `expectedError: { "type": "...", "message": "..." }` on the event; the corresponding expected snapshot includes `error` beside `engineState` and `publicRead`. An unexpected exception fails the run rather than producing an expected error. The runner creates a real `ProjectionFactory` projection and calls the public `ProjectionPipeline.Handle` with the complete production step sequence: `ResolveKey → SetInitialState → DecryptInitialState → HandleEvent → EncryptChangeset → StoreFutures → ResolveFutures → SaveChanges`. Events are appended to the in-memory sequence before handling. Strict proxies guard the factory lookups, compliance and replay-cache dependencies, and unsupported futures operations. The one permitted futures call is `GetFutures()`: the production tracker probes durable storage once on its first event, so the empty in-memory store returns no futures. Plain schemas do not call compliance. It skips unrelated events as the production subscription filter does. Snapshots contain the sink's **engine state**, including `__initialized` and explicit nulls, alongside the schema-normalized **public read** produced by the same `ExpandoObjectConverter.ToJsonObject` used by `ReadModels.GetInstanceById`. Keys absent from `publicRead` mean no materialized instance; missing fields and explicit null fields remain distinguishable in `engineState`. The separate `ProjectionReadModelProcessor` replay loop in Chronicle.Testing is never called.