You need to build syncthing package only if you want to use that option, not all packages. I think the build command takes additional parameters what to build, which I think you need to specify ./cmd/syncthing or syncthing
The binary in the current dir is from the second command, the one in cmd/ from the first. The second command would have worked without first calling the former one. Go has a distinction between build, putting the binary in the current dir, and install, putting the binaries into a common installation dir (which the build.go script defines as cmd/ I think).
What needs fixing? A note mentioning that -no-upgrade is not compatible with the default (all) target would be helpful - feel free to add it.
I think the docs are correct. The examples work, and it says -no-upgrade influences the build (create binary in current dir), zip and tar (create the named archive types) subcommands. It also says giving no subcommand is equivalent to install, which is something else and creates binaries in bin/.
We might simplify though. The distinction between build and install comes from earlier Go versions which had more of a difference between those two modes than the current Go releases do. It’s not really necessary today.