Feedback telegram no tables

Telegram does not render markdown tables. Emitting | col | col | syntax produces raw pipe characters on the user's screen.

Approved alternatives in priority order: 1. Key-value lines: *HRV:* 62 (↑4) one per row -- almost always reads better on mobile 2. Monospace pseudo-table in a code fence (mono_table) for genuinely tabular data -- fixed-width font aligns columns, but limit ~30 chars wide before wrapping 3. Expandable blockquote (expandable_quote) for long collapsible content 4. Emoji column markers (🟢🟡🔴, ✅❌) for visual status grids

Enforcement: sanitize_for_telegram in scripts/forge_telegram_format.py runs on every bot's send path and converts markdown tables automatically. Don't rely on the model following this rule; fix at the boundary.

System-prompt addendum injected into all bot Sonnet prompts: 'Telegram has no tables. For ≤2 columns use *Key:* value lines. For ≥3 columns request mono_table via tool call. For yes/no/choice prompts, return inline_keyboard payload. Long content (>15 lines) wrap in expandable_quote.'

Why: Breaking table output was observed in production (bot sent raw pipe characters). The fix is systemic -- sanitizer + helper + doctrine -- so it never needs to be fixed again.

How to apply: Any time you write a bot reply, skill output, or worker result destined for Telegram, route through forge_telegram_format.sanitize_for_telegram. Never hand-roll a table.

[Claude Code]

[auto-memory session 3c02edcd-8ac5-45a8-9ee9-4039226efbb9, confidence 0.80, mode staged]