Failing tests (WriteBackup/writebackupVewDiffDaysChanges001.vim) alerted me that the implementation is stil incomplete.
ingo#buffer#generate#Create() needs to take an additional a:NextFilenameFuncref argument instead of invoking non-existent ingo#buffer#generate#NextFilename().
ingo#buffer#scratch#NextFilename() needs to invoke ingo#buffer#generate#NextBracketedFilename(), not the eponymous function in its own module.
This allows reuse for non-scratch buffer creation; i.e. where the buftype / readonly stuff isn't needed. Also, the code is easier to understand now that the two concepts are separated.