From 01be603f6fff54efd5a9504c07429f257800c3cf Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sun, 26 Jul 2026 20:28:39 -0500 Subject: [PATCH 1/5] =?UTF-8?q?refactor!:=20rename=20client=20GraphQL=20pr?= =?UTF-8?q?otocol=20version=202=20=E2=86=92=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Never-released wire family; first public ship should be protocol v1, not v2. Constants, envelopes, compiler emit, client checks, fixtures, and docs only. Left unrelated versions alone (variableCodec v2, digest domain tags, package semver). --- distributed_cli/src/cli.rs | 2 +- .../src/client_compiler/graphql/arguments.rs | 2 +- .../src/client_compiler/manifest/mod.rs | 4 +- .../src/client_compiler/render/artifact.rs | 2 +- .../src/client_compiler/render/commands.rs | 2 +- .../src/client_compiler/render/project.rs | 4 +- distributed_cli/src/client_compiler/tests.rs | 4 +- distributed_cli/tests/cli_client.rs | 6 +-- distributed_cli/tests/cli_manifest.rs | 4 +- .../tests/fixtures/generated-commands.ts | 18 ++++----- .../tests/fixtures/generated-operation.ts | 4 +- .../fixtures/generated-scalar-operation.ts | 4 +- .../fixtures/runtime-bridge-operation.json | 4 +- js/README.md | 4 +- js/scripts/pack-smoke.mjs | 6 +-- js/src/protocol.ts | 2 +- .../replica/command-runtime/lib/inventory.ts | 8 ++-- js/src/replica/command-runtime/lib/util.ts | 2 +- js/src/replica/command-runtime/types.ts | 4 +- js/src/replica/commands/types.ts | 2 +- js/src/replica/commands/validate.ts | 2 +- js/src/replica/diagnostics/event-log.ts | 2 +- js/src/replica/diagnostics/types.ts | 2 +- js/src/replica/distributed-replica/helpers.ts | 2 +- .../replica/distributed-replica/hydration.ts | 8 ++-- .../distributed-replica/impl-diagnostics.ts | 2 +- .../impl-hydration-orchestrate.ts | 4 +- .../distributed-replica/impl-protocol.ts | 4 +- js/src/replica/distributed-replica/impl.ts | 4 +- js/src/replica/distributed-replica/types.ts | 4 +- js/src/replica/identity/codec.ts | 2 +- js/src/replica/operation-binding.ts | 6 +-- js/src/replica/persistence/state.ts | 4 +- js/src/replica/query-plan/filter.ts | 2 +- js/src/replica/types.ts | 6 +-- js/src/sveltekit/replica.ts | 2 +- js/tests/fixtures/adapter-conformance.mjs | 8 ++-- js/tests/replica-command-artifacts.test.mjs | 6 +-- js/tests/replica-command-runtime.test.mjs | 18 ++++----- js/tests/replica-diagnostics.test.mjs | 12 +++--- js/tests/replica-index-maintenance.test.mjs | 6 +-- js/tests/replica-persistence.test.mjs | 4 +- js/tests/replica-protocol.test.mjs | 10 ++--- js/tests/replica-result-observation.test.mjs | 10 ++--- js/tests/replica-scope-ssr.test.mjs | 8 ++-- js/tests/replica-trusted-presets.test.mjs | 4 +- js/tests/replica-variable-codec.test.mjs | 6 +-- js/tests/sveltekit-adapter.test.mjs | 2 +- js/type-tests/replica-operation-artifact.ts | 10 ++--- src/graphql/client_manifest/mod.rs | 4 +- src/graphql/client_manifest/tests.rs | 6 +-- src/graphql/engine/mod.rs | 2 +- src/graphql/engine/request.rs | 2 +- src/graphql/engine/tests.rs | 10 ++--- src/graphql/protocol/accumulator.rs | 12 +++--- src/graphql/protocol/mod.rs | 2 +- src/graphql/protocol/tests.rs | 6 +-- src/graphql/protocol/types.rs | 4 +- src/graphql/schema.rs | 4 +- .../ui/src/lib/generated/admin/commands.ts | 40 +++++++++---------- .../ui/src/lib/generated/admin/manifest.json | 4 +- .../admin/operations/admin-all-todos.ts | 2 +- .../ui/src/lib/generated/admin/protocol.ts | 8 ++-- .../ui/src/lib/generated/user/commands.ts | 36 ++++++++--------- .../ui/src/lib/generated/user/manifest.json | 4 +- .../generated/user/operations/blob-games.ts | 2 +- .../user/operations/chat-messages.ts | 2 +- .../lib/generated/user/operations/todos.ts | 2 +- .../ui/src/lib/generated/user/protocol.ts | 8 ++-- tests/graphql_query_protocol/main.rs | 2 +- tests/graphql_query_protocol_postgres/main.rs | 2 +- 71 files changed, 206 insertions(+), 206 deletions(-) diff --git a/distributed_cli/src/cli.rs b/distributed_cli/src/cli.rs index fa8535ae..22f2e511 100644 --- a/distributed_cli/src/cli.rs +++ b/distributed_cli/src/cli.rs @@ -1845,7 +1845,7 @@ mod tests { fn client_manifest_validator_accepts_only_current_version() { let manifest = serde_json::json!({ "manifest_version": DISTRIBUTED_CLIENT_MANIFEST_VERSION, - "protocol_version": 2, + "protocol_version": 1, "service_id": "orders", "schema_fingerprint": "sha256:schema", "protocol_fingerprint": "sha256:protocol", diff --git a/distributed_cli/src/client_compiler/graphql/arguments.rs b/distributed_cli/src/client_compiler/graphql/arguments.rs index 4db2671e..9daab786 100644 --- a/distributed_cli/src/client_compiler/graphql/arguments.rs +++ b/distributed_cli/src/client_compiler/graphql/arguments.rs @@ -9,7 +9,7 @@ pub(super) fn single_root_field<'a>( return Err(source_error( "client.operation.single_root", format!( - "causal protocol v2 requires exactly one query root; found {}", + "causal protocol v1 requires exactly one query root; found {}", fields.len() ), document, diff --git a/distributed_cli/src/client_compiler/manifest/mod.rs b/distributed_cli/src/client_compiler/manifest/mod.rs index a0b2ef55..c2fa3f2c 100644 --- a/distributed_cli/src/client_compiler/manifest/mod.rs +++ b/distributed_cli/src/client_compiler/manifest/mod.rs @@ -14,9 +14,9 @@ pub(crate) use roots::*; pub(crate) use util::{validate_hash, validate_nonempty}; const MANIFEST_VERSION: u64 = 7; -const PROTOCOL_VERSION: u64 = 2; +const PROTOCOL_VERSION: u64 = 1; const PROTOCOL_FINGERPRINT: &str = - "sha256:7631d15b16e327ff08d728e97ac5f90f5150d00774938e720bbbc6830b77e0cf"; + "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209"; pub(crate) use types::*; pub(crate) use util::{canonical_json_value, hash_bytes, validate_exact_operation_hash}; diff --git a/distributed_cli/src/client_compiler/render/artifact.rs b/distributed_cli/src/client_compiler/render/artifact.rs index 5e9a0fb2..98623050 100644 --- a/distributed_cli/src/client_compiler/render/artifact.rs +++ b/distributed_cli/src/client_compiler/render/artifact.rs @@ -254,7 +254,7 @@ pub(super) fn render_operation_artifact_json( variable_codec: &operation.variable_codec, roots: vec![artifact_root(operation)], protocol: ArtifactProtocol { - version: 2, + version: 1, schema_hash: &manifest.schema_fingerprint, surface: &manifest.surface, operation: &operation.query_hash, diff --git a/distributed_cli/src/client_compiler/render/commands.rs b/distributed_cli/src/client_compiler/render/commands.rs index a126f3e3..7babcef7 100644 --- a/distributed_cli/src/client_compiler/render/commands.rs +++ b/distributed_cli/src/client_compiler/render/commands.rs @@ -308,7 +308,7 @@ fn command_artifact_json( artifact.insert( "protocol".into(), serde_json::json!({ - "version": 2, + "version": 1, "schemaHash": manifest.schema_fingerprint, "protocolHash": manifest.protocol_fingerprint, "surface": &manifest.surface, diff --git a/distributed_cli/src/client_compiler/render/project.rs b/distributed_cli/src/client_compiler/render/project.rs index 56142035..faea68c6 100644 --- a/distributed_cli/src/client_compiler/render/project.rs +++ b/distributed_cli/src/client_compiler/render/project.rs @@ -125,7 +125,7 @@ fn render_protocol(manifest: &ClientManifest) -> Result JsonValue { pub(super) fn manifest() -> JsonValue { let mut value = json!({ "manifest_version": 7, - "protocol_version": 2, + "protocol_version": 1, "service_id": "todos-service", "surface": {"kind": "role", "name": "user"}, "schema_fingerprint": fingerprint("schema"), - "protocol_fingerprint": "sha256:7631d15b16e327ff08d728e97ac5f90f5150d00774938e720bbbc6830b77e0cf", + "protocol_fingerprint": "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209", "execution": { "max_depth": 8, "max_complexity": 500, diff --git a/distributed_cli/tests/cli_client.rs b/distributed_cli/tests/cli_client.rs index fad868c2..a8e06111 100644 --- a/distributed_cli/tests/cli_client.rs +++ b/distributed_cli/tests/cli_client.rs @@ -10,14 +10,14 @@ use std::process::{Command, Output}; const ROLE_MANIFEST: &str = r#"{ "manifest_version": 7, - "protocol_version": 2, + "protocol_version": 1, "service_id": "todos", "surface": { "kind": "role", "name": "user" }, - "schema_fingerprint": "sha256:0d721d983c42fb732e10e8a2d45f0ab06497fb77fcddb9c9305f779b86c086c9", - "protocol_fingerprint": "sha256:7631d15b16e327ff08d728e97ac5f90f5150d00774938e720bbbc6830b77e0cf", + "schema_fingerprint": "sha256:661af7d73145bf777d7da72d86116e9dfb0ed38f26041703021a85fa01820ecf", + "protocol_fingerprint": "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209", "execution": { "max_depth": 8, "max_complexity": 500, diff --git a/distributed_cli/tests/cli_manifest.rs b/distributed_cli/tests/cli_manifest.rs index 96e359de..b9e1253e 100644 --- a/distributed_cli/tests/cli_manifest.rs +++ b/distributed_cli/tests/cli_manifest.rs @@ -50,7 +50,7 @@ fn client_manifest_uses_service_surface_export() { let json = dctl(&["client-manifest"]); let manifest: serde_json::Value = serde_json::from_str(&json).unwrap(); assert_eq!(manifest["manifest_version"], 7); - assert_eq!(manifest["protocol_version"], 2); + assert_eq!(manifest["protocol_version"], 1); assert_eq!(manifest["service_id"], "orders"); assert_eq!(manifest["surface"]["kind"], "role"); assert_eq!(manifest["surface"]["name"], "user"); @@ -60,7 +60,7 @@ fn client_manifest_uses_service_surface_export() { ); assert_eq!( manifest["protocol_fingerprint"], - "sha256:7631d15b16e327ff08d728e97ac5f90f5150d00774938e720bbbc6830b77e0cf" + "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209" ); assert_eq!(manifest["models"][0]["id"], "OrderView"); assert_eq!(manifest["models"][0]["record_revisions"], true); diff --git a/distributed_cli/tests/fixtures/generated-commands.ts b/distributed_cli/tests/fixtures/generated-commands.ts index 0f6b0178..6624c57e 100644 --- a/distributed_cli/tests/fixtures/generated-commands.ts +++ b/distributed_cli/tests/fixtures/generated-commands.ts @@ -72,14 +72,14 @@ export const Command_importTodos: ReplicaCommandArtifact = { id: 'query:todos', document: 'query Todos($limit: Int!) { todos(limit: $limit) { id title } }', protocol: { - version: 2, + version: 1, schemaHash: \`sha256:\${'a'.repeat(64)}\`, surface: { kind: 'role', name: 'user' }, operation: 'query:todos', @@ -291,7 +291,7 @@ const operation = Object.freeze({ id: 'query:todos', document: 'query Todos { todos { id title } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:todos', @@ -346,7 +346,7 @@ replica.writeResult(operation, {}, { data: { todos: [{ id: 'todo-1', title: 'packed' }] }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash, cacheScope: 'scope:user', operation: operation.id, diff --git a/js/src/protocol.ts b/js/src/protocol.ts index e4b40ea3..e4eef2d0 100644 --- a/js/src/protocol.ts +++ b/js/src/protocol.ts @@ -8,7 +8,7 @@ */ /** The only Distributed GraphQL protocol version understood by this package. */ -export const DISTRIBUTED_PROTOCOL_VERSION = 2 as const; +export const DISTRIBUTED_PROTOCOL_VERSION = 1 as const; declare const opaqueDistributedString: unique symbol; declare const distributedDecimalString: unique symbol; diff --git a/js/src/replica/command-runtime/lib/inventory.ts b/js/src/replica/command-runtime/lib/inventory.ts index 2acab1eb..eae7da07 100644 --- a/js/src/replica/command-runtime/lib/inventory.ts +++ b/js/src/replica/command-runtime/lib/inventory.ts @@ -68,7 +68,7 @@ export function commandSurfaceContract( const commandPresets = new Map(); for (const artifact of artifacts) { if ( - artifact.protocol.version !== 2 || + artifact.protocol.version !== 1 || artifact.protocol.schemaHash !== protocol.schemaHash || artifact.protocol.protocolHash !== protocol.protocolHash || !sameSurface(artifact.protocol.surface, protocol.surface) || @@ -122,7 +122,7 @@ export function commandSurfaceContract( } } return Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: protocol.schemaHash, protocolHash: protocol.protocolHash, surface: cloneSurface(protocol.surface), @@ -145,7 +145,7 @@ export function commandStatusArtifact( !SHA256.test(value.operationHash) || value.protocol === null || typeof value.protocol !== 'object' || - value.protocol.version !== 2 || + value.protocol.version !== 1 || value.protocol.operation !== value.operationHash || value.protocol.schemaHash !== contract.schemaHash || value.protocol.protocolHash !== contract.protocolHash || @@ -167,7 +167,7 @@ export function commandStatusArtifact( document: value.document, operationHash: value.operationHash, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: contract.schemaHash, protocolHash: contract.protocolHash, surface: cloneSurface(contract.surface), diff --git a/js/src/replica/command-runtime/lib/util.ts b/js/src/replica/command-runtime/lib/util.ts index 3377a393..d65b7c82 100644 --- a/js/src/replica/command-runtime/lib/util.ts +++ b/js/src/replica/command-runtime/lib/util.ts @@ -21,7 +21,7 @@ export function normalizeRetries(value: number | undefined): number { export function cloneScope(scope: ReplicaAuthoritativeScope): ReplicaAuthoritativeScope { return Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: scope.schemaHash, cacheScope: scope.cacheScope }); diff --git a/js/src/replica/command-runtime/types.ts b/js/src/replica/command-runtime/types.ts index b0eccf68..c48fbcbb 100644 --- a/js/src/replica/command-runtime/types.ts +++ b/js/src/replica/command-runtime/types.ts @@ -31,7 +31,7 @@ import { } from './symbols.js'; export type ReplicaCommandSurfaceContract = Readonly<{ - protocolVersion: 2; + protocolVersion: 1; schemaHash: string; protocolHash: string; surface: ReplicaClientSurface; @@ -92,7 +92,7 @@ export type ReplicaCommandStatusArtifact = Readonly<{ document: string; operationHash: string; protocol: Readonly<{ - version: 2; + version: 1; schemaHash: string; protocolHash: string; surface: ReplicaClientSurface; diff --git a/js/src/replica/commands/types.ts b/js/src/replica/commands/types.ts index 1b6cd2e8..9dfa599d 100644 --- a/js/src/replica/commands/types.ts +++ b/js/src/replica/commands/types.ts @@ -164,7 +164,7 @@ export type ReplicaCommandArtifact = { readonly document: string; readonly operationHash: string; readonly protocol: { - readonly version: 2; + readonly version: 1; readonly schemaHash: string; readonly protocolHash: string; readonly surface: ReplicaClientSurface; diff --git a/js/src/replica/commands/validate.ts b/js/src/replica/commands/validate.ts index 4ba57c07..19438f93 100644 --- a/js/src/replica/commands/validate.ts +++ b/js/src/replica/commands/validate.ts @@ -41,7 +41,7 @@ export function validateArtifact( } nonempty(artifact.document, 'artifact.document'); hash(artifact.operationHash, 'artifact.operationHash'); - if (artifact.protocol.version !== 2) artifactInvalid('artifact.protocol.version'); + if (artifact.protocol.version !== 1) artifactInvalid('artifact.protocol.version'); hash(artifact.protocol.schemaHash, 'artifact.protocol.schemaHash'); hash(artifact.protocol.protocolHash, 'artifact.protocol.protocolHash'); validateClientSurface(artifact.protocol.surface, 'artifact.protocol.surface'); diff --git a/js/src/replica/diagnostics/event-log.ts b/js/src/replica/diagnostics/event-log.ts index c2a75731..cde6a12c 100644 --- a/js/src/replica/diagnostics/event-log.ts +++ b/js/src/replica/diagnostics/event-log.ts @@ -558,7 +558,7 @@ function validateScope(scope: ReplicaDiagnosticScopeInput): void { throw new TypeError('diagnostic scope generation must be an unsigned integer'); } if (scope.established) { - if (scope.protocolVersion !== 2 || !nonempty(scope.schemaHash)) { + if (scope.protocolVersion !== 1 || !nonempty(scope.schemaHash)) { throw new TypeError( 'established diagnostic scope requires protocol and schema hash' ); diff --git a/js/src/replica/diagnostics/types.ts b/js/src/replica/diagnostics/types.ts index 061438b8..bc63ccf4 100644 --- a/js/src/replica/diagnostics/types.ts +++ b/js/src/replica/diagnostics/types.ts @@ -72,7 +72,7 @@ export type ReplicaDiagnosticsOptions = Readonly<{ export type ReplicaDiagnosticScopeInput = Readonly<{ generation: number; established: boolean; - protocolVersion?: 2; + protocolVersion?: 1; schemaHash?: string; }>; diff --git a/js/src/replica/distributed-replica/helpers.ts b/js/src/replica/distributed-replica/helpers.ts index 4d4f3a16..c6b56e6e 100644 --- a/js/src/replica/distributed-replica/helpers.ts +++ b/js/src/replica/distributed-replica/helpers.ts @@ -521,7 +521,7 @@ export function validatedCommandAuthorityContract( if ( value === null || typeof value !== 'object' || - value.protocolVersion !== 2 || + value.protocolVersion !== 1 || typeof value.schemaHash !== 'string' || !SHA256.test(value.schemaHash) || typeof value.protocolHash !== 'string' || diff --git a/js/src/replica/distributed-replica/hydration.ts b/js/src/replica/distributed-replica/hydration.ts index 09d46372..23f10a2d 100644 --- a/js/src/replica/distributed-replica/hydration.ts +++ b/js/src/replica/distributed-replica/hydration.ts @@ -91,11 +91,11 @@ export function parseAuthoritativeScope( 'authoritativeScope', ['protocolVersion', 'schemaHash', 'cacheScope'] ); - if (scope.protocolVersion !== 2) { + if (scope.protocolVersion !== 1) { hydrationInvalid('authoritativeScope.protocolVersion'); } return Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: hydrationString( scope.schemaHash, 'authoritativeScope.schemaHash' @@ -208,11 +208,11 @@ export function parseReplicaHydration( 'state.scope', ['protocolVersion', 'schemaHash', 'cacheScope'] ); - if (scopeValue.protocolVersion !== 2) { + if (scopeValue.protocolVersion !== 1) { hydrationInvalid('state.scope.protocolVersion'); } const scope: ProtocolGeneration = Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: hydrationString( scopeValue.schemaHash, 'state.scope.schemaHash' diff --git a/js/src/replica/distributed-replica/impl-diagnostics.ts b/js/src/replica/distributed-replica/impl-diagnostics.ts index bedb2766..3ad4c94f 100644 --- a/js/src/replica/distributed-replica/impl-diagnostics.ts +++ b/js/src/replica/distributed-replica/impl-diagnostics.ts @@ -149,7 +149,7 @@ export function syncDiagnostics(host: DiagnosticsHost): void { : Object.freeze({ generation: host.getProtocolGenerationSequence(), established: true, - protocolVersion: 2 as const, + protocolVersion: 1 as const, schemaHash: scope.schemaHash }), records: Object.freeze(records), diff --git a/js/src/replica/distributed-replica/impl-hydration-orchestrate.ts b/js/src/replica/distributed-replica/impl-hydration-orchestrate.ts index c6d360a0..8a7ad7af 100644 --- a/js/src/replica/distributed-replica/impl-hydration-orchestrate.ts +++ b/js/src/replica/distributed-replica/impl-hydration-orchestrate.ts @@ -299,7 +299,7 @@ export function dehydrateReplica(host: HydrationHost): ReplicaDehydratedState { const state = Object.freeze({ version: 1 as const, scope: Object.freeze({ - protocolVersion: 2 as const, + protocolVersion: 1 as const, schemaHash: scope.schemaHash, cacheScope: scope.cacheScope }), @@ -427,7 +427,7 @@ export function hydrateReplica( host.setProtocolGeneration(parsed.scope); host.setArtifactBinding( Object.freeze({ - version: 2, + version: 1, schemaHash: parsed.scope.schemaHash, ...(binding?.surfaceIdentity !== undefined ? { surfaceIdentity: binding.surfaceIdentity } diff --git a/js/src/replica/distributed-replica/impl-protocol.ts b/js/src/replica/distributed-replica/impl-protocol.ts index ec50c4c4..2d230b82 100644 --- a/js/src/replica/distributed-replica/impl-protocol.ts +++ b/js/src/replica/distributed-replica/impl-protocol.ts @@ -101,7 +101,7 @@ export function validateProtocolBinding< if (binding === undefined) { protocolInvalid('extensions.distributed'); } - if (binding.version !== 2) { + if (binding.version !== 1) { throw new TypeError('replica artifact protocol version is unsupported'); } if (binding.schemaHash !== envelope.schemaHash) { @@ -123,7 +123,7 @@ export function stageProtocolGeneration( envelope: DistributedProtocolEnvelope ): ProtocolGeneration { const next: ProtocolGeneration = { - protocolVersion: 2, + protocolVersion: 1, cacheScope: envelope.cacheScope, schemaHash: envelope.schemaHash }; diff --git a/js/src/replica/distributed-replica/impl.ts b/js/src/replica/distributed-replica/impl.ts index 7de97633..b473fc9d 100644 --- a/js/src/replica/distributed-replica/impl.ts +++ b/js/src/replica/distributed-replica/impl.ts @@ -555,13 +555,13 @@ export class DistributedReplicaImpl implements DistributedReplicaApi { const binding = this.#artifactBinding; if (binding === undefined) { this.#artifactBinding = Object.freeze({ - version: 2, + version: 1, schemaHash: next.schemaHash, surfaceIdentity: next.surfaceIdentity, trustedPresets: next.trustedPresets }); } else if ( - binding.version !== 2 || + binding.version !== 1 || binding.schemaHash !== next.schemaHash || ( binding.surfaceIdentity !== undefined && diff --git a/js/src/replica/distributed-replica/types.ts b/js/src/replica/distributed-replica/types.ts index 0a8363b8..db59a184 100644 --- a/js/src/replica/distributed-replica/types.ts +++ b/js/src/replica/distributed-replica/types.ts @@ -34,7 +34,7 @@ export type LiveEntry = { }; export type ProtocolGeneration = { - protocolVersion: 2; + protocolVersion: 1; cacheScope: DistributedOpaqueString; schemaHash: string; }; @@ -101,7 +101,7 @@ export type RegisteredCommandAuthorityContract = { }; export type ReplicaArtifactBinding = { - version: 2; + version: 1; schemaHash: string; surfaceIdentity?: string; trustedPresets?: readonly ReplicaTrustedPresetDescriptor[]; diff --git a/js/src/replica/identity/codec.ts b/js/src/replica/identity/codec.ts index 755fa9a1..77a879bb 100644 --- a/js/src/replica/identity/codec.ts +++ b/js/src/replica/identity/codec.ts @@ -36,7 +36,7 @@ export function canonicalizeOperationVariables< validateReplicaOperationBinding(artifact); const codec = artifact.variableCodec; if (codec === undefined) { - throw new TypeError('protocol-v2 replica artifact requires variableCodec'); + throw new TypeError('protocol-v1 replica artifact requires variableCodec'); } const registry = validateVariableCodec(codec); diff --git a/js/src/replica/operation-binding.ts b/js/src/replica/operation-binding.ts index 27fa42da..a7ec9f87 100644 --- a/js/src/replica/operation-binding.ts +++ b/js/src/replica/operation-binding.ts @@ -7,7 +7,7 @@ import type { } from './types.js'; export type ValidatedReplicaOperationBinding = { - readonly version: 2; + readonly version: 1; readonly schemaHash: string; readonly operation: string; readonly surfaceIdentity: string; @@ -30,7 +30,7 @@ export function validateReplicaOperationBinding< const binding = artifact.protocol; if ( binding === undefined || - binding.version !== 2 || + binding.version !== 1 || typeof binding.schemaHash !== 'string' || binding.schemaHash.length === 0 || typeof binding.operation !== 'string' || @@ -40,7 +40,7 @@ export function validateReplicaOperationBinding< throw new TypeError('replica artifact protocol binding is invalid'); } if (artifact.variableCodec === undefined) { - throw new TypeError('protocol-v2 replica artifact requires variableCodec'); + throw new TypeError('protocol-v1 replica artifact requires variableCodec'); } return Object.freeze({ version: binding.version, diff --git a/js/src/replica/persistence/state.ts b/js/src/replica/persistence/state.ts index 7c9ebce3..c51ef6f6 100644 --- a/js/src/replica/persistence/state.ts +++ b/js/src/replica/persistence/state.ts @@ -399,11 +399,11 @@ export function parseAuthoritativeScope(value: unknown): ReplicaAuthoritativeSco 'authoritative scope', ['protocolVersion', 'schemaHash', 'cacheScope'] ); - if (scope.protocolVersion !== 2) { + if (scope.protocolVersion !== 1) { throw new TypeError('unsupported authoritative protocol version'); } return Object.freeze({ - protocolVersion: 2 as const, + protocolVersion: 1 as const, schemaHash: nonEmptyString(scope.schemaHash, 'authoritative scope schemaHash'), cacheScope: nonEmptyString(scope.cacheScope, 'authoritative scope cacheScope') }); diff --git a/js/src/replica/query-plan/filter.ts b/js/src/replica/query-plan/filter.ts index 6730d241..69849ec5 100644 --- a/js/src/replica/query-plan/filter.ts +++ b/js/src/replica/query-plan/filter.ts @@ -657,7 +657,7 @@ export function validateComparableValues( } /** - * Protocol v2 orders strings by their unsigned UTF-8 bytes. The GraphQL SQL + * Protocol v1 orders strings by their unsigned UTF-8 bytes. The GraphQL SQL * compiler emits the matching binary collation for every textual ORDER BY, * making optimistic index maintenance identical on SQLite and PostgreSQL. */ diff --git a/js/src/replica/types.ts b/js/src/replica/types.ts index 05d2eae9..14672be9 100644 --- a/js/src/replica/types.ts +++ b/js/src/replica/types.ts @@ -513,7 +513,7 @@ export type ReplicaOperationSourceLocation = { }; export type ReplicaOperationProtocol = { - readonly version: 2; + readonly version: 1; /** Opaque service schema fingerprint, compared byte-for-byte. */ readonly schemaHash: string; readonly surface: ReplicaClientSurface; @@ -564,7 +564,7 @@ export type ReplicaWriteSource = 'network' | 'live' | 'ssr' | 'restore' | 'proje export type ReplicaResultEnvelope = { readonly data?: TData | null; readonly errors?: readonly GqlError[]; - /** Strictly parsed Distributed v2 response metadata. */ + /** Strictly parsed Distributed v1 response metadata. */ readonly extensions?: GraphqlResponseExtensions; }; @@ -690,7 +690,7 @@ export type DistributedReplicaOptions = { /** Server-issued authorization/cache namespace. Client-decoded claims never create one. */ export type ReplicaAuthoritativeScope = { - readonly protocolVersion: 2; + readonly protocolVersion: 1; readonly schemaHash: string; readonly cacheScope: string; }; diff --git a/js/src/sveltekit/replica.ts b/js/src/sveltekit/replica.ts index a62728ad..6078206a 100644 --- a/js/src/sveltekit/replica.ts +++ b/js/src/sveltekit/replica.ts @@ -814,7 +814,7 @@ function validatedHydrationAuthority( value?.version !== 1 || scope === null || typeof scope !== 'object' || - scope.protocolVersion !== 2 || + scope.protocolVersion !== 1 || typeof scope.schemaHash !== 'string' || scope.schemaHash.length === 0 || typeof scope.cacheScope !== 'string' || diff --git a/js/tests/fixtures/adapter-conformance.mjs b/js/tests/fixtures/adapter-conformance.mjs index a63a9f2f..962ebe01 100644 --- a/js/tests/fixtures/adapter-conformance.mjs +++ b/js/tests/fixtures/adapter-conformance.mjs @@ -24,7 +24,7 @@ const RequiredRevalidationCommand = Object.freeze({ 'mutation RevalidateTodos($commandId: ID!) { revalidateTodos(commandId: $commandId) }', operationHash: `sha256:${'b'.repeat(64)}`, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: REACT_FIXTURE_SCHEMA, protocolHash: `sha256:${'c'.repeat(64)}`, surface: REACT_FIXTURE_SURFACE, @@ -125,7 +125,7 @@ export const TodosArtifact = Object.freeze({ id: 'query:react-fixture-todos', document: 'query ReactFixtureTodos { todos { id title status } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: REACT_FIXTURE_SCHEMA, surface: REACT_FIXTURE_SURFACE, operation: 'query:react-fixture-todos', @@ -215,7 +215,7 @@ export const TodoByIdArtifact = Object.freeze({ document: 'query ReactFixtureTodoById($id: ID!) { todo(id: $id) { id title status } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: REACT_FIXTURE_SCHEMA, surface: REACT_FIXTURE_SURFACE, operation: 'query:react-fixture-todo-by-id', @@ -330,7 +330,7 @@ export function todoFrame( ...(errors === undefined ? {} : { errors }), extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: artifact.protocol.schemaHash, cacheScope, operation, diff --git a/js/tests/replica-command-artifacts.test.mjs b/js/tests/replica-command-artifacts.test.mjs index c57f299e..34b7a677 100644 --- a/js/tests/replica-command-artifacts.test.mjs +++ b/js/tests/replica-command-artifacts.test.mjs @@ -111,7 +111,7 @@ function baseArtifact(overrides = {}) { 'mutation Client_createTodo($commandId: ID!, $input: CreateTodoInput!) { createTodo(commandId: $commandId, input: $input) }', operationHash: HASH_A, protocol: { - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, surface: { kind: 'role', name: 'user' }, @@ -569,7 +569,7 @@ test('unknown generators/effects and unresolved trusted presets fail before opti prepareReplicaCommand( baseArtifact({ protocol: { - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, operation: HASH_A, @@ -588,7 +588,7 @@ test('unknown generators/effects and unresolved trusted presets fail before opti prepareReplicaCommand( baseArtifact({ protocol: { - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, surface: { kind: 'role', name: 'user' }, diff --git a/js/tests/replica-command-runtime.test.mjs b/js/tests/replica-command-runtime.test.mjs index 0ca48e06..2265fca4 100644 --- a/js/tests/replica-command-runtime.test.mjs +++ b/js/tests/replica-command-runtime.test.mjs @@ -21,7 +21,7 @@ const COMMAND_B = '018f47de-3d2a-7def-8def-0123456789ab'; const GENERATED_ID = '018f47de-3d2a-7123-8123-0123456789ab'; const SURFACE = Object.freeze({ kind: 'role', name: 'user' }); const SCOPE = Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_B, cacheScope: 'scope:user' }); @@ -33,7 +33,7 @@ const COMMAND_STATUS = Object.freeze({ document: STATUS_DOCUMENT, operationHash: HASH_D, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, surface: SURFACE, @@ -83,7 +83,7 @@ function artifact(overrides = {}) { 'mutation Client_createTodo($commandId: ID!, $input: TodoInput!) { createTodo(commandId: $commandId, input: $input) }', operationHash: HASH_A, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, surface: SURFACE, @@ -151,7 +151,7 @@ function commandEnvelope(commandId, options = {}) { status: options.status ?? 200, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_B, cacheScope: 'scope:user', operation: options.operation ?? HASH_A, @@ -201,7 +201,7 @@ function scopeQueryArtifact(options = {}) { ? 'query ClientScopeId { todos { id } }' : 'query ClientScope { todos { id title } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: HASH_B, surface: SURFACE, operation, @@ -250,7 +250,7 @@ function scopeSnapshotEnvelope(position, options = {}) { data: { todos: [] }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_B, cacheScope: 'scope:user', operation: options.operation ?? HASH_D, @@ -576,7 +576,7 @@ test('real replica authority gates commands on its server-issued scope inventory id: HASH_D, document: 'query ClientScope { __typename }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: HASH_B, surface: SURFACE, operation: HASH_D, @@ -663,7 +663,7 @@ test('real replica authority gates commands on its server-issued scope inventory { extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_B, cacheScope: 'scope:user', operation: HASH_D, @@ -688,7 +688,7 @@ test('real replica authority gates commands on its server-issued scope inventory data: { todos: [] }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_B, cacheScope: 'scope:user', operation: HASH_D, diff --git a/js/tests/replica-diagnostics.test.mjs b/js/tests/replica-diagnostics.test.mjs index 39655f9a..fc537483 100644 --- a/js/tests/replica-diagnostics.test.mjs +++ b/js/tests/replica-diagnostics.test.mjs @@ -24,7 +24,7 @@ const Todos = Object.freeze({ id: 'Todos.v1', document: 'query Todos { todos { id title } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: DIAGNOSTIC_SCHEMA_HASH, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'Todos.v1', @@ -101,7 +101,7 @@ function todosFrame(revision, data, errors = undefined) { ...(errors === undefined ? {} : { errors }), extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: DIAGNOSTIC_SCHEMA_HASH, cacheScope: 'scope:diagnostics-user', operation: Todos.id, @@ -139,7 +139,7 @@ const commandArtifact = Object.freeze({ document: 'mutation RenameTodo { renameTodo }', operationHash: `sha256:${'a'.repeat(64)}`, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: DIAGNOSTIC_SCHEMA_HASH, protocolHash: `sha256:${'c'.repeat(64)}`, surface: Object.freeze({ kind: 'role', name: 'user' }), @@ -243,7 +243,7 @@ test('default snapshots redact identities, arguments, field values, and scope ma scope: Object.freeze({ generation: 1, established: true, - protocolVersion: 2, + protocolVersion: 1, schemaHash: `sha256:${'d'.repeat(64)}` }), records: Object.freeze([ @@ -526,7 +526,7 @@ test('one diagnostics store receives both replica state and generated command ar inputs: Object.freeze({}) }), protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: commandArtifact.protocol.schemaHash, surface: commandArtifact.protocol.surface, operation: operationHash, @@ -685,7 +685,7 @@ test('event log is bounded and a scope generation change removes cross-scope sta scope: Object.freeze({ generation: 2, established: true, - protocolVersion: 2, + protocolVersion: 1, schemaHash: `sha256:${'e'.repeat(64)}` }) }) diff --git a/js/tests/replica-index-maintenance.test.mjs b/js/tests/replica-index-maintenance.test.mjs index 36b06cbf..678233c0 100644 --- a/js/tests/replica-index-maintenance.test.mjs +++ b/js/tests/replica-index-maintenance.test.mjs @@ -207,7 +207,7 @@ function todoArtifact({ id, document: `query ${id} { ${responseKey}: todos { id } }`, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: `sha256:${'1'.repeat(64)}`, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: id, @@ -995,7 +995,7 @@ function relationshipArtifact( id, document: `query ${id} { board { cards { id } } }`, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: `sha256:${'1'.repeat(64)}`, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: id, @@ -1167,7 +1167,7 @@ test('aggregate snapshots invalidate from declared dependencies and registry cle id: 'TodoAggregate', document: 'query TodoAggregate { todos_aggregate { aggregate { count } } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: `sha256:${'1'.repeat(64)}`, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'TodoAggregate', diff --git a/js/tests/replica-persistence.test.mjs b/js/tests/replica-persistence.test.mjs index 491a7edd..b6f84470 100644 --- a/js/tests/replica-persistence.test.mjs +++ b/js/tests/replica-persistence.test.mjs @@ -44,7 +44,7 @@ const TodoPolicy = Object.freeze({ function scope(cacheScope = 'cache:tenant-a', schemaHash = 'schema:a') { return { - protocolVersion: 2, + protocolVersion: 1, schemaHash, cacheScope }; @@ -298,7 +298,7 @@ test('restored trusted presets satisfy the generated command authority contract' assert.equal(replica.hydrate(restored, authoritativeScope), true); const registration = replica[replicaCommandAuthority]({ - protocolVersion: 2, + protocolVersion: 1, schemaHash, protocolHash: `sha256:${'b'.repeat(64)}`, surface: { kind: 'role', name: 'user' }, diff --git a/js/tests/replica-protocol.test.mjs b/js/tests/replica-protocol.test.mjs index f3d4979d..b6b9ba9b 100644 --- a/js/tests/replica-protocol.test.mjs +++ b/js/tests/replica-protocol.test.mjs @@ -31,7 +31,7 @@ const Todos = Object.freeze({ id: 'query:todos', document: 'query Todos { todos { id title } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: 'schema-a', surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:todos', @@ -81,7 +81,7 @@ const TodosOtherOperation = Object.freeze({ ...Todos, id: 'query:todos-other', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: 'schema-a', surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:todos-other', @@ -190,7 +190,7 @@ const GamesWithOwner = Object.freeze({ id: 'query:games-with-owner', document: 'query GamesWithOwner { games { id owner_id owner { id name } } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: 'schema-a', surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:games-with-owner', @@ -1137,7 +1137,7 @@ test('snapshot-only nested records do not invalidate exact membership', () => { ]); }); -test('v2 replica ingress rejects tampered decimals before exposing data', () => { +test('v1 replica ingress rejects tampered decimals before exposing data', () => { const replica = createDistributedReplica(); const tampered = wireFrame(); tampered.extensions.distributed.snapshot.indexes[0].position = 1; @@ -1833,7 +1833,7 @@ test('scope and schema generations purge old state before accepting fresh eviden assert.equal(replica.read(Todos, {}).complete, false); }); -test('protocol-bound artifacts reject results without a v2 envelope', () => { +test('protocol-bound artifacts reject results without a v1 envelope', () => { const replica = createDistributedReplica(); assert.throws( () => diff --git a/js/tests/replica-result-observation.test.mjs b/js/tests/replica-result-observation.test.mjs index f97285ec..7346c09b 100644 --- a/js/tests/replica-result-observation.test.mjs +++ b/js/tests/replica-result-observation.test.mjs @@ -14,7 +14,7 @@ const Query = Object.freeze({ id: 'query:items', document: 'query Items { items { id value } }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: SCHEMA_HASH, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:items', @@ -74,7 +74,7 @@ function frame(revision, value, operation = Query.id) { data: { items: [{ id: 'item-1', value }] }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: SCHEMA_HASH, cacheScope: 'scope:user', operation, @@ -241,7 +241,7 @@ test('receipt-only protocol frames notify only after the authoritative scope com id: operationHash, document: 'query Scope { __typename }', protocol: Object.freeze({ - version: 2, + version: 1, schemaHash, surface: Object.freeze({ kind: 'role', name: 'user' }), operation: operationHash, @@ -271,7 +271,7 @@ test('receipt-only protocol frames notify only after the authoritative scope com { extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash, cacheScope: 'scope:user', operation: operationHash, @@ -291,7 +291,7 @@ test('receipt-only protocol frames notify only after the authoritative scope com { extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: `sha256:${'c'.repeat(64)}`, cacheScope: 'scope:forged', operation: operationHash, diff --git a/js/tests/replica-scope-ssr.test.mjs b/js/tests/replica-scope-ssr.test.mjs index a4ccf856..52bc2822 100644 --- a/js/tests/replica-scope-ssr.test.mjs +++ b/js/tests/replica-scope-ssr.test.mjs @@ -32,7 +32,7 @@ function operation(id, field = 'todos', schemaHash = 'schema-a') { id, document: `query ${id.replaceAll(':', '_')} { ${field} { id title } }`, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash, surface: USER_SURFACE, operation: id, @@ -152,7 +152,7 @@ function frame( data: { [field]: rows }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: artifact.protocol.schemaHash, cacheScope, operation: artifact.protocol.operation, @@ -195,7 +195,7 @@ test('only a server response establishes a scope and permits SSR dehydration', ( write(replica, Todos, [{ id: 'todo-1', title: 'one' }]); assert.deepEqual(replica.scope, { - protocolVersion: 2, + protocolVersion: 1, schemaHash: 'schema-a', cacheScope: 'cache:a' }); @@ -254,7 +254,7 @@ test('query artifacts independently bind exact scope-preset inventories', () => test('bound command authority is scope-derived, hydration-safe, and generation-fenced', () => { const contract = Object.freeze({ - protocolVersion: 2, + protocolVersion: 1, schemaHash: AUTH_SCHEMA_HASH, protocolHash: AUTH_PROTOCOL_HASH, surface: USER_SURFACE, diff --git a/js/tests/replica-trusted-presets.test.mjs b/js/tests/replica-trusted-presets.test.mjs index f45f52ce..88329f64 100644 --- a/js/tests/replica-trusted-presets.test.mjs +++ b/js/tests/replica-trusted-presets.test.mjs @@ -21,7 +21,7 @@ const COMMAND_ID = '018f47de-3d2a-7abc-8abc-0123456789ab'; function envelope(overrides = {}) { return { - protocolVersion: 2, + protocolVersion: 1, schemaHash: HASH_A, cacheScope: 'opaque:scope', ...overrides @@ -41,7 +41,7 @@ function presetArtifact(overrides = {}) { 'mutation Client_assignTodo($commandId: ID!) { assignTodo(commandId: $commandId) }', operationHash: HASH_A, protocol: { - version: 2, + version: 1, schemaHash: HASH_B, protocolHash: HASH_C, surface: { kind: 'role', name: 'user' }, diff --git a/js/tests/replica-variable-codec.test.mjs b/js/tests/replica-variable-codec.test.mjs index 9b3faf02..a3e6d9cb 100644 --- a/js/tests/replica-variable-codec.test.mjs +++ b/js/tests/replica-variable-codec.test.mjs @@ -164,7 +164,7 @@ const CodecArtifact = Object.freeze({ document: 'query CodecItems { items { id title } }', variableCodec, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: 'schema-one', surface: Object.freeze({ kind: 'role', name: 'user' }), operation: 'query:codec-items', @@ -255,7 +255,7 @@ function codecWireFrame(title = 'schema one') { data: { items: [{ id: 'item-1', title }] }, extensions: { distributed: { - protocolVersion: 2, + protocolVersion: 1, schemaHash: 'schema-one', cacheScope: 'cache:one', operation: CodecArtifact.id, @@ -738,7 +738,7 @@ test('protocol artifacts require a codec before binding, cache access, or transp ), () => replica.watch(missingCodec, singletonVariables) ]) { - assert.throws(useArtifact, /protocol-v2 replica artifact requires variableCodec/); + assert.throws(useArtifact, /protocol-v1 replica artifact requires variableCodec/); } await flushMicrotasks(); assert.equal(fetches.length, 0); diff --git a/js/tests/sveltekit-adapter.test.mjs b/js/tests/sveltekit-adapter.test.mjs index ccbc2415..16c8a5fb 100644 --- a/js/tests/sveltekit-adapter.test.mjs +++ b/js/tests/sveltekit-adapter.test.mjs @@ -399,7 +399,7 @@ test('Svelte composition shares one diagnostics sink with operations and generat 'mutation RenameTodo($commandId: ID!, $input: RenameTodoInput!) { renameTodo(commandId: $commandId, input: $input) }', operationHash, protocol: Object.freeze({ - version: 2, + version: 1, schemaHash: REACT_FIXTURE_SCHEMA, protocolHash: `sha256:${'c'.repeat(64)}`, surface: Object.freeze({ kind: 'role', name: 'user' }), diff --git a/js/type-tests/replica-operation-artifact.ts b/js/type-tests/replica-operation-artifact.ts index d732ac5f..7aa9ac2c 100644 --- a/js/type-tests/replica-operation-artifact.ts +++ b/js/type-tests/replica-operation-artifact.ts @@ -17,7 +17,7 @@ type Variables = { }; const protocol = { - version: 2, + version: 1, schemaHash: 'schema:type-test', surface: { kind: 'role', @@ -29,7 +29,7 @@ const protocol = { // @ts-expect-error Generated protocol artifacts always name their client surface. export const protocolWithoutSurface: ReplicaOperationProtocol = { - version: 2, + version: 1, schemaHash: 'schema:type-test', operation: 'query:type-test', trustedPresets: [] @@ -37,7 +37,7 @@ export const protocolWithoutSurface: ReplicaOperationProtocol = { // @ts-expect-error Generated protocol artifacts always carry the exact preset union. export const protocolWithoutTrustedPresets: ReplicaOperationProtocol = { - version: 2, + version: 1, schemaHash: 'schema:type-test', surface: { kind: 'role', name: 'user' }, operation: 'query:type-test' @@ -72,14 +72,14 @@ export const protocolArtifact: ReplicaProtocolOperationArtifact export const protocolArtifactViaUnion: ReplicaOperationArtifact = protocolArtifact; -// @ts-expect-error Artifacts without protocol-v2 binding are unsupported. +// @ts-expect-error Artifacts without protocol-v1 binding are unsupported. export const unboundArtifact: ReplicaOperationArtifact = { id: 'unbound:type-test', document: 'query TypeTest { items { id } }', roots: [] }; -// @ts-expect-error Protocol-v2 artifacts must include their variable codec. +// @ts-expect-error Protocol-v1 artifacts must include their variable codec. export const protocolWithoutCodec: ReplicaOperationArtifact = { id: protocol.operation, document: 'query TypeTest($id: ID!) { items(id: $id) { id } }', diff --git a/src/graphql/client_manifest/mod.rs b/src/graphql/client_manifest/mod.rs index 1b95f035..724995d7 100644 --- a/src/graphql/client_manifest/mod.rs +++ b/src/graphql/client_manifest/mod.rs @@ -69,8 +69,8 @@ pub use types::{ pub(crate) use validation::trusted_preset_descriptors; pub const DISTRIBUTED_CLIENT_MANIFEST_VERSION: u32 = 7; -pub const DISTRIBUTED_CLIENT_PROTOCOL_VERSION: u32 = 2; -// Protocol v2 remains the wire family. The independent fingerprint below +pub const DISTRIBUTED_CLIENT_PROTOCOL_VERSION: u32 = 1; +// Protocol v1 is the first public wire family. The independent fingerprint below // changes when its generated command/scope contract changes, including the v7 // trusted-preset descriptor slot. const DISTRIBUTED_CLIENT_PROTOCOL_MANIFEST_EPOCH: u32 = 6; diff --git a/src/graphql/client_manifest/tests.rs b/src/graphql/client_manifest/tests.rs index ba69b018..db13bda7 100644 --- a/src/graphql/client_manifest/tests.rs +++ b/src/graphql/client_manifest/tests.rs @@ -563,11 +563,11 @@ fn role_manifest_is_deterministic_and_hides_denied_identity_and_commands() { assert_eq!(first.schema_fingerprint, second.schema_fingerprint); assert_eq!( first.schema_fingerprint, - "sha256:d73aafab6e4f2ec095387a8a0617488efd69d4fa157a6a87615e3d7e18b57966" + "sha256:40dd42e715a43b136ba9ef3c2857652d9682bb92aeed37c2f0ae542353e95099" ); assert_eq!( first.protocol_fingerprint, - "sha256:7631d15b16e327ff08d728e97ac5f90f5150d00774938e720bbbc6830b77e0cf" + "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209" ); let user = first @@ -720,7 +720,7 @@ fn filter_execution_limits_are_schema_fingerprinted_without_changing_protocol_ep bool_manifest.schema_fingerprint, in_manifest.schema_fingerprint ); - assert_eq!(baseline.protocol_version, 2); + assert_eq!(baseline.protocol_version, 1); assert_eq!( baseline.protocol_fingerprint, bool_manifest.protocol_fingerprint diff --git a/src/graphql/engine/mod.rs b/src/graphql/engine/mod.rs index 8761b608..6489a9ad 100644 --- a/src/graphql/engine/mod.rs +++ b/src/graphql/engine/mod.rs @@ -36,7 +36,7 @@ use super::permissions::{ read, role_grants_from_model_role_perms, ModelPermissions, ReadPermission, }; use super::protocol::{ - DistributedEnvelopeV2, DistributedLiveCursor, DistributedTrustedPreset, OpaqueProtocolToken, + DistributedEnvelopeV1, DistributedLiveCursor, DistributedTrustedPreset, OpaqueProtocolToken, ProtocolResponseAccumulator, ProtocolTokenCodec, ProtocolTokenPurpose, RequestedLiveResume, MAX_LIVE_RESUME_CURSORS, }; diff --git a/src/graphql/engine/request.rs b/src/graphql/engine/request.rs index 2b441b0e..906f05e5 100644 --- a/src/graphql/engine/request.rs +++ b/src/graphql/engine/request.rs @@ -172,7 +172,7 @@ impl GraphqlEngine { .codec .issue(ProtocolTokenPurpose::CacheScope, &material) .map_err(|_| ())?; - let envelope = DistributedEnvelopeV2::new( + let envelope = DistributedEnvelopeV1::new( surface_info.schema_fingerprint.clone(), cache_scope, // Generated artifacts submit this exact document. Hashing its diff --git a/src/graphql/engine/tests.rs b/src/graphql/engine/tests.rs index 2cdea9d6..32b06f55 100644 --- a/src/graphql/engine/tests.rs +++ b/src/graphql/engine/tests.rs @@ -459,7 +459,7 @@ mod client_surface_parity_tests { let first = distributed_extension(&first); let second = distributed_extension(&second); assert_eq!(first, second); - assert_eq!(first["protocolVersion"], 2); + assert_eq!(first["protocolVersion"], 1); assert_eq!(first["schemaHash"], manifest.schema_fingerprint); assert_eq!( first["operation"], @@ -998,7 +998,7 @@ mod client_surface_parity_tests { } assert_eq!( manifest.schema_fingerprint, - "sha256:ab2e533efd19ce48b480deb8fd80895f631f43dd72d3d9b38823df8eb738110b" + "sha256:7a47a1453bce90449f84ef70b23eacbc5e8a41527d9a48549010d6a47df39060" ); } @@ -1576,21 +1576,21 @@ mod client_surface_parity_tests { #[cfg(feature = "sqlite")] const SQLITE_RESTRICTED_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:a142da405f0d5b4dd0f388f6158f6b70a0f7ade3f360cecccd14f07412abe331", + manifest: "sha256:61ad895a283eaf2383155af21245375db731ed8ec57793d1239602d23ded8699", static_sdl: "sha256:c94afb7de76b34c6e36b897643d9523afa8872fa480bf104d8f54f95ef73ea0a", runtime_sdl: "sha256:cf35a2fd5309ab6ca893b5820f4a5efdd9eef1df83013dbf6ac0ffdf63710e8e", }; #[cfg(feature = "sqlite")] const SQLITE_ADMIN_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:d4cb632b88d7c3779d0cb373858b8dfb5907cb31bbf64ea0f41f2b03f43b8dfa", + manifest: "sha256:2a561c5816097b3f416321b5e7224f1b5c22a8d59b02ed3f13b1037a3dfb106c", static_sdl: "sha256:8ffed8116b16792ab8f81940999489d73b51615eb863d32b1640446535913b89", runtime_sdl: "sha256:d94970d5e6ca8745ec97a286332f7cf1a372e47f5e8e10df10bd67fd779d54e1", }; #[cfg(feature = "postgres")] const POSTGRES_RESTRICTED_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:a142da405f0d5b4dd0f388f6158f6b70a0f7ade3f360cecccd14f07412abe331", + manifest: "sha256:61ad895a283eaf2383155af21245375db731ed8ec57793d1239602d23ded8699", static_sdl: "sha256:c94afb7de76b34c6e36b897643d9523afa8872fa480bf104d8f54f95ef73ea0a", runtime_sdl: "sha256:cf35a2fd5309ab6ca893b5820f4a5efdd9eef1df83013dbf6ac0ffdf63710e8e", }; diff --git a/src/graphql/protocol/accumulator.rs b/src/graphql/protocol/accumulator.rs index dbb194c6..911d52b9 100644 --- a/src/graphql/protocol/accumulator.rs +++ b/src/graphql/protocol/accumulator.rs @@ -7,7 +7,7 @@ use serde::Serialize; use super::{ DistributedCommandConsistency, DistributedCommandMetadata, DistributedCommandState, - DistributedEnvelopeV2, DistributedLiveCursor, DistributedLiveMetadata, + DistributedEnvelopeV1, DistributedLiveCursor, DistributedLiveMetadata, DistributedProjectionExpectation, DistributedProjectionObservation, DistributedQuerySnapshot, DistributedRecordRevision, OpaqueProtocolToken, ProtocolTokenCodec, ProtocolTokenError, ProtocolTokenPurpose, RequestedLiveResume, @@ -40,18 +40,18 @@ pub(crate) struct ProtocolResponseAccumulator { #[derive(Debug)] struct ProtocolResponseState { - envelope: Mutex, + envelope: Mutex, query_snapshot_scope: Mutex>, requested_live_resume: Mutex, /// `None` is one-shot HTTP execution. `Some` is a stream FIFO containing /// one immutable envelope per yielded GraphQL response. - stream_frames: Mutex>>, + stream_frames: Mutex>>, dispatch_claimed: Mutex, codec: ProtocolTokenCodec, } impl ProtocolResponseAccumulator { - pub(crate) fn new(envelope: DistributedEnvelopeV2, codec: ProtocolTokenCodec) -> Self { + pub(crate) fn new(envelope: DistributedEnvelopeV1, codec: ProtocolTokenCodec) -> Self { Self { inner: Arc::new(ProtocolResponseState { envelope: Mutex::new(envelope), @@ -428,7 +428,7 @@ impl ProtocolResponseAccumulator { fn with_envelope( &self, - operation: impl FnOnce(&DistributedEnvelopeV2) -> T, + operation: impl FnOnce(&DistributedEnvelopeV1) -> T, ) -> Result { self.inner .envelope @@ -654,7 +654,7 @@ impl ProtocolResponseAccumulator { Ok(()) } - pub(crate) fn snapshot(&self) -> Result { + pub(crate) fn snapshot(&self) -> Result { self.inner .envelope .lock() diff --git a/src/graphql/protocol/mod.rs b/src/graphql/protocol/mod.rs index 31656c77..08175117 100644 --- a/src/graphql/protocol/mod.rs +++ b/src/graphql/protocol/mod.rs @@ -18,7 +18,7 @@ pub(crate) use token::{ }; pub(crate) use types::{ DistributedCommandConsistency, DistributedCommandMetadata, DistributedCommandState, - DistributedEnvelopeV2, DistributedIndexRevision, DistributedLiveCursor, + DistributedEnvelopeV1, DistributedIndexRevision, DistributedLiveCursor, DistributedLiveMetadata, DistributedProjectionExpectation, DistributedProjectionObservation, DistributedQuerySnapshot, DistributedRecordRevision, DistributedTrustedPreset, RequestedLiveResume, diff --git a/src/graphql/protocol/tests.rs b/src/graphql/protocol/tests.rs index 03c67883..a520d5a9 100644 --- a/src/graphql/protocol/tests.rs +++ b/src/graphql/protocol/tests.rs @@ -210,7 +210,7 @@ fn accumulator(key: u8, cache_material: &str, schema: &str) -> ProtocolResponseA let cache_scope = codec .issue(ProtocolTokenPurpose::CacheScope, &cache_material) .unwrap(); - ProtocolResponseAccumulator::new(DistributedEnvelopeV2::new(schema, cache_scope, None), codec) + ProtocolResponseAccumulator::new(DistributedEnvelopeV1::new(schema, cache_scope, None), codec) } #[test] @@ -219,7 +219,7 @@ fn accumulator_is_idempotent_and_rejects_ambiguous_receipts() { .issue(ProtocolTokenPurpose::CacheScope, &("principal", "surface")) .unwrap(); let accumulator = ProtocolResponseAccumulator::new( - DistributedEnvelopeV2::new("sha256:schema", scope, Some("sha256:operation".into())), + DistributedEnvelopeV1::new("sha256:schema", scope, Some("sha256:operation".into())), codec(9), ); accumulator.claim_dispatch().unwrap(); @@ -236,7 +236,7 @@ fn accumulator_is_idempotent_and_rejects_ambiguous_receipts() { let envelope = accumulator.snapshot().unwrap(); let json = serde_json::to_value(envelope).unwrap(); - assert_eq!(json["protocolVersion"], 2); + assert_eq!(json["protocolVersion"], 1); assert_eq!(json["schemaHash"], "sha256:schema"); assert_eq!(json["operation"], "sha256:operation"); assert_eq!(json["command"]["commandId"], "cmd-1"); diff --git a/src/graphql/protocol/types.rs b/src/graphql/protocol/types.rs index c1425726..87ed92ae 100644 --- a/src/graphql/protocol/types.rs +++ b/src/graphql/protocol/types.rs @@ -176,7 +176,7 @@ pub(crate) struct DistributedTrustedPreset { /// Canonical contents of GraphQL's top-level `extensions.distributed`. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub(crate) struct DistributedEnvelopeV2 { +pub(crate) struct DistributedEnvelopeV1 { pub(crate) protocol_version: u32, pub(crate) schema_hash: String, pub(crate) cache_scope: OpaqueProtocolToken, @@ -192,7 +192,7 @@ pub(crate) struct DistributedEnvelopeV2 { pub(crate) trusted_presets: Vec, } -impl DistributedEnvelopeV2 { +impl DistributedEnvelopeV1 { pub(crate) fn new( schema_hash: impl Into, cache_scope: OpaqueProtocolToken, diff --git a/src/graphql/schema.rs b/src/graphql/schema.rs index e5008980..12e73ee3 100644 --- a/src/graphql/schema.rs +++ b/src/graphql/schema.rs @@ -1052,7 +1052,7 @@ mod causal_command_schema_tests { use super::*; use crate::graphql::command_contract::{CommandConsistency, CommandEffects}; use crate::graphql::protocol::{ - DistributedEnvelopeV2, ProtocolResponseAccumulator, ProtocolTokenCodec, + DistributedEnvelopeV1, ProtocolResponseAccumulator, ProtocolTokenCodec, ProtocolTokenPurpose, }; use crate::graphql::sdl::graphql_sdl_from_surface; @@ -1132,7 +1132,7 @@ mod causal_command_schema_tests { ) .expect("test cache scope should encode"); ProtocolResponseAccumulator::new( - DistributedEnvelopeV2::new("sha256:schema-unit-test", cache_scope, None), + DistributedEnvelopeV1::new("sha256:schema-unit-test", cache_scope, None), codec, ) } diff --git a/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts b/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts index 8bd04a66..d11f4e70 100644 --- a/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts +++ b/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts @@ -156,7 +156,7 @@ export const Command_blob_games_move: ReplicaCommandArtifact Date: Sun, 26 Jul 2026 20:37:14 -0500 Subject: [PATCH 2/5] fix: update postgres/cli fingerprint goldens for protocol v1 All-features and distributed_cli integration asserted stale schema fingerprints that include protocol_version in the hash input. --- distributed_cli/tests/cli_manifest.rs | 2 +- src/graphql/engine/tests.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/distributed_cli/tests/cli_manifest.rs b/distributed_cli/tests/cli_manifest.rs index b9e1253e..e491a213 100644 --- a/distributed_cli/tests/cli_manifest.rs +++ b/distributed_cli/tests/cli_manifest.rs @@ -56,7 +56,7 @@ fn client_manifest_uses_service_surface_export() { assert_eq!(manifest["surface"]["name"], "user"); assert_eq!( manifest["schema_fingerprint"], - "sha256:b99b09420301b8e837cc5c734bff9114ce3de9c02429e1d05add1dda0ca2bf58" + "sha256:726e0295565525870532f0de8180bef9f49cb94edf0f553288f7378fcf52a822" ); assert_eq!( manifest["protocol_fingerprint"], diff --git a/src/graphql/engine/tests.rs b/src/graphql/engine/tests.rs index 32b06f55..64502166 100644 --- a/src/graphql/engine/tests.rs +++ b/src/graphql/engine/tests.rs @@ -1133,7 +1133,7 @@ mod client_surface_parity_tests { assert_eq!(manifest.service_id, "orders-service"); assert_eq!( manifest.schema_fingerprint, - "sha256:9b2118ae9fc68ebdcaf0029452bb5e3f3448a6774963c99f2fb20718817a608a" + "sha256:03989d3af1e3b65c42f84adc0b1f87f0cce9ee65fbc1dad691649b14eda4d8db" ); } @@ -1597,7 +1597,7 @@ mod client_surface_parity_tests { #[cfg(feature = "postgres")] const POSTGRES_ADMIN_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:679e700c97004d6aeacb34595a10ddbf1b939b2d3fa8bb175aa63b8a78513016", + manifest: "sha256:5efb5ef587cbca8164c807c7f3e8c1c43787666a89ab02567ce7e76a82f45190", static_sdl: "sha256:5d3416d9926a5374ee95408c38e74bfd03b1b7ef4e2f7ee1f81752a102c4a989", runtime_sdl: "sha256:08e621d86f6606260e653c67d27899f9c93a2ac4545ec0741d78445981d3d46f", }; From 23840aaa95fd276ead98fd66456b986cddc63abb Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sun, 26 Jul 2026 20:55:17 -0500 Subject: [PATCH 3/5] refactor!: ship unreleased wire versions as v1 Normalize client manifest, variableCodec, command extension slots, and protocol-manifest epoch to 1 so the first public release does not imply prior public wire families. Refresh fingerprints, goldens, and fixtures. --- distributed_cli/src/cli.rs | 2 +- .../command_manifest/validation.rs | 4 ++-- .../client_compiler/command_manifest_tests.rs | 2 +- .../src/client_compiler/graphql/variables.rs | 2 +- .../src/client_compiler/manifest/mod.rs | 4 ++-- .../src/client_compiler/render/project.rs | 4 ++-- .../client_compiler/runtime_bridge_tests.rs | 2 +- distributed_cli/src/client_compiler/tests.rs | 22 +++++++++---------- distributed_cli/tests/cli_client.rs | 8 +++---- distributed_cli/tests/cli_manifest.rs | 4 ++-- .../tests/fixtures/generated-commands.ts | 12 +++++----- .../tests/fixtures/generated-operation.ts | 4 ++-- .../fixtures/generated-scalar-operation.ts | 4 ++-- .../fixtures/runtime-bridge-operation.json | 4 ++-- js/scripts/pack-smoke.mjs | 4 ++-- js/src/replica/identity/codec.ts | 2 +- js/src/replica/types.ts | 2 +- js/tests/fixtures/adapter-conformance.mjs | 4 ++-- js/tests/replica-command-runtime.test.mjs | 4 ++-- js/tests/replica-diagnostics.test.mjs | 4 ++-- js/tests/replica-index-maintenance.test.mjs | 4 ++-- js/tests/replica-protocol.test.mjs | 2 +- js/tests/replica-result-observation.test.mjs | 4 ++-- js/tests/replica-scope-ssr.test.mjs | 2 +- js/tests/replica-variable-codec.test.mjs | 8 +++---- js/type-tests/replica-operation-artifact.ts | 2 +- src/graphql/client_manifest/mod.rs | 9 ++++---- src/graphql/client_manifest/tests.rs | 6 ++--- src/graphql/engine/tests.rs | 10 ++++----- .../ui/src/lib/generated/admin/commands.ts | 20 ++++++++--------- .../ui/src/lib/generated/admin/manifest.json | 4 ++-- .../admin/operations/admin-all-todos.ts | 2 +- .../ui/src/lib/generated/admin/protocol.ts | 4 ++-- .../ui/src/lib/generated/user/commands.ts | 18 +++++++-------- .../ui/src/lib/generated/user/manifest.json | 4 ++-- .../generated/user/operations/blob-games.ts | 2 +- .../user/operations/chat-messages.ts | 2 +- .../lib/generated/user/operations/todos.ts | 2 +- .../ui/src/lib/generated/user/protocol.ts | 4 ++-- 39 files changed, 103 insertions(+), 104 deletions(-) diff --git a/distributed_cli/src/cli.rs b/distributed_cli/src/cli.rs index 22f2e511..6603746c 100644 --- a/distributed_cli/src/cli.rs +++ b/distributed_cli/src/cli.rs @@ -28,7 +28,7 @@ use crate::{ }; const DISTRIBUTED_MANIFEST_SCHEMA_VERSION: u64 = 1; -const DISTRIBUTED_CLIENT_MANIFEST_VERSION: u64 = 7; +const DISTRIBUTED_CLIENT_MANIFEST_VERSION: u64 = 1; #[derive(Args, Debug)] pub struct ServiceArgs { diff --git a/distributed_cli/src/client_compiler/command_manifest/validation.rs b/distributed_cli/src/client_compiler/command_manifest/validation.rs index 900fa8f6..293448b4 100644 --- a/distributed_cli/src/client_compiler/command_manifest/validation.rs +++ b/distributed_cli/src/client_compiler/command_manifest/validation.rs @@ -128,11 +128,11 @@ fn validate_command( validate_exact_operation_hash(&command.operation, &command.operation_hash, "command")?; let extensions = &command.extensions; - if extensions.version != 3 { + if extensions.version != 1 { return Err(command_error( command, "client.manifest.command_extensions", - "extensions.version must be 3", + "extensions.version must be 1", )); } let consistency = &extensions.consistency; diff --git a/distributed_cli/src/client_compiler/command_manifest_tests.rs b/distributed_cli/src/client_compiler/command_manifest_tests.rs index c4053da2..aa832485 100644 --- a/distributed_cli/src/client_compiler/command_manifest_tests.rs +++ b/distributed_cli/src/client_compiler/command_manifest_tests.rs @@ -163,7 +163,7 @@ fn command() -> ManifestCommand { operation: operation.into(), operation_hash: hash_bytes(operation.as_bytes()), extensions: ManifestCommandExtensions { - version: 3, + version: 1, consistency: ManifestCommandConsistency { version: 1, kind: ManifestConsistencyKind::Fact, diff --git a/distributed_cli/src/client_compiler/graphql/variables.rs b/distributed_cli/src/client_compiler/graphql/variables.rs index ca3c62b6..a04fd95a 100644 --- a/distributed_cli/src/client_compiler/graphql/variables.rs +++ b/distributed_cli/src/client_compiler/graphql/variables.rs @@ -159,7 +159,7 @@ pub(super) fn compile_variable_codec( compiled_variables.insert(variable.name.clone(), input_type); } Ok(CompiledVariableCodec { - version: 2, + version: 1, limits: CompiledVariableCodecLimits { max_depth: manifest.execution.max_depth, max_bool_width: manifest.execution.max_bool_width, diff --git a/distributed_cli/src/client_compiler/manifest/mod.rs b/distributed_cli/src/client_compiler/manifest/mod.rs index c2fa3f2c..b22f675d 100644 --- a/distributed_cli/src/client_compiler/manifest/mod.rs +++ b/distributed_cli/src/client_compiler/manifest/mod.rs @@ -13,10 +13,10 @@ pub(crate) use projectors::*; pub(crate) use roots::*; pub(crate) use util::{validate_hash, validate_nonempty}; -const MANIFEST_VERSION: u64 = 7; +const MANIFEST_VERSION: u64 = 1; const PROTOCOL_VERSION: u64 = 1; const PROTOCOL_FINGERPRINT: &str = - "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209"; + "sha256:30f19c9f4d29280a02ddf67c4df62cdc92c4e8090792f43d6b1bdafea3e31273"; pub(crate) use types::*; pub(crate) use util::{canonical_json_value, hash_bytes, validate_exact_operation_hash}; diff --git a/distributed_cli/src/client_compiler/render/project.rs b/distributed_cli/src/client_compiler/render/project.rs index faea68c6..feb27111 100644 --- a/distributed_cli/src/client_compiler/render/project.rs +++ b/distributed_cli/src/client_compiler/render/project.rs @@ -101,7 +101,7 @@ fn render_protocol(manifest: &ClientManifest) -> Result Result { let provenance = CompilerManifest { compiler_manifest_version: 1, - distributed_manifest_version: 7, + distributed_manifest_version: 1, protocol_version: 1, service_id: &manifest.service_id, surface: &manifest.surface, diff --git a/distributed_cli/src/client_compiler/runtime_bridge_tests.rs b/distributed_cli/src/client_compiler/runtime_bridge_tests.rs index 6c8fb1cf..751dbd5a 100644 --- a/distributed_cli/src/client_compiler/runtime_bridge_tests.rs +++ b/distributed_cli/src/client_compiler/runtime_bridge_tests.rs @@ -48,7 +48,7 @@ fn scalar_only_operation_module_is_byte_exact_and_needs_no_replica_value_import( let (manifest, operation) = compile_runtime_bridge_operation(); let module = render_operation_module(&operation, &manifest) .expect("render scalar-only operation module"); - assert_eq!( +assert_eq!( module, include_str!("../../tests/fixtures/generated-scalar-operation.ts"), "the strict TypeScript scalar-only fixture must remain exact Rust compiler output" diff --git a/distributed_cli/src/client_compiler/tests.rs b/distributed_cli/src/client_compiler/tests.rs index cb0e229b..109c99f8 100644 --- a/distributed_cli/src/client_compiler/tests.rs +++ b/distributed_cli/src/client_compiler/tests.rs @@ -264,12 +264,12 @@ fn aggregate_root() -> JsonValue { pub(super) fn manifest() -> JsonValue { let mut value = json!({ - "manifest_version": 7, + "manifest_version": 1, "protocol_version": 1, "service_id": "todos-service", "surface": {"kind": "role", "name": "user"}, "schema_fingerprint": fingerprint("schema"), - "protocol_fingerprint": "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209", + "protocol_fingerprint": "sha256:30f19c9f4d29280a02ddf67c4df62cdc92c4e8090792f43d6b1bdafea3e31273", "execution": { "max_depth": 8, "max_complexity": 500, @@ -484,7 +484,7 @@ fn projected_manifest() -> JsonValue { "operation": mutation, "operation_hash": fingerprint(mutation), "extensions": { - "version": 3, + "version": 1, "consistency": {"version": 1, "kind": "projected"}, "direct_projection": { "topology": { @@ -561,7 +561,7 @@ fn generated_command_types_manifest() -> JsonValue { "operation": import, "operation_hash": fingerprint(import), "extensions": { - "version": 3, + "version": 1, "consistency": {"version": 1, "kind": "accepted"} } }), @@ -588,7 +588,7 @@ fn generated_command_types_manifest() -> JsonValue { "operation": ping, "operation_hash": fingerprint(ping), "extensions": { - "version": 3, + "version": 1, "consistency": {"version": 1, "kind": "accepted"} } }), @@ -1332,12 +1332,12 @@ fn emits_executable_filter_order_and_pagination_plans_with_hidden_dependencies() assert!(generated.contains("type Operation_Planned_Input_todo_order_by_Direction =")); assert!(generated.contains("readonly \"order\"?: Operation_Planned_Input_todo_order_by | readonly Operation_Planned_Input_todo_order_by[] | null;")); assert!(generated.contains("\"variableCodec\": {")); - assert!(generated.contains("\"version\": 2")); + assert!(generated.contains("\"version\": 1")); assert!(generated.contains("\"maxBoolWidth\": 256")); assert!(generated.contains("\"maxInList\": 1000")); let provenance: JsonValue = serde_json::from_str(file(&project, "manifest.json")).expect("compiler manifest JSON"); - assert_eq!(provenance["distributed_manifest_version"], 7); + assert_eq!(provenance["distributed_manifest_version"], 1); assert!(generated.contains( "\"target\": {\n \"kind\": \"input\",\n \"name\": \"todo_bool_exp\"" )); @@ -1382,7 +1382,7 @@ fn generated_variable_codec_types_recursive_inputs_and_custom_scalars() { let artifact = operation_artifact(&project); assert_eq!(artifact["protocol"]["trustedPresets"], json!([])); - assert_eq!(artifact["variableCodec"]["version"], 2); + assert_eq!(artifact["variableCodec"]["version"], 1); assert_eq!( artifact["variableCodec"]["limits"], json!({ @@ -2420,7 +2420,7 @@ fn command_protocol_and_extensions_are_preserved_exactly() { "operation": mutation, "operation_hash": fingerprint(mutation), "extensions": { - "version": 3, + "version": 1, "consistency": {"version": 1, "kind": "fact"}, "input_defaults": { "version": 1, @@ -2559,7 +2559,7 @@ fn generated_command_typescript_covers_typed_json_fields_and_no_input_wrappers() )) .expect("compile generated command type fixture"); let commands = file(&project, "commands.ts"); - assert_eq!( +assert_eq!( commands, include_str!("../../tests/fixtures/generated-commands.ts") ); @@ -2732,7 +2732,7 @@ fn rejects_commands_without_causal_identity_or_normative_input_defaults() { "operation": operation, "operation_hash": fingerprint(operation), "extensions": { - "version": 3, + "version": 1, "consistency": {"version": 1, "kind": "projected"}, "input_defaults": { "version": 1, diff --git a/distributed_cli/tests/cli_client.rs b/distributed_cli/tests/cli_client.rs index a8e06111..bdb6ca58 100644 --- a/distributed_cli/tests/cli_client.rs +++ b/distributed_cli/tests/cli_client.rs @@ -1,5 +1,5 @@ //! Integration tests for `dctl client`: drive the real binary against a small -//! manifest-v7 project and verify generation, read-only drift checking, +//! manifest-v1 project and verify generation, read-only drift checking, //! authorization-surface selection, document discovery, and explicit `@load` //! route registration. @@ -9,15 +9,15 @@ use std::path::{Path, PathBuf}; use std::process::{Command, Output}; const ROLE_MANIFEST: &str = r#"{ - "manifest_version": 7, + "manifest_version": 1, "protocol_version": 1, "service_id": "todos", "surface": { "kind": "role", "name": "user" }, - "schema_fingerprint": "sha256:661af7d73145bf777d7da72d86116e9dfb0ed38f26041703021a85fa01820ecf", - "protocol_fingerprint": "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209", + "schema_fingerprint": "sha256:fc1d0cdb83cb42d07d9dfaf0944b24ea3e95b1dafc63ad320f9e93ffe2e3d9b9", + "protocol_fingerprint": "sha256:30f19c9f4d29280a02ddf67c4df62cdc92c4e8090792f43d6b1bdafea3e31273", "execution": { "max_depth": 8, "max_complexity": 500, diff --git a/distributed_cli/tests/cli_manifest.rs b/distributed_cli/tests/cli_manifest.rs index e491a213..1eb376bf 100644 --- a/distributed_cli/tests/cli_manifest.rs +++ b/distributed_cli/tests/cli_manifest.rs @@ -49,7 +49,7 @@ fn describe_emits_manifest_json() { fn client_manifest_uses_service_surface_export() { let json = dctl(&["client-manifest"]); let manifest: serde_json::Value = serde_json::from_str(&json).unwrap(); - assert_eq!(manifest["manifest_version"], 7); + assert_eq!(manifest["manifest_version"], 1); assert_eq!(manifest["protocol_version"], 1); assert_eq!(manifest["service_id"], "orders"); assert_eq!(manifest["surface"]["kind"], "role"); @@ -60,7 +60,7 @@ fn client_manifest_uses_service_surface_export() { ); assert_eq!( manifest["protocol_fingerprint"], - "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209" + "sha256:30f19c9f4d29280a02ddf67c4df62cdc92c4e8090792f43d6b1bdafea3e31273" ); assert_eq!(manifest["models"][0]["id"], "OrderView"); assert_eq!(manifest["models"][0]["record_revisions"], true); diff --git a/distributed_cli/tests/fixtures/generated-commands.ts b/distributed_cli/tests/fixtures/generated-commands.ts index 6624c57e..d027ed02 100644 --- a/distributed_cli/tests/fixtures/generated-commands.ts +++ b/distributed_cli/tests/fixtures/generated-commands.ts @@ -72,8 +72,8 @@ export const Command_importTodos: ReplicaCommandArtifact = { trustedPresets: [] }, variableCodec: { - version: 2, + version: 1, limits: { maxDepth: 8, maxBoolWidth: 32, maxInList: 64 }, variables: { limit: { @@ -298,7 +298,7 @@ const operation = Object.freeze({ trustedPresets: Object.freeze([]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, diff --git a/js/src/replica/identity/codec.ts b/js/src/replica/identity/codec.ts index 77a879bb..a6a7747f 100644 --- a/js/src/replica/identity/codec.ts +++ b/js/src/replica/identity/codec.ts @@ -80,7 +80,7 @@ export function validateVariableCodec(codec: ReplicaVariableCodecArtifact): Vari 'artifact.variableCodec', ['version', 'limits', 'variables', 'inputs'] ); - if (root.version !== 2) variableCodecInvalid('artifact.variableCodec.version'); + if (root.version !== 1) variableCodecInvalid('artifact.variableCodec.version'); const rawLimits = artifactRecord( root.limits, 'artifact.variableCodec.limits', diff --git a/js/src/replica/types.ts b/js/src/replica/types.ts index 14672be9..ffccfe77 100644 --- a/js/src/replica/types.ts +++ b/js/src/replica/types.ts @@ -195,7 +195,7 @@ export type ReplicaVariableCodecLimits = { /** Exact variable codec emitted beside a generated operation artifact. */ export type ReplicaVariableCodecArtifact = { - readonly version: 2; + readonly version: 1; readonly limits: ReplicaVariableCodecLimits; readonly variables: Readonly>; readonly inputs: Readonly>; diff --git a/js/tests/fixtures/adapter-conformance.mjs b/js/tests/fixtures/adapter-conformance.mjs index 962ebe01..79dd21e4 100644 --- a/js/tests/fixtures/adapter-conformance.mjs +++ b/js/tests/fixtures/adapter-conformance.mjs @@ -65,7 +65,7 @@ const RequiredRevalidationCommand = Object.freeze({ }); const NoVariables = Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 256, @@ -76,7 +76,7 @@ const NoVariables = Object.freeze({ }); const TodoByIdVariables = Object.freeze({ - version: 2, + version: 1, limits: NoVariables.limits, variables: Object.freeze({ id: Object.freeze({ diff --git a/js/tests/replica-command-runtime.test.mjs b/js/tests/replica-command-runtime.test.mjs index 2265fca4..ceebc896 100644 --- a/js/tests/replica-command-runtime.test.mjs +++ b/js/tests/replica-command-runtime.test.mjs @@ -210,7 +210,7 @@ function scopeQueryArtifact(options = {}) { ]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, @@ -585,7 +585,7 @@ test('real replica authority gates commands on its server-issued scope inventory ]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, diff --git a/js/tests/replica-diagnostics.test.mjs b/js/tests/replica-diagnostics.test.mjs index fc537483..7b19aeae 100644 --- a/js/tests/replica-diagnostics.test.mjs +++ b/js/tests/replica-diagnostics.test.mjs @@ -31,7 +31,7 @@ const Todos = Object.freeze({ trustedPresets: Object.freeze([]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, @@ -516,7 +516,7 @@ test('one diagnostics store receives both replica state and generated command ar id: operationHash, live: undefined, variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, diff --git a/js/tests/replica-index-maintenance.test.mjs b/js/tests/replica-index-maintenance.test.mjs index 678233c0..9d8e219a 100644 --- a/js/tests/replica-index-maintenance.test.mjs +++ b/js/tests/replica-index-maintenance.test.mjs @@ -146,7 +146,7 @@ const TODO_SELECTION = Object.freeze({ }); const VARIABLE_CODEC = Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 256, @@ -164,7 +164,7 @@ const VARIABLE_CODEC = Object.freeze({ }); const NO_VARIABLES = Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 256, diff --git a/js/tests/replica-protocol.test.mjs b/js/tests/replica-protocol.test.mjs index b6b9ba9b..940382b4 100644 --- a/js/tests/replica-protocol.test.mjs +++ b/js/tests/replica-protocol.test.mjs @@ -17,7 +17,7 @@ const Todo = Object.freeze({ }); const NoVariables = Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 256, diff --git a/js/tests/replica-result-observation.test.mjs b/js/tests/replica-result-observation.test.mjs index 7346c09b..8e9bf591 100644 --- a/js/tests/replica-result-observation.test.mjs +++ b/js/tests/replica-result-observation.test.mjs @@ -21,7 +21,7 @@ const Query = Object.freeze({ trustedPresets: Object.freeze([]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, @@ -248,7 +248,7 @@ test('receipt-only protocol frames notify only after the authoritative scope com trustedPresets: Object.freeze([]) }), variableCodec: Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 32, diff --git a/js/tests/replica-scope-ssr.test.mjs b/js/tests/replica-scope-ssr.test.mjs index 52bc2822..fc47a1d6 100644 --- a/js/tests/replica-scope-ssr.test.mjs +++ b/js/tests/replica-scope-ssr.test.mjs @@ -17,7 +17,7 @@ const Todo = Object.freeze({ }); const NoVariables = Object.freeze({ - version: 2, + version: 1, limits: Object.freeze({ maxDepth: 8, maxBoolWidth: 256, diff --git a/js/tests/replica-variable-codec.test.mjs b/js/tests/replica-variable-codec.test.mjs index a3e6d9cb..cf1d4573 100644 --- a/js/tests/replica-variable-codec.test.mjs +++ b/js/tests/replica-variable-codec.test.mjs @@ -15,7 +15,7 @@ const codecLimits = Object.freeze({ }); const variableCodec = Object.freeze({ - version: 2, + version: 1, limits: codecLimits, variables: Object.freeze({ big: Object.freeze({ @@ -593,7 +593,7 @@ test('per-variable maxItems applies after coercion while null skips it', () => { test('codec limits and per-variable constraints must be exact JS integers', () => { const invalidCodecs = [ - { ...variableCodec, version: 1 }, + { ...variableCodec, version: 2 }, { ...variableCodec, limits: { ...codecLimits, maxDepth: Number.MAX_SAFE_INTEGER + 1 } @@ -652,7 +652,7 @@ test('cyclic or incompatible codec artifacts fail without walking forever', () = const cyclicArtifact = { ...CodecArtifact, variableCodec: { - version: 2, + version: 1, limits: codecLimits, variables: { value: cyclicRef }, inputs: {} @@ -666,7 +666,7 @@ test('cyclic or incompatible codec artifacts fail without walking forever', () = const incompatibleArtifact = { ...CodecArtifact, variableCodec: { - version: 2, + version: 1, limits: codecLimits, variables: { where: { diff --git a/js/type-tests/replica-operation-artifact.ts b/js/type-tests/replica-operation-artifact.ts index 7aa9ac2c..52476370 100644 --- a/js/type-tests/replica-operation-artifact.ts +++ b/js/type-tests/replica-operation-artifact.ts @@ -44,7 +44,7 @@ export const protocolWithoutTrustedPresets: ReplicaOperationProtocol = { }; const variableCodec = { - version: 2, + version: 1, limits: { maxDepth: 16, maxBoolWidth: 32, diff --git a/src/graphql/client_manifest/mod.rs b/src/graphql/client_manifest/mod.rs index 724995d7..acd0cd0c 100644 --- a/src/graphql/client_manifest/mod.rs +++ b/src/graphql/client_manifest/mod.rs @@ -68,13 +68,12 @@ pub use types::{ }; pub(crate) use validation::trusted_preset_descriptors; -pub const DISTRIBUTED_CLIENT_MANIFEST_VERSION: u32 = 7; +pub const DISTRIBUTED_CLIENT_MANIFEST_VERSION: u32 = 1; pub const DISTRIBUTED_CLIENT_PROTOCOL_VERSION: u32 = 1; // Protocol v1 is the first public wire family. The independent fingerprint below -// changes when its generated command/scope contract changes, including the v7 -// trusted-preset descriptor slot. -const DISTRIBUTED_CLIENT_PROTOCOL_MANIFEST_EPOCH: u32 = 6; -const COMMAND_EXTENSION_SLOTS_VERSION: u32 = 3; +// changes when its generated command/scope contract changes, including trusted-preset descriptor slots. +const DISTRIBUTED_CLIENT_PROTOCOL_MANIFEST_EPOCH: u32 = 1; +const COMMAND_EXTENSION_SLOTS_VERSION: u32 = 1; const COMMAND_CONFIRMATIONS_VERSION: u32 = 1; const PROJECTOR_ENTRY_VERSION: u32 = 1; const PROTOCOL_OPERATIONS_VERSION: u32 = 1; diff --git a/src/graphql/client_manifest/tests.rs b/src/graphql/client_manifest/tests.rs index db13bda7..d2538cc6 100644 --- a/src/graphql/client_manifest/tests.rs +++ b/src/graphql/client_manifest/tests.rs @@ -559,15 +559,15 @@ fn role_manifest_is_deterministic_and_hides_denied_identity_and_commands() { let first = export.manifest().unwrap(); let second = export.manifest().unwrap(); assert_eq!(first, second); - assert_eq!(first.manifest_version, 7); + assert_eq!(first.manifest_version, 1); assert_eq!(first.schema_fingerprint, second.schema_fingerprint); assert_eq!( first.schema_fingerprint, - "sha256:40dd42e715a43b136ba9ef3c2857652d9682bb92aeed37c2f0ae542353e95099" + "sha256:62d5744879f473776824e00c101e5d323c27e37bd7a3ba610847cf0130861f93" ); assert_eq!( first.protocol_fingerprint, - "sha256:949e333655c4dea41520cb8fce13ae9ac76c97e5e879a82cff4fb9051a290209" + "sha256:30f19c9f4d29280a02ddf67c4df62cdc92c4e8090792f43d6b1bdafea3e31273" ); let user = first diff --git a/src/graphql/engine/tests.rs b/src/graphql/engine/tests.rs index 64502166..44a01137 100644 --- a/src/graphql/engine/tests.rs +++ b/src/graphql/engine/tests.rs @@ -998,7 +998,7 @@ mod client_surface_parity_tests { } assert_eq!( manifest.schema_fingerprint, - "sha256:7a47a1453bce90449f84ef70b23eacbc5e8a41527d9a48549010d6a47df39060" + "sha256:7ab469f12920ea4c954eab0419bb50ee4bca155f7644d4dea9e0dfda022b1670" ); } @@ -1576,28 +1576,28 @@ mod client_surface_parity_tests { #[cfg(feature = "sqlite")] const SQLITE_RESTRICTED_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:61ad895a283eaf2383155af21245375db731ed8ec57793d1239602d23ded8699", + manifest: "sha256:b5c798e166e4c20cd7108eadd2411821af17be41c8a53d334520c42f78e8d798", static_sdl: "sha256:c94afb7de76b34c6e36b897643d9523afa8872fa480bf104d8f54f95ef73ea0a", runtime_sdl: "sha256:cf35a2fd5309ab6ca893b5820f4a5efdd9eef1df83013dbf6ac0ffdf63710e8e", }; #[cfg(feature = "sqlite")] const SQLITE_ADMIN_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:2a561c5816097b3f416321b5e7224f1b5c22a8d59b02ed3f13b1037a3dfb106c", + manifest: "sha256:c9eb42301111a32613a83b9e54bbc0784ef21fd5e570f41b332a31f70f9a60f0", static_sdl: "sha256:8ffed8116b16792ab8f81940999489d73b51615eb863d32b1640446535913b89", runtime_sdl: "sha256:d94970d5e6ca8745ec97a286332f7cf1a372e47f5e8e10df10bd67fd779d54e1", }; #[cfg(feature = "postgres")] const POSTGRES_RESTRICTED_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:61ad895a283eaf2383155af21245375db731ed8ec57793d1239602d23ded8699", + manifest: "sha256:b5c798e166e4c20cd7108eadd2411821af17be41c8a53d334520c42f78e8d798", static_sdl: "sha256:c94afb7de76b34c6e36b897643d9523afa8872fa480bf104d8f54f95ef73ea0a", runtime_sdl: "sha256:cf35a2fd5309ab6ca893b5820f4a5efdd9eef1df83013dbf6ac0ffdf63710e8e", }; #[cfg(feature = "postgres")] const POSTGRES_ADMIN_GOLDENS: ArtifactGoldens = ArtifactGoldens { - manifest: "sha256:5efb5ef587cbca8164c807c7f3e8c1c43787666a89ab02567ce7e76a82f45190", + manifest: "sha256:a6f45829b5395026aaad73fe36c9f5c6e50cd196cdf1fc31d396be6332f82217", static_sdl: "sha256:5d3416d9926a5374ee95408c38e74bfd03b1b7ef4e2f7ee1f81752a102c4a989", runtime_sdl: "sha256:08e621d86f6606260e653c67d27899f9c93a2ac4545ec0741d78445981d3d46f", }; diff --git a/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts b/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts index d11f4e70..ca71f790 100644 --- a/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts +++ b/tests/e2e-ui/ui/src/lib/generated/admin/commands.ts @@ -156,7 +156,7 @@ export const Command_blob_games_move: ReplicaCommandArtifact Date: Sun, 26 Jul 2026 20:57:45 -0500 Subject: [PATCH 4/5] fix: update orders harness schema fingerprint for v1 wire versions Ignored distributed_cli integration test expected the pre-v1 schema fingerprint; regenerate to match manifest/epoch/slot version renames. --- distributed_cli/tests/cli_manifest.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distributed_cli/tests/cli_manifest.rs b/distributed_cli/tests/cli_manifest.rs index 1eb376bf..aa2a6416 100644 --- a/distributed_cli/tests/cli_manifest.rs +++ b/distributed_cli/tests/cli_manifest.rs @@ -56,7 +56,7 @@ fn client_manifest_uses_service_surface_export() { assert_eq!(manifest["surface"]["name"], "user"); assert_eq!( manifest["schema_fingerprint"], - "sha256:726e0295565525870532f0de8180bef9f49cb94edf0f553288f7378fcf52a822" + "sha256:31a54d18b0104283e3ec26cb7da37bfb2c31a3d8e37e96e8297e83059cf56aa4" ); assert_eq!( manifest["protocol_fingerprint"], From a0bcf5f38b3fc77f7cb9a449bf0696b23880118a Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sun, 26 Jul 2026 21:12:04 -0500 Subject: [PATCH 5/5] fix: update postgres role-surface schema fingerprint for v1 all-features client_surface_parity asserted a pre-v1 schema hash for the orders postgres role surface after wire version renames. --- src/graphql/engine/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphql/engine/tests.rs b/src/graphql/engine/tests.rs index 44a01137..016916b3 100644 --- a/src/graphql/engine/tests.rs +++ b/src/graphql/engine/tests.rs @@ -1133,7 +1133,7 @@ mod client_surface_parity_tests { assert_eq!(manifest.service_id, "orders-service"); assert_eq!( manifest.schema_fingerprint, - "sha256:03989d3af1e3b65c42f84adc0b1f87f0cce9ee65fbc1dad691649b14eda4d8db" + "sha256:03fa90383fc0b6aa6a53784cffb83f1fa0c1674c381f4ec175897ffec280ec8b" ); }