Skip to content

Qualify linked cancellation outcomes through actual Nexus workflows - #404

Merged
rmcdaniel merged 6 commits into
mainfrom
qualify-nexus-cooperative-service-outcomes
Oct 11, 2026
Merged

rmcdaniel merged 6 commits into
mainfrom
qualify-nexus-cooperative-service-outcomes

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 11, 2026 •

Copy link
Copy Markdown
Member

Linked cooperative cancellation outcomes

Continue durable-workflow/workflow#753 and the PHP/Python SDK #116 qualification after #394 and #403.

Run all four PHP/Python caller/service language directions in same and cross namespaces. The service first commits a durable timer. Outside workflow code, the installed SDK requests cooperative cancellation of that selected linked run with a 30-second cleanup deadline, then repeats the request with a different reason and shorter budget. Require the original identity, requested-at and deadline to remain unchanged.

The actual service application must observe WorkflowCancelled, with its request ID in the real worker log. Its history must contain one cooperative request, one delivery and one cancelled terminal outcome before the original deadline. The durable service call and waiting caller must converge to one cancelled delivery at the original call/run/sequence. Preserve all earlier successful and typed failure checks.

This qualifies linked workflow cancellation convergence. It does not qualify cancellation initiated by the caller run or the service-call cancel API, a global cancellation cascade, cleanup SIGKILL/replacement, external payloads or operator visibility. Those acceptance cases remain open. The separate full Nexus suite remains non-passing.

Frozen tuple is unchanged: published Server 2.5.22 / Workflow 2.5.11 (sha256:5e0d2dc34f6199f4b01b77874e046c173d9697499f647cc0e9ca543ea89bee7c), PHP SDK 2.3.0-rc.1, Python SDK 2.6.0rc2, CLI 2.2.3 and Waterline 2.9.1. No local product artifact substitution or native/shared rewrite changes.

All source gates pass on 5d20435d72ab3f2f589effdc4e11f2542400eec3, including actual published execution 38153153767 and feature 38153153787. All eight cancellation cases and the previous eight success and eight handled failure cases pass. Exact-head review finds no blocker. Normal main checks remain required after merge.

Both service workers explicitly advertise cooperative cancellation with protocol 1.20. The PHP CLI runtime is the frozen published Server image, supplying pcntl and posix, with SDK dependencies installed from Packagist. Both language runtime containers use UID/GID 1000. Earlier setup failures remain in their Actions artifacts. Discovery uses the existing shared fixture credential and therefore does not qualify worker-only authentication. PHP SDK #121/#122 own the observed worker-only discovery fix. Setup connections explicitly close across blocking Docker probes without retrying writes.

…tive-service-outcomes

# Conflicts:
#	.github/workflows/published-nexus-sdk-callers.yml
#	scripts/conformance/nexus-php-service-worker.php
#	scripts/conformance/nexus-php-workflow-probe.php
#	scripts/conformance/nexus-published-artifacts.sh
#	scripts/conformance/nexus-python-service-worker.py
#	scripts/conformance/nexus-python-workflow-probe.py
#	tests/Unit/NexusSdkCallerEvidenceTest.mjs
@rmcdaniel

Copy link
Copy Markdown
Member Author

For merge coordination with Rust-owned #401: its current candidate08deec205 incorporates #403 and is rerunning the required source gate plus all six runtime/retention configurations. Please sequence this nonurgent main merge after that qualification, or coordinate the next integration, to avoid restarting the full matrix for another base change. #404 qualification can continue independently; its PHP Nexus work and artifacts remain yours, and no native/shared changes are requested. Native Nexus is still unqualified and #401 retains its separate frozen workflow/activity tuple.

@rmcdaniel rmcdaniel left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head review of Server #404

Reviewed 5d20435d72ab3f2f589effdc4e11f2542400eec3 against current main #403. All normal source gates pass, including feature 38153153787 and actual published execution 38153153767.

The fixture starts real registry-installed PHP/Python workers, explicitly enabling cooperative cancellation with protocol 1.20. PHP uses the pinned published Server image for its required process extensions. Both language runtime containers run as UID/GID 1000. The existing shared fixture token supplies discovery and worker authentication. This does not qualify scoped worker credentials, whose observed PHP discovery failure belongs to SDK #121/#122.

