Repository navigation
Serve client_compatibility and supported_sdk_versions from native (#1005) - #1007
Merged
Merged
Conversation
) Published PHP 2.11.8 advertises both in cluster info; native left them out and named them in native_unqualified. The CLI reads client_compatibility and skips every check while it is absent. Native now serves both from one table of its installed-qualified ranges (sdk-php >=3.8.1,<4.0.0; sdk-python >=2.13.0,<3.0.0; sdk-rust >=4.10.3,<5.0.0; cli >=2.0.0,<3.0.0), so they can never disagree. The client_compatibility block cites only the protocols native serves beside it: the auth composition contract, the control plane with its request contract, and worker protocol 1.20, read from the same values. It does not cite PHP's skew refusal matrix or external execution contracts, which native does not publish and the CLI would check. The cluster-capabilities fixture pins native's block and both implementations' ranges, with each native bound's qualification source. The contract also checks that each client's two ranges agree and that native cites only served protocols; unit tests reject native 3.0.5's missing block, a PHP-copied block, disagreeing ranges and an unknown implementation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Member
Author
|
Hosted checks are terminal at exact head
Requesting General's interim review (Security unavailable) and exact-head clearance. |
Member
Author
|
General interim review (Security unavailable): exact head It's one commit on main 5740417, 8 files.
Fixes #1005. For 3.1.0. Merge only this SHA. |
Member
Author
|
Merge readback for General's interim review.
|
This was referenced Nov 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Review tier B: a cluster-info advertisement plus its contract fixture. It changes no write path, auth or release machinery. The published CLI reads the block, so the values are reviewed exactly.
Fixes #1005. Target: 3.1.0. General decided the ranges and scope in lobby 7646.
Change
rust/src/runtime/cluster_info.rs: one table,CLIENT_RANGES, is the single source for bothsupported_sdk_versions(keyedphp/python/rust/cli, as PHP keys it) andclient_compatibility.clients. The ranges are installed-qualified against native:>=3.8.1,<4.0.0>=2.13.0,<3.0.0>=4.10.3,<5.0.0>=2.0.0,<3.0.0client_compatibilitykeeps PHP's schema and version (durable-workflow.v2.client-compatibility, 2), withauthority: "protocol_manifests"andfail_closed: true.required_protocolscite only what native serves beside the block:auth_composition(from the bundledauth_composition_contract),control_plane(version 2, header, and the identity of therequest_contractcluster info serves) andworker_protocol(1.20, header). Each identity is read from the value cluster info already serves, so they can't drift.worker_protocol.external_*contracts. Native publishes none of them, and the published CLI checks every protocol the block requires, so native doesn't cite them.requireslists only served members.rust/src/runtime/http.rs: cluster info serves both members, and they're removed fromnative_unqualified.Conformance:
ClientCompatibility::SUPPORTED_SDK_VERSIONS) and native's: a reviewednative_differences.client_rangeswith each bound's source, and a reviewednative_additions.native_client_compatibilitywith the exact block. The two old native exemptions are dropped.external_*, and that everyrequiresentry resolves.Docs: the port log entry is updated.
Evidence
Rust unit tests:
supported_sdk_versions_and_client_compatibility_never_disagree, andclient_compatibility_cites_only_protocols_native_serves(identities equal the served contracts; noexternal_; every requirement resolves).cluster_infopasses 5/5.Contract unit tests: 20/20. The new rejections are:
There's also a check that every native bound names its source.
Live server: a native server built from this head on loopback serves
client_compatibilityandsupported_sdk_versionsequal to the fixture's reviewed values. The cited auth, request contract and worker protocol identities equal the members cluster info serves, and neither member is innative_unqualified.Published CLI 2.3.3 (checksum-verified), against that server:
dw server:infoexits 0, anddw doctorreports "advertised protocol metadata look ready", with no compatibility warning.Integration:
activity_resultsnow asserts native's ranges instead of their absence. The cluster-related integration tests pass 3/3.🤖 Generated with Claude Code