diff --git a/internal/config/config.go b/internal/config/config.go index 92bb8fe..bf75083 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1087,7 +1087,7 @@ func Load() (*Config, error) { if demoModeEnv != "" { cfg.DemoMode = demoModeEnv == "true" || demoModeEnv == "1" if cfg.DemoMode { - log.Warn().Msg("šŸŽ­ DEMO MODE - All modifications disabled (read-only)") + log.Warn().Msg("DEMO MODE - All modifications disabled (read-only)") } } diff --git a/internal/config/persistence.go b/internal/config/persistence.go index 3fe77ba..00aa7b7 100644 --- a/internal/config/persistence.go +++ b/internal/config/persistence.go @@ -1036,7 +1036,7 @@ func (c *ConfigPersistence) LoadNodesConfig() (*NodesConfig, error) { log.Error(). Str("corruptedFile", c.nodesFile). Str("backupFile", backupFile). - Msg("āš ļø CRITICAL: Both nodes.enc and backup are corrupted/unreadable. Encryption key may have been regenerated. Manual recovery required. Starting with empty config.") + Msg("CRITICAL: Both nodes.enc and backup are corrupted/unreadable. Encryption key may have been regenerated. Manual recovery required. Starting with empty config.") // Move corrupted file with timestamp for forensics corruptedFile := fmt.Sprintf("%s.corrupted-%s", c.nodesFile, time.Now().Format("20060102-150405")) @@ -1058,7 +1058,7 @@ func (c *ConfigPersistence) LoadNodesConfig() (*NodesConfig, error) { // CRITICAL: Don't delete the corrupted file - leave it for manual recovery log.Error(). Str("corruptedFile", c.nodesFile). - Msg("āš ļø CRITICAL: nodes.enc is corrupted and no backup exists. Encryption key may have been regenerated. Manual recovery required. Starting with empty config.") + Msg("CRITICAL: nodes.enc is corrupted and no backup exists. Encryption key may have been regenerated. Manual recovery required. Starting with empty config.") // Move corrupted file with timestamp for forensics corruptedFile := fmt.Sprintf("%s.corrupted-%s", c.nodesFile, time.Now().Format("20060102-150405")) diff --git a/internal/crypto/crypto.go b/internal/crypto/crypto.go index 5dd0dd3..b236edd 100644 --- a/internal/crypto/crypto.go +++ b/internal/crypto/crypto.go @@ -125,7 +125,7 @@ func getOrCreateKeyAt(dataDir string) ([]byte, error) { log.Error(). Strs("foundFiles", foundFiles). Str("dataDir", dataDir). - Msg("āš ļø CRITICAL: Encryption key not found but encrypted/backup/corrupted files exist") + Msg("CRITICAL: Encryption key not found but encrypted/backup/corrupted files exist") return nil, fmt.Errorf("encryption key not found but encrypted data exists (%v) - cannot generate new key as it would orphan existing data. Please restore the encryption key from backup or delete ALL .enc* files to start fresh", foundFiles) } diff --git a/internal/notifications/notifications.go b/internal/notifications/notifications.go index 6f639c2..f0fa0f1 100644 --- a/internal/notifications/notifications.go +++ b/internal/notifications/notifications.go @@ -1610,7 +1610,7 @@ func (n *NotificationManager) sendGroupedWebhook(webhook WebhookConfig, alertLis if len(otherAlerts) > 0 { // For custom templates, we need to escape newlines since they're likely // used in shell commands or other contexts that need escaping - alert.Message = fmt.Sprintf("%s\\n\\nšŸ”” All %d alerts:\\n%s", summary, len(alertList), strings.Join(otherAlerts, "\\n")) + alert.Message = fmt.Sprintf("%s\\n\\nAll %d alerts:\\n%s", summary, len(alertList), strings.Join(otherAlerts, "\\n")) } } @@ -1670,10 +1670,10 @@ func (n *NotificationManager) sendGroupedWebhook(webhook WebhookConfig, alertLis // Discord embeds don't render \n in description anyway if webhook.Service == "discord" { // Use comma-separated list for Discord - alert.Message = fmt.Sprintf("%s | šŸ”” %d alerts: %s", summary, len(alertList), strings.Join(otherAlerts, ", ")) + alert.Message = fmt.Sprintf("%s | %d alerts: %s", summary, len(alertList), strings.Join(otherAlerts, ", ")) } else { // For other services, escape newlines properly - alert.Message = fmt.Sprintf("%s\\n\\nšŸ”” All %d alerts:\\n%s", summary, len(alertList), strings.Join(otherAlerts, "\\n")) + alert.Message = fmt.Sprintf("%s\\n\\nAll %d alerts:\\n%s", summary, len(alertList), strings.Join(otherAlerts, "\\n")) } } }