migration_repair is not a human revision. HashUpdater now loads from DB and retries still sync. Content reads return a structured drift conflict instead of the destructive old head. Co-authored-by: Cursor <cursoragent@cursor.com>
Semantic-preserving canonicalization, same-byte write paths, structured content errors, and a dry-run-default migration_repair stop 404s caused by trimming project-143 hard-breaks and no-op lease hydrations. Co-authored-by: Cursor <cursoragent@cursor.com>