ci / ci (pull_request) Successful in 3m41s
The drift guard hashed NodeBB's stored copy of a page and compared it to the hash of the text Crucible rendered. Those only match if NodeBB round-trips our HTML byte for byte, so every sow-topdata deploy failed with "remote managed wiki content drifted; rerun with --force" on pages nobody had edited. Record the managed-region hash of the post NodeBB hands back right after each write (manifest field remote_hash) and compare the next run against that. A post with no sourceContent is no longer drift either: it predates sourceContent sync, so it reads back as rendered HTML and belongs to the existing repair path. The error now names the drifted pages, capped at ten. Old manifests without remote_hash keep the previous comparison, so no re-seed is needed. Costs one extra post read per page written; skipped pages are still never fetched. Closes #103 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>