33292affd6
Follow-up to the two cherry-picked contributor commits. The picked fence tracker never checked for a closing fence once a block was open (the closer test sat inside the not-in-code branch), so every prose link after any code block was scanned verbatim again and the #111254 documentation link exemption was lost; a fence line carrying an info string was also accepted as a closer, which handed the scanner back to prose mode mid-block. Rewrite the loop around CommonMark fence semantics: a block opens on 3+ backticks/tildes indented at most 3 spaces (backtick info strings may not contain a backtick) and closes only on a fence with the same marker, at least as long, and nothing after it; tab- or 4-space-indented lines are code; an unclosed fence stays code to EOF. plugin_guard inherits the behaviour through scan_file. The temp-root exemption in destructive_root_rm now also refuses a parent segment reached through an empty path segment or followed by a shell separator, which the first cut let through. Tests trimmed to one invariant per fix: the fence test covers the six code shapes plus the prose-link-after-fence control that the picked version broke; the rm test gains the two residual shapes. Part of #111334 Fixes #112129 Fixes #111335