Repository navigation
Verify pending activities across SDK and application upgrades - #261
Merged
Merged
Conversation
|
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.



Change
Add the separate
scripts/sdk-activity-upgrades.shexperiment for pending remote activities across SDK and versioned application upgrades. It runs all nine PHP/Python/Rust workflow/activity directions plus nine fresh current-package controls, using ordinary published packages and the existing isolated Sample App runtime.The shared package-build/replacement mechanics remain in the timer runner; a small Compose overlay selects dedicated workers and the activity observer. Existing timer commands retain their scenarios. Both package generations build before admission. Previous workers register only workflows, so each old activity is proven unstarted before the workers are killed and replaced. Current workers execute the original work once, and fresh controls exercise the changed version branch and policy.
Acceptance
Related work: durable-workflow/.github#122. The other audit gaps remain open. No SDK, Server, runtime package, frozen cohort, schema or product capability change is included.
Current evidence
The first published-package run 39270293205 is FAILED at its pending checkpoint before replacement. Both SDK generations build, all six installed identities match, the old roster is correct, and later diagnostic reads show all nine original runs waiting with no ActivityStarted event. The failing observation did not retain its exact earlier describe status; no Server/SDK defect or broader cause is established. Cleanup removes the whole project and all seven built consumer images.
Source review exposes a read-order weakness: describe and history are separate reads, so the former may precede the scheduling transaction seen by the latter. A two-read constructed counterfactual fails the prior observer; the correction waits for both waiting status and scheduled history inside the unchanged twenty-second bound, and still immediately refuses any early activity execution. Original assertions, package tuple and budgets are preserved. The failed first run remains failed; a fresh run is required.
The final local source suite passes 189 tests, including twelve observer/roster controls, two actual shell-runner controls and the two read-order cases. PHP syntax passes. Initial local no-exec temporary-directory failures remain separate from the corrected environment. These source controls do not establish the eighteen actual package outcomes.
Sonar's first analysis reports a PHP include finding and cognitive complexity 54/15 in the observer dispatcher. The follow-up uses require_once and separates readiness, observation, start and verification phases, with extra wrong-role/package/duplicate-roster controls. Exact current head
bbad946c25f4e8385c028f6bfff06bf134ab39bd/ whole5201671738564a08884de4a6b3eeae2d948c64d1now passes Sonar39271735932, with gate OK, ignored conditions false and 0.0% new duplication. Both original issue changelogs explicitly record CLOSED/FIXED at14:45:11. No profile, threshold, exclusion or manual issue disposition changes.Actual package component acceptance
The fresh run 39271735917, job118125517581, PASSES on its first admission and completes14:52:21UTC. Its reviewed synthetic
8349f0cdhas the identical whole tree. Independent complete-log inspection confirms all six installed packages: PHP2.5.0→2.5.1, Python2.5.15→2.6.0, Rust3.5.4→3.5.5; old/current registered worker identities are disjoint and the exact old roster is retired.All nine directions complete their same pending originals with recorded version1/bounds1..1. All nine fresh controls select version2/bounds1..2 and the changed retry/total-timeout policy. The audit confirms eighteen distinct workflow/run/activity identities, eighteen exact typed results, one started attempt/activity completion/workflow completion each, original snapshots and the actual published Server2.9.4 digest. The driver also enforces full-prefix equality, Python definition binding and original completion budgets. The project/network and all seven built consumer images are removed at14:52:15. Reviewed raw logs are deleted after this report's readback.
All 23 candidate checks PASS, including the unchanged activity-recovery and timer profiles. Merged as
7c0d10ec85c38bbd50b3ad3c475b985f5acb0055; its whole tree5201671738564a08884de4a6b3eeae2d948c64d1is identical to reviewed headbbad946c25f4e8385c028f6bfff06bf134ab39bdand synthetic8349f0cdfe124e4f509621517b8dc9ba039adb95. The completed remote head is deleted.Independent main 39276068981 PASSES at15:20:44UTC. A separate complete-log review confirms all six installed packages, eighteen new original workflow/run/activity sets, all nine directions in both phases, eighteen exact typed results, original markers/policies and the distinct old/current rosters. All seven consumer images and the project/network are removed by the normal cleanup. The first review invocation received no stdin and produced no evidence; the corrected isolated reader explicitly verifies these actual records.
All20 independent main checks now PASS. The last timer run39276069008 has40 independently reviewed originals (PHP12/Python16/Rust12),34 completions/six cancellations, two definition refusals and one original terminal event each. Its execution log reports PASS at15:34:09UTC and cleanup removes all four consumer images and the project/network. GitHub's run/job/check summaries temporarily disagreed before converging to20/20; no rerun or budget change was made. The contemporaneous Actions/Pages/webhooks incident is not assigned as a cause of any historical product failure.
Guide durable-workflow/.github#205 is delivered at5b703874/wholecb539696, with all three exact candidate and three independent main checks PASS and public links verified. The broader audit122 remains open. This adds a runnable Sample command and conformance coverage; no SDK/package release or native/Cloud adoption is needed.