Cancellation starts only after the linked service has committed its timer. Requests target its exact linked workflow and run. A duplicate with changed reason and shorter budget must retain the original request identity, requested-at and deadline. Typed application observation is required in actual worker logs, plus one canonical request, delivery and cancelled linked outcome before the original deadline.

The original service call and waiting caller must agree on one cancelled terminal delivery at the original caller/run/call/sequence. Caller code catches the typed error and completes the handled result. No claim that the caller run itself ends Cancelled, that caller-run/service-call API cancellation propagates cooperatively, or that cleanup survives SIGKILL.

API setup requests explicitly close their connections across blocking Docker probes. Reads retain their single recorded transport retry; writes are never retried. Existing successful and handled typed-failure cases pass alongside all eight cancellation cases. Useful raw observations and original failed setup cohorts are retained. The separate full Nexus suite stays non-passing.

No blocking finding. Merge is authorized. Verify normal main feature and actual published execution before delivery.

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 11, 2026 16:01
@rmcdaniel

Copy link
Copy Markdown
Member Author

Server #401 has merged as b5a6e8d1e478d43af5219c560ec392e6d17258aa, retaining its fully qualified candidate tree. Candidate source/all six runtime configurations and independent raw-retention/read checks pass; main follow-through is running. The sequencing request above is satisfied. Please use the current main base for #404's strict source gate; its PHP Nexus qualification remains independent. Native Nexus stays explicitly unqualified under #325. Deadline contract coordination is recorded in Workflow #761.

@rmcdaniel rmcdaniel left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head 45f3376, tree 5a809b394e0d14f1204855b037ae5f40afc5bca9, after integrating the merged Rust #401 main. The seven Nexus qualification files preserve the earlier reviewed implementation. No native or shared rewrite change is introduced by this PR.

All normal gates pass, including published execution 38153818637 and feature/source qualification 38153818639. The exact published tuple executes eight successes, eight handled typed failures and eight selected linked-run cooperative cancellations. Cancellation checks require actual handler observation, one request/delivery/terminal history, unchanged duplicate identity/deadline and one original caller call/sequence delivery. Reviewed role scope remains explicit: this fixture uses the shared credential, while PHP SDK #121/#122 owns real worker-only authentication.

No blocker found. Main checks remain required. Caller-run cancellation propagation, service-call cancellation propagation, cleanup SIGKILL/replacement, external payloads and operator visibility are still unqualified. The new independently reproduced execution-deadline defect is Workflow #761, with regression Server #405. The full Nexus suite remains non-passing.

@rmcdaniel
rmcdaniel merged commit b45b389 into main Oct 11, 2026
8 checks passed
@rmcdaniel
rmcdaniel deleted the qualify-nexus-cooperative-service-outcomes branch October 11, 2026 16:13
@rmcdaniel

Copy link
Copy Markdown
Member Author

Delivered in merge b45b38991ac55d0b0ffb9ae223973f9f7bbf68f7, preserving reviewed tree 5a809b394e0d14f1204855b037ae5f40afc5bca9. All source and main gates pass, including main actual published execution and feature qualification.

All eight PHP/Python caller/service combinations in same and cross namespaces observe genuine cooperative cancellation in the actual linked service handler. Duplicate requests retain the original request identity, requested-at and 30-second deadline. Each linked history records one request, delivery and WorkflowCancelled before that deadline. Each original service call delivers one cancelled outcome at its caller run/call/sequence. The caller catches its SDK exception and completes its handled result.

The tuple remains published Server 2.5.22 / Workflow 2.5.11 at index sha256:5e0d2dc34f6199f4b01b77874e046c173d9697499f647cc0e9ca543ea89bee7c, PHP 2.3.0-rc.1, Python 2.6.0rc2, CLI 2.2.3 and Waterline 2.9.1. The fixture uses its shared credential. Real worker-only authentication is separately tracked by PHP SDK #121.

This does not qualify caller-run/service-call API propagation, caller runs becoming Cancelled, cleanup SIGKILL/replacement, external payloads or operator visibility. Workflow #753 remains open. The independently reproduced deadline defect is Workflow #761 and Server #405. Merged remote head is deleted and verified absent.

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.

2 participants