31fcb764d7
The three collect*FromPmJson collectors shared the same recursion (and the #55 depth cap) but were copy-pasted, so a future edit could diverge them. Extract a generic collectNodes(doc, {type, map, key, lastWins, skipChildrenOfType}) and reimplement all three on it, byte-output-identical (transclusions last-wins; references/embeds first-wins + transclusionSource skip). Documents (not removes) the write-only page_template_references graph and the near-duplicate client lookup-context as tracked follow-ups, per the issue's guidance. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>