Immutable file identity for caches; the handle must include its physical version.
Equal storage scopes compare by value even when independently allocated.
Stable storage identity shared by file keys from one accessor.
Fields stay separate so separators in paths or store names cannot cause collisions.
Canonical names can use Self::new; backends whose metadata does not uniquely
identify their endpoint or configuration use Self::unique and share that scope.