diff --git a/docs/memory/claude_inventory_validation_20260513.md b/docs/memory/claude_inventory_validation_20260513.md index b768fa9..03180e2 100644 --- a/docs/memory/claude_inventory_validation_20260513.md +++ b/docs/memory/claude_inventory_validation_20260513.md @@ -22,6 +22,7 @@ - OpenClaw Bot:中文字型下載、趨勢同期 DB 查詢、匯入格式業績預覽解析等 best-effort 區塊已補 debug/exception/warnings,避免真正錯誤完全無跡可查。 - Telegram polling bot:舊 callback 正規化失敗、空 `momo:eig:` event_id 回覆失敗仍保持 fail-safe,但已補 debug log。 - `ai_call_logger._write_to_db` 不是死函數:它是 `_async_write()` 的 daemon thread target;decorator token 自動抽取與 stack caller 推斷的 best-effort 失敗也已補 debug log。 +- `cache_manager.FingerprintCache` 與 dashboard shared cache 清理維持 fail-open / best-effort,但已補 debug log,避免 cache fingerprint 或檔案清理失敗完全沉默。 ## 已驗證為已修或過期 @@ -83,3 +84,4 @@ - `89c400d` 補上 OpenClaw best-effort 區塊紀錄 - `ec5a22d` 記錄 Telegram pending action 驗證 - `f44c429` 補強 AI logger best-effort 診斷 +- `8a36856` 補強 Telegram callback 診斷 diff --git a/services/cache_manager.py b/services/cache_manager.py index 385ea4a..ba280e8 100644 --- a/services/cache_manager.py +++ b/services/cache_manager.py @@ -8,10 +8,14 @@ module-level cache 收斂到這裡,避免各 route 各自持有一份 dict。 """ import os +import logging import time from pathlib import Path +logger = logging.getLogger(__name__) + + class FingerprintCache: """TTL + fingerprint 的小型 in-memory cache。""" @@ -30,13 +34,14 @@ class FingerprintCache: if self._fp_fn() != entry['fp']: return None except Exception: - pass + logger.debug("cache fingerprint check failed for %s", self.name, exc_info=True) return entry['data'] def set(self, key, data): try: fp = self._fp_fn() except Exception: + logger.debug("cache fingerprint write failed for %s", self.name, exc_info=True) fp = None self._store[key] = {'data': data, 'ts': time.time(), 'fp': fp} @@ -137,4 +142,4 @@ def clear_dashboard_cache(): except FileNotFoundError: pass except OSError: - pass + logger.debug("dashboard shared cache cleanup failed", exc_info=True)