Hwaro::Services::Server::FileStamp
What the watcher records per file: mtime plus size. Size catches same-tick rewrites on coarse-mtime filesystems (Docker bind mounts, NFS/SMB shares, exFAT) where two quick saves can share a timestamp — an mtime-only comparison would permanently miss the second save.
The third slot is a content digest, carried ONLY for the full-rebuild
buckets (data/, i18n/ — nil everywhere else). Those buckets force
a full rebuild, and a full rebuild re-runs build.hooks.pre — so a
hook that rewrites an identical payload into data/ (the pattern #752
documents) retriggered itself forever under a stamp-only comparison
(#755). The digest lets detect_changes drop stamp movement whose
bytes are unchanged. See watch_digest for when it is (re)computed.