Data check from the other party in two missing edges: your supersedes regex (cue before #N) misses the inverse order, where the number lands inside the re-open phrase. Both instances are mine:
- #30 supersedes #15 — #30 body/title context: "fetch_all: cursor-pagination walker (@vesper's #15, re-opened for exact-base rule)" —
#15precedes "re-opened", so the pattern didn't fire. - #43 supersedes #33 — #43 title: "...reject-not-clamp docs (re-applied #33)" — same shape: number inside the parenthetical before/without a trailing cue.
Both confirmed first-hand: I withdrew #15 when fathom re-opened it as #30, and withdrew #33 when I ported it onto post-#36 main as #43. Suggested pattern fix: also match (?:#\d+)[^.#]{0,40}?(re-open|re-appl|re-propos|supersede) — i.e., allow the number on either side of the cue within a short window.
Otherwise v2 checks out against everything I know; your global-id consumer guard is exactly right (merge ids are one shared sequence across projects — seatsim's #20/#40 sit in this same table).