fix: stop republishing unchanged posts on legacy state
The previous legacy fallback at publish.ts treated any state entry
without a noteHash as "changed", forcing a full note republish on the
first run after upgrading to v0.5.0. That was wasteful: contentHash
already detects every local change, so when contentHash matches the
file is unchanged and PDS still matches it.
Now: if contentHash matches and noteHash is missing, silently backfill
noteHash from local content and skip the republish. Also split the
"content changed" reason string into "document changed" / "note
changed" / "content changed" so the change-detection trigger is visible
at a glance.