Skip to main content

elf-linear-superpowers

把 superpowers 生命週期(brainstorming → using-git-worktrees → writing-plans → executing-plans / subagent-driven-development → requesting/receiving-code-review → verification-before-completion → finishing-a-development-branch)接到 Linear ELF EXPRESS 團隊的 [Spec]/[Plan] issue,並涵蓋不改程式的 [維運] 單。當使用者提到 Linear issue 編號(E-xx)、說「照 E-xx 做」、要開新功能、新需求或維運工作,或要執行任何 superpowers 步驟時使用;也用於發版後清理(刪分支、清理 worktree、release-cleanup)與擔任發版審計員。

Source facts

Repository
elf-express/skillshare-source
Last source activity
October 28, 2026 at 01:02
Detected SKILL.md language
Chinese
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
elf-linear-superpowers
description
把 superpowers 生命週期(brainstorming → using-git-worktrees → writing-plans → executing-plans / subagent-driven-development → requesting/receiving-code-review → verification-before-completion → finishing-a-development-branch)接到 Linear ELF EXPRESS 團隊的 [Spec]/[Plan] issue,並涵蓋不改程式的 [維運] 單。當使用者提到 Linear issue 編號(E-xx)、說「照 E-xx 做」、要開新功能、新需求或維運工作,或要執行任何 superpowers 步驟時使用;也用於發版後清理(刪分支、清理 worktree、release-cleanup)與擔任發版審計員。
metadata
{"version":"2.4.0","owner":"Elf Express"}
# Linear × superpowers 生命週期 > **正本在 Linear。** 本 skill 是 Linear 團隊文件的執行摘要,兩邊衝突時以 Linear 文件為準,並提醒使用者更新本 skill。 > > | 文件 | 內容 | > |---|---| > | 開發流程規範:Spec/Plan × superpowers | 本流程的完整規範 | > | 流程總覽(給所有 AI):從開單到收尾 | 步驟總表、狀態對照、八條鐵則、接手判斷 | > | 隊友規範:角色、命名與回報 | 統籌與 subagent 的角色、命名、回報 | > | 分支規範:三種 repo 類型 | 分支用途、命名、發佈、hotfix、git-guard | > | 流程:維運單 | 不改 repo 的維運工作 | > | Linear 巡檢規則 | 可自動檢查的規則 R1–R13、W1–W6 | > > 版本:2026-10-20 核准稿(對齊 superpowers v7.0.0;Linear 正本於發版時依核准稿更新) Linear 是規格與計畫的唯一來源(single source of truth)。superpowers 各 skill 照常執行,但**產出寫進 Linear issue,不寫 `docs/superpowers/specs/`、`docs/superpowers/plans/` 檔案**(除非使用者明確要求另存)。superpowers 允許使用者偏好覆蓋這兩個預設位置。 本機副本只有兩種,都不是正本:步驟 1 實作者檢查用的 Spec 暫存檔(檢查完刪除),以及步驟 4 開工時匯出到 worktree `.superpowers/sdd/` 的 Plan 與 Spec,給 superpowers 的 ledger、task brief 與審查包使用(見步驟 4)。匯出檔不進版控;與 Linear 不一致時以 Linear 為準,重新匯出。階段 Guard 另用兩個小檔,只記單號與核准,也不是正本:步驟 3 核准後由留下核准的審計員依 Linear 核准留言用核准憑證建立器建立的核准憑證、步驟 2 建的狀態檔;計畫有沒有核准,以 Plan 上的「計畫已核准」留言為準,Linear 留言是核准的唯一正本,憑證只是讓 Guard 讀得到的快取。 每個步驟結束時,都要把結果回寫到對應的 Linear 單(改狀態、勾 checkbox 或留言),不能只停留在對話裡。讀不到 Linear MCP 時先告訴使用者,不要改寫到本地檔案。 ## 與上游 superpowers 的分工 本 skill 對齊 obra/superpowers **v7.0.0**(2026-10-09)。superpowers 的流程行為以上游為準,本 skill 只補上游沒有的部分:Linear 紀錄、分支與發版規則、稽核留痕。本 skill 是團隊規範,等同使用者指示;上游 `using-superpowers` 規定使用者指示優先於 skill,所以兩者衝突時以本 skill 為準。**本 skill 覆蓋上游的地方全部列在下表,表外一律照上游做**。本 skill 對上游做法的轉述(四種停止條件、模型級別、5 項自審等)都是摘要,以上游原文為準。 | 上游預設 | 本團隊改為 | 原因 | |---|---|---| | brainstorming 把設計寫進 `docs/superpowers/specs/`;writing-plans 把計畫寫進 `docs/superpowers/plans/` | 寫進 Linear 的 Spec、Plan;步驟 4 才匯出本機副本 | Linear 是唯一來源,稽核可追溯 | | 快速、明確的小事直接做 | 只要會 commit 到 repo,就開單一開發工作單,兩道保險不省略 | 每個變更都要有工作單與證據 | | 使用者說跳過提問直接做時,brainstorming 結束、HARD-GATE 一併解除 | 跳過的只是訪談;仍要開單(Spec/Plan 或單一開發工作單),Spec/Plan 仍要定案、審計員核准,兩道保險不省略 | 每個變更都要有工作單與證據 | | 使用者同意的 spike 可以直接做,不寫測試、跳過計畫與審查 | spike 只在拋棄式 worktree 裡做(不用 Plan 的 worktree:spike 的 commit 會混進開發分支;也不為了 spike 建核准憑證),不 commit 進開發分支、不開 PR;要留下成果就另開單 | 拋棄式探索不進 repo | | 設計核准後下一步只能是 writing-plans;writing-plans 說 worktree 在執行時才建 | Spec 定案後**先寫 Plan**;取得「計畫已核准」留言、核准憑證 `verify` 通過、相依條件(blocked by 的單都已合進 `dev`)確認後,才走步驟 2 建 worktree(分支用 Plan 編號、基線測試留言、Orca 連單、狀態檔) | Guard 在本 Plan 的 worktree 建立前沒有保護對象:主目錄的分支不是 Guard 認得的格式,判斷順序第 5 條一律放行,核准前不在主目錄寫實作檔靠 elf-team-rule 規則 31 與步驟 3 第 1 項,不是靠狀態檔。核准前先建分支與狀態檔,只是讓一條還不確定要不要做的分支先存在,計畫被退回時還要回頭清掉(E-423 審計,2026-10-25) | | 計畫在對話裡核准 | 審計員在 Plan 留言「計畫已核准(YYYY-MM-DD,審計員:<模型>)」才算核准 | 對話不留紀錄 | | using-git-worktrees 優先用原生 worktree 工具 | 不用 `EnterWorktree` 建 worktree(它只建在 repo 內);用 `git worktree add` 建在 repo 外同層(規則 31),再切進去(見步驟 2) | 不碰主目錄 | | 計畫和實際不符時只有四種情況停下來 | 另加兩種:需要改規格(裁決不能改 Spec);elf-team-rule 規則 13 列的 git 停止條件(`--ff-only` 失敗、衝突、push 被拒等),一律照規則 13 停下,不適用裁決制 | 規格變更要使用者核准;git 異常一律先回報 | | 最終審查後殘留的問題,到 finishing-a-development-branch 列選項時才告訴使用者 | 殘留的 Critical 不進步驟 6:先在 Plan 留言列出,由使用者決定修或停 | 驗證與發版前先處理嚴重問題 | | finishing-a-development-branch 選單有「本地合併」 | 開發分支只開 PR 合進 `dev`;本地合併只用於規則 18、26 的情況 | 分支規範 | | 使用者打字 `discard` 後,finishing-a-development-branch 執行 `git branch -D` 與 `git worktree remove` | `discard` 只改 Linear 狀態(Plan → 已取消,見步驟 7),不刪分支,也不移除 worktree;要刪由 Eddie 個案決定並自己刪,AI 不刪、不給刪除指令(規則 19「已取消的 Plan」) | 刪除不可逆,已取消的 Plan 沒有發版證據可核對(E-391,Eddie 2026-10-25 決定) | | subagent-driven-development 收尾段在最終審查後用 `rm -rf <工作區>` 刪除工作區 | 不刪:`.superpowers/sdd/E-<Plan 編號>-plan/` 保留,隨 worktree 由清理實作者的 `release-cleanup` 移除(規則 36);最終審查後只在 Plan 留言「Rulings I made」總表 | 發版前還可能回頭修正(步驟 6、PR 審查後),ledger 要留著;session 自己刪除沒有第二個角色核對(E-425,Eddie 2026-10-28 決定) | | 裁決(Ruling)記在 ledger,收尾時在對話回報 | 每個 Task 完成時把該 Task 的裁決原文留言到 Plan;最終審查後再留一則「Rulings I made」總表 | ledger 不進版控、會隨 worktree 由 `release-cleanup` 移除;session 中斷時 Linear 仍有紀錄 | 另有幾項是團隊另加的限制,上游沒有規定、也不衝突:單一 Plan 的 Task 建議 3–5 個、超過 10 個必拆(elf-team-rule 規則 16);工作量大時在同一個 Spec 底下增加 Plan(規則 17);超出 Spec 的需求不裁決(見步驟 4);並行的問題調查同時最多兩條線;計畫可以交給計畫撰寫隊友寫(見隊友表);階段 Guard(E-377,Claude Code 的 hook)在核准失效(「計畫已修改 vN」或「核准撤回」使憑證被 `revoke`)或本機還沒有憑證時,擋檔案工具寫 repo 裡 `docs/superpowers/` 以外的檔案,靠步驟 2 的狀態檔與步驟 3 第 9 項的核准憑證運作(憑證由留下核准的審計員依 Linear 核准留言用建立器建立,實作者只 `verify`;Linear 留言是唯一正本、憑證只是快取),說明見 skillshare-source 的 `docs/superpowers/guard.md`。 更新 superpowers(`skillshare update _superpowers`)前先讀上游 `RELEASE-NOTES.md`;行為有變動就開單同步本 skill 與團隊範本,同步後更新本節的版本。 ## 先分流:走哪條路 | 這件事… | 走 | |---|---| | 要 commit 到 repo,且需要設計 | 本 skill 的 Spec/Plan 流程 | | 要 commit 到 repo,但不需要設計(明確錯誤修正、緊急修正、小型改善) | 單一開發工作單(仍要兩道保險) | | 不 commit 到 repo(備份、AG 複寫、網路、主機、憑證、帳號、稽核佐證) | **維運單**(見文末「維運單」) | | 不確定要不要設計 | 先開 Spec,用 brainstorming 談。brainstorming 判斷為快速小事或小變更時:**先**把 Spec 改為已取消、**再**改 Plan(子單先關可能觸發父單自動改為已取消),各留言「規模判斷:小變更,改開 E-xxx」,另開單一開發工作單,把對話中講定的做法寫進「修正方式」 | 同一件事兩者都有時拆兩張:先開維運單把事情做掉,工具化另開 Spec/Plan。 單一開發工作單用的上游 skill:using-git-worktrees(照步驟 2 建在 repo 外同層,分支用該單編號,不建狀態檔;這種單沒有計畫核准這一關,開單後就可以建 worktree)→ 錯誤類先用 systematic-debugging 找出根因 → test-driven-development → requesting-code-review(照上游的審查範本派全新審查者,明確指定最強模型審整個分支;`BASE_SHA` 用 `git merge-base origin/dev HEAD`,hotfix 用 `origin/release`,不用上游範例的 `main`;沒有計畫檔,不用 `review-package`)→ receiving-code-review(逐項處理並留言)→ verification-before-completion → finishing-a-development-branch。不匯出、沒有 ledger:審查結果、延後的 Minor、決定不修的理由直接留言到該單。改到 skill 的單,另照步驟 3 的 writing-skills 做法先跑壓力情境再改。 ## Linear 設定(ELF EXPRESS 團隊,key:E) | 項目 | 值 | |---|---| | Spec 模板 | `Spec 設計規格`(建立時自動帶出子 issue `[Plan]`) | | 標題 | `[Spec] 主題`、`[Plan] 主題`,兩張同主題;維運單 `[維運] 主題` | | 階段 label(單選) | `Spec`、`Plan` | | 工作類型 label(單選) | `新功能`、`改善`、`錯誤`、`維運`;加在 Spec 或單一工作單,Plan 不加;`稽核` 可另加 | | 已退役 label | `業務需求`、`自主規劃`,不再使用 | | 狀態 | 待規劃 → 待辦 → 進行中 → 驗證中 → 已完成;另有 已取消、Duplicate、Triage | | 父子自動化 | 子 issue 全部完成 → 父 issue 自動關閉;子 issue 全部取消 → 父 issue 自動改為已取消;父 issue 關閉**不會**關子 issue | | Estimate | Spec 與 Plan **必填**;維運單選填 | | GitHub PR 自動化 | 開 PR → 進行中;PR 審查活動 → 驗證中;PR 合進 `dev` → 驗證中(自動,Eddie 依目標分支設定;設定完成前依 elf-team-rule 規則 10 的過渡期處理)。已導入 dev/release 的 repo,「已完成」在發版完成後於步驟 7 手動設定;還沒導入的 repo 維持 PR merge → 已完成 | ## 生命週期對照 `#` 是階段編號,也是全文引用的名稱(「步驟 2」「步驟 3」);**執行順序照表列順序**,步驟 3(寫計畫並取得核准)排在步驟 2(建 worktree)之前。 | # | superpowers | 性質 | Linear 單 | 狀態 | 轉換條件/回寫內容 | |---|---|---|---|---|---| | 0 | 開單 | — | 新建 Spec+子 Plan | 待規劃 | 套模板;負責人、專案、Spec estimate;巡檢 R1–R7 自查;回報編號 | | 1 | brainstorming | 必經 | Spec | 待規劃 → 進行中 | 先請使用者描述、逐段回放,確認後寫進 Spec;判斷規模;實作者檢查 → 結果補進 Spec;定案留言「規格已定案」 | | 3 | writing-plans | 必經 | Plan | 待規劃 → 待辦 | Spec 已定案才開始,此時還沒有 worktree;計畫只記決策;寫完 5 項自審、設 Plan estimate 後改待辦;審計員留言「計畫已核准」後,審計員先用建立器建核准憑證,實作者 `verify` 通過才可進步驟 2 | | 2 | using-git-worktrees | 必經 | Plan | — | **計畫已核准、憑證 `verify` 通過、相依確認後才做**;分支用 Plan 編號;基線測試留言;提醒在 Orca 連 Plan 單;建狀態檔 | | 3a | 排進週期 | 必經 | Spec+Plan | 維持 | 使用者決定這兩週要做才排;兩張排同一週期;Plan 留言 | | 4-1 | executing-plans(Native) | 二擇一 | Plan | 待辦 → 進行中 | 匯出計畫;每個 Task 完成時勾該 Task 的全部步驟,並留言完成摘要與裁決 | | 4-2 | subagent-driven-development(Subagent-driven) | 二擇一 | Plan | 待辦 → 進行中 | 同上;留言另含該 Task 的審查結論 | | S1 | test-driven-development | 必經(每個 Task) | Plan | — | 即 Task 的 5 個步驟;executing-plans 規定開工就載入,subagent-driven-development 的實作者照 Task 的步驟做 | | S2 | systematic-debugging | 按需 | Plan | — | 現象、根因、修法、新測試留言 | | S3 | dispatching-parallel-agents | 按需 | Plan | — | 只用在彼此獨立的問題調查;同一張 Plan 的實作 Task 不並行;並行清單與整合結果留言 | | S4 | writing-skills | 必經(新增或修改 skill 的單) | Plan | — | 每個要改的 skill 先跑壓力情境(RED),改完用同一組情境再跑(GREEN);兩次的結果留言 | | 5-1 | requesting-code-review | 必經・保險① | Plan | 進行中 → 驗證中 | 所有 Task 勾完即改;最強模型審整個分支;結果依嚴重度留言;最終審查後留言「Rulings I made」總表 | | 5-2 | receiving-code-review | 必經 | Plan | 維持驗證中 | 逐項處理方式留言;只修一輪(4-2 派修正隊友+範圍重審;4-1 自己修、用測試驗證),殘留的由使用者決定 | | 6 | verification-before-completion | 必經・保險② | Plan+Spec | 維持驗證中 | 證據分兩段留言:程式本身的證據合進 `dev` 前必須完成,與 `release` 有關的證據發版完成前補齊;勾 Spec 驗收條件 | | 7 | finishing-a-development-branch | 必經 | Plan →(自動)Spec | 開 PR → 進行中;合進 `dev` → 驗證中(自動);發版完成 → 已完成(手動);或 已取消 | 巡檢全規則自查;收尾選項與結果留言;已完成的三個條件與自動化設定前的過渡期見 elf-team-rule 規則 10 | ## 各步驟做法 ### 0. 找到或建立工作單 - **有編號**(如 `E-31`):`get_issue` 讀取。是 Spec 就再讀子 issue(label `Plan`);是 Plan 就先讀父 issue(Spec)。依下表判斷在哪一步,從那裡接續,**不要從頭來**: | 看到的狀態 | 現在在 | |---|---| | Spec 待規劃 | 步驟 1 | | Spec 進行中、沒有「規格已定案」留言 | 步驟 1 | | Spec 有「規格已定案」、Plan 待規劃 | 步驟 3(先在 Linear 寫計畫;核准後才做步驟 2) | | Plan 待辦、沒有「計畫已核准」留言,或最後一則「計畫已修改 vN」之後沒有「計畫已核准 vN」 | 步驟 3(等審計員,不得開工) | | Plan 待辦、已核准、還沒有本 Plan 的 worktree | 步驟 2(建 worktree、分支與狀態檔) | | Plan 待辦、已核准、已有 worktree、沒排週期 | 步驟 3a | | Plan 待辦、已核准、已有 worktree、已排週期 | 步驟 4(開工) | | Plan 進行中 | 步驟 4(先讀 ledger,見步驟 4「續跑」) | | Plan 驗證中、PR 尚未合進 `dev` | 步驟 5 或 6(看留言紀錄) | | Plan 驗證中、PR 已合進 `dev` | 步驟 7(等發版) | Spec 底下有兩張以上 Plan 時,判斷表逐張 Plan 套用:Spec 那幾列看 Spec,Plan 那幾列看自己負責的那張;已定案的 Spec 不因多一張 Plan 而回步驟 1。一個 session 只接一張 Plan(elf-team-rule 規則 31)。例外是 Plan 群組(規則 17):群組裡任一張 Plan 還沒寫完或還沒核准,全組都算在步驟 3,任何一張都不得開工,已核准的那張也一樣。為什麼:全組一起審,後面的 Plan 才不會寫到一半推翻已經做完的前一張。 步驟 5-1 已改為驗證中的 Plan,在步驟 7 開 PR 時會被自動拉回進行中,這是正常的,仍在步驟 7(等 PR 合併),不要回步驟 4;PR 有審查活動或合進 `dev` 時會再自動改為驗證中(合進 `dev` 的自動化設定完成前依 elf-team-rule 規則 10 的過渡期處理)。 - **新需求**:`save_issue` 在團隊 `ELF EXPRESS` 套用模板 `Spec 設計規格` 建立 `[Spec] 主題`。確認底下有 `[Plan]` 子 issue(沒有就手動建:套用模板 `Plan 實作計畫`、parent 為此 Spec、label `Plan`、狀態 待規劃),並把子 issue 標題改成 `[Plan] 主題`。 - 建立後立即設定 Spec 的 **estimate**,依目前對需求規模的初估。 - **兩張單都要設負責人(Eddie)與專案**;找不到適合的專案就問使用者,不自行開專案、不留空。 - Spec 加一個**工作類型** label;Plan 只加 `Plan`。 - **開單時不排週期**(見步驟 3a)。 - 一件事拆成**兩組以上** Spec+Plan 時,在該專案建立里程碑(名稱用這件事的主題),每組都放進去,有先後順序的用 blocked by 標出;只有一組不建里程碑。大型主題用專案或里程碑分組,**不用父單**。 - 專案狀態:開第一張 Spec 時從「積壓案件」改「規劃中」;第一張 Plan 進入進行中時改「進行中」;專案是否「已完成」問使用者。 - 對兩張單跑巡檢 R1–R7 自查,有錯先修正。 - 回報編號,例如「Spec E-31 / Plan E-32」。 ### 1. brainstorming → Spec 1. Spec 改為 **進行中**。Linear 的自動化會把改為進行中的 Spec 加進目前週期;照步驟 3a,週期要等 Plan 核准後兩張一起排,所以先把 Spec 的週期清掉。 2. 照 superpowers 的 brainstorming 談(v7:先請使用者描述想要什麼與為什麼、不先給選項;每弄懂一部分就回放並標明哪些是猜測;先問使用者哪些技術選擇要自己決定)。本 skill 不重寫它的做法。 3. brainstorming 判斷規模並明講,使用者可推翻: - 快速小事或小變更 → 依「先分流」最後一列轉單一開發工作單。 - 專案 → 繼續寫 Spec,Spec 就是上游所說的「書面設計」。 - 其實是好幾個獨立專案 → 說出來、和使用者談定順序,拆成兩組以上 Spec+Plan 並建里程碑(步驟 0),一次談一個。 - 使用者說跳過提問直接做 → 跳過的只是訪談,照「與上游 superpowers 的分工」表仍要開單與核准。 4. 每段回放經使用者確認後,就用 `save_issue` 寫進 Spec 對應章節,不等全部談完(中斷時 Linear 仍有紀錄)。章節:目標、範圍(要做/不做/反目標)、背景與限制、已決定的做法、留給實作者決定、方案比較(選填)、測試、驗收條件、實作者檢查、待決問題。保留「給 Claude」引言與章節標題(範本註明可刪的章節除外)。「已決定的做法」每一項標明「Eddie 決定」或「AI 的決定」,AI 的決定不寫成使用者同意的。 5. **實作者檢查**(上游的 builder check):用 `get_issue` 把 Spec 存成系統暫存資料夾(Windows 是 `%TEMP%`)裡的 `E-<Spec 編號>-spec.md`(不放在 repo 裡,檢查完刪除),照 brainstorming 的 `builder-check-prompt.md` 派全新 subagent 讀它,派發時寫檔案的絕對路徑(隊友名稱見「隊友(subagent)規則摘要」)。結果分三類:對話或專案已能回答的補進 Spec;小事自己決定並標「AI 的決定」;會改變做法、只有使用者能答的,整理成一則訊息一次問完。三類結果摘要填進「實作者檢查」。 6. 自審:無佔位文字、無矛盾、範圍明確、驗收條件可驗證。請使用者審閱全文,附上 AI 自己做的決定清單。 7. 使用者核准後,在 Spec 留言「規格已定案(YYYY-MM-DD,<核准者>核准)」,例如「規格已定案(2026-10-21,Eddie 核准)」。核准前不寫產品程式、不搭鷹架、不裝套件、不建專案、不呼叫實作 skill(上游 HARD-GATE),只能讀與探索。Spec **維持進行中,不要關閉**,它會在 Plan 完成時自動關閉。 ### 3. writing-plans → Plan 1. 以 Spec 最新內容為輸入(取代 superpowers 預設的設計文件路徑),並探索程式結構。這一步還沒有本 Plan 的 worktree(步驟 2 在核准之後),在主目錄唯讀探索即可,不開分支、不寫 repo 內的檔(步驟 1 的 Spec 暫存檔與第 9 項的暫存 JSON 都放 repo 外);elf-team-rule 規則 31 的 worktree 要求從步驟 2 起適用。 2. 照 writing-plans 寫,填進 Plan 描述,保留模板結構: - 標頭:目標、Spec(父 issue 編號)、架構、技術棧 - 全域限制(上游的 Global Constraints):規格中全專案適用的要求,一條一行,數值照抄規格 - 檢查重點(上游的 Review Focus):規格沒寫、但最可能讓使用者出問題的輸入或情況,最多五種;每一條都在負責那段程式的 Task 加一個測試;沒有就寫「已檢查,沒有」 - 檔案結構:新增/修改/測試,精確路徑 - 每個 Task:檔案、介面(需要/產出:類別、方法、資料表,寫精確簽名)、5 個 checkbox 步驟(寫失敗測試 → 確認失敗 → 實作 → 確認通過 → commit);每個 Task 都要能獨立測試與 commit - **計畫只記決策,不寫整段程式**(上游 6.4.2 起的寫法):測試步驟寫測試名稱與斷言,斷言用規格的精確值;實作步驟寫檔案、精確簽名與規格的值,只有簽名和測試決定不了的演算法才附程式;驗證步驟寫指令與通過時的輸出。每一步是一個動作、一個可檢查的結果;設定、鷹架、文件併進需要它的 Task。 - **步驟編號全單唯一**:`- [ ] 步驟 <Task>.<步驟>:…`,例如 `- [ ] 步驟 2.3:在 src/rate.ts 實作 syncRates(date: Date): Promise<number>`。模板裡的「步驟 1」「步驟 2」要改掉,否則多個 Task 會出現相同文字,勾 checkbox 時無法精準定位。 - Task 標題維持 `## Task N:名稱`(上游的 task brief 靠這個格式切出每個 Task,已實測) - 新增或修改 skill 的單(含本 skill 與 elf-team-rule):每個要改的 skill 照上游 writing-skills 加 RED、GREEN 兩個步驟。改之前派全新 subagent 跑壓力情境(紀律類 skill 每個情境至少組合三種壓力),記下沒有新內容時的行為;改完用同一組情境再跑,確認照做。計畫寫情境名稱、壓力與預期行為,不抄整段提示詞。 - 完成檢查 3. 不寫沒有決定任何事的句子(例如「加上驗證」「處理邊界情況」),也不把簽名與測試已經決定的程式整段抄進來。 4. 全域限制一律包含 Plan 範本的四條:**資料庫腳本必須冪等、可重複執行,不存在就建立、存在就更新,不可 DROP 既有資料表或資料**;PowerShell 腳本(.ps1)存成 UTF-8 with BOM;不在計畫範圍內的檔案不修改,不刪測試、不放寬斷言、不降低 coverage 門檻;發版由誰執行(規則 39)。本單沒有資料庫變更或 .ps1 時,照範本寫「本單無…」,不刪掉該條。 5. 照 writing-plans 做 5 項自審:規格涵蓋、逐步檢查、型別一致、檢查重點、比例(計畫比規格長好幾倍,就是在抄程式)。 6. 依 Task 數量與複雜度設定 Plan 的 **estimate**;與 Spec 初估差距大時同步更新 Spec 的 estimate。 7. 自審後 Plan 改為 **待辦**,送審計員(使用者的審計對話)審,並照 writing-plans 請使用者選執行方式、附一句推薦理由:**Subagent-driven**(4-2:每個 Task 有全新實作者與審查者,最徹底)或 **Native**(4-1:在本 session 自己做,最後由最強模型的審查者審整個分支,最省)。使用者選定後在 Plan 留言「執行方式:Subagent-driven」或「執行方式:Native」,步驟 4 照這則留言執行。 8. 審計員在 Plan 留言「計畫已核准(YYYY-MM-DD,審計員:<模型>)」後才進步驟 2、3a/4。對話裡的口頭同意不算,自己派的 subagent 審查只算自審。核准後若再改 Plan 描述(勾步驟與完成檢查不算),先留言「計畫已修改 v2(原因)」,用建立器 `revoke` 刪掉核准憑證,再重新送審;審計員留言「計畫已核准 v2(YYYY-MM-DD,審計員:<模型>)」後,由審計員照第 9 項重新 `create`,實作者 `verify` 通過才繼續;之後再改依序用 v3、v4。審計員退回時,依留言修改、重做 5 項自審後再送。核准到手、審計員已照第 9 項建好憑證、實作者 `verify` 通過、相依條件也確認後,才回步驟 2 建 worktree、分支與狀態檔,然後進 3a/4。 9. **核准憑證**(給階段 Guard):審計員留言「計畫已核准」後,由留下這則留言的審計員,在核准後自己依這則 Linear 留言用核准憑證建立器 `create` 憑證,不請 Eddie 手建,也不等使用者在對話裡另外同意。 - **實作者 MUST NOT `create` 或恢復憑證**,在這些情況下一樣:Guard 擋下寫檔、核准目錄只有舊格式核准檔、憑證遺失、雜湊不符、`verify` 回 `recreate`。實作者只用 `verify` 檢查;結果不是通過就停下,在 Plan 留言請審計員處理,不開工、不繼續寫檔。即使使用者催促、Linear 上核准留言明明存在,也不例外。 - 有效的核准留言:在對應的 Plan 上;作者在核准者名單內(Linear user ID `f7c5792e-6252-49dd-8210-b15b30c5229d`,或 Multica Gatekeeper agent id `2c8a076b-e4c0-4fc7-81b9-3ea21cd3ac82`,見 guard.md「有效的核准留言」);文字開頭是「計畫已核准(YYYY-MM-DD,審計員:<模型>)」或「計畫已核准 vN(…)」;依 `createdAt` 由舊到新看,「計畫已修改 vN」之後要有版號 ≥ N 的核准、「核准撤回」之後要有新的核准。 - 做法(審計員):用 `get_issue`/`list_comments` 取 Plan 描述與全部留言,寫成 repo 外的暫存 JSON(例 `%TEMP%/E-<Plan 編號>-approval.json`,格式見 `guard.md`「建立器用法」),執行 `node "$HOME/.claude/hooks/skillshare/elf-guard/elf-approval.cjs" create --plan E-<Plan 編號> --input <暫存 JSON>`;把 stdout 的稽核摘要留言到 Plan,再刪掉暫存 JSON。 - 建立器拒絕(exit 1)或 Linear 讀不到時:審計員不建立,回報 Eddie;實作者不開工。 - 只透過建立器碰核准憑證:不用 Write/Edit/Bash/PowerShell 直接讀寫或刪除核准目錄,指令裡也不寫核准目錄的路徑(Guard 會擋)。要確認憑證內容時用 Read。 - user ID 比對只能排除其他帳號,不是防止 AI 自我核准的安全邊界,限制說明見 `guard.md`「有效的核准留言」。 - 為什麼:Eddie 只在 Linear 寫核准,對話外沒有第二份要手動同步的紀錄;建立器只寫這一張 Plan 的憑證,比開放核准目錄更不容易誤寫其他 Plan。建立者是審計員、檢查者是實作者,實作者就不能自己產生讓自己的 Guard 放行的憑證;Guard 擋下或 `verify` 不通過時,多半是核准失效或憑證缺漏,由核准的人判斷,不由被擋的人補。 **核准撤回**:Eddie 在 Plan 留言「核准撤回」後,AI 在下一個驗證時點(見步驟 4)發現,立刻用建立器 `revoke --plan E-<Plan 編號> --reason <原因>` 刪掉憑證、停止實作、在 Plan 留言;撤回不需要再問使用者同意。要立即停止時由 Eddie 在對話通知該 session。為什麼:Guard 讀不到 Linear,撤回只能靠 AI 在驗證時點發現。 **同一個 Spec 底下增加 Plan**(elf-team-rule 規則 17):寫計畫時發現工作量要拆,或執行中依規則 17 受控拆分時: - 套模板 `Plan 實作計畫` 建子 issue:parent 為該 Spec、label `Plan`、狀態 待規劃、負責人與專案同 Spec,標題 `[Plan] 主題`。 - 設新 Plan 的 estimate,把 Spec 的 estimate 改成各 Plan 加總;Plan 之間有先後就用 blocked by。不建里程碑、不寫「## 並行」。 - Spec 的驗收條件逐條在結尾標明由哪張 Plan 勾,例 `(E-387)`。 - 新 Plan 只寫計畫;碰到 Spec 沒涵蓋的設計,回步驟 1 和使用者談,不在 Plan 裡自己決定。 - 同一個 Spec 底下的 Plan 是一個群組(規則 17「Plan 群組」):全組都寫完(範圍、Task、檔案、驗證、相依)才一起送審,並在 Spec 寫一行 `疊加順序:E-<第一張> → E-<第二張> → …`,彼此沒有相依的也排成一條線。為什麼:審計員要看到整件事的切法才審得出相依與遺漏。 - 群組裡每張 Plan 都要先在 Linear 寫完、全組一起送審;這就是一般規則,每張都在全組核准、自己的憑證 `verify` 通過、輪到它開工前才做步驟 2(worktree、基線、狀態檔)。 - 執行中拆分照規則 17「群組的受控拆分與退出」:先暫停整個群組;後續 Plan 都沒建 worktree、分支、也沒開工才可插入新 Plan,否則停下請 Eddie 決定,不自行插入、重排或 rebase。原 Plan 照第 8 項留言「計畫已修改 vN」重新送審,新 Plan 獨立寫計畫與送審;恢復前全組重新符合核准與憑證條件。群組中途取消或退出一張 Plan 也先問 Eddie。 ### 2. using-git-worktrees → Plan(計畫核准後才做,排在步驟 3 之後) **前置條件只適用 Spec/Plan**:單一開發工作單與 hotfix 沒有計畫核准這一關,開單後直接做下面第 1–6 項、不建狀態檔(見「先分流」)。 **Spec/Plan 的 Plan 要三項都成立才執行本節**:① Plan 上有有效的「計畫已核准(…)」留言,且之後沒有未重新核准的「計畫已修改 vN」或「核准撤回」;② 核准憑證已由審計員依步驟 3 第 9 項建立,實作者 `verify` 通過;③ 相依條件已確認——blocked by 的單都已到達本 Plan 需要的狀態:會改 repo 的單以**已合進 `dev`** 為準,本 Plan 的基線是它們合併後的 `origin/dev`;Plan 群組內的 blocked by 以前一張到達本節第 3 項的完成點為準,基線是前一張的分支,不是 `origin/dev`;`[維運]` 單以狀態**已完成**為準;相依單已取消時,要先確認本 Plan 不再依賴它才算成立,仍依賴就回步驟 1 和使用者談。 **排進週期(步驟 3a)不是本節的前置條件**:核准、憑證與相依三項齊備就可以建,不必等使用者決定這兩週要不要做(Eddie 決定,2026-10-25)。任一項不成立就停在步驟 3,不建 worktree、不開分支、不 commit 狀態檔;使用者催促、指令已就緒、「只是先開好暖機」都不是例外,要提前建只能由使用者明確推翻本條。為什麼:核准前沒有本 Plan 的 worktree,Guard 沒有保護對象——主目錄的分支不符合 Guard 認得的格式,判斷順序第 5 條一律放行,核准前不在主目錄寫實作檔靠 elf-team-rule 規則 31 與步驟 3 第 1 項;計畫被退回或相依單改了基線時,先建的分支、狀態檔與基線測試都要回頭清掉重做(E-423 審計,2026-10-25)。 1. 動手前先確認 repo 屬於分支規範的第幾種(看根目錄 `BRANCHING.md` 或 README 開頭),不確定就問。 2. 分支名稱 `<類型>/e-<Plan 編號>-<英文短名>`,例如 `feat/e-32-fx-rate-sync`。類型:`feat`、`fix`、`docs`、`chore`、`test`、`hotfix`。英文短名小寫 kebab-case。GitHub PR 自動化靠分支名稱裡的編號對應到 Plan。**不要**用 Linear 產生的 `gitBranchName`(會帶中文與全形符號,在 Windows、CI、shell 容易出問題),也不要用個人前綴(如舊的 `tw199501/`)。 3. 一般分支從最新的 `origin/dev` 開出;hotfix 是單一工作單,用該單編號,從 `origin/release` 開出。Plan 群組(規則 17「疊加分支」):疊加順序的第一張從 `origin/dev` 開;後一張從前一張 Plan 分支的完成點開,也就是前一張的全部 Task 完成、保險①與保險②「合進 `dev` 前」那段都做完之後,不從 `origin/dev` 開。為什麼:後一張要包含前一張的提交,最後一張的分支才能當唯一的整合 PR。 4. worktree 一律開在 repo 外(同層),不開在主倉庫目錄內。這是本團隊已宣告的偏好,using-git-worktrees 不必再問要不要建。不用 Claude Code 的 `EnterWorktree` 建 worktree(它只會建在 repo 內的 `.claude/worktrees/`);改用 `git worktree add <repo 外同層的路徑> -b <分支名稱> origin/dev`(hotfix 用 `origin/release`),再用 `EnterWorktree` 的 `path` 參數切進去,讓 session 的工作目錄跟著過去;沒有 `path` 參數的版本改用 `cd`(兩者的限制見「待確認」)。Plan 群組的每張 Plan 各自一個 repo 外同層 worktree,後一張用 `git worktree add <repo 外同層路徑> -b <本 Plan 分支> <前一張 Plan 的分支>`;狀態檔照第 7 項。 5. 跑基線測試,在 Plan 留言:分支名稱、worktree 路徑、基線測試結果(通過數/失敗數)。基線不乾淨就停下來問使用者。 6. **Orca 連單**:worktree 一律由 Claude Code 建立,**不要**在 Orca 的 Linear 任務列表按 Use 建立。建立後提醒使用者在 Orca:讓該 worktree 顯示在側邊欄;在 Edit Worktree Details 的 issue 欄位貼上 **Plan** 單網址(只連 Plan,一個工作區只連一張單)。 7. **狀態檔**(給階段 Guard。只有 Spec/Plan 要建,單一開發工作單與 hotfix 不建):在 worktree 建 `docs/superpowers/state/E-<Spec 編號>.yaml`,內容三行 `ticket: E-<Spec 編號>`、`phase: plan`、`plan: E-<Plan 編號>`(UTF-8、LF),以 `docs(E-<Plan 編號>): 加入狀態檔` commit 進本分支;合進 `dev` 後留著當紀錄,不刪。第 1 種 repo 送原作者的 `pr/` 分支不 cherry-pick 這個 commit(規則 12)。`phase` 之後不更新,在哪一步一律看 Linear。Guard 依分支名稱找狀態檔,認得哪些分支格式見 skillshare-source 的 `docs/superpowers/guard.md`。同一個 Spec 底下第二張以後的 Plan,另建 `docs/superpowers/state/E-<Plan 編號>.yaml`,內容三行 `ticket: E-<Spec 編號>`、`phase: plan`、`plan: E-<Plan 編號>`,不改第一張 Plan 用的 `E-<Spec 編號>.yaml`:Guard 先讀與分支編號同名的狀態檔,改了第一張的 `plan:`,第一張 Plan 的分支就不再受 Guard 保護。狀態檔建立時計畫已經核准,所以 Guard 的實際作用是在那之後:Plan 留言「計畫已修改 vN」或「核准撤回」、憑證被 `revoke` 之後,Guard 會重新擋住 `docs/superpowers/` 以外的寫入。 ### 3a. 排進週期 - 只有在 Plan 已寫好、狀態待辦、有「計畫已核准」留言、**使用者決定這兩週要做**時才排。 - 有目前週期且有餘力 → 排目前週期;否則排下一個週期;不確定就問。 - **Spec 與 Plan 一起排進同一個週期**,在 Plan 留言「已排入 Cycle N(YYYY-MM-DD~YYYY-MM-DD)」。 - 週期結束時,沒做完的單問使用者移到下一週期或退回不排週期,不讓單留在已結束的週期裡。 ### 4. 執行 → Plan **開工** - 確認工作目錄是本 Plan 的 worktree,且本 Plan 的狀態檔已 commit:第一張 Plan 是 `E-<Spec 編號>.yaml`,同一個 Spec 第二張以後是 `E-<Plan 編號>.yaml`(步驟 2 第 7 項)。沒有就先回步驟 2 把它建好(步驟 2 排在核准之後,到這一步才建是正常順序)。 - 確認 Plan 有「計畫已核准」留言、之後沒有還沒核准的「計畫已修改」留言、已排進週期;確認核准憑證有效:照步驟 3 第 9 項把 Plan 描述與全部留言寫成暫存 JSON,用建立器跑 `verify --plan E-<Plan 編號> --input <暫存 JSON>`(四個驗證時點之「開工前」)。實作者在這裡只 `verify`,MUST NOT `create` 或恢復憑證(步驟 3 第 9 項):還沒建立憑證,或結果不是通過,一律停下請審計員處理。exit 1 時依稽核摘要的建議動作處理: - `revoke`(核准已撤回或核准留言不在 Plan 上)→ 用建立器 `revoke`、停止實作、在 Plan 留言 - `recreate`(已有更新版號的核准)→ 停下,在 Plan 留言請審計員重建憑證;實作者不 `create`。審計員重建後,實作者再 `verify` 一次,通過才開工 - `stop`(雜湊不符、沒有憑證或憑證損壞)→ 停下,在 Plan 留言請審計員處理,不開工,也不自行用目前的描述重建憑證;「可能只是格式差異」不是理由,勾選、換行與連結 `href` 的差異建立器已排除 Guard 擋下而核准目錄只有 E-377 的舊四欄位核准檔時:舊檔一律視為未核准。實作者 MUST NOT 依舊檔或原核准留言 `create`,也不恢復憑證,只 `verify`,停下在 Plan 留言請審計員判斷並重建。審計員只有以下三點都能證明,才依原核准留言 `create`:Plan 尚未完成或取消、後續仍會寫實作檔;找得到原核准留言;原核准留言之後沒有未重新核准的實質修改(只有勾選變化)。Plan 的 `updatedAt` 晚於核准留言又無法逐項證明只是勾選時,審計員不依舊留言建立新憑證,改為要求重新送審(`guard.md`「多台機器與舊格式遷移」)。 Plan 群組(規則 17):群組的第一張開工前,逐張確認全組都有「計畫已核准」留言,並對每一張跑 `verify`;任一張不通過,全組都不開工。之後每張開工前只跑自己那張的 `verify`。為什麼:全組核准是開工條件,第一張開工時是唯一能一次確認的時點。 讀「執行方式」留言,沒有就問使用者並補留言。開始第一個 Task 時 Plan 改為 **進行中**。 - **匯出計畫**(在 worktree 根目錄): 1. 先建 `.superpowers/sdd/`,在裡面寫一個內容只有 `*` 的 `.gitignore`。上游 `sdd-workspace` 也會建這個檔,先建是為了讓匯出檔從一開始就不被 git 看到。 2. 用 `get_issue` 把 Plan 描述存成 `.superpowers/sdd/E-<Plan 編號>-plan.md`,父 Spec 存成 `.superpowers/sdd/E-<Spec 編號>-spec.md`。 3. 匯出的 Plan 拿掉「## 完成檢查」一節:上游的 task brief 會把最後一個 Task 標題之後的內容全部切進該 Task。 4. 把匯出 Plan 的「**Spec:**」整行換成 `**Spec:** .superpowers/sdd/E-<Spec 編號>-spec.md`,讓執行者讀得到規格。 5. 一律以這個相對路徑當 `PLAN_FILE`(ledger 第一行靠它對應本 Plan);ledger 在 `.superpowers/sdd/E-<Plan 編號>-plan/progress.md`。 6. repo 的格式化或 lint 工具(例如 prettier)會掃到 `.superpowers/` 時,把它加進該工具的忽略清單,用一個 `chore` commit 提交到本分支,並當成裁決記進 ledger(E-268 遇過)。不提交的話 worktree 會一直有未提交的變更,收尾時移除不了。 - **上游腳本的路徑**:`sdd-workspace`、`task-brief`、`review-package`、`task-start`、`task-done` 一律用 skillshare 來源樹的路徑、以 `bash` 執行,例如 `bash <skillshare 來源>/_superpowers/skills/subagent-driven-development/scripts/sdd-workspace .superpowers/sdd/E-<Plan 編號>-plan.md`(來源路徑看 `skillshare status` 的 Source;上游 6.4.1 起不保證腳本有執行權限)。不用 `~/.claude/skills/_superpowers__skills__*/scripts/`:`task-start`/`task-done` 用相對路徑找 subagent-driven-development 的腳本,在 skillshare 攤平的目錄可能找不到。 - 審查包的 `MERGE_BASE` 用 `git merge-base origin/dev HEAD`(hotfix 用 `origin/release`),不用上游範例的 `main`。 **執行中** - 每個 Task 開始前、每個 Task 完成準備 commit 或勾選前,各重讀 Plan 描述與全部留言跑一次 `verify`(四個驗證時點的後兩個),結果不通過時照「開工」的建議動作處理(`revoke` 由實作者執行;`recreate`、`stop` 與其他不是通過的結果,實作者不 `create`,停下請審計員處理);看到「核准撤回」就照步驟 3 第 9 項撤回。為什麼:核准後改計畫或撤回,Guard 本身看不到。 - 每個 Task 完成(ledger 寫下 `Task N: complete`)時做兩件事: 1. 用 `save_issue` 的 `patch`(op `replace`)把該 Task 的每一行 `- [ ] 步驟 N.M` 改為 `- [x] 步驟 N.M`,只改這些行,不重送整份描述。Linear 會存成 `- [X]`,兩者都代表已完成。 2. 在 Plan 留言一則:`Task N 完成(commits <a>..<b>)`、驗證結果(4-1:`task-done` 的測試結果;4-2:Task 審查的規格與品質結論、修正了幾輪)、本 Task 期間 ledger 的 `Ruling:` 行原文(開工前掃描計畫時的裁決併入 Task 1 這則)、隊友換人與原因。 - commit 訊息附 Plan 編號,例如 `feat(E-32): 新增匯率同步排程`。 - Plan 群組裡發現前面 Plan 的問題(規則 17「疊加分支」(4)):最後一張的分支已存在就在它上面修;還不存在就在目前最末端、已存在的分支上修,下一張再從修正後的完成點開。已被後續 Plan 當作基線的分支不再加 commit,即使它的 worktree 還開著。修正的 commit 訊息寫所屬 Plan 的編號(例 `fix(E-701): …`),並在那張 Plan 留言。整合 PR 的審查或 CI/PR 檢查要修時也一樣在 PR 所在的最後一張分支修、重跑受影響的測試與 PR 檢查,不另開 Spec 或修正單;修法是某張 Plan 的實質變更(例如要加 Task),那張 Plan 照步驟 3 第 8 項留言「計畫已修改 vN」、`revoke`,審計員重新核准並 `create` 後,實作者 `verify` 通過才繼續。為什麼:往已被當作基線的分支加 commit,後續分支就不含這個修正,只能再合併或改寫歷史。 - **計畫與實際不符:照上游的裁決制**,不停下來等。以 Spec 為最高依據自己決定,記進 ledger:`Ruling: <決定> — <理由> — <錯了的代價>`,然後繼續。超出 Spec 範圍的需求不裁決(團隊補充):照 Spec 也能完成 Plan、只是發現 Spec 沒涵蓋的新需求,就不做,記進 ledger,收尾時回報(需要就另開單);不改 Spec 就完成不了 Plan,屬於下面的「需要改規格」。停下來問使用者的情況:上游的四種(不可逆或破壞性的操作;安全相關的動作;worktree 以外的副作用,例如合併、推送共用分支、發佈;計畫壞到每條路都只能猜),加上本團隊的兩種(需要改規格;elf-team-rule 規則 13 列的 git 停止條件,例如 `--ff-only` 失敗、衝突、push 被拒)。上游本來也要求停下來的:基線測試不乾淨(using-git-worktrees)、連續 3 次修不好(systematic-debugging;4-2 的做法見 S2)。 - 派發 subagent **一律明確指定模型**(上游 Model Selection;省略會繼承 session 模型)。各角色用哪一級見「隊友(subagent)規則摘要」。 - 4-1 Native:照 executing-plans,本 session 就是實作者,用 `task-start`/`task-done` 記 ledger;最後一樣派最強模型的審查者審整個分支(步驟 5-1)。 - 4-2 Subagent-driven:照 subagent-driven-development,每個 Task 一位全新實作者、一位 Task 審查者。同一張 Plan 的實作隊友一次只派一個(上游規定,避免衝突);統籌不自己修程式,審查發現的問題交回實作隊友。 - S1:必須親眼看到失敗、親眼看到通過才能勾。 - S2:修好後留言現象、根因、修法、新測試。4-1 由本 session 照 systematic-debugging,連續 3 次修不好就停下質疑架構並問使用者;4-2 的實作隊友回報 BLOCKED 或 NEEDS_CONTEXT 時,統籌照上游處理:補資訊、換更強的模型、拆小;計畫本身有誤時照裁決制決定修正、記進 ledger、帶著裁決重派。需要改規格,或計畫壞到每條路都只能猜時,才停下來問使用者;需改規格時,使用者同意後回 Spec 修改並留言。 - S3:只用在彼此獨立的問題調查(例如多個不相關的失敗),同一張 Plan 的實作 Task 不並行;整合後跑完整測試,留言並行清單與整合測試結果。 - S4:照 writing-skills 跑壓力情境,派發時明確指定模型;兩次的模型、情境與結果寫進該 Task 的完成留言。新內容下仍不照做、要改已核准的文字時,屬於「需要改規格」,停下來問使用者。 **續跑**(新 session、換 worktree、context 壓縮後) - 「在哪一步」看 Linear 狀態(步驟 0 的判斷表);「做到哪個 Task」看 ledger 與 `git log`。ledger 第一行寫的是本 Plan 的匯出檔時,有 `Task N: complete` 的 Task 已完成,不要重派。 - Linear 勾選與 ledger 不一致時,以 ledger 與 `git log` 為準,補勾 Linear、補留 Task 完成留言。
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub