From 23bc8abaaa50bc4015ee24d9ab71a6a6f2fec70f Mon Sep 17 00:00:00 2001 From: fitz123 Date: Sun, 26 Apr 2026 18:55:30 +0300 Subject: [PATCH 1/2] docs(rules): strengthen NO_REPLY communication rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make explicit that NO_REPLY must be the FIRST text in the response, not appended after a summary. Adds the actual bot regex (/^NO_REPLY\b/) and wrong/right examples so agents can self-check before sending. Motivated by repeated workspace-health cron deliveries that ended with NO_REPLY but led with a clean-status summary — the regex didn't match, so the summary was delivered as a real message. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/rules/platform/communication.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.claude/rules/platform/communication.md b/.claude/rules/platform/communication.md index 5194efb..a4d79d3 100644 --- a/.claude/rules/platform/communication.md +++ b/.claude/rules/platform/communication.md @@ -14,7 +14,21 @@ You're a participant, not Ninja's voice or proxy. Don't share his private info. ## Silent Response -When no reply is needed (emoji reaction, acknowledgment without question, casual banter) — respond with exactly `NO_REPLY`. The bot swallows this token and sends nothing to the user. Never write "No response requested" or similar — it gets delivered as a real message. +When no reply is needed (emoji reaction, acknowledgment without question, casual banter), your **ENTIRE response must be exactly the literal token `NO_REPLY`** — nothing else, no preamble, no summary, no explanation before or after. + +The bot's delivery suppression regex is `/^NO_REPLY\b/` applied to the trimmed output. It matches **only** when `NO_REPLY` is the FIRST text in your response. A reason after a colon is fine (`NO_REPLY: nothing actionable`), but **any leading content — even one word of summary — causes the WHOLE message to be delivered to the user.** + +Wrong (delivered as a real message): +- `All checks clean. NO_REPLY` ← summary first → bot delivers everything +- `Done. NO_REPLY` ← same +- `Acknowledged.\n\nNO_REPLY` ← same + +Right (suppressed): +- `NO_REPLY` +- `NO_REPLY: nothing actionable` +- ` NO_REPLY ` (whitespace ignored after trim) + +Never write "No response requested" or similar — those get delivered as real messages. ## Telegram Formatting From 141a729a0051357e9e1b35f4b4f7c7bcdb2ab4f3 Mon Sep 17 00:00:00 2001 From: fitz123 Date: Sun, 26 Apr 2026 20:01:14 +0300 Subject: [PATCH 2/2] docs(rules): allow optional reason after NO_REPLY Address Copilot review on PR #110: the original wording said the entire response must be exactly NO_REPLY, then later allowed `NO_REPLY: reason` as a valid suppressed example. Resolved by changing the lead from "ENTIRE response must be exactly NO_REPLY" to "must start with NO_REPLY, optionally followed by punctuation and a brief reason." Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/rules/platform/communication.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.claude/rules/platform/communication.md b/.claude/rules/platform/communication.md index a4d79d3..bba28ec 100644 --- a/.claude/rules/platform/communication.md +++ b/.claude/rules/platform/communication.md @@ -14,9 +14,9 @@ You're a participant, not Ninja's voice or proxy. Don't share his private info. ## Silent Response -When no reply is needed (emoji reaction, acknowledgment without question, casual banter), your **ENTIRE response must be exactly the literal token `NO_REPLY`** — nothing else, no preamble, no summary, no explanation before or after. +When no reply is needed (emoji reaction, acknowledgment without question, casual banter), your response must **start with the literal token `NO_REPLY`** — optionally followed by punctuation and a brief reason. Nothing may precede `NO_REPLY` — no preamble, no summary, no explanation. -The bot's delivery suppression regex is `/^NO_REPLY\b/` applied to the trimmed output. It matches **only** when `NO_REPLY` is the FIRST text in your response. A reason after a colon is fine (`NO_REPLY: nothing actionable`), but **any leading content — even one word of summary — causes the WHOLE message to be delivered to the user.** +The bot's delivery suppression regex is `/^NO_REPLY\b/` applied to the trimmed output. It matches **only** when `NO_REPLY` is the FIRST text in your response. Any leading content — even one word of summary — causes the WHOLE message to be delivered to the user. Wrong (delivered as a real message): - `All checks clean. NO_REPLY` ← summary first → bot delivers everything @@ -25,8 +25,8 @@ Wrong (delivered as a real message): Right (suppressed): - `NO_REPLY` -- `NO_REPLY: nothing actionable` -- ` NO_REPLY ` (whitespace ignored after trim) +- `NO_REPLY: nothing actionable` ← reason after colon is fine +- ` NO_REPLY ` ← whitespace ignored after trim Never write "No response requested" or similar — those get delivered as real messages.