# Claude Code 盤點驗證記憶（2026-05-13）

> 用途：接續 V1/V2 全棧盤點整改時，先看這份，避免把已修或已過期的項目重複當成阻擋。

## 已驗證並修補

- `rag_query_log.saved_call`：已改為只有高信心 RAG 命中且跳過 LLM 時寫 `true`，並補測試。
- `ai_calls.rag_hit`：logger API 原本可寫但缺回歸測試；已補 `set_rag_hit(True)` 寫入測試。
- 舊 `SSH_JUMP_* / SSH_TARGET_*`：Python caller 已不存在；已從 `config.py` 與 `.env.example` 範例移除，執行路徑以 `ELEPHANT_ALPHA_JUMP_*` 為準。
- `filesystem-mcp`：`MCP_BASE_HOSTS` 與 health check 已存在；已補 `ops_diagnostics` 唯讀工具白名單，並測試 `read_file` 可通、`write_file` 被拒。
- `mcp_calls.status`：已補 `ok/cache_only/timeout/rate_limited/error` 細分，早退結果也會帶 `status='error'`。
- Telegram `cat_` callback：主 OpenClaw route 不是問題；polling bot helper 的預設 `cat` 才是潛在漏 handler。已改預設為既有 handler `trend` 並補測試。
- Scheduler 觀測任務：BGE-M3 embedding consistency 不一致、host health probe、AI error spike、觀測台日報與 cleanup 例外都已接 `_notify_scheduler_failure()`。
- AutoHeal Telegram inline：`obs_heal` 已用 `_CURRENT_USER_ID_CTX` 記錄實際 Telegram user，webhook request 開頭會清空 stale user context。
- 匯入檔名日期 helper：`routes/import_routes.py` 已改用 `utils.text_helpers.extract_snapshot_date_from_filename()` 單一來源，並用真實日期解析拒絕 `20261399` 這類不可能日期。
- `monthly_summary_analysis` 匯入已守住「刪同年月後 append」路徑，`tests/test_import_service_sql_params.py` 會防止該月結匯入區塊退回整表 `if_exists='replace'`。
- ROI 月報 feedback 區塊：反饋趨勢查詢失敗仍不阻擋月報，但已改為 warning + stack，避免完全靜默。
- Elephant Alpha short-circuit：`log_ai_call` 遙測失敗仍不阻擋省成本 return，但已改為 warning + stack。
- Claude cost throttle：成本節流檢查失敗仍維持 Claude 可用，但已改為 warning + stack，避免成本保護失效無跡可查。
- `ai_call_logger` caller registry：registry 匯入失敗仍不阻擋 LLM 遙測，但已改為 warning + stack。
- Observability route：promotion review RAG 相似查詢、PPT audit history 缺表、host health probe 寫入、MCP 24h summary 缺表等 fail-safe 區塊已改成 debug/warning log，不再完全靜默。
- Google Drive import：`services/import_service.py` 的日期 `IN (...)` 刪除/驗證查詢已改為 SQLAlchemy bind params，不再把 DataFrame 日期值拼進 SQL 字串。
- 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；`infer_caller_from_stack()` 確認無 caller 後已移除。
- `cache_manager.FingerprintCache` 與 dashboard shared cache 清理維持 fail-open / best-effort，但已補 debug log，避免 cache fingerprint 或檔案清理失敗完全沉默。

## 已驗證為已修或過期

- migration / ORM：`032` 已入庫，`033` host label、`034` embedding_signature、`035` business baseline、`036` incidents 雙欄、`037` action_plans guardrails 均已存在。
- `migrations/031` 權限已是 `644`。
- `app.py` 的 `SYSTEM_VERSION` 已從 `config.py` import，app 內只留版本註解。
- V2 提到的 `app.py` 死 import 與 `scheduler.py import schedule` 已不成立；`app.py` 仍使用 `schedule.run_pending()` 等呼叫。
- `tests/test_phase3f_cleanup_contracts.py` 已補 guard：V2 點名的舊 app imports 不得回來，且 `app.py` 的 active `schedule` 用法不可被誤刪。
- V2 點名的 3 個 silent failure 點位已不是 `except: pass`：OpenClaw 趨勢圖暫存檔清理與 Notification public_url 讀取失敗都會記 log，並由 `tests/test_phase3f_cleanup_contracts.py` 守住。
- Cron 盲區清單多數已補 `_notify_scheduler_failure()`；ROI 月報已避開 09:00 改 09:05，AI smoke 已是 09:10。
- V2 指出的 9 個 cron 盲區已補回歸守門：8 個 `run_scheduler.py` wrapper 必須呼叫 `_notify_scheduler_failure()`，`scheduler.py::run_promo_event_task` 必須呼叫 `notify_failure()`。
- 09:00 排程衝突已有回歸守門：`daily_report=09:00`、`roi_monthly_report=09:05`、`ai_smoke_daily_summary=09:10` 必須保持錯開。
- AutoHeal inline host transition 告警已有 DB transition dedup 守門：`run_host_health_probe()` 只在健康狀態翻轉且 1h 內沒有同方向 transition 時推送。
- CD migration 全範圍冪等已有回歸守門：`.gitea/workflows/cd.yaml` 必須維持 024-099 pattern、`sort | uniq` 與 `for m in $V5_MIGRATIONS` apply loop。
- CD Observability production smoke 已補 timeout 守門：`quick_review.sh --observability-smoke` 必須帶 `--timeout 12`。
- 0-byte `database/momo*.db` 迷惑檔已不存在；真實 SQLite 僅在 `data/momo_database.db`。
- `.gitignore` 已涵蓋 `.claude/worktrees/`、`.tmp_*`、`tmp_*.png`、`MOMO Pro/`、root/uploads/screenshots 與 `MOMO Pro` uploads/screenshots，並由 `tests/test_gitignore_contracts.py` 守住。
- `cache_service.py` 已成為 `cache_manager.py` 的相容 shim，`_SALES_CACHE_TTL` 單一來源有測試鎖住。
- `aiops-core/requirements.txt` 已不存在，`aiops-core/README.md` 已標記此目錄只保留歷史 stub，不應安裝或部署。
- V2 提到的「死依賴」不可整批刪：`beautifulsoup4` 用於多個 crawler、`google-api-python-client` 用於 Google Drive、`google-generativeai` 用於 Gemini paths、`python-pptx` 用於 PPT generator、`matplotlib` 用於 Telegram/圖表/PPT。
- `tests/test_requirements_pinning.py` 已鎖住上述被 V2 誤列的 runtime dependencies：套件需留在 `requirements.txt`，且至少一個 runtime import 證據仍存在。
- `paramiko` 已確認沒有 runtime import；ADR-013 現行實作改以 `utils/ssh_helper.py` 組 CLI `ssh`，因此已從 `requirements.txt` 移除並補測試防止依賴殘影回來。
- `pgvector` Python package 與 `matplotlib-inline` 已確認不是 runtime 依賴：pgvector 走 PostgreSQL extension + 本地 SQLAlchemy `Vector` type，Jupyter inline backend 不屬 production path；兩者已從 `requirements.txt` 移除並補測試。
- `tests/test_pg_sync.py` 已改為 opt-in integration test：預設不再連 localhost PostgreSQL 或建立/刪除測試表，需 `RUN_PG_SYNC_INTEGRATION=1` 且提供 `POSTGRES_PASSWORD` 才執行。
- `services/pg_sync_service.py` 是顯式 opt-in legacy CLI，不是生產自動同步路徑；`tests/test_pg_sync_contract.py` 已守住預設 OFF 與 runtime paths 不自動 import。
- `qwen3:14b` 不是未使用 Ollama 模型：OpenClaw QA、NemoTron dispatch 與 LLM model router 仍有現役路徑；`tests/test_qwen3_runtime_usage.py` 已守住，不能只因體積大就三主機移除。
- Ollama host env 已加白名單護欄：`OLLAMA_HOST*` / `EMBEDDING_HOST` 只接受 GCP-A、GCP-B、111 或 110 proxy，誤設 188/localhost 會回到核准主機。
- Hermes intent 與批量 analyst 已從單次 `resolve_ollama_host()` + raw `requests.post('/api/generate')` 改為 `OllamaService.generate()`，同一請求會依序 retry GCP-A → GCP-B → 111，並保留 `HERMES_KEEP_ALIVE` 與實際 provider 回寫測試。
- NemoTron qwen3 dispatch 的 `/api/chat` tool-calling 路徑已補同一請求三主機 retry：host 失敗會 `mark_unhealthy()` 後再 resolve 下一台，GCP-A 失敗可在同次 dispatch 接 GCP-B/111，三台都失敗才 fallback NIM。
- PPT vision、PPT 文案 final fallback 與 MCP 離線 final fallback 已改走 `OllamaService.generate()`；`OllamaService.generate()` 支援 `options`、`keep_alive` 與 vision `images`，特殊 `/api/generate` 路徑同樣取得三主機 retry。
- OpenClaw QA / daily Hermes template / NemoTron qwen3 的 flag 文件與測試已對齊 Ollama-first 預設 ON；顯式 `false` 才是 Gemini/NIM legacy 緊急退路。OpenClaw QA 已移除單一 `OPENCLAW_QA_OLLAMA_HOST` 主機覆寫，`_call_qwen3_qa()` 改走 `OllamaService` 的 GCP-A → GCP-B → 111 retry 並回寫實際 provider。
- Code Review pipeline 已對齊 Ollama-first：`_hermes_scan()` 與 `_openclaw_assess()` 都先走 `OllamaService` 的 GCP-A → GCP-B → 111 retry；Gemini 僅在 Ollama（與可選 Claude）失敗後以 `code_review_openclaw_gemini` caller 記錄備援，不再以 `code_review_openclaw` 直接 Gemini-first。
- Telegram 圖片商品辨識已對齊 Ollama-first：`routes/openclaw_bot_routes.py` 會先用 `OPENCLAW_IMAGE_VISION_MODEL` 透過 `OllamaService` retry GCP-A → GCP-B → 111；Gemini 只以 `openclaw_bot_image_gemini` caller 作為圖片辨識備援。
- `.env.example` 已補齊 Python runtime 實際讀取的環境變數，`tests/test_phase3f_cleanup_contracts.py::test_env_example_documents_runtime_os_env_keys` 會掃 `app.py/config.py/scheduler.py/run_scheduler.py/routes/services/utils` 的 `os.getenv()` / `os.environ.get()`；只允許 `PYTEST_CURRENT_TEST` 與 `MOMO_ALLOW_INSECURE_CONFIG_FOR_TESTS` 兩個測試內部 key 不進範例。
- `docker-compose*.yml` 使用的 `${VAR}` 也已納入 `.env.example` 契約，包含 MCP compose 的 `TAVILY_API_KEY`、`EXA_API_KEY`、`MCP_POSTGRES_PASSWORD`、`FIRECRAWL_AUTH_KEY`，以及 image tag / Grafana / pgAdmin / Metabase / Grist 變數；`test_env_example_documents_docker_compose_variables` 會守住。
- Market Intel `seed_writer_cli_status` route 已補 API 層回歸：即使 `execute=true` 且環境有 `MARKET_INTEL_SEED_WRITE_APPROVAL`，API 仍不得回吐 token / `approval_token_hint` / 固定 token 文案，且不得 ready 或寫入；`tests/test_market_intel_skeleton.py::test_seed_writer_cli_status_route_never_leaks_approval_token` 會守住。
- Docker 主 compose 的 `momo-app` / `scheduler` / `telegram-bot` 已有 `mem_limit` 與 `healthcheck`，並由 `tests/test_docker_compose_runtime_mounts.py` 守住；V2 提到的 nginx / nginx-monitor / metabase / grist healthcheck 缺口需先看 profiles，這些服務分別被鎖在 `local-dev`、`deprecated`、`bi`，不是 default production path。
- MCP compose 安全邊界已有 `tests/test_mcp_compose_contracts.py`：postgres/omnisearch/firecrawl healthcheck、Firecrawl/Playwright/Redis/filesystem memory guardrails、filesystem-mcp read-only mount 與不接 docker socket 都會被測試守住。
- `_navbar.html` 已移除 V1 點名的 `--momo-legacy-accent` 與舊 hex `#d96f52/#a95846/#9f4f3e`，改用 `--momo-nav-accent*` 接 `--momo-page-accent*` warm tokens；`tests/test_frontend_v2_assets.py::test_legacy_navbar_uses_warm_token_accent_aliases` 會守住。
- `routes/price_comparison_routes.py` 的 MOMO crawler TODO 已接到既有 `services.momo_crawler.search_momo_products()`；未手動上傳 MOMO 商品時會自動抓 MOMO，再交給比價服務。
- 未引用的根層 `templates/list.html` Phase 4 placeholder 已刪除，真實缺貨清單 route 使用 `vendor_stockout_list_v2.html`（或 `ui=legacy` 時的 `vendor_stockout/list.html`）；`tests/test_phase3f_cleanup_contracts.py` 會防止根層 placeholder 回來。
- AI 觀測台 V3 排版規範已補強：`scripts/check_responsive_overflow.js` 會把視覺 overflow offenders 視為失敗，並允許表格/圖表在 `.obs-table-shell`、`.obs-chart-frame` 等局部容器內滾動；`observability-system.css` / `web/static/css/observability-system.css` 已同步新增 bounded table/chart/mobile containment，CSS mirror 與 `quick_review.sh --observability-qa --skip-production` 均通過。
- app.py/BP 路由雙寫已完成收斂：active `@app.route` 為 0，`USE_MODULAR_ROUTES` 與舊 routes registry shim 已不存在；`tests/test_phase3f_cleanup_contracts.py::test_app_py_stays_blueprint_only_for_routes` 會防止 route decorator 回到 `app.py`。
- `app.py` 開頭的歷史「重開機後請依序執行」TODO banner 已移除；入口治理以 `AGENTS.md` / `CONSTITUTION.md` / ADR / memory 索引為準，`tests/test_phase3f_cleanup_contracts.py::test_app_py_does_not_start_with_stale_restart_todo_banner` 會防止 stale 操作清單回流。
- `docs/guides/devops_handbook.md` 已移除活躍手冊中的舊 K8s command 區塊，並把 app 操作改為 Gunicorn HUP 熱重載、Docker Compose 精準 force-recreate、`momo-app` service build；`tests/test_phase3f_cleanup_contracts.py::test_devops_handbook_uses_current_docker_runtime_commands` 會防止 `kubectl`、`docker restart momo-pro-system` 與錯誤 compose service name 回流。
- `/cicd` legacy dashboard 已停用舊叢集副作用：rollback 會回 410，`restart_pods` action 會被拒絕，diagnosis 不再 SSH 執行叢集探測；`tests/test_cicd_legacy_cluster_disabled.py` 會防止 `kubectl` / rollout command 回到 `routes/cicd_routes.py`。
- AI 觀測台 badge/chip 對比規範已補強：`.momo-observability-mode` 內的 badge、pill 與 nested surface 會改走亮底、8px radius、無負字距、可換行且不再殘留低對比 legacy dark-hero 樣式；CSS mirror、`quick_review.sh --observability-ui`、`quick_review.sh --observability-qa --skip-production` 均通過。
- AI 觀測台 rendered visual contract 已入庫：`scripts/check_observability_visual_contract.sh` 會用 Playwright 檢查 10 頁 × desktop/tablet/mobile 的 title typography、surface radius/background、chip contrast、hero height 與水平 overflow；V10.116 main 版 local server 驗證 30 項 PASS。測未部署變更時必須帶 localhost `--base-url`，打 production fail 可能只是正式站尚未部署該版。
- V10.117 已把 AI 觀測台背景語彙收斂為 tokenized dot-matrix：合約會要求 hero/signal/panel surface 的 computed `background-image` 是 `radial-gradient`，並拒絕 legacy `linear-gradient` / `background-image: none` 回流；終端 dot-matrix layer 必須留在 CSS 檔尾以贏過舊 neutralizer。
- `/observability/host_health` 在 SQLite local QA 下已略過 `host_health_probes` persistence，避免 BIGINT autoincrement drift 造成 warning；正式 Postgres session 仍維持 probe history 寫入，`tests/test_admin_observability_routes.py::test_host_health_skips_probe_persistence_on_sqlite` 會守住。
- Telegram `momo:eig:<event_id>` callback 已在 `routes/openclaw_bot_routes.py` 與 `services/telegram_bot_service.py` 實作並有 webhook 測試覆蓋，不是未實作缺口。
- Telegram `date_*` / `goal_*` 不是死 callback handler：按鈕先送 `await:*` 進入輸入等待狀態，使用者下一則文字才由 pending action 消費；`tests/test_openclaw_bot_menu_keyboards.py` 與 `tests/test_openclaw_bot_routes_webhook.py` 已覆蓋。
- `services/ai_automation_smoke_service.py` 不是死 service：`run_scheduler.py` 每日 09:10 掛 `run_ai_smoke_daily_summary_task()`，該 task 會呼叫 `send_smoke_daily_summary()`；`tests/test_ai_automation_smoke_service.py` 與 `tests/test_ai_automation_metrics.py` 已覆蓋。
- `mcp_calls.status` CHECK 已接受 `ok/error/timeout/rate_limited/cache_only`，與 `services/mcp_router.py` 的細分狀態一致。
- DB migration / ORM 覆蓋已有 `tests/test_migration_metadata_coverage.py` 守門，`Base.metadata.tables - migrations CREATE TABLE` 必須為空；`tests/test_ai_observability_models.py` 也鎖住 v5 observability ORM stub。
- V2 BLOCKED migration 守門已補：`031-037` 必須存在且 group/world-readable，`database/momo.db` / `momo_data.db` / `momo_database.db` 迷惑檔不得回來。
- `host_health_probes.chk_host_label_029` 不一致已有 migration 033 修補並補測試：必須重建 CHECK，且接受 `GCP-SSD`、`GCP-SSD-2`、`111 備援` 與兩個 110 Nginx proxy runtime labels。
- `rag_query_log` / `learning_episodes` 缺 `embedding_signature` 已由 migration 034、ORM 欄位、RAG/learning 寫入路徑與 migration metadata 測試覆蓋。
- `incidents` 雙欄相容與 `action_plans` source/status guardrails 已在 migration 036/037、migration metadata 測試與 `tests/test_auto_heal_safety.py` 覆蓋。
- `services/agent_actions.py` 不是死碼：`services/event_router.py` 透過 `SAFE_ACTIONS` registry 動態執行 ADR-012 L2 actions；`tests/test_agent_actions.py` 已鎖住 L2 `SAFE_ACTIONS` 與 L3 `OPS_ACTIONS` 邊界，防止 HITL ops 動作誤進自動白名單。

