Review of PR #129 found MergeReport's disagreement check compared strings.TrimSpace(sA.content) against strings.TrimSpace(sB.content) -- only leading/trailing whitespace is tolerated. Every other content comparison in this file (appendNew, mergeBullets) already canonicalizes internal whitespace runs too, because a re-extraction's exact spacing isn't byte-stable (#103). A mid-line double-space would false-positive as a "disagreement" here even though the file's own established tolerance says it shouldn't. canonicalBlock applies the existing canonicalLine per line of a multi-line section body. A genuine content difference is still caught (TestMerge_ReportsSectionsWhereTheFreshVersionWasDiscarded stays green); only internal-whitespace-only variants stop false-positiving. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>