Because fetch.coffee lived in app/assets/javascripts/github/behaviors, it was implicitly included in github.js by require_tree.
I added an explicit require to frameworks.coffee
I looked at the compiled versions of frameworks.js and github.js and they both contained the fetch.js code.
I bumped the asset version number and checked again. It was only in frameworks.
One idea I had is that github.js didn’t get recompiled after the explicit require in frameworks. So sprockets included the previously cached github.js with the newly compiled frameworks.js.