Skip to content

Verify pending activities across SDK and application upgrades - #261

Merged
rmcdaniel merged 3 commits into
mainfrom
conformance/sdk-activity-upgrades
Oct 19, 2026
Merged

rmcdaniel merged 3 commits into
mainfrom
conformance/sdk-activity-upgrades

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Change

Add the separate scripts/sdk-activity-upgrades.sh experiment 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

  • Preserve the original version marker/bounds, command sequence, complete history prefix, activity snapshot and original run/execution/attempt identities.
  • Verify actual installed package metadata and the registered roster before admission and cold replay; keep Python's original definition binding.
  • Require exact typed activity and workflow outputs and one completion inside the original total budget.
  • Reject missing/duplicate language directions, changed retry lists/timeouts, early execution, changed prefixes/scalars and obsolete package identities.
  • Run the new command in its own ordinary CI job, followed by independent main qualification after merge.

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 / whole 5201671738564a08884de4a6b3eeae2d948c64d1 now 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 8349f0cd has 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 tree 5201671738564a08884de4a6b3eeae2d948c64d1 is identical to reviewed head bbad946c25f4e8385c028f6bfff06bf134ab39bd and synthetic 8349f0cdfe124e4f509621517b8dc9ba039adb95. 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.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 19, 2026 15:13
@rmcdaniel
rmcdaniel merged commit 7c0d10e into main Oct 19, 2026
23 checks passed
@rmcdaniel
rmcdaniel deleted the conformance/sdk-activity-upgrades branch October 19, 2026 15:13
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