Seems like currently, it detects that the file has changed, but doesn't update the cache to the new state. Thus, it always hits the changed hook.
It's easy like
// Update the changed file's cache,
// Note: maybe we should handle that on glob-cache automatically?
await cacache.put(cacheLocation, file.path, file.contents);
on the if ctx.changed, and after the call of hooks.changed.