From 181b57ebfa54c492fc28dc45486c98f5e279c289 Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Tue, 27 Oct 2026 16:44:25 +0000 Subject: [PATCH 1/2] Meter v1 projection history bytes in Core's canonical unit Server #812 (#770) makes PHP's Waterline v1 projection count history bytes as Core's HistoryBudget::sizeOfEvent does: the event type's bytes plus its payload encoded with JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, the unit DW_V2_LIMIT_HISTORY_TRANSACTION_BYTES limits everywhere else. Native, like published PHP through 2.11.5, counted each whole event's JSON with its id, sequence and time and escaped Unicode. Native now uses the canonical unit for the byte limit and for the stored summary's history_size_bytes. #812's LegacyV1Projection::normalize, run on the published 2.11.5 image's Core, counts the bare test source's two events as 1280 and 402 bytes (1682 in all, where the old unit gave 1870); native matches. Hold until the shared fixture reference moves to a Server release carrying #812: the waterline-import fixture records history_size_bytes from the published reference. Co-Authored-By: Claude Opus 5.5 --- rust/src/runtime/waterline_import.rs | 35 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/rust/src/runtime/waterline_import.rs b/rust/src/runtime/waterline_import.rs index af36e38ee..d631d3679 100644 --- a/rust/src/runtime/waterline_import.rs +++ b/rust/src/runtime/waterline_import.rs @@ -609,14 +609,7 @@ fn events(source: &PhpArray, logs: &[PhpArray], signals: &[PhpArray], exceptions recorded_at, payload, }; - let size = object(vec![ - ("event_type", text(event.event_type)), - ("recorded_at", optional(json_time(event.recorded_at))), - ("payload", event.payload.clone()), - ("sequence", Php::Int(event.sequence)), - ("id", text(&event.id)), - ]).encode(Flags { unescaped_slashes: true, ..Flags::default() }).len(); - bytes = bytes.checked_add(size).unwrap_or(usize::MAX); + bytes = bytes.checked_add(event_bytes(&event)).unwrap_or(usize::MAX); if let Some(error) = exceeded(limits, 0, bytes) { return Err((error, index + 1)); } @@ -625,6 +618,15 @@ fn events(source: &PhpArray, logs: &[PhpArray], signals: &[PhpArray], exceptions Ok((built, bytes)) } +/// Core's history-transaction byte unit, `HistoryBudget::sizeOfEvent`: the +/// event type's bytes plus its payload as `json_encode` with +/// `JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE` writes it (Server #770). +/// The event's id, sequence and time are not counted. +fn event_bytes(event: &Event) -> usize { + event.event_type.len() + + event.payload.encode(Flags { unescaped_slashes: true, unescaped_unicode: true, ..Flags::default() }).len() +} + /// `report`: the projection report, with the first error's reason, message /// and remediation at the top of a rejection, then `extra`. fn report(outcome: &Outcome, status: &str, extra: Vec<(&str, Value)>) -> Value { @@ -1352,13 +1354,7 @@ mod tests { let (outcome, start) = events_built(|| normalize_bounded("src-1", source, None, &limited(None, None))); let Outcome::Valid(all) = outcome else { panic!("valid") }; assert_eq!(start, all.events.len()); - let first = |count: usize| all.events[..count].iter().map(|event| object(vec![ - ("event_type", text(event.event_type)), - ("recorded_at", optional(json_time(event.recorded_at))), - ("payload", event.payload.clone()), - ("sequence", Php::Int(event.sequence)), - ("id", text(&event.id)), - ]).encode(Flags { unescaped_slashes: true, ..Flags::default() }).len()).sum::(); + let first = |count: usize| all.events[..count].iter().map(event_bytes).sum::(); let (outcome, built) = events_built(|| normalize_bounded("src-1", source, None, &limited(None, Some(first(4))))); assert!(matches!(outcome, Outcome::TooLarge { built: 5, .. })); assert_eq!(built, 5); @@ -1367,7 +1363,8 @@ mod tests { #[test] fn events_and_history_size_follow_php() { // PHP 2.11.1: LegacyV1Projection::normalize('src-1', bare source, 'ns-1') - // printed these event encodings (json_encode, JSON_UNESCAPED_SLASHES). + // printed these event encodings (json_encode, JSON_UNESCAPED_SLASHES), + // which fix the events' ids and payloads. let source = super::super::php_value::decode(br#"{"operator_id":"v1:4501","engine_source":"v1","class":"App\\Workflows\\Legacy\\Bare","status":"completed"}"#) .unwrap(); let Outcome::Valid(normalized) = normalize("src-1", source.array().unwrap(), Some("ns-1")) else { panic!("valid") }; @@ -1380,7 +1377,11 @@ mod tests { ]).encode(Flags { unescaped_slashes: true, ..Flags::default() })).collect(); assert_eq!(encoded[0].len(), 1374, "{}", encoded[0]); assert_eq!(encoded[1].len(), 496, "{}", encoded[1]); - assert_eq!(normalized.history_size_bytes, 1870); + // Server #812's LegacyV1Projection::normalize on Core 2.15's + // HistoryBudget::sizeOfEvent counted 1280 and 402 bytes for these + // events: their types and payloads, not their ids, sequences or times. + assert_eq!(normalized.events.iter().map(event_bytes).collect::>(), [1280, 402]); + assert_eq!(normalized.history_size_bytes, 1682); assert_eq!(normalized.workflow_id, "v1:src-1:c8c25815a3332910ba072598"); assert_eq!(normalized.run_id, "b0ee56b2b89080ea9181490e2f"); assert_eq!(normalized.events[0].id, "9730c0bb4149e0a120cc8a8d7e"); From 99bbe287ce35283ead91e5c15636ecdf2228d49b Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Thu, 29 Oct 2026 19:17:01 +0000 Subject: [PATCH 2/2] Move the parity reference to published Server 2.11.7 Published 2.11.7 (Core 2.15.7) replaces 2.11.5 as the reference the shared fixtures compare native and embedded against (#863). 2.11.6 is skipped: its repeated bridge-adapter update answered 500 (#861, fixed in #862). 2.11.7 counts a v1 projection's history bytes in Core's canonical unit (#770), so waterline-import records five smaller history_size_bytes values. Native already meters the same way (previous commit). No other fixture expectation changes. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/native-image-parity.yml | 2 +- .github/workflows/server-parity.yml | 58 +++++++++---------- .../2026-10-29-reference-2117.md | 56 ++++++++++++++++++ docs/rust-server-port.md | 3 + scripts/conformance/server-parity.mjs | 4 +- scripts/conformance/server-parity/README.md | 2 +- .../server-parity/native-image-corpus.sh | 2 +- .../conformance/server-parity/role-profile.sh | 2 +- .../server-parity/update-validation-sqlite.sh | 2 +- .../ServerParity/waterline-import.json | 10 ++-- .../ServerParityBaselines/php-2.11.7.json | 20 +++++++ .../waterline-import-observation.json | 10 ++-- tests/Unit/ServerParityImagePullTest.mjs | 2 +- ...erverParityWaterlineImportContractTest.mjs | 5 +- 14 files changed, 129 insertions(+), 49 deletions(-) create mode 100644 docs/rust-server-port-checkpoints/2026-10-29-reference-2117.md create mode 100644 tests/Fixtures/ServerParityBaselines/php-2.11.7.json diff --git a/.github/workflows/native-image-parity.yml b/.github/workflows/native-image-parity.yml index a318e260b..26002490f 100644 --- a/.github/workflows/native-image-parity.yml +++ b/.github/workflows/native-image-parity.yml @@ -47,7 +47,7 @@ jobs: run: | set -euo pipefail bash scripts/ci/pull-images.sh \ - "$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json)" \ + "$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json)" \ composer:2.10.3@sha256:da624c2c705d54e2f5a9bb77a5dc6c7d091711433ebefd7035672e84c2010fee - name: Set up Docker Buildx diff --git a/.github/workflows/server-parity.yml b/.github/workflows/server-parity.yml index f334e226e..f461a6396 100644 --- a/.github/workflows/server-parity.yml +++ b/.github/workflows/server-parity.yml @@ -172,7 +172,7 @@ jobs: bash scripts/ci/pull-images.sh \ mirror.gcr.io/library/rust@sha256:300ec56abce8cc9448ddea2172747d048ed902a3090e6b57babb2bf19f754081 \ mirror.gcr.io/library/python@sha256:bf44cdfcb76cd3b41e879bc058fc37ec5872002ccfde7fcb765e218cde0cd79c \ - "$(baseline php-2.11.5)" + "$(baseline php-2.11.7)" # The adapters' pinned, --locked dependencies build the same way every # run. Restore their public Cargo registry data and build tree, keyed # by the toolchain image, the runner and every tracked adapter input. @@ -443,7 +443,7 @@ jobs: bash scripts/ci/pull-images.sh \ mirror.gcr.io/library/rust@sha256:ba81bc3eaa4422af576c0262515d96b0111a628a6ccc2c86557cf55c9a4bbee0 \ "$MYSQL_IMAGE" \ - "$(baseline php-2.11.5)" \ + "$(baseline php-2.11.7)" \ "$(baseline php-2.5.14)" \ composer:2.10.3@sha256:da624c2c705d54e2f5a9bb77a5dc6c7d091711433ebefd7035672e84c2010fee - name: Fetch this run's published SDK adapters @@ -479,7 +479,7 @@ jobs: - name: Create TLS fixture certificates run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) mkdir -p mysql-tls parity-evidence chmod 0777 parity-evidence docker run --rm --user="$(id -u):$(id -g)" --network=none \ @@ -562,7 +562,7 @@ jobs: docker run --rm --user="$(id -u):$(id -g)" --network "$RESOURCE_SCOPE" --entrypoint mysql \ "$MYSQL_IMAGE" -h parity-mysql -uroot -pparity-disposable-password \ -e 'CREATE DATABASE native_ref CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci' - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) # The physical layout stays the frozen published 2.5.14 one; behavior # runs on the current reference after migrating that database forward. layout=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.5.14.json) @@ -611,7 +611,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) # Composer runs confined in the pinned image, never in the published image under test. bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress @@ -688,7 +688,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) export DW_PARITY_RUNNER_REVISION=$(git rev-parse HEAD) mkdir -p parity-consumers curl --fail --location --retry 3 --output parity-consumers/dw.phar https://github.com/durable-workflow/cli/releases/download/2.2.0/dw.phar @@ -754,7 +754,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/conformance/server-parity/published-sdk-patch-profile.sh mysql http://parity-php:8080 http://parity-native-a:8080 bash scripts/conformance/server-parity/repeated-patch-profile.sh mysql http://parity-php:8080 http://parity-native-a:8080 bash scripts/conformance/server-parity/legacy-marker-profile.sh mysql http://parity-php:8080 http://parity-native-a:8080 @@ -834,7 +834,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress # Each profile brings its own published PHP and embedded databases and @@ -882,7 +882,7 @@ jobs: if: ${{ matrix.part == 'cohorts' }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress docker run -d --name "$RESOURCE_SCOPE-native-b" --network "$RESOURCE_SCOPE" --network-alias=parity-native-b \ @@ -966,7 +966,7 @@ jobs: if: ${{ matrix.part == 'corrected-markers' }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress docker run -d --name "$RESOURCE_SCOPE-native-b" --network "$RESOURCE_SCOPE" --network-alias=parity-native-b \ @@ -1096,7 +1096,7 @@ jobs: run: | set -euo pipefail mkdir -p parity-evidence parity-summary - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) docker run --rm --user="$(id -u):$(id -g)" --network=none --cpus=1 --memory=256m --memory-swap=256m \ --entrypoint node -e PARITY_JOB_OUTCOME -e GITHUB_SHA \ -v "$PWD:/source:ro" -v "$PWD/parity-evidence:/evidence:ro" -v "$PWD/parity-summary:/summary" \ @@ -1148,7 +1148,7 @@ jobs: bash scripts/ci/pull-images.sh \ mirror.gcr.io/library/rust@sha256:ba81bc3eaa4422af576c0262515d96b0111a628a6ccc2c86557cf55c9a4bbee0 \ "$POSTGRES_IMAGE" \ - "$(baseline php-2.11.5)" \ + "$(baseline php-2.11.7)" \ "$(baseline php-2.5.14)" \ composer:2.10.3@sha256:da624c2c705d54e2f5a9bb77a5dc6c7d091711433ebefd7035672e84c2010fee - name: Fetch this run's published SDK adapters @@ -1242,7 +1242,7 @@ jobs: "$POSTGRES_IMAGE" --version > parity-evidence/postgres-version.txt docker run --rm --user="$(id -u):$(id -g)" --network "$RESOURCE_SCOPE" \ -e PGPASSWORD=parity-disposable-password --entrypoint createdb "$POSTGRES_IMAGE" -h parity-pg -U parity native_ref - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) # The physical layout stays the frozen published 2.5.14 one; behavior # runs on the current reference after migrating that database forward. layout=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.5.14.json) @@ -1293,7 +1293,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) # Composer runs confined in the pinned image, never in the published image under test. bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress @@ -1371,7 +1371,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) export DW_PARITY_RUNNER_REVISION=$(git rev-parse HEAD) mkdir -p parity-consumers curl --fail --location --retry 3 --output parity-consumers/dw.phar https://github.com/durable-workflow/cli/releases/download/2.2.0/dw.phar @@ -1439,7 +1439,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/conformance/server-parity/published-sdk-patch-profile.sh pgsql http://parity-php:8080 http://parity-native-a:8080 bash scripts/conformance/server-parity/repeated-patch-profile.sh pgsql http://parity-php:8080 http://parity-native-a:8080 bash scripts/conformance/server-parity/legacy-marker-profile.sh pgsql http://parity-php:8080 http://parity-native-a:8080 @@ -1519,7 +1519,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress # Each profile brings its own published PHP and embedded databases and @@ -1566,7 +1566,7 @@ jobs: if: ${{ matrix.part == 'cohorts' }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress docker run -d --name "$RESOURCE_SCOPE-native-b" --network "$RESOURCE_SCOPE" --network-alias=parity-native-b \ @@ -1652,7 +1652,7 @@ jobs: if: ${{ matrix.part == 'corrected-markers' }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress docker run -d --name "$RESOURCE_SCOPE-native-b" --network "$RESOURCE_SCOPE" --network-alias=parity-native-b \ @@ -1824,7 +1824,7 @@ jobs: run: | set -euo pipefail mkdir -p parity-evidence parity-summary - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) docker run --rm --user="$(id -u):$(id -g)" --network=none --cpus=1 --memory=256m --memory-swap=256m \ --entrypoint node -e PARITY_JOB_OUTCOME -e GITHUB_SHA \ -v "$PWD:/source:ro" -v "$PWD/parity-evidence:/evidence:ro" -v "$PWD/parity-summary:/summary" \ @@ -1867,7 +1867,7 @@ jobs: } bash scripts/ci/pull-images.sh \ mirror.gcr.io/library/rust@sha256:ba81bc3eaa4422af576c0262515d96b0111a628a6ccc2c86557cf55c9a4bbee0 \ - "$(baseline php-2.11.5)" \ + "$(baseline php-2.11.7)" \ "$(baseline php-2.5.14)" \ composer:2.10.3@sha256:da624c2c705d54e2f5a9bb77a5dc6c7d091711433ebefd7035672e84c2010fee - name: Fetch this run's published SDK adapters @@ -1958,7 +1958,7 @@ jobs: -v "$PWD/parity-evidence:/evidence" -w /source/rust --entrypoint bash \ mirror.gcr.io/library/rust@sha256:ba81bc3eaa4422af576c0262515d96b0111a628a6ccc2c86557cf55c9a4bbee0 -c \ 'cargo test --locked --offline --all-targets > /evidence/rust-tests.txt && cargo build --locked --offline && cargo run --locked --offline --example codec-fixtures -- ../tests/Fixtures/ServerParity/Codec/v1.json > /evidence/rust-codec.json' - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) docker run --rm --user="$(id -u):$(id -g)" --network=none --entrypoint php \ -v "$PWD:/source:ro" -v "$PWD/parity-evidence:/evidence" -w /source "$image" \ scripts/conformance/server-parity/codec.php tests/Fixtures/ServerParity/Codec/v1.json \ @@ -1982,7 +1982,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) mkdir -p parity-state parity-evidence chmod 0777 parity-state parity-evidence touch parity-state/php.sqlite parity-state/embedded.sqlite parity-state/php-layout.sqlite @@ -2053,7 +2053,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) export DW_PARITY_RUNNER_REVISION=$(git rev-parse HEAD) mkdir -p parity-consumers curl --fail --location --retry 3 --output parity-consumers/dw.phar https://github.com/durable-workflow/cli/releases/download/2.2.0/dw.phar @@ -2131,7 +2131,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/conformance/server-parity/published-sdk-patch-profile.sh sqlite http://parity-server:8080 http://parity-rust:8080 bash scripts/conformance/server-parity/repeated-patch-profile.sh sqlite http://parity-server:8080 http://parity-rust:8080 bash scripts/conformance/server-parity/legacy-marker-profile.sh sqlite http://parity-server:8080 http://parity-rust:8080 @@ -2212,7 +2212,7 @@ jobs: bash scripts/conformance/server-parity/container-log-tails.sh } trap container_log_tails ERR - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress mkdir -p parity-state parity-evidence @@ -2256,7 +2256,7 @@ jobs: RESOURCE_SCOPE: dw-parity-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress mkdir -p parity-state parity-evidence @@ -2359,7 +2359,7 @@ jobs: RESOURCE_SCOPE: dw-parity-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }} run: | set -euo pipefail - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) bash scripts/ci/run-composer.sh --rm -v "$PWD:/source" -w /source -- \ install --working-dir=scripts/conformance/server-parity --no-interaction --no-progress mkdir -p parity-state parity-evidence @@ -2477,7 +2477,7 @@ jobs: run: | set -euo pipefail mkdir -p parity-evidence parity-summary - image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) + image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) docker run --rm --user="$(id -u):$(id -g)" --network=none --cpus=1 --memory=256m --memory-swap=256m \ --entrypoint node -e PARITY_JOB_OUTCOME -e GITHUB_SHA \ -v "$PWD:/source:ro" -v "$PWD/parity-evidence:/evidence:ro" -v "$PWD/parity-summary:/summary" \ diff --git a/docs/rust-server-port-checkpoints/2026-10-29-reference-2117.md b/docs/rust-server-port-checkpoints/2026-10-29-reference-2117.md new file mode 100644 index 000000000..9b44a2314 --- /dev/null +++ b/docs/rust-server-port-checkpoints/2026-10-29-reference-2117.md @@ -0,0 +1,56 @@ +# October 29, the parity reference moves to published 2.11.7 + +- **Before.** The Shared Server fixtures compared native and embedded + against published Server 2.11.5 (Core 2.15.1). +- **Reference.** Published Server 2.11.7, Core 2.15.7, as General published + it and Security accepted it (#861): + - source `f55f90e54a213872f1c164a1b22c082d859c18aa`; + - index `sha256:96e3e7de8c58f31bfb1ef4d5bddddc2678f4684f5cb3505e6e9ddc6fa3f7f625`; + - linux/amd64 `sha256:be7c2288ff935396262d743590530b204fac11b76582e56a525cc81a8da840d3`; + - linux/arm64 `sha256:7dbc3db050fec05ea5cd10e07ac8399ecf3e285d593bca32979a2320f02a104f`. + + `tests/Fixtures/ServerParityBaselines/php-2.11.7.json` records it. The + SDK, CLI, Waterline and sample-app pins are unchanged. +- **Why not 2.11.6.** A local survey of published 2.11.6 found that a + repeated bridge-adapter update answered `500` (#861). 2.11.7 carries the + fix (#862). +- **Survey.** Every fixture in `tests/Fixtures/ServerParity` was recorded + locally against the 2.11.7 amd64 image, SQLite, maintenance loop running, + except `service-calls` (local SQLite lock pressure) and + `visibility-current-runs` (it needs the published CLI artifact CI + provides). Results: + - 72 of 74 pass unchanged, `bridge-adapters` among them: 2.11.7 gives the + intended answers at all three of its published-defect steps; + - `schedule-catalog` fails locally the same way on 2.11.5; + - `waterline-import` changes as expected (below). +- **Expectation change.** Server #812 (#770) counts a v1 projection's + history bytes as Core's `HistoryBudget::sizeOfEvent` does: the event + type's bytes plus its payload as `json_encode` with + `JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE`. That is the unit + `DW_V2_LIMIT_HISTORY_TRANSACTION_BYTES` limits everywhere else. + `waterline-import` records five `history_size_bytes` values: + + | Export | 2.11.5 | 2.11.7 | + | --- | --- | --- | + | project | 5431 | 4713 | + | running | 2683 | 2445 | + | failed | 5425 | 4707 | + | offsets | 6242 | 5336 | + | bare | 1856 | 1668 | + + No other value in that fixture changed. +- **Native.** The prepared meter change (`e0ed32a6`, held since October 27 + for this move) counts each event the same way, for the byte limit and + for the stored summary. +- **Local checks before the pull request.** + - `waterline-import` was recorded against a fresh 2.11.7 harness and + against a native image built from this branch. Both pass, and + `compare` accepts the pair. The 2.11.7 recording equals the stored + contract observation (with the five new sizes) exactly. + - The Rust library and integration suites pass (634 and 359). + - The node unit suite passes, except the PHP image-context test, + which fails the same way on a clean `main` checkout here because of + local ignored state. +- **Not changed here.** The `bridge-adapters` contract still accepts the + published-defect answers of 2.11.1 to 2.11.5. 2.11.7 no longer gives + them, so a later change can make that contract exact. diff --git a/docs/rust-server-port.md b/docs/rust-server-port.md index 63cd604eb..7a10f8229 100644 --- a/docs/rust-server-port.md +++ b/docs/rust-server-port.md @@ -44,6 +44,9 @@ Updated October 27, 2026. and moved to published 2.11.5 (#815); the SQLite maintenance pause stays for `service-calls` only ([checkpoint](rust-server-port-checkpoints/2026-10-27-reference-2115.md)). + - The parity reference moves to published 2.11.7 (#863), with native's + v1 projection history bytes in Core's canonical unit (#770) + ([checkpoint](rust-server-port-checkpoints/2026-10-29-reference-2117.md)). - [#814](https://github.com/durable-workflow/server/pull/814): the shared fixtures accept published PHP's typed `429 long_poll_capacity_exhausted` poll refusal, and retry a locked Composer install after a transient diff --git a/scripts/conformance/server-parity.mjs b/scripts/conformance/server-parity.mjs index 72929465a..c12e7148c 100644 --- a/scripts/conformance/server-parity.mjs +++ b/scripts/conformance/server-parity.mjs @@ -44,7 +44,7 @@ Requires Node 20+ and PHP 8.3+ with the locked adapter installed. Each target must have its own isolated, already bootstrapped database. Set DW_PARITY_TOKEN for the HTTP target; it is never recorded. Use the same --prefix on all targets and a fresh database or prefix for a new run. --artifacts selects the exact -consumer tuple; the default is tests/Fixtures/ServerParityBaselines/php-2.11.5.json. +consumer tuple; the default is tests/Fixtures/ServerParityBaselines/php-2.11.7.json. Repeat --fixture PATH to record or compare an explicitly selected candidate set. --database-resource-limits accepts inspected memory_bytes and memory_swap_bytes as a JSON object; comparisons require equal effective @@ -81,7 +81,7 @@ try { } const record = { schema: 'durable-workflow.server-parity-record/v1', target: values.target, mode: values.mode, - runner_revision: values['runner-revision'], artifacts: json(values.artifacts ?? resolve(root, 'tests/Fixtures/ServerParityBaselines/php-2.11.5.json')), + runner_revision: values['runner-revision'], artifacts: json(values.artifacts ?? resolve(root, 'tests/Fixtures/ServerParityBaselines/php-2.11.7.json')), started_at: new Date().toISOString(), outcome: 'runner-blocked', fixture_hashes: hashes, cases: [], database_resource_limits: parseDatabaseResourceLimits(values['database-resource-limits']), }; diff --git a/scripts/conformance/server-parity/README.md b/scripts/conformance/server-parity/README.md index d3cdccf67..8714225e6 100644 --- a/scripts/conformance/server-parity/README.md +++ b/scripts/conformance/server-parity/README.md @@ -285,7 +285,7 @@ Docker kill and verifies exit code 137 before restarting the native process. For an adapter installed elsewhere, set `DW_PARITY_SDK_AUTOLOAD` to its locked `vendor/autoload.php`. `--artifacts` selects a frozen tuple manifest. The default -is `tests/Fixtures/ServerParityBaselines/php-2.11.5.json`; its SDK version must match +is `tests/Fixtures/ServerParityBaselines/php-2.11.7.json`; its SDK version must match the installed lock. A frozen tuple does not prove every listed consumer ran. The original `tests/Fixtures/ServerParity/php-baseline.json` remains an immutable 2.5.13 / Workflow 2.5.4 reference, together with its known NUL reproducer outside diff --git a/scripts/conformance/server-parity/native-image-corpus.sh b/scripts/conformance/server-parity/native-image-corpus.sh index 7a340f120..39b5d061e 100755 --- a/scripts/conformance/server-parity/native-image-corpus.sh +++ b/scripts/conformance/server-parity/native-image-corpus.sh @@ -27,7 +27,7 @@ scope="dw-parity-${GITHUB_RUN_ID:-local}-${GITHUB_RUN_ATTEMPT:-1}-${GITHUB_JOB:- export RESOURCE_SCOPE="$scope" export DW_PARITY_RUNNER_REVISION DW_PARITY_RUNNER_REVISION=$(git rev-parse HEAD) -image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) +image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) # CI's corpus selection: the reviewed corpus without service-calls, which # records separately below with PHP's maintenance loop stopped (Server #796), diff --git a/scripts/conformance/server-parity/role-profile.sh b/scripts/conformance/server-parity/role-profile.sh index 4e103df21..49d645546 100644 --- a/scripts/conformance/server-parity/role-profile.sh +++ b/scripts/conformance/server-parity/role-profile.sh @@ -8,7 +8,7 @@ test -n "$RESOURCE_SCOPE" scope_identity="$GITHUB_RUN_ID-$GITHUB_RUN_ATTEMPT-$GITHUB_JOB" case "$RESOURCE_SCOPE" in *"$scope_identity"*) ;; *) exit 2 ;; esac backend="$1" -image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) +image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) rust_image=mirror.gcr.io/library/rust@sha256:ba81bc3eaa4422af576c0262515d96b0111a628a6ccc2c86557cf55c9a4bbee0 fixture=tests/Fixtures/ServerParityProfiles/role-tokens/admission-role-tokens.json credentials=(-e DW_AUTH_TOKEN=parity-role-legacy -e DW_WORKER_TOKEN=parity-role-worker diff --git a/scripts/conformance/server-parity/update-validation-sqlite.sh b/scripts/conformance/server-parity/update-validation-sqlite.sh index 0129588bc..15dd65c22 100644 --- a/scripts/conformance/server-parity/update-validation-sqlite.sh +++ b/scripts/conformance/server-parity/update-validation-sqlite.sh @@ -37,7 +37,7 @@ name="${3:-update-validation}" [[ -n "$DW_PARITY_RUNNER_REVISION" ]] fixture="tests/Fixtures/ServerParity/$name.json" test -f "$fixture" -image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.5.json) +image=$(jq -r '.server.images["linux/amd64"] | sub("^durableworkflow/server@"; "ghcr.io/durable-workflow/server@")' tests/Fixtures/ServerParityBaselines/php-2.11.7.json) . scripts/conformance/server-parity/php-maintenance-window.sh prefix=parity-v1 diff --git a/tests/Fixtures/ServerParity/waterline-import.json b/tests/Fixtures/ServerParity/waterline-import.json index a2d26d162..1cf1d1061 100644 --- a/tests/Fixtures/ServerParity/waterline-import.json +++ b/tests/Fixtures/ServerParity/waterline-import.json @@ -4535,7 +4535,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 6, - "history_size_bytes": 5431, + "history_size_bytes": 4713, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -5604,7 +5604,7 @@ "task_problem_badge": null, "exception_count": 0, "history_event_count": 2, - "history_size_bytes": 2683, + "history_size_bytes": 2445, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -6696,7 +6696,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 6, - "history_size_bytes": 5425, + "history_size_bytes": 4707, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -7909,7 +7909,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 8, - "history_size_bytes": 6242, + "history_size_bytes": 5336, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -8955,7 +8955,7 @@ "task_problem_badge": null, "exception_count": 0, "history_event_count": 2, - "history_size_bytes": 1856, + "history_size_bytes": 1668, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", diff --git a/tests/Fixtures/ServerParityBaselines/php-2.11.7.json b/tests/Fixtures/ServerParityBaselines/php-2.11.7.json new file mode 100644 index 000000000..edb5bc564 --- /dev/null +++ b/tests/Fixtures/ServerParityBaselines/php-2.11.7.json @@ -0,0 +1,20 @@ +{ + "schema": "durable-workflow.server-port-artifacts/v1", + "server": { + "version": "2.11.7", + "source_commit": "f55f90e54a213872f1c164a1b22c082d859c18aa", + "images": { + "linux/amd64": "durableworkflow/server@sha256:be7c2288ff935396262d743590530b204fac11b76582e56a525cc81a8da840d3", + "linux/arm64": "durableworkflow/server@sha256:7dbc3db050fec05ea5cd10e07ac8399ecf3e285d593bca32979a2320f02a104f" + } + }, + "workflow": "2.15.7", + "sdk_php": "2.2.6", + "sdk_python": "2.5.0", + "sdk_rust": "3.4.1", + "cli": "2.2.0", + "waterline": "2.3.1", + "sample_app_commit": "4427a537e092f9d92c96d2a4867b9186e0e75ccd", + "capacity_suite": "1.9.0", + "performance_status": "not_measured" +} diff --git a/tests/Fixtures/ServerParityExpected/waterline-import-observation.json b/tests/Fixtures/ServerParityExpected/waterline-import-observation.json index d534a50d0..9b2f13d85 100644 --- a/tests/Fixtures/ServerParityExpected/waterline-import-observation.json +++ b/tests/Fixtures/ServerParityExpected/waterline-import-observation.json @@ -4419,7 +4419,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 6, - "history_size_bytes": 5431, + "history_size_bytes": 4713, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -5488,7 +5488,7 @@ "task_problem_badge": null, "exception_count": 0, "history_event_count": 2, - "history_size_bytes": 2683, + "history_size_bytes": 2445, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -6580,7 +6580,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 6, - "history_size_bytes": 5425, + "history_size_bytes": 4707, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -7793,7 +7793,7 @@ "task_problem_badge": null, "exception_count": 1, "history_event_count": 8, - "history_size_bytes": 6242, + "history_size_bytes": 5336, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", @@ -8839,7 +8839,7 @@ "task_problem_badge": null, "exception_count": 0, "history_event_count": 2, - "history_size_bytes": 1856, + "history_size_bytes": 1668, "history_fan_out": 0, "continue_as_new_recommended": false, "history_budget_pressure": "ok", diff --git a/tests/Unit/ServerParityImagePullTest.mjs b/tests/Unit/ServerParityImagePullTest.mjs index 357c0151f..aaaf5aa94 100644 --- a/tests/Unit/ServerParityImagePullTest.mjs +++ b/tests/Unit/ServerParityImagePullTest.mjs @@ -32,7 +32,7 @@ test('each container-heavy fixture job pulls its pinned images first, with retri const pull = steps[1]; assert.match(pull, /- name: Pull the pinned images, retrying registry errors\n/, name); assert.match(pull, /bash scripts\/ci\/pull-images\.sh \\\n/, name); - assert.match(pull, /"\$\(baseline php-2\.11\.5\)"/, name); + assert.match(pull, /"\$\(baseline php-2\.11\.7\)"/, name); for (const image of extra) assert.ok(pull.includes(image), `${name} pulls ${image}`); // Every Rust image the job runs is in its pull list, so a digest bump // cannot leave the pull behind. diff --git a/tests/Unit/ServerParityWaterlineImportContractTest.mjs b/tests/Unit/ServerParityWaterlineImportContractTest.mjs index 6a5786e75..fe1e7cd6b 100644 --- a/tests/Unit/ServerParityWaterlineImportContractTest.mjs +++ b/tests/Unit/ServerParityWaterlineImportContractTest.mjs @@ -4,7 +4,8 @@ import test from 'node:test'; import {checkWaterlineImport} from '../../scripts/conformance/server-parity/waterline-import-contract.mjs'; const fixture = JSON.parse(readFileSync(new URL('../Fixtures/ServerParity/waterline-import.json', import.meta.url))); -// The observation published Server 2.11.1 returned for this fixture. +// The observation published Server 2.11.7 returned for this fixture (2.11.1 +// returned the same answers with the pre-#770 history sizes). const recorded = JSON.parse(readFileSync( new URL('../Fixtures/ServerParityExpected/waterline-import-observation.json', import.meta.url))); const id = 'pr1-waterline-import'; @@ -15,7 +16,7 @@ const observation = (change = () => {}) => { }; const check = state => checkWaterlineImport(fixture, state, id); -test('the published 2.11.1 recording satisfies the contract', () => { +test('the published 2.11.7 recording satisfies the contract', () => { assert.deepStrictEqual(check(observation()), {scope: 'waterline_import'}); });