Skip to content

Rust #325: move the Shared Server fixtures reference to published 2.11.5 - #815

Merged
rmcdaniel merged 3 commits into
mainfrom
rust-325-reference-2115
Oct 27, 2026
Merged

rmcdaniel merged 3 commits into
mainfrom
rust-325-reference-2115

Conversation

@rmcdaniel

Copy link
Copy Markdown
Member

Part of #325. Moves the fixture reference from published 2.11.4 to published Server 2.11.5 (Core 2.15.1). It also removes the SQLite maintenance-pause workaround, per the #726 handoff (#325 comment 6446634830).

Reference. Source 721b2831975cc898cc39d7528c5ba7e8441fe744. The index sha256:f4f2ec64… is identical on Hub and GHCR. Per-platform digests: amd64 sha256:bcc67285…, arm64 sha256:3160f4f5…, recorded in tests/Fixtures/ServerParityBaselines/php-2.11.5.json. SDK, CLI, Waterline and sample-app pins are unchanged. The API route table is identical to 2.11.4's (174 api/ routes, diffed from both images).

Commits

  1. Native: refuse an idempotency-key replay by anyone but the call's owner. Returns 403 service_operation_forbidden with no call or audit row, matching Core 2.15.1 (Workflow #931).
  2. Native: takeover refuses an open service call bound to a workflow run (upgrade_source_service_calls_workflow_bound_open).
  3. Reference move.

Checked locally (Rust dev host, SQLite, native-image-corpus.sh with a native image built from this branch):

  • First run. Native and embedded passed 73/73. Published 2.11.5 passed 71/73, including update-validation and service-calls with maintenance running. It failed only repair-pass (new counts) and bridge-adapters (start_other_type), which led to the two expectation changes above.
  • Second full run with a rebuilt image (runner revision 73d43c8c, the same tree as this head apart from docs and the takeover commit):
    • published 2.11.5, native and embedded each passed 73/73;
    • the three records compare equal.
  • Native and contract unit tests.
    • cargo test --lib: repair_pass 3/3, upgrade module 60/60 (including the new refusal test).
    • Service-calls execution tests: 8/8 on SQLite.
    • Contract unit tests for the changed fixtures: 65/65.

MySQL, MariaDB and PostgreSQL run in CI only.

Not in this PR: the canonical history-byte unit for v1 projections (#770) is prepared on rust-325-wip/canonical-history-bytes. It lands with the first reference carrying #812, because waterline-import records history_size_bytes from the reference.

🤖 Generated with Claude Code

rmcdaniel and others added 3 commits October 27, 2026 16:31
Core 2.15.1 (Workflow #931, #948) makes a service-call idempotency key
belong to the target operation, not to a caller: ServiceCallIdempotency
finds the first call under (target namespace, endpoint, service,
operation, trimmed key) whoever made it, and Server's execute path answers
403 service_operation_forbidden unless the request comes from that call's
owner, the same caller namespace, caller workflow instance and run, through
the same endpoint, service and operation rows. The refusal writes no call
or audit row and leaves the first call as it was.

Native found a prior call only for the same caller namespace, so another
caller reusing the key got a new call of its own, as published 2.11.1 did.
Published 2.11.3 and 2.11.4 replay the first call to the foreign caller and
rebind its handler identity, the defect #931 corrects; the shared fixture
leaves that step out until a release carries the correction.

Native now looks the key up by the stored catalog names and answers the
same 403 to anyone but the owner. Names are matched as stored, so an
upper-case path still replays the call. A taken-over PHP database's
idempotency_scope_hash is not read: native writes none, and for a PHP row
the names lookup finds the same first call.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Nexus workflow-bound handler binds a service call to a workflow run. PHP
closes the call when that run ends, and published 2.11.5's maintenance pass
repairs one it missed (Core 2.15's LinkedServiceCallCloser, reported as
service_call_linked_* in the repair pass). Native serves no workflow-bound
handler yet (Server #794) and closes no linked call, so an open one taken
over from PHP would stay open forever.

The service-call inspection now also counts open calls (pending, accepted
or started) whose resolved binding is workflow_run, without naming them.
Any makes the inspection unqualified, and takeover refuses with
upgrade_source_service_calls_workflow_bound_open before any change. Closed
workflow-bound calls and open calls of other bindings still take over. The
takeover runbook says how to clear them before the stop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The published PHP reference was Server 2.11.4 (Core 2.14.2). It is now
Server 2.11.5, Core 2.15.1: source 721b283,
index sha256:f4f2ec64… (identical on Docker Hub and GHCR), amd64
sha256:bcc67285… and arm64 sha256:3160f4f5…, as General verified them.
The SDK, CLI, Waterline and sample-app pins are unchanged, and the API route
table is identical to 2.11.4's.

- The SQLite job's maintenance pause is gone. 2.11.5 carries the #726
  update-validation lock fixes and #796 atomic service admission, so
  update-validation and service-calls record in the SQLite main corpus with
  PHP's maintenance loop running, as on MySQL and PostgreSQL.
  update-validation-sqlite.sh, php-maintenance-window.sh and their tests
  are removed; the native image corpus follows.
- service-calls restores "replay other caller": the key belongs to the
  operation (Workflow #931), so another caller namespace gets 403
  service_operation_forbidden. 91 requests.
- repair-pass expects Core 2.15's three linked service-call counts; native
  reports them as zeros, since it binds no call to a workflow run (#794).
- bridge-adapters bounds 2.11.5's intermediate #777 answer: Core checks the
  namespace first, but the 2.11.5 controller still echoes "cannot be reused
  with a different namespace" for both foreign starts. #811 answers the
  intended "unavailable", which stays the expectation.

Checked locally on SQLite with native-image-corpus.sh, a native image built
from this branch, published 2.11.5 and embedded 2.11.5: published 2.11.5,
native and embedded each pass all 73 cases, and the three records compare
equal. The contract unit tests for the changed fixtures pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant