退路留言要帶「為什麼發不出去」,不是只帶閘的判定(inkstone/ISEP#93)
2026-08-28 第一版漏了這一格,而它剛好就在實測時咬到: 閘判定 pass、Telegram 卻 404(實例上找不到 notify_leo 工作流), 退路留言貼上票之後**只看得到 pass**——真正的斷點一個字都沒進票。 ⇒ 下一個人會去修閘,而斷點根本不在那裡。 把留言內文抽成 fallback_body()(獨立成一支就是為了測得到), 測試從「看原始碼有沒有那個字串」改成**真的產一份留言出來檢查**: 斷點原因、原文、身份欄三格都要在。36 條全綠。
This commit is contained in:
+28
-15
@@ -273,7 +273,30 @@ def gitea_token():
|
||||
return None
|
||||
|
||||
|
||||
def comment_on_ticket(ref, text, gate_fact):
|
||||
def fallback_body(text, gate_fact, why=None):
|
||||
"""退路留言的內文。**獨立成一支就是為了測得到**——這段的內容才是這條退路的價值。
|
||||
|
||||
🔴 **為什麼發不出去**一定要在裡面,不是只寫閘的判定。
|
||||
2026-08-28 第一版漏了這一格:閘明明 pass,票上卻只看得到 pass,
|
||||
而真正的斷點(實例上找不到 `notify_leo` 工作流)**一個字都沒進票**
|
||||
⇒ 下一個人會去修閘,而斷點根本不在那裡。
|
||||
"""
|
||||
return "\n".join([
|
||||
IDENTITY,
|
||||
"",
|
||||
"🔴 **這則本來要用 Telegram 發給 leo,但這個 session 發不出去**——所以貼在這裡。",
|
||||
"",
|
||||
"**送不出去的原因**:%s" % (why or "(沒有記錄,這本身就是個 bug)"),
|
||||
"",
|
||||
gate_report(gate_fact),
|
||||
"",
|
||||
"---",
|
||||
"",
|
||||
text,
|
||||
])
|
||||
|
||||
|
||||
def comment_on_ticket(ref, text, gate_fact, why=None):
|
||||
"""把那則發不出去的訊息貼回票上。回 (ok, 說明)。
|
||||
|
||||
🔴 **同一則不重複貼**:內容雜湊存在狀態目錄,24 小時內一樣就跳過。
|
||||
@@ -284,7 +307,7 @@ def comment_on_ticket(ref, text, gate_fact):
|
||||
return False, "票的寫法是 owner/repo#N,你給的是:%s" % ref
|
||||
owner, repo, num = m.group(1), m.group(2), m.group(3)
|
||||
|
||||
key = hashlib.sha256(("%s|%s" % (ref, text)).encode()).hexdigest()[:16]
|
||||
key = hashlib.sha256(("%s|%s|%s" % (ref, text, why or "")).encode()).hexdigest()[:16]
|
||||
seen = os.path.join(STATE_DIR, "commented-%s" % key)
|
||||
if os.path.exists(seen) and time.time() - os.path.getmtime(seen) < 24 * 3600:
|
||||
return True, "24 小時內已經貼過一模一樣的內容,跳過(不洗版)"
|
||||
@@ -295,17 +318,7 @@ def comment_on_ticket(ref, text, gate_fact):
|
||||
if not tok:
|
||||
return False, "拿不到 Gitea token(GITEA_TOKEN_CLAUDE_CODE 沒設,remote 也沒帶憑證)"
|
||||
|
||||
body = "\n".join([
|
||||
IDENTITY,
|
||||
"",
|
||||
"🔴 **這則本來要用 Telegram 發給 leo,但這個 session 發不出去**——所以貼在這裡。",
|
||||
"",
|
||||
gate_report(gate_fact),
|
||||
"",
|
||||
"---",
|
||||
"",
|
||||
text,
|
||||
])
|
||||
body = fallback_body(text, gate_fact, why)
|
||||
url = "%s/api/v1/repos/%s/%s/issues/%s/comments" % (GITEA_HOST, owner, repo, num)
|
||||
req = urllib.request.Request(
|
||||
url, data=json.dumps({"body": body}).encode(), method="POST",
|
||||
@@ -340,7 +353,7 @@ def notify(text, fallback_ticket=None, dry_run=False):
|
||||
|
||||
if fact["verdict"] == "block":
|
||||
out.append("⛔ 閘說會擋 ⇒ **本支不繞路**,直接走退路。")
|
||||
sent, why = False, "沒有嘗試(閘會擋,繞過去等於拆了那道閘)"
|
||||
sent, why = False, "閘會擋,而繞過去等於拆了那道閘 ⇒ 沒有嘗試送出"
|
||||
else:
|
||||
sent, why = send_telegram(text)
|
||||
out.append(("✅ Telegram:%s" if sent else "❌ Telegram:%s") % why)
|
||||
@@ -350,7 +363,7 @@ def notify(text, fallback_ticket=None, dry_run=False):
|
||||
|
||||
# ── 退路 ──────────────────────────────────────────────────────────
|
||||
if fallback_ticket:
|
||||
ok, detail = comment_on_ticket(fallback_ticket, text, fact)
|
||||
ok, detail = comment_on_ticket(fallback_ticket, text, fact, why)
|
||||
out.append(("✅ 退路(貼回票上):%s" if ok else "❌ 退路(貼回票上):%s") % detail)
|
||||
else:
|
||||
ok, detail = False, "沒有給 --fallback-ticket,沒有票可以貼"
|
||||
|
||||
Reference in New Issue
Block a user