20260901 會議記錄
:::info
-
所有會議記錄 編輯當週文件 準備 總結 - NPO Hub 出席:
- 線上出席:mrorz, bil, nonumpa, alfred
- https://meet.google.com/mrz-dgrd-pri :::
上週待辦
- 追蹤 devops#12:開放 user-driven 爬蟲存取政策
- Log retention / cf-connecting-ip 相關討論(IP & Logging 更新資訊,留待本次會議補充)
- cofacts.ai session 週報:GGM 手動貼到 #collab;MrOrz 準備 DC bot 之後自動化
- MrOrz:看 claude routine 是否能設定 env 放 github token(配合 takedown bot 身份發 PR
- Code changes: https://github.com/cofacts/devops/pull/15
- Tested: https://github.com/cofacts/takedowns/pull/342
- 要改小松果(9/8 → 9/10 (四))
Cofacts.ai
URL resolver 進到 Cofacts.ai
主要 PR: https://github.com/cofacts/ai/pull/118
- Pin url-resolver’s browser to Cloudflare, size the sidecar for it, guard the credentials(merged 2026-08-28)
URL resolver
- 有不一樣 pattern 的 URL,其實只是某些連結本來就不會跳登入
- 請 agent 重新整理了 URL,看有沒有其他網站也和 FB 一樣,有不同 URL 不同實作的狀況
- threads shared URL –> url-resolver oembed 好像就做得不錯 [name=mrorz]
- FB & IG 也是嗎?[name=mrorz]
- 之前 FB preview 還是都是登入畫面,需要再研究 [name=nonumpa]
[!Note] nonumpa 繼續研究
Hybrid search
- feat: add embeddings field for hybrid search(merged 2026-08-30)
- fix(reloadSchema): use snake_case wait_for_completion for ES9 client(opened 2026-08-30,因 ES9 升級 breaking change,still open)
- 這個 PR 更新 semantic search design doc 來符合實作,再麻煩看個兩眼 https://github.com/cofacts/kb/pull/22
- #388 vector search 持續有新 review comment(8/30、8/31),待更新 rumors-db submodule、補 userId/appId backfill
- Issue #79 scanIndex: restore vector validation via
_source_exclude_vectors: false(opened 2026-08-30)
cofacts.ai 收謠言
- M1: a receptionist agent in front of the writer, so pasting a message works(opened 2026-08-23,still open) cofacts/kb
- doc: fold M1’s implementation findings back into the reporting design(opened 2026-08-23,still open)
cofacts.ai 畫面
建立一個 skill frontend 連結:
- penpot file
- penpot MCP
- 無障礙指南
[!Note] MrOrz 先打底(skill + storybook) 之後請 yutin 接手
Misc
cofacts/ai
- Map Gemini token usage ourselves so Langfuse stops under-reporting Vertex AI cost by ~2x(merged 2026-08-30)
- release/20260830(released 2026-08-30)
上週重點整理(2026-08-18 ~ 2026-09-01)
GitHub 活動
- feat: add Storybook for UI components (closes #94)(opened 2026-08-22,still open)
- fix(session): distinguish stale-session 404 from generic ADK errors(opened 2026-08-22,still open)
- fix(auth): decouple authentication state from profile fetch in AuthProvider(opened 2026-08-22,still open)
- Issue #84 Long multimodal runs hit ~300s request timeout with no final answer(closed 2026-08-29)
- Issue #129 External tool: 獨立 citation/URL checker(對應 34% 的負面回饋)(opened 2026-08-23)
- 已經回應說會在 cofactx/ai#118 做
cofacts/rumors-api
- fix: bound url-resolver gRPC calls with a deadline(opened 2026-08-22,still open)
cofacts/rumors-line-bot
- fix: fall back to placeholder when reply text is empty(opened 2026-08-22,still open)
- fix: guard against null ListArticles in groupMessage handler(opened 2026-08-22,still open)
- fix: exclude replies with negative feedback from notifications(opened 2026-08-22,still open)
- fix: keep reply time and hide references for NOT_ARTICLE replies(opened 2026-08-22,still open)
cofacts/rumors-site
- Issue #627 搜尋回應時應加入「搭配訊息」的回應,並調整排序(opened 2026-08-18)
cofacts/takedowns
Discord 重點討論
general
mrorz:調查了一下,發現 cf-connecting-ip 是有進入 cloud logging 的,但只有 rumors-api 有(詳見 8/18 會議記錄) bestian:最近做專案可能會應用到 gpt-oss-safeguard 串接 Cofacts API,想請教如何申請
app-id/app-secret;另外 hackfoldr 上的 API docs 連結無法用 iframe 預覽(屬性應為_blank),後台為 Google Sheets 無編輯權限,請協助處理
alerts
Cloudflare Health Check:cofacts.tw 於 2026-08-31 04:03 UTC 一度回報 Unhealthy
程式開發 (本頻道主要為 GitHub bot 通知,內容已整理於上方「GitHub 活動」段落)
dev
mrorz:cofacts/ai#122 Langfuse 計算價錢的 PR 可以 review 了,包含設計文件(ADR)、unit test 和日後可檢查的 skill;跑了幾個實驗確認可以正確算出 session & trace 價錢 yutin:cofacts/rumors-db#78 修改完成 → mrorz:merged, thanks mrorz:cofacts/kb#22 更新 semantic search design doc 來符合實作,求 review;cofacts/rumors-db#80 解掉 schema update script 壞掉的問題(ES 升級後有 breaking change 未處理),也求 review mrorz:vector search PR #388 有兩個新 review comment:要更新 rumors-db 的 submodule,以及 userId / appId 會是空的、建議塞 backfill 的值
collab
hochin9002:查核「台東十大地雷特產」影片時,AI 把訊息與另一則「國旅補助」訊息連結,原因是 Cofacts 系統中兩則訊息被 bundled 舉報——提醒之後可請 AI 只針對指控本身查核即可 mrorz:這種情況也常發生在提供其他參考資料時,AI 會看到自己沒注意到的細節,一時分不出是幻想還是自己看漏 XD
Log retention TODO 調查結果(2026-08-19)與執行狀況
TODO 1:分析 cloudflared logging 是否記錄 IP / 搜尋過往討論 / 讓 GCP log 收得到 cf-connecting-ip
- cloudflared 本身的 log level 與此無關:
--loglevel debug/info只記錄 cloudflared daemon 與 Cloudflare edge/origin 間的連線活動,不是 HTTP access log。真正決定拿不拿得到 IP 的是 origin app 有沒有記錄 Cloudflare 加的cf-connecting-ipheader - 現況盤點(實查 GCE 上的 gcloud logging + 各 repo 程式碼):
- ✅
rumors-api:src/index.js:37-42用koa-pino-logger(LOG_REQUESTS=1時啟用),預設記錄完整 request headers(含cf-connecting-ip),已在送 GCP Cloud Logging - ❌
rumors-site(site-en/ja/zh/old):完全沒有 request logging;PM2ecosystem.config.js還把out_file/error_file導到/dev/null,架構上不會有 log - ❌
line-bot-zh:抽樣 100 筆沒看到 header/IP - ❓
url-resolver:純文字 log,沒有 header/IP
- ✅
- 過往討論:只有
kb/2026/20260505.md提過一句「空 headers 代表沒有 cf-connecting-ip,即從內部 Docker network 進來」,沒有更早的專門討論 - 挖出的歷史脈絡:AWS 時代(~2023 前)nginx 是 reverse proxy,nginx access log 本身就有 client IP、且接到 CloudWatch;2025-09-28 production 移除 nginx 改用 cloudflared 後,這個 log 來源就消失了,且
20251014.md已經記錄過一次「找不到 request log」的踩坑。目前rumors-api的 pino log 是全站唯一還留著真實來源 IP 的 log 來源 - 額外發現的 bug:2023-08-17(PR #312)設計「GraphQL 層 log 只留 IP、pino log 留完整 header,兩邊用 IP 比對」,但 2025-06-22 的兩個 commit(
9bdd69c、5e11e27)把Array.from(http.headers.entries())改成Object.entries(http?.headers ?? {}),導致 GraphQL log 的headers欄位一直是空{}——這個比對機制目前已失效,需要修
TODO 2:研究 GCP log retention 與 log sink 機制(含費用)
- 現況:
_Defaultbucket retention 30 天、_Required(audit)400 天,都是 GCP 預設值;沒有任何自訂 sink 導到 GCS/BigQuery - 之前討論過,非新問題:
2023/20230817.md(AWS CloudWatch 56GB/月 $43 的成本危機)、2023/20231101.md、2024/20240916.md都討論過但從未落地;2025/20250421.md提過「至少一個月」 - 實際用量(Cloud Monitoring
byte_count量測,2026-08):全 project 約 25-27 GB/月,還在 Cloud Logging 50 GiB/月免費額度內,目前 ingestion 完全不用錢——比 2023 年那次危機小了 10 倍以上 - 費用估算(Google Cloud Observability Pricing:ingestion 超額 $0.50/GiB,30 天以上 retention $0.01/GiB-month):
- 方案 A:直接拉長 Cloud Logging bucket retention 到 1 年 → 約 $2.75/月
- 方案 B:GCS sink + BigQuery external table(只在需要時 query)→ GCS 儲存 $1.2~$6/月(視 storage class),BigQuery 查詢 $6.25/TiB scanned、每月前 1TiB 免費,單次查一整年份都在免費額度內
- 兩種做法在目前量下都便宜到可忽略;方案 B 的優勢是能用 SQL 查結構化欄位,解決現在 log 是一整包字串、只能 regex 找的問題
- ⚠️ 若之後把
rumors-site、line-bot-zh也比照rumors-api開完整 header logging,總量可能明顯上升,屆時免費額度可能撐不住
補充:Cloudflare 端的 Analytics retention 與匯出可能性
- Retention(Business plan):
firewallEventsAdaptive(WAF 攔截事件)只留 3 天;httpRequestsAdaptive/httpRequestsAdaptiveGroups(一般流量分析)留 31 天——後者就是Cloudflare.md記錄的「~4 週」traffic table 的資料來源,前者(WAF 事件)比想像中短很多,之前文件沒特別標出來 - 匯出到 GCP:
- Logpush(Cloudflare 官方、可直接推到 GCS 的原始 log 匯出機制):需要 Enterprise plan,Business plan 完全用不了,跟 TODO 2 查到的結論一樣是死路
- 自建排程打 GraphQL Analytics API(Business plan 可行):可以延長「聚合統計」的保存期,但這是聚合過、可能被 sampling 的資料,不是逐筆原始 log,救不了真正的 forensics 需求
- 若團隊真的需要 Cloudflare 端逐筆可回溯的 log,現實選項只剩「升級 Enterprise」或「全部靠 origin app 自己的 log」(也就是 TODO 1 在做的事)
待開的 devops issue
- 讓
rumors-site、line-bot-zh、url-resolver也記錄 request header(含cf-connecting-ip);順便修rumors-apiGraphQL log 的 header 比對 bug(2025-06-22 迴歸) - 記錄 Cloudflare 端 Analytics retention 現況(31 天/3 天)與匯出限制(Enterprise-only),需考慮第 1 點落地後的用量成長
執行狀況
https://github.com/cofacts/devops/pull/16
[!Note] TODO MrOrz 在七天後
- 檢視 GCS bucket
- 開 BigQuery table
- 改寫 devops 教 agent 怎麼查 log
下週開會
9/10 (四) 晚上已經被 functional thursday 借走
–> 9/10 改線上
Cofacts 正式站狀態報告(2026-08-25 ~ 2026-09-01)
1. GCE 伺服器(cofacts-prod)每日指標
| 日期 | CPU (min|avg|p95|max) | Mem (min|avg|p95|max) | Swap (min|avg|p95|max) |
|---|---|---|---|
| 08-25 | 8.91 | 16.24 | 23.75 | 32.06 % | 62.80 | 66.16 | 68.14 | 77.71 % | 43.65 | 44.92 | 46.26 | 47.36 % |
| 08-26 | 7.43 | 13.64 | 19.35 | 23.78 % | 63.09 | 65.30 | 67.70 | 71.02 % | 43.15 | 45.07 | 47.86 | 49.70 % |
| 08-27 | 8.07 | 13.67 | 18.95 | 21.88 % | 63.68 | 65.80 | 67.83 | 74.31 % | 43.91 | 44.60 | 45.46 | 47.21 % |
| 08-28 | 8.25 | 15.38 | 21.05 | 28.70 % | 62.70 | 65.89 | 68.23 | 77.46 % | 44.01 | 45.60 | 47.47 | 48.48 % |
| 08-29 | 6.98 | 13.69 | 19.83 | 21.51 % | 62.79 | 65.57 | 67.44 | 89.29 % | 44.37 | 45.81 | 47.81 | 47.96 % |
| 08-30 | 7.79 | 14.26 | 20.24 | 25.45 % | 63.26 | 66.59 | 68.60 | 70.78 % | 38.25 | 40.57 | 48.08 | 48.33 % |
| 08-31 | 7.67 | 15.10 | 22.08 | 25.91 % | 63.81 | 66.28 | 68.24 | 82.75 % | 39.88 | 43.38 | 45.27 | 45.62 % |
| 09-01 | 11.76 | 19.52 | 28.61 | 32.25 % | 64.92 | 66.99 | 68.32 | 73.72 % | 43.13 | 44.16 | 46.38 | 46.46 % |
即時狀態:uptime 117 天;load average 2.09/1.59/1.57;Swap 目前使用 1.8G/4.0G;磁碟使用率 87%(58G/67G),建議留意
2. Cloud Run 服務健康狀態
所有 11 個服務皆為綠燈,最近部署皆由 rumors-site-deployment 服務帳號執行,無異常部署者。
| 服務 | 正常區間 (p50) | 穩定度 (p95/p99) | 觀察 |
|---|---|---|---|
| site-tw | CPU ~0.04–0.07 / Mem ~0.74–0.76 | p99 CPU 最高 0.98,Mem p99 常頂到 1.01 | Mem 已逼近配置上限,屬長期現象(與兩週前相同),非本週新增異常 |
| cofacts-ai | CPU ~0.015 穩定 / Mem ~0.06 | CPU p99 0.42(較兩週前 0.35 上升 ~19%) | CPU 尖峰略升,仍在低水位,暫不需處理但建議下週持續觀察 |
| line-bot-tw/en/ja | 極低(p50 < 0.02) | p99 < 0.45 | 正常 |
| site-staging-* | 與正式站相近水位 | Mem p99 常頂到 1.01 | 測試站資源設定偏緊,非急迫問題 |
3. GCE Process 層級資源排名(本週)
記憶體 (RSS Peak Max) | Process | Peak Max | 備註 | | ————————————– | —————————————— | —————————- | | Elasticsearch | 19.7 GB | 穩定,std 64–106,無異常波動 | | node /srv/www/server.js | 1.45 GB(09-01 出現尖峰,平日 ~730–840MB) | | | node /srv/www/build/index.js | 736 MB | | | pm2-runtime (兩個 instance) | ~319–326 MB | 穩定 | | 多個 Chromium renderer (截圖/PDF 產生) | 各 ~290–380 MB,短暫出現 | 屬正常截圖工作負載 |
CPU (Peak):Elasticsearch、server.js、build/index.js 為前三大消耗者,09-01 三者 CPU 皆出現明顯尖峰(std 大幅升高),建議確認 09-01 是否有異常流量或排程任務。
4. 與兩週前(2026-08-11~08-18)跨時期比較
| 項目 | 08-11~08-18 | 08-25~09-01 | 變化 |
|---|---|---|---|
| ES RSS peak | 20.5 GB | 19.7 GB | 略降 |
| server.js RSS peak | 2.86 GB | 1.45 GB | 明顯下降 |
| server.js CPU peak | 496,186 | 261,867 | 明顯下降 |
| build/index.js RSS peak | 596 MB | 736 MB | 上升 |
| build/index.js CPU peak | 137,624 | 206,673 | 上升 |
| python main.py(cofacts-ai on GCE)RSS peak | 312 MB(進前 15 名) | 未進前 20 名 | 記憶體占用已降低 |
| cofacts-ai CR CPU p99 | 0.349 | 0.415 | 上升 ~19% |
| cofacts-ai CR Mem p99 | 0.071 | 0.090 | 略升,仍低水位 |
值得注意:python main.py(依 [[project_cofacts_ai_python]] 為 6/7 架構變更後過去 GCE 最大 swap 消耗者)本週已跌出記憶體前 20 名,過去的記憶體壓力疑似已緩解,可持續觀察確認是否穩定。server.js RSS/CPU 大幅下降則是本週最正面的變化。
總結建議
- 磁碟 87% 使用率需列入下次檢查追蹤項目。
- 09-01 當日 ES / server.js / build-index.js CPU 同步出現尖峰,建議查看當天是否有排程任務或流量突增。
cofacts-aiCloud Run CPU p99 緩升,暫無需處理,列入觀察。python main.py記憶體佔用改善,符合先前 swap 問題可能已緩解的推測,建議下次檢查時確認是否持續。