Fixture scopes form a hierarchy: session, package, module, class, function. A fixture may depend on one of equal or wider scope only. Requesting a narrower one raises ScopeMismatch: You tried to access the function scoped fixture with a session scoped request object, naming both fixtures.
The rule exists because a session fixture is created once and would otherwise capture a value that is torn down and recreated many times underneath it. The most common victims are the built-in fixtures, which are function-scoped: tmp_path, monkeypatch, capsys and request.node all fail inside a session fixture.
The replacements are tmp_path_factory for directories and pytest.MonkeyPatch.context() used manually for patching, both usable at any scope. When the dependency is your own fixture, the usual fix is to split it: put the expensive setup in the wide-scoped fixture and the per-test wiring in a narrow one that depends on it. Fixture instantiation order follows scope first and declaration order second, so a session fixture always runs before a module one regardless of where it appears.