From a9d338a3242eedcfb16cf2fae8521c8533c06fbc Mon Sep 17 00:00:00 2001 From: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com> Date: Mon, 5 Oct 2026 12:46:09 -0400 Subject: [PATCH] Reject cyclic reply headers before walking email thread ancestry Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com> --- .../engineering-email-intelligence-engineer.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engineering/engineering-email-intelligence-engineer.md b/engineering/engineering-email-intelligence-engineer.md index 1a1dce9f..30fa7c7b 100644 --- a/engineering/engineering-email-intelligence-engineer.md +++ b/engineering/engineering-email-intelligence-engineer.md @@ -144,6 +144,18 @@ def reconstruct_thread(messages): if len(set(message_ids)) != len(message_ids): raise ValueError("Duplicate Message-ID: resolve identity before reconstruction") + parents = {msg["message_id"]: msg["in_reply_to"] for msg in messages} + checked = set() + for start in parents: + path = set() + current = start + while current in parents and current not in checked: + if current in path: + raise ValueError("Cyclic In-Reply-To headers: quarantine before reconstruction") + path.add(current) + current = parents[current] + checked.update(path) + graph = {} for msg in messages: parent_id = msg["in_reply_to"]