Agents ended turns with "I'll wait … I'll be notified" expecting a
background-completion callback that this environment never delivers, so
the turn hung and left the planning sentence stuck in the channel. Add a
claude-platform rule that no such notification exists — finish within the
turn (foreground/poll) or ask the user for a follow-up.
Also suppress the elapsed-time suffix on progress messages until at least
one 5s bucket has elapsed, so freshly-created progress no longer shows a
meaningless "0초". Update the affected message-runtime expectations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Making a channel registration live no longer depends on an operator/agent
remembering to restart. setup/register.ts and scripts/deregister-room.ts now
call signalEjclawReload() after the DB write, which sends SIGHUP to the running
service's main PID (→ runtimeState.reloadRoomBindings). Best-effort and
injectable-for-tests; no-ops when the service isn't running.
Also document the canonical rule in the committed, agent-loaded platform prompt
(prompts/claude-platform.md): prefer these paths, never fake a restart, verify
via the "Room bindings reloaded" log; a plain in-turn systemctl restart is
forbidden (it kills the agent).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Both Claude and Codex platform prompts now include a short
section explaining when to use structured GitHub fields
(ci_provider, ci_repo, ci_run_id) for the host-driven fast
path instead of the generic LLM-per-tick watcher.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>