From 2499118536ad09c28d31691ab121b60e7968677d Mon Sep 17 00:00:00 2001 From: Jessica Mulein Date: Thu, 11 Jun 2026 15:34:11 -0700 Subject: [PATCH] fix(coders): initialize reflected_message in __init__ to prevent AttributeError MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reflected_message attribute was only initialized in init_before_message(), which is called from the normal run() loop. Code paths that bypass run() — such as run_one_shot() used by spec generation, or run_message() used by headless agent sessions — could trigger check_for_file_mentions() before init_before_message() was ever called, raising: AttributeError: 'EditBlockCoder' object has no attribute 'reflected_message' This occurred in production when a local model (qwen3.6:35b) emitted a [ContextManager] file reference during a spec-gen explore turn, causing check_for_file_mentions to access self.reflected_message on line 2541. Fix: set self.reflected_message = None in Coder.__init__() so the attribute always exists regardless of entry point. --- cecli/coders/base_coder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cecli/coders/base_coder.py b/cecli/coders/base_coder.py index c28dc866cc6..45b87ce924c 100755 --- a/cecli/coders/base_coder.py +++ b/cecli/coders/base_coder.py @@ -422,6 +422,7 @@ def __init__( self.registered_servers = {"included": set(), "excluded": set()} self.interrupt_event = asyncio.Event() self.uuid = str(generate_unique_id()) + self.reflected_message = None if uuid: self.uuid = str(uuid)