讀者站上回報(Supabase)→ 分類/反 spam/去重 → GitHub issue(對齊既有 template)→ 接 MAINTAINER 飛輪。Routine twmd-feedback-triage fires 07:00 daily(maintainer-am 之前); manual via "/twmd-feedback-triage" or "跑 feedback triage" or "把回報轉成 issue". TRIGGER when: routine twmd-feedback-triage fires / user says "跑 feedback triage" / "處理讀者回報" / "把站上回報開成 issue".
業務邏輯 canonical 在 FEEDBACK-TRIAGE-PIPELINE.md。 本 skill 是薄殼,只 pointer + HARD gate,不複寫 threshold / SOP / step。
跑 /twmd-become review 完整走 BECOME_TAIWANMD.md Step 0-9。Review mode self-test(含 Q13 anti-bias + Q14 cross-session)全過才進 Stage 1。
ACK 一行(寫 memory 頂部):
✅ BECOME ack: mode=review / 8 organ 最低=<consciousness-snapshot.sh> / Q13=PASS / Q14=PASS開 issue = 機械轉錄讀者原話(可自動)。以維護者身份回覆 / close / merge 永遠留人類 —— 那是 MAINTAINER-PIPELINE 的事,不在本 routine。
完整 5 stage(BECOME → PULL → TRIAGE → FILE → WRITE-BACK → FINALE)讀 FEEDBACK-TRIAGE-PIPELINE.md §每 stage。核心動作:
git pull origin main
# 機器身份:開 issue 走 GitHub App,不用宿主機的哲宇帳號(HG11)
export GH_TOKEN="$(bash scripts/tools/gh-app-token.sh)"
bash scripts/tools/gh-app-token.sh --whoami # 應為 {"issues": "write", "metadata": "read"}
# 先 dry-run 看分類(HG2 無 email / HG5 spam / HG6 dedupe 自己核一遍)
node scripts/feedback/triage.mjs
# 確認 OK 才 --commit(真開 issue + 回寫 status)
node scripts/feedback/triage.mjs --commit
# 某筆不能開成公開 issue(例:指涉具名第三人的指控)→ 排除那筆但照樣跑完(HG13)
node scripts/feedback/triage.mjs --commit --exclude <feedback-id>未配置 Supabase(SUPABASE_URL/SUPABASE_SERVICE_KEY 缺)→ emit「feedback backend 未配置,skip」,不算 fail(escalation 只看 quality gate)。
triage.test.mjs regex 守,CI 必綠)security-review label + banner,不 auto-act,留人類 gate 處置。GH_TOKEN 必須是 App installation token(ghs_ 開頭)。
空值或缺失 = 停手,不要讓 gh 退回哲宇帳號把 issue 掛成維護者親開。docs/feedback/archive/(無 email),
issue 留言 sync 進 §溝通紀錄。收官前 git add docs/feedback/archive/(不進 git = 主權層失效)。archive-reconcile=N/M。⚠️ = 有 filed 但無 git 紀錄(triage 之外
補標 filed 會繞過主權層)→ 用 buildArchiveRecord() 補齊,不要手寫。印 unavailable
不等於對得起來。只看 archive-scanned=N 是 proxy signal(數存在的檔,量不出缺席)。comment-reconcile=N/M。三個方向意義不同:
⚠️ 漏收 = sync 沒收到(破口,要查)/⚠️ 抓不到留言 = gh/token 壞了(不准讀成對得起來)/
上游已刪留言…git 留著 = 留言在 GitHub 被刪、git 留住了(主權層正常,不是問題)。
只看 archive-comments-synced=N 是 proxy signal——0 分不出「沒有新留言」跟「一則都抓不到」。--exclude <id>,不要整條不跑:判斷某筆不能開成公開 issue 時(指涉
具名私人、跟監細節、要求身份保密的檢舉信 — 三道 HARD gate 全會放行、分類器會判 file),
用 --exclude 排除後照樣 --commit,status 維持 new 留人類決定收尾,兩道對賬不受影響。
整條 --commit 不跑 = 保管那半跟著轉錄那半一起消失(LESSONS
zero-input-cycle-drops-the-reconciliation)。攔下後升 OBSERVER-QUEUE 等哲宇,不自己回覆回報者。/twmd-finale → memory 必含 BECOME ACK、file/reject/skip count、開的 issue #N、archive 檔數、
archive-reconcile=N/M(HG12b)+ comment-reconcile=N/M(HG12c)兩道對賬結果、Handoff 三態。
commit 前:git add docs/feedback/archive/(per HG12,讓回報+溝通紀錄落進 git)。
ARGUMENTS: (none — script 自己讀 Supabase status='new')
18d0248
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.