fix: 要 leo 動手的留言第一行掛人閘記號 👤(inkstone/ISEP#123)
leo 一天只看兩眼,要在一長串留言裡一眼認出「這則在等我動手」。 機器產生的 ARM 請求第一行是 `🔐 ARM 請求`(機器術語)沒有 👤, 而他手寫的交棒都以 `👤 Leo:` 開頭——規範在人身上、不在機器上。 - scripts/gitea-arm-request.sh:第一行改成 `👤 Leo:回這則、貼下面那組碼,就放行這一次 —— <任務>`(🔐/nonce 照舊, nonce 仍單獨成行,gitea-arm-check 的比對不受影響)。加離線印內文的 ISEP_ARM_PRINT_BODY=1 供測試。 - scripts/ticket handback --to Leo:交棒留言第一行改掛 `👤 Leo:<下一步>`, 🏃 那一塊照舊留著(baton-handback-guard 靠留言有沒有 🏃 判斷交棒了沒, 拔掉會漏擋);交回總管 claude-code 維持第一行 🏃、不掛 👤。 body 抽成純函式 handback_comment_lines 供離線驗。 - 掃過的其他 comment-poster 皆非「要 leo 動手」的閘、未改(decide/subtask/ handoff/triage/compose/claim/pr-verdict/milestone-account/gitea-arm-check/ isep-notify 退路留言,理由記在 docs/hooks-inventory.md #123 note)。 測試:gitea-arm-check.test.sh 16→19、test-ticket-handoff-writeback.sh 49→54; comment-carries-task-guard(29/29)、baton-handback-guard(24/24)無回歸。 版本待總管定。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TGxitYq49FzYC7EFkbhzF5
This commit is contained in:
+25
-7
@@ -679,6 +679,30 @@ BATON_MARK = "🏃 **棒子交回**"
|
||||
HANDBACK_TO = os.environ.get("ISEP_HANDBACK_TO") or "claude-code"
|
||||
|
||||
|
||||
def handback_comment_lines(to, nxt, ev=None, openn=None):
|
||||
"""交棒留言的內文(純函式,好離線驗)。
|
||||
|
||||
inkstone/ISEP#123:`--to Leo` =「要 leo 親手做」⇒ **第一行掛人閘記號 `👤`**,
|
||||
leo 一天只看兩眼,他要在一長串留言裡一眼認出「這則在等我動手」。他手寫的交棒
|
||||
都以 `👤 Leo:` 開頭,機器貼的這則本來反而沒有——這正是本票要補的那個記號。
|
||||
|
||||
🔴 **🏃 那一塊照舊留著,不是可有可無**:baton-handback-guard.sh 用「這張票的留言
|
||||
裡有沒有 🏃」判斷這條線交棒了沒(`any("🏃" in body)`),拔掉它 = 漏擋。
|
||||
交回總管(claude-code)維持第一行 🏃、不掛 👤——那不是等 leo 動手的留言。
|
||||
"""
|
||||
lines = []
|
||||
if to == "Leo":
|
||||
lines += [f"👤 Leo:{nxt}", ""]
|
||||
lines += [f"{BATON_MARK} → `{to}`", "",
|
||||
f"**下一步**:{nxt}"]
|
||||
if ev:
|
||||
lines += ["", f"**證據**:{ev}"]
|
||||
if openn:
|
||||
lines += ["", "**未關的相依**(它們全關之前這張票關不掉):"]
|
||||
lines += [f"- {i['repository']['full_name']}#{i['number']} {i['title'][:60]}" for i in openn]
|
||||
return lines
|
||||
|
||||
|
||||
def _labels_of(owner, repo):
|
||||
return {l["name"]: l["id"] for l in api(f"/repos/{owner}/{repo}/labels?limit=100")}
|
||||
|
||||
@@ -1123,13 +1147,7 @@ def cmd_handback(argv):
|
||||
deps = _deps(owner, repo, num)
|
||||
openn = [i for i in deps if i["state"] == "open"]
|
||||
|
||||
lines = [f"{BATON_MARK} → `{to}`", "",
|
||||
f"**下一步**:{nxt}"]
|
||||
if ev:
|
||||
lines += ["", f"**證據**:{ev}"]
|
||||
if openn:
|
||||
lines += ["", "**未關的相依**(它們全關之前這張票關不掉):"]
|
||||
lines += [f"- {i['repository']['full_name']}#{i['number']} {i['title'][:60]}" for i in openn]
|
||||
lines = handback_comment_lines(to, nxt, ev, openn)
|
||||
api(f"/repos/{owner}/{repo}/issues/{num}/comments", {"body": "\n".join(lines)})
|
||||
|
||||
api(f"/repos/{owner}/{repo}/issues/{num}", {"assignees": [to]}, method="PATCH")
|
||||
|
||||
Reference in New Issue
Block a user