Skip to content

Preserve recorded activity input during dependency injection - #911

Merged
rmcdaniel merged 5 commits into
mainfrom
fix/910-activity-entry-arguments
Oct 23, 2026
Merged

rmcdaniel merged 5 commits into
mainfrom
fix/910-activity-entry-arguments

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

An activity changed from handle(int $amount) to handle(QuoteRequest $request) could complete with the DTO's default 0 even though its original recorded input was 7. Laravel inserted the DTO and displaced the recorded scalar into an unused extra argument.

This change checks dependency resolution before queued and local activity bodies run. Displacing recorded input now produces ActivityEntryArgumentsMismatchException; resolution exceptions also use the normal activity outcome path. Original input and identity, attempt fencing, authored retry policy and tracing remain intact. Legitimate injected services, defaults and variadics remain supported.

With configured retries, restoring a compatible implementation completes the same original activity with its original input. A terminal one-attempt failure retains the normal failed-run behavior; this does not reopen terminal runs or change retry defaults.

Validation completed locally:

  • Published Workflow 2.11.2 cold-process reproduction completes with the wrong value 0 from recorded [7], separately recorded in Do not silently discard recorded activity input during dependency injection #910.
  • Initial real-job tests: two expected binding failures and three passing compatibility controls on unchanged source.
  • Local-path extension: one expected body-entry failure and two uncaught dependency-resolution errors before its correction.
  • Corrected source: eleven focused queued/local/helper tests, 71 assertions, pass on PHP 8.5.12. The eight real-job tests also pass on PHP 8.4.27.
  • Full ECS passes across all 1,500 files with the unchanged repository rules and sequential execution. Normal hosted quality also passes; local PHPStan retries that exhausted their resource limits remain unsuccessful. The eight real-job controls pass on SQLite/PHP 8.4.27 and MySQL 8.0.46. The runtime candidate 45a6290 also passes normal hosted quality, tracing HTTP, MySQL and Sonar with zero OPEN/CONFIRMED PR issues; its last unit check was still running when release metadata advanced. Exact current-head checks and PostgreSQL/published-package acceptance remain pending.
  • An earlier full ECS invocation timed out at its default 300-second budget on PHP 8.5 with third-party reflection deprecations; it remains an unsuccessful check.

Refs #910 and durable-workflow/durable-workflow.github.io#363. The issue stays open until qualified publication and installed-consumer acceptance.

Current source is 912f3e7b790f7d420841739dd01d6513ee495016, whole tree b48b19574b13c369274d986158bf4511041566ca, preparing compatible patch 2.11.3. Its runtime/tests are unchanged from tested 45a6290; only Composer product-train and the changelog were added. No package is published yet.

The local MySQL database exited 0 without OOM and was removed with its private network after the eight controls passed. Source-only cleanup does not change the remaining publication/installed-consumer requirements.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 23, 2026 08:29
@rmcdaniel
rmcdaniel merged commit 71213ae into main Oct 23, 2026
23 checks passed
@rmcdaniel
rmcdaniel deleted the fix/910-activity-entry-arguments branch October 23, 2026 08:29
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