Both are technically correct and the documentation is ambiguous. It just says "prints the filename of the currently running script." without stating whether it will always result in an absolute path. Having said that I find the inconsistency surprising and would vote for updating the code and docs to state the path will always be absolute.
It's weird that fish would fully resolve the path when passed a file. This was introduced in 06fd1aa a long time ago (the call to wrealpath in main.c). Note that this means the fish test.fish case also resolves symlinks.
I'm unsure if it's better to show the relative path, absolute path, or fully resolved path (i.e. absolute with symlinks resolved). I think that resolving symlinks is bad, because some scripts are symlinked to each other and switch off their name to decide what to do. But as for absolute vs relative, I'm not sure - are there any legitimate uses for knowing the relative path?
Yeah, upon further reflection I agree that defining it to always produce a relative path if one was used in the first place makes more sense than always converting to an absolute path since there is a trivial command for doing the latter. Obviously if the user explicitly specifies an absolute path then that is what they'll get from status -f. It'd be good to update the status man page to clarify this point in addition to backing out that change.
Ah, thanks for taking a look! The absolute path without the need of another utility like realpath was pretty handy. Definitely better to be consistent though! Will update accordingly with that in mind.