       UIApplication.shared,
       performFetchWithCompletionHandler: { _ in }
     )
-        
+    
+    // 1. performFetch produces .progressing
+    // 2. filter immediately produces .progressing to .complete (normally async)
+    // 3. session produces .complete to .idle
+
     DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
       XCTAssert(
-        fetches
+        delegate.events.map { $0.fetch }
         ==
         [
-          Session.Model.BackgroundFetch(
+          Session.Model.BackgroundFetch( // cycle -subscribe
+            minimumInterval: .never,
+            state: .idle
+          ),
+          Session.Model.BackgroundFetch( // session -subscribe
             minimumInterval: .never,
             state: .idle
           ),

  func testRenderingBackgroundFetch() {
    
    let asyncCallbacks = expectation(description: "...")
    var fetches: [Session.Model.BackgroundFetch] = []
    let delegate = SessionTestDelegate(start: .empty) {
      fetches += [$0.fetch]
      var edit = $0
      if case .progressing(let handler) = $0.fetch.state {
        edit.fetch.state = .complete(.noData, handler)

            minimumInterval: .never,
            state: .idle
          ),
          Session.Model.BackgroundFetch( // -performFetch
            minimumInterval: .never,
            state: .complete(.noData, { _ in })
          ),
          Session.Model.BackgroundFetch( // -rendered
            minimumInterval: .never,
            state: .idle
          )
