#8173·elsa-core

Extend Memory/EF conformance for leftover runtime store tenant isolation

Author: sfmskywalkerCreated Sep 15, 2026Updated Sep 15, 2026
Labelscorepersistenceprio lowtech debtelsa 3maintenancetriaged

Summary

#8088 / PR #8115 locked a shared Memory/EF matrix for triggers, definitions, bookmarks (tenant + TenantAgnostic), dead-letter uniqueness, and activity-execution / execution-log Find filter semantics.

It does not assert ambient-tenant isolation (or TenantAgnostic where the filter exposes it) for the leftover Memory stores still drifting after #8087:

  • IWorkflowInstanceStore (Memory vs EF)
  • IActivityExecutionStore
  • IWorkflowExecutionLogStore
  • IBookmarkQueueStore (TenantAgnostic)
  • IBookmarkQueueDeadLetterStore (TenantAgnostic on FindMany/Page — uniqueness already locked)

Concrete drift tracked in the companion implementation issue.

Evidence

WorkflowStoreConformanceTests today:

  • Tenant isolation: triggers, definitions, bookmarks only
  • Dead-letter: OriginalQueueItemId uniqueness / AddOrGet idempotency
  • Activity execution / execution log: Find / summaries / order — no cross-tenant hide/show rows

Default registration still wires Memory for these contracts until EF persistence features replace them — unit/integration hosts never fail closed on the durable tenant modes.

Why it matters

  • Without matrix rows, the next #8087-style partial fix can leave another store behind unnoticed.
  • Subtractive: extend the existing #8088 harness — do not invent a second persistence abstraction.

Proposed direction

  1. Add shared scenarios: ambient tenant hide/show + stamp on Save; TenantAgnostic bypass for bookmark queue + dead-letter; Delete/FindMany cannot see or remove another tenant’s rows.
  2. Run against Memory and EF (Sqlite is enough).
  3. Keep uniqueness / Find / order rows already present; do not duplicate #8120 order coverage.

Out of scope

  • Implementing the Memory tenant fix itself (companion bug).
  • Labels / Alterations / Secrets / ExtAuth / identity matrices (already tracked or closed).
  • Multi-node distribution (Memory is single-node).

Milestone

Unset — Issue Triage / Crew Lead decide placement.

Refs

  • test/integration/Elsa.Workflows.Persistence.ConformanceTests/WorkflowStoreConformanceTests.cs
  • test/integration/Elsa.Workflows.Persistence.ConformanceTests/WorkflowStoreScenario.cs
  • Companion leftover Memory tenant bug (same research pass)
  • Pattern: #8088, #8094, #8091

Source: elsa-workflows/elsa-core