replay: added files and symlinks don't have x/l flags set
I figured out what's going on.
When a new file is added, first add_file is called, with no file content, then the content arrives via apply_textdelta.
In neither place does there seem to be a way to find out if a file is either a symlink or executable, so new files are always treated as plain files. Only when a file is modified or copied is its symlink/executable flag set.