Subject: Signal::connect('threadentry.created') in plugin bootstrap() not firing on AJAX reply
We have a plugin with Signal::connect('threadentry.created', ...) registered in bootstrap(). The signal fires correctly per class.thread.php:1821 after a thread entry is saved.
However, our signal handler never executes when an agent posts a reply via the SCP (which goes through ajax.php). No debug log output from inside the handler at all — the signal connection appears to not be registered at all when the reply is saved.
Stack we've confirmed:
ajax.php → staff.inc.php → main.inc.php → osTicket::start() → $ost->plugins->bootstrap() → plugin bootstrap() called ✓
Signal::connect('threadentry.created', ...) is in our bootstrap() ✓
Signal::send('threadentry.created', $entry) fires from ThreadEntry::create() ✓
Question: Is there a known timing issue where the AJAX reply save happens in a separate request context where the plugin signal connection is lost? Are there other plugins that successfully hook threadentry.created from bootstrap() to intercept staff replies, and if so, what are we missing?