io/fs requires "unrooted" paths, but it is currently only documented in passing under io/fs.ValidPath.
This may be surprising to many developers starting to use io/fs. Eg, walking "/" on os.DirFS or embed.FS filesystems will fail. Walking "." is less obvious since this is traditionally associated with the current working directory which doesn't exist for virtual filesystems.