From 9d20ef925eec91cecc1c8fce70e3f0d362622e09 Mon Sep 17 00:00:00 2001 From: richblack Date: Thu, 27 Aug 2026 12:15:20 +0800 Subject: [PATCH] =?UTF-8?q?subtask=20=E6=8C=87=E6=B4=BE=E4=BA=86=E4=BA=BA?= =?UTF-8?q?=E5=B0=B1=E4=B8=80=E5=AE=9A=E8=A6=81=E5=AF=AB=E4=B8=8B=E4=B8=80?= =?UTF-8?q?=E6=AD=A5=E2=80=94=E2=80=94=E4=B8=8D=E7=84=B6=E6=96=B0=E5=AD=90?= =?UTF-8?q?=E7=A5=A8=E4=B8=80=E9=96=8B=E5=87=BA=E4=BE=86=E5=B0=B1=E6=98=AF?= =?UTF-8?q?=E3=80=8C=E6=A3=92=E5=AD=90=E6=B2=92=E6=9C=89=E4=B8=8B=E4=B8=80?= =?UTF-8?q?=E6=AD=A5=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 實跑 ticket mine 時自己抓到:剛用 subtask 開的 #143 顯示 「❌ 沒有人寫下一步」——工具自己造出了它要消滅的那個狀態。 Co-Authored-By: Claude Opus 5 --- docs/governance/sdd-gitea-governance.md | 4 +++- scripts/ticket | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/governance/sdd-gitea-governance.md b/docs/governance/sdd-gitea-governance.md index a3a6722..198596e 100644 --- a/docs/governance/sdd-gitea-governance.md +++ b/docs/governance/sdd-gitea-governance.md @@ -826,8 +826,10 @@ PATCH /repos/inkstone/ISEP/issues/56 {"state":"closed"} ← 子票還開著 ### 16.7 工具與機械閘 ``` -scripts/ticket subtask <母票> --title -F <檔> [--label] [--assign] +scripts/ticket subtask <母票> --title -F <檔> [--label] [--assign X --next "<一句>"] 討論串裡的一件事 → 子票 + 回鏈 Parent: + Gitea 原生相依(三格一次到位) + 🔴 `--assign` 一定要配 `--next`:有人被指到票上,他撈到它的第一件事就是問 + 「所以我要做什麼」——那句話開票當下就要寫,不是等他重讀整串 scripts/ticket handback <票> --to --next "<一句話>" [--label] [--evidence] 收工 = 指派 + 改 tag + 寫下一步,一個動作三件事 scripts/ticket mine [--user <誰>] diff --git a/scripts/ticket b/scripts/ticket index bd40252..bc67b41 100755 --- a/scripts/ticket +++ b/scripts/ticket @@ -409,7 +409,8 @@ def cmd_subtask(argv): """ if len(argv) < 1: die("用法:ticket subtask <母票 owner/repo#N> --title \"\" -F <內文檔>\n" - " [--repo <收件 repo,預設跟母票同一個>] [--assign <誰做>] [--label ]") + " [--repo <收件 repo,預設跟母票同一個>] [--label ]\n" + " [--assign <誰做> --next \"<他第一件事要做什麼>\"] ← 指派了就一定要寫下一步") powner, prepo, pnum = parse_ref(argv[0]) def opt(name, default=None): @@ -432,6 +433,12 @@ def cmd_subtask(argv): repo = opt("--repo", prepo) label = opt("--label", "s/todo") assign = opt("--assign") + nxt = opt("--next") + if assign and not nxt: + die("🚫 指派了人卻沒寫 --next。\n" + " **有人被指到這張票,他撈到它的第一件事就是問「所以我要做什麼」**——\n" + " 那句話現在就要寫下來,不是等他重讀整串。\n" + " (沒有要指派給誰就不要加 --assign,那張票會留在票池等人領。)") body = (f"Parent: {powner}/{prepo}#{pnum}\n" f"> 這張票是從母票的討論串裡長出來的一件事。\n" @@ -445,7 +452,11 @@ def cmd_subtask(argv): print(f" tag:{label}(它卡在哪一段)") if assign: api(f"/repos/{ORG}/{repo}/issues/{cnum}", {"assignees": [assign]}, method="PATCH") + api(f"/repos/{ORG}/{repo}/issues/{cnum}/comments", + {"body": f"{BATON_MARK} → `{assign}`\n\n**下一步**:{nxt}\n\n" + f"(這張票是 `{powner}/{prepo}#{pnum}` 的相依——它沒關,母票關不掉)"}) print(f" 指派:{assign}(誰該動)") + print(f" 下一步:{nxt}") # 🔴 相依掛不上去 = 這張子票對母票是隱形的 ⇒ 整個動作算失敗,要讓人看到 api(f"/repos/{powner}/{prepo}/issues/{pnum}/dependencies",