Skip to content

Explain cancellation cascades in workflow diagnostics - #38

Draft
rmcdaniel wants to merge 1 commit into
mainfrom
feat/cancellation-cascade-diagnostics
Draft

rmcdaniel wants to merge 1 commit into
mainfrom
feat/cancellation-cascade-diagnostics

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Customer outcome

Render the coherent cancellation cascade required by shared issue 136 in dw debug workflow, including exact historical run selection.

Changes

  • Show the original root request and cleanup deadline, each run's local identity, parent, delivery boundary, lifecycle and terminal cleanup outcome.
  • Show child policy outcomes, matching activity stop receipts and cleanup recovery grants in the same view. Preserve unknown callback state and independent cancellation budgets. Do not infer worker-loss cause from lease history.
  • Show incomplete or clipped evidence with Server findings. Distinguish unavailable runtime support, no cooperative request and unknown future schemas.
  • Keep JSON as the complete Server response, including unknown future fields. Escape caller-controlled console markup and strip terminal control characters from the new human section.
  • Document the candidate diagnostic contract. Existing Servers without these fields retain their current human output.

Qualification

Local PHP 8.3.35 tests run in an ephemeral Docker container as UID/GID 1000:1000:

  • Debug command selection: 11 tests / 66 assertions, no errors, failures or skips.
  • Complete CLI suite: 886 / 17231, no errors or failures, 1 existing skip and 11 existing PHPUnit deprecations.
  • Git whitespace checks pass.

The seven new command cases test the display contract, full JSON preservation, partial evidence, unknown callback state, independent/conflicting budgets, old/future Server compatibility and caller text safety. Their static display fixture is not a runtime qualification result.

Exact CLI head 933c554f8bffa2bf7d188ced712b69b20844ac2d passes all build gates: PHP 8.2–8.5, PHAR smoke, reproducible build, action policy and the final target gate. Every PHP cell passes 886 / 17231, with the existing optional live-Server smoke skip and 11 existing deprecations. Both independent PHAR rebuilds produce SHA-256 10dc922f9743bdf85da3a2aedc3b93ebd868ffd60518e88f103f173364dff5c6. Public boundary checks also pass. These are Source/build qualifications, not the connected or published mixed cascade.

Dependency and remaining gate

The reader consumes durable-workflow.cancellation-cascade/v1 from both debug endpoints. Server 291 implements that view at Server 70807856b416b8792099108712cdd031e2c66c89 with Native 88ea6e46499332427d0f9a439768ae0bf86e8702, qualified on SQLite, MySQL and PostgreSQL. This PR stays draft while embedded/service Waterline parity and the mixed Source/published customer proof are completed. Published artifacts and shared issue 136 remain unchanged.

@rmcdaniel

Copy link
Copy Markdown
Member Author

CLI cancellation cascade view qualified at the exact head

CLI 38, head 933c554f8bffa2bf7d188ced712b69b20844ac2d, passes the complete build and both public boundary checks. PHP 8.2, 8.3, 8.4 and 8.5 each pass 886 tests / 17231 assertions, without errors or failures. Each retains the existing optional live-Server smoke skip and 11 existing PHPUnit deprecations. PHAR smoke, reproducibility, action policy and final target gate all pass.

dw debug workflow now shows the original root budget, selected/historical run, per-run request and delivery boundary, phase and terminal cleanup outcome, child policy outcomes, matching callback stop receipts, and old/replacement cleanup grants together. Independent roots keep their own deadlines. Incomplete evidence and unknown callback state stay visible. A recovery grant does not assert a cause of worker loss. JSON preserves the entire Server response, including future fields and schemas. Caller text in the new human section cannot inject console markup or terminal control sequences.

The seven new display-contract cases execute without skips. Their static display fixture is not a runtime result. Local combined debug selection passes 11 / 66. Servers with no cascade fields keep their existing human output. Explicit unsupported runtime, no cooperative request and unknown schema each have a distinct presentation.

The two independent PHAR rebuilds produce SHA-256 10dc922f9743bdf85da3a2aedc3b93ebd868ffd60518e88f103f173364dff5c6. Exact build logs contain the test totals and reproducibility result. Downloaded build-log SHA-256 is 5331ebb82a3b9de3c20b74181819c12bc4f03fe01c5c1cd759254d0a11517205. Local debug JUnit SHA-256 is 7b3d0cae4e22fe4b7ede9c4fba9a7328b947aad79fdacc55e54d19f1abccdacd; full JUnit is 9267e5d6149d306ccd8ced14373e038ed5521d5bfb11f419454e8328bb7779e6.

This Source reader consumes the qualified Server 70807856b416b8792099108712cdd031e2c66c89 / Native 88ea6e46499332427d0f9a439768ae0bf86e8702 cascade contract. Connected CLI inspection remains to be exercised with the updated mixed Source case. Waterline embedded/service parity is the next implementation. All cancellation candidates stay drafts. No published artifact, default protocol or closure of shared issue 136 changes.

This branch has not been deployed

No deployments
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