Index: tests/conftest.py
===================================================================
--- tests/conftest.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
+++ tests/conftest.py	(revision a1c4ba3c9e7340534c8c5c9f5d8ad5613cbbe9c2)
@@ -28,12 +28,22 @@
 
 @pytest.fixture
-def backend():
+def local_backend():
     return InMemoryBackend(Domain)
 
+@pytest.fixture
+def staging_backend():
+    return InMemoryBackend(Domain)
 
 @pytest.fixture
-def sample_domain_manager(backend):
-    return DomainManager(CompositeBackend(authoritative_backend=backend,
-                                          sync_backends=None), EntityRegistry())
+def permanent_backend():
+    return InMemoryBackend(Domain)
+
+@pytest.fixture
+def sample_domain_manager(local_backend, staging_backend, permanent_backend):
+    return DomainManager(local_backend=local_backend,
+                         staging_backend=staging_backend,
+                         permanent_backend=CompositeBackend(authoritative_backend=permanent_backend,
+                                                            sync_backends=None),
+                         registry=EntityRegistry())
 
 # ─────────────────────────────────────────────────────────────
Index: tests/test_in_memory_backend.py
===================================================================
--- tests/test_in_memory_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
+++ tests/test_in_memory_backend.py	(revision a1c4ba3c9e7340534c8c5c9f5d8ad5613cbbe9c2)
@@ -6,8 +6,8 @@
 
 
-def test_save_and_load_roundtrip(backend, sample_domain):
-    backend.save(sample_domain)
+def test_save_and_load_roundtrip(local_backend, sample_domain):
+    local_backend.save(sample_domain)
 
-    loaded = backend.load(sample_domain.flexo_id)
+    loaded = local_backend.load(sample_domain.flexo_id)
     assert isinstance(loaded, Domain)
     # important: entity equality is probably identity-based, so compare dicts:
@@ -15,27 +15,27 @@
 
 
-def test_update_overwrites_entity(backend, sample_domain):
-    backend.save(sample_domain)
+def test_update_overwrites_entity(local_backend, sample_domain):
+    local_backend.save(sample_domain)
 
     # change something
     sample_domain.description = "UPDATED DESC"
-    backend.update(sample_domain)
+    local_backend.update(sample_domain)
 
-    loaded = backend.load(sample_domain.flexo_id)
+    loaded = local_backend.load(sample_domain.flexo_id)
     assert loaded.description == "UPDATED DESC"
 
 
-def test_delete_removes_entity(backend, sample_domain):
-    backend.save(sample_domain)
-    backend.delete(sample_domain.flexo_id)
+def test_delete_removes_entity(local_backend, sample_domain):
+    local_backend.save(sample_domain)
+    local_backend.delete(sample_domain.flexo_id)
 
-    assert backend.load(sample_domain.flexo_id) is None
-    assert backend.load_all() == []
+    assert local_backend.load(sample_domain.flexo_id) is None
+    assert local_backend.load_all() == []
 
 
-def test_clear_removes_all(backend, sample_domain):
-    backend.save(sample_domain)
-    backend.clear()
+def test_clear_removes_all(local_backend, sample_domain):
+    local_backend.save(sample_domain)
+    local_backend.clear()
 
-    assert backend.load(sample_domain.flexo_id) is None
-    assert backend.load_all() == []
+    assert local_backend.load(sample_domain.flexo_id) is None
+    assert local_backend.load_all() == []
