The chmod 644 on pidfiles was injected mid-command between daemon(8)
and its arguments (--host, --port, etc.), causing the shell to pass
'chmod' as a subcommand argument to 'hermes dashboard', which
instantly crashed. Move it after the complete daemon invocation.
This caused the 502 Bad Gateway on ai.clawdie.si after restart —
dashboard process never started because it rejected 'chmod' as an
invalid dashboard subcommand.
- hermes_dashboard.in: matches live install at
/usr/local/etc/rc.d/hermes_dashboard, was untracked
- .gitignore: add ui-tui/node.core (Node crash dump)
- Restore package-lock.json to committed state
Telegram Web doesn't support Bot API 10.1 sendRichMessage, so
gateway startup/shutdown/restart notifications rendered as
'This message is not supported on the web version of Telegram.'
Root cause: TelegramAdapter.send() uses sendRichMessage for
every non-empty message. Lifecycle notifications are plain text
and gain nothing from rich rendering.
Fix:
- telegram.py: add 'skip_rich' metadata flag to _should_attempt_rich()
- run.py: set skip_rich=True on all 4 lifecycle notification paths
(shutdown→active chats, shutdown→home channel, startup→home,
restart→active chat)
Lifecycle notifications now use plain sendMessage. All other
messages continue using sendRichMessage for rich rendering.
Also: sync colibri_bridge.in template from live OSA deployment.