## 不可盲動

- `services/agent_actions.py` 不能只看靜態 caller 清理；已確認它是 `SAFE_ACTIONS` 動態 dispatch 入口，未來改動必須同步更新 registry 與 EventRouter 測試。
- `logo_circle.svg` / `logo_navbar.svg` / `logo_transparent.png` 不能只因 runtime `rg` 無引用就刪；設計文件仍規劃品牌頁、登入頁、錯誤頁使用。
- 多個永遠 OFF feature flag 屬產品/上線策略決策，不應在清債時直接全部改 ON 或刪除。
- `ai_calls.rag_hit` 不等同 `rag_query_log.saved_call`：跳過 LLM 的 RAG 命中應記在 `rag_query_log.saved_call`；有實際 LLM 呼叫且 caller 明確用了 RAG context 時才適合標 `ai_calls.rag_hit`。

## 本輪已推 commits

- `36d0e5d` 標記 RAG 命中節省 LLM 呼叫
- `20cab6e` 補上 RAG hit logger 回歸測試
- `6817f64` 移除舊 SSH jump 設定殘影
- `44eb369` 補上 MCP filesystem 唯讀白名單
- `2068a37` 修正 Telegram 分類按鈕預設 callback
- `bdb74b1` 告警 BGE embedding 一致性異常
- `d15b221` 細分 MCP 呼叫遙測狀態
- `34db2db` 修正 scheduler 合成告警 trace
- `5785a58` 補齊 scheduler 觀測任務失敗告警
- `a335ab5` 修正 AutoHeal Telegram 觸發者審計
- `d7ae243` 清空 Telegram webhook 使用者上下文
- `ba8510e` 補齊 MCP 早退狀態
- `317ff1b` 共用匯入檔名日期解析
- `c300e49` 記錄 ROI 月報反饋區塊失敗
- `f49413e` 記錄 EA short-circuit 遙測失敗
- `0a75d11` 記錄 Claude 成本節流檢查失敗
- `5625032` 記錄 AI caller registry 匯入失敗
- `0bc6f18` 更新 Claude 盤點修補記憶
- `3cb091f` 記錄 Observability fail-safe 區塊失敗
- `e29529f` 校正 Observability 修補記憶 hash
- `4e6e9bf` 綁定自動匯入日期查詢參數
- `47c59fd` 更新自動匯入修補記憶
- `ae79cdd` 記錄依賴盤點驗證結果
- `2b1174a` 移出誤入的本地變更
- `adfcccf` 補齊盤點修補 commit 清單
- `4256a04` 記錄 Telegram 與 MCP 缺口驗證
- `5285abe` 記錄 DB migration 覆蓋守門
- `f9d3da5` 記錄 AutoHeal DB guardrail 驗證
- `7e92850` 記錄 Agent Actions 動態入口驗證
- `89c400d` 補上 OpenClaw best-effort 區塊紀錄
- `ec5a22d` 記錄 Telegram pending action 驗證
- `f44c429` 補強 AI logger best-effort 診斷
- `8a36856` 補強 Telegram callback 診斷
- `5b52af9` 補強 cache best-effort 診斷
- `497c376` 記錄 AI smoke service 入口驗證
- `b22cbb2` 守住 scheduler 失敗告警覆蓋
- `8026b93` 守住 scheduler 早晨排程錯開
- `eb6886e` 同步 scheduler 排程摘要
- `b24241f` 守住 migration blocker 修補
- `6c86839` 守住盤點誤判依賴
- `2e2b775` 守住 V2 import 清理狀態
- `58ba95b` 守住月結匯入 append 路徑
- `4079f1c` 守住 CD migration 全範圍執行
- `81aa424` 守住 Observability smoke timeout
- `dc99bab` 移出誤入的本地變更
- `546c63f` 守住 V2 silent failure 修補
- `c165081` 守住 host label migration 對齊
- `4921275` 守住 RAG embedding signature migration
- `035b88c` 守住 AutoHeal migration guardrails
- `5b6b35f` 守住 AutoHeal inline 告警去重
- `749eace` 移除未使用 Paramiko 依賴
- `3c65034` 移除未使用 runtime 依賴

## 後續補推 commits（3c65034 之後）

- `2ac751f` 補齊盤點修補 commit 清單
- `6c236eb` 快取當日業績頁面內容
- `0d68f3e` 快取商品看板比價總覽
- `c306fb6` 隔離 PG sync 整合測試
- `8099bb6` 守住 qwen3 現役模型路徑
- `49c576b` 標定 PG sync 為 opt-in 工具
- `1aeb4a4` 移除 AI logger 未用 stack 推斷
- `d02b712` 標明 cache service 相容角色
- `72daa53` 快取業績分析頁面資料
- `8b5a4a3` 接上 MOMO 自動比價爬蟲
- `5942e39` 守住本機產物忽略規則
- `ce20892` 限制 Ollama host 只能走核准節點
- `6313fdd` 對齊 Ollama-first flag 語義
- `d6e8a4f` 忽略本地截圖暫存檔
- `0c9f927` 啟用 Market Intel seed writer CLI gate
- `2130c4f` 守住 AI provider Ollama-first
- `b65a319` 固化 Ollama 三主機路由紅線
- `0380d4c` 接上 responsive overflow quick review
- `86fc9c9` 避免商品看板冷快取阻塞
- `ec93d09` 收緊模組化治理掃描範圍
- `b2ab03f` 入庫 responsive overflow guard 腳本
- `5ee7fd9` 忽略未確認設計審計 dump
- `f8b9b1a` 共用業績分析頁面快取
- `d384c35` 快取業績分析頁面 context
- `d8c7f6f` 快取當日業績頁面 context
- `2f67e16` 共用當日業績頁面快取
- `ab612cb` 補 OpenClaw 選單複核報告
- `c78bb1d` 記錄 Market Intel 正式端只讀複核
- `9ec7713` 補 AiderHeal 靜默失敗診斷
- `28c9555` 修正挑品 Agent SQLite fallback
- `c227bb4` 補競品 Feeder 搜尋詞 fallback 診斷
- `dd8ccdf` 共用業績分析引導頁快取
- `e8497d0` 補業績分析引導頁快取測試
- `f4883b4` 保留 PPT Vision 主機標記失敗診斷
- `bff8c49` 補 Code Review 失敗通知診斷
- `0bdb993` 補 OpenClaw 報表資料解析診斷
- `25e0570` 補齊 AI runtime 環境範例
- `2b2233d` 補齊 OpenClaw 與 DeepSeek 環境範例
- `acef0fa` 守住 runtime 環境變數文件契約
- `ae1895f` 守住 compose 環境變數文件契約
- `73bbc45` 更新 Claude 盤點驗證記憶
- `490336a` 守住 Market Intel seed token 不外洩
- `dc6fc69` 守住核心容器資源與健康檢查
- `7766e35` 守住 MCP compose 安全邊界
- `621c9f2` 守住 optional compose profile 邊界
- `353295a` 移除舊 Navbar accent 色票殘影
- `ca97840` 守住 Agent Actions 動態白名單邊界
- `ba140f1` 移除未引用缺貨清單佔位模板
- `9af9592` 修正 AI 觀測台 V3 排版規範
- `a305b26` 記錄觀測台 V3 排版守門
- `830661b` 守住 app.py 不再新增路由
- `c50180f` 補齊 AI 觀測台 badge 對比規範
- `b7ba54a` 更新 ADR-017 模組化現況
- `b6e6573` 收斂觀測台手機字體與視覺契約
- `c10e6a4` 記錄觀測台視覺契約守門
- `5a21e23` 略過 SQLite host probe 寫入
- `f947469` 融合觀測台點陣視覺語彙
- `60b73e1` 固定觀測台點陣層覆蓋順序
