"Sending risks data races" error, but everything is on the Main Actor

I really don't understand what the issue is here. I've thrown @MainActor on (almost*) everything that might be relevant and it's still telling me I'm sending things.

@MainActor
final class PrimaryViewModelImplementation: PrimaryViewModel, ObservableObject {
    @Published var array: [Int] = []
    
    @MainActor private let fetcher: DataFetcher
    private let validator: DataValidator
    private let dataStateUpdater: DataStateUpdater
    
    init(
        fetcher: DataFetcher,
        validator: DataValidator,
        updater: DataStateUpdater
    ) {
        self.fetcher = fetcher
        self.validator = validator
        self.dataStateUpdater = updater
    }
    
    @MainActor
    func refreshData() async {
        let rawData = await fetcher.getData()
        let filteredData = validator.pickValidItems(from: rawData)
        self.array = filteredData
    }
    
    func confirmData() {
        dataStateUpdater.setDataState(confirmed: true)
    }
}

I get an error pointing at the i in await, saying

Sending 'self.fetcher' risks causing data races

Sending it where? Everything here is on the main actor!

*I haven't made the DataFetcher type itself @MainActor, because there's no reason it should be. In this example it's a stand-in for something like a network request (in reality it calls Task.sleep and returns some random data).

That is the behavior introduced by SE-338. Nonisolated code (and DataFetcher is so) is executed off the actor. You can think of this as call to the method on this type implicitly passes self there, which is then passed to different isolation. So in the end not everything in your code is main actor-isolated.

I agree that the diagnostic message a bit hard to decode though.