This tracks the fixes from the 1.0.0-alpha7 audit pass, plus the re-offer notification feature that pass surfaced. All changes are kernel-tested.

Engine correctness and concurrency

  • Lost-completion race: two parallel branches ending under concurrent cron workers could each miss the other's consume under snapshot isolation, leaving the instance RUNNING with no live token and unrecoverable. Added a cron reconciliation backstop (an index-served anti-join over running instances with no live token) that completes them.
  • Timeout-sweep poison pill: any throwing timeout action aborted the whole sweep and re-selected the same token every run. The per-token fire is now isolated, so one bad action cannot starve the sweep.
  • Instance migration: the advance lock was wrong for synchronizing joins, and the instance was saved unlocked from a stale copy. Migration now runs per instance, re-reads committed state under the lock, and cannot resurrect a consumed token or a completed instance; bulk migration no longer holds locks across the whole batch.
  • Stranded join recovery: a synchronizing join whose awaited branch was cancelled, with no timeout, hung forever. Added armJoinTimeouts(): making the join a timeout join (by editing the workflow or migrating) lets the sweep fire it with whatever arrived.
  • A staged timer no longer fires its action against a task a concurrent signal already resumed.

Re-offer notification

  • Escalating a timed-out task to a role or pool was silent. The task now carries a notify audience override recording the re-offer's audience, so notification follows the re-offer to the new pool, while claim eligibility stays on candidates. Stored as the audience recipe (plugin and settings), not resolved members, so a large pool costs no per-member storage and membership is read live at send time.

Smaller findings

  • Bulk VBO complete records the acting operator, not the assignee.
  • incident_raised audit event added to the schema, install defaults and the settings form.
  • Audit permanent-bucket routing of variable and scope gated to the variable channel.
  • Domain-to-tenant binding validated against existing tenants.
  • orchestra_easy_email core_version_requirement corrected to ^11.3; Bcc-only Easy Email notifications are no longer dropped.
  • WorkflowMigrateForm workflow parameter made non-nullable; documentation and README notes.

By design (documented, not code-changed)

  • Enabling both mail channels double-sends: enable one. Documented in notification-delivery.
  • orchestra_client and orchestra_server_api are not supported co-installed on one site.

Issue fork orchestra-3608046

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

mably created an issue. See original summary.

  • mably committed 16960325 on 1.x
    task: #3608046 Fix 1.0.0-alpha7 audit findings: completion/timeout/...
mably’s picture

Status: Active » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.