The shell loads gs-core.js and the other app scripts under fixed names,
and they are served with cache-control max-age=14400. After a push that
changes them, a browser runs the old scripts for up to four hours, so a
reader sees old behavior next to new data until a hard reload.
Expected: a deploy reaches readers on their next load, for example
through versioned script names or a short max-age with revalidation.