c7af690c2b
leo 2026-08-16 在 inkstone/InkStoneCo#40 → comment 2942 裁定「取消 Active SDD」, 11 天沒被執行。原因不是有人偷懶,是**執行它的第一步會鎖死自己**: sdd-guard.sh 是 fail-closed 的 · 動 code 檔時 status: active 不是恰好 1 份 → 擋(0 份也擋) · 路徑所在的 repo 沒有 3-specs → 也擋 ⇒ 照裁決把最後那份 active 拿掉 → 變 0 份 → 任何人動任何 .ts/.py/.go 全被擋。 而 ISEP 這個 repo 自己就沒有 3-specs——本票開工第一件事實測到: $ echo '{"tool_name":"Edit","tool_input":{"file_path":".../hooks/lib/dispatch_parse.py"}}' \ | bash hooks/sdd-guard.sh 🚫 SDD 協議攔截:… 找不到任何 SDD exit 2 **它一直在誤攔 ISEP 自己,只是沒人回報。** ── 這一版做了什麼 ──────────────────────────────────── · hooks/sdd-guard.sh 刪除,hooks.json 取消註冊(85 → 84 條,只少這一條) · commands/sdd-check.md 改寫:SDD 只記「起初的樣子」,任務本體在 Gitea 票; 找不到 SDD 不再是停下來的理由,找不到票才是 · agents/inkstoneco-hand.md 拿掉「任何時刻只允許一份 status: active」那條紅線 · hooks/lib/path-resolve.sh 只加註解:它的唯一 caller 走了,但別順手刪 (#22 學到的東西住在裡面,十幾支閘還在用它要修的那個寫法) ── 迴歸測試:測的不是「檔案刪了沒」,是「那個擋還會不會發生」── hooks/tests/sdd-guard-retired.test.sh(通過 8/失敗 0,離線): 把「裁決執行完之後的世界」(沒有 3-specs 的 repo、兩份 status: active 的 repo) 丟給 hooks.json 上**整組** Write|Edit|MultiEdit 的閘——清單當場從 hooks.json 讀、 不寫死——不准有任何一支用 SDD/3-specs 當理由擋下來。 ⇒ 日後有人換個檔名把同一個形狀種回來,這支照樣紅。 🔴 判準刻意不是「一支閘都不准擋」:同組還住著跟 SDD 無關、且看 session 狀態 決定擋不擋的閘(history-first/subagent-first)。把它們算失敗,這支測試會在別人 改別的東西時無故變紅,紅久了就沒人看——誤攔比漏擋更該修,對測試一樣成立。 **紅的證明**:把 sdd-guard 暫時復原(檔案+註冊)重跑 → 通過 1/失敗 7, 四條行為格全部指名 sdd-guard.sh。已還原。 ── 自己跑過的 ────────────────────────────────────── · hooks/tests/sdd-guard-retired.test.sh 通過 8/失敗 0 · 逐支點名 hooks.json(README「裝什麼」那道指令) 84 條,對 main 做集合差: 少了 sdd-guard.sh × 1,多出 0 支,其餘一支不差 · 盤點數字全部在這棵樹上實數,不是加減推: ls hooks/*.sh|wc -l = 61(原 62) grep -c '"command":' hooks/hooks.json = 84(原 85) agents 7/commands 7/skills 2/scripts 48(皆未變動) · 盤點表對帳三格(hooks-inventory 自己寫死的那三道):三格皆無輸出 · scripts/check-version-consistency.sh ✅ 0.16.2 一致 · claude plugin validate . ✅ Validation passed · hooks/tests/ 全部離線測試 24 支重跑:本次改動 0 退步 (dispatch-format-guard 40/52、prod-write-guard 18/19-fail、 stage-before-prod-guard 9/7-fail、另 3 支需帶參數/建不起沙盒—— **六支在 gitea/main 上逐支重跑結果一模一樣,是既有狀態不是本次造成**) ── 沒做、也不該由這張票做的 ───────────────────────── · inkstone/InkStoneCo 那半(拿掉 active SDD + 刪 CLAUDE.md「單一活性鐵律」段) ——那是 inkstoneco-hand 的 repo;而且順序上本來就要等這一版出去、 兩邊 /plugin update 之後才動得,先拿掉就鎖死 · checkbox 分診(掛 inkstone/InkStoneCo#49,票上明寫不要另開票) · 版本號:待總管定版 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016ZBu4Sa1cGntKFRBYNZ6xs
82 lines
3.4 KiB
Markdown
82 lines
3.4 KiB
Markdown
---
|
||
name: sdd-check
|
||
description: |
|
||
動手前把這件事的來歷讀齊——要寫 code、開新功能、
|
||
或不確定「這件事當初為什麼長這樣」時自動載入。
|
||
🔴 Active SDD 已於 2026-08-16 取消(inkstone/InkStoneCo#40):
|
||
**任務本體在 Gitea 票,不在 SDD**;SDD 只記「起初的樣子」,
|
||
沒有 status、沒有唯一活性、也不再養任務 checkbox。
|
||
⇒ 找不到 SDD 不是停下來的理由,找不到票才是;也不要為了動手而現編一份 SDD。
|
||
規格層變更改開 Gitea 票(Human+指派 Leo)後停止等 confirm——pending-changes.md 已於 2026-08-19 廢除,禁止寫入。
|
||
---
|
||
|
||
# /sdd-check — 動手前把這件事的來歷讀齊
|
||
|
||
## 先講清楚它現在是什麼
|
||
|
||
leo 2026-08-16(`inkstone/InkStoneCo#40` → comment 2942):
|
||
|
||
> 「**取消 Active SDD**⋯⋯所有文件中都不帶有任務 checkbox,因為移動到 Gitea 來管理,
|
||
> SDD 會脫節,它所做的是記錄起初的樣子⋯⋯實際情況靠 issues, PR, release 等機制來管理。」
|
||
|
||
所以三件事分家(`docs/governance/sdd-gitea-governance.md` §0 公理 1):
|
||
|
||
```
|
||
意圖真相 → SDD(docs/3-specs/) 未來式:當初打算怎麼做
|
||
狀態真相 → Gitea 票/PR/release 現在式:現在做到哪、誰在做
|
||
知識真相 → wiki 過去式:撞過什麼、學到什麼
|
||
```
|
||
|
||
🔴 **這支命令已經不是一道閘了。** 舊版靠 `sdd-guard.sh` 在動 code 前強制要有
|
||
「恰好一份 status: active 的 SDD」,那支閘於 `inkstone/ISEP#91` 退役——
|
||
它是 fail-closed 的,裁決一執行(active SDD 歸零)就會鎖死所有 code 寫入。
|
||
|
||
---
|
||
|
||
## 執行流程
|
||
|
||
### 第一步:這件事的**票**是哪一張
|
||
|
||
**這一步不能跳,也是唯一會讓你停下來的一步。**
|
||
|
||
- 有票號 → 讀它(含整串留言:裁決、假設、前手交回的下一步都在那裡)
|
||
- 沒票號 → **先問清楚是哪一張,或先把票開出來**,不要憑一句話開工
|
||
(`commands/issue-handle.md`:Issue 是唯一任務介面)
|
||
|
||
### 第二步:這件事的**來歷**在哪份 SDD
|
||
|
||
在 `system-dev/docs/3-specs/` 下找對應子系統的 `design.md`。
|
||
|
||
- 找到 → 讀它,弄清楚「當初為什麼這樣設計、有哪些邊界不能動」
|
||
- **找不到 → 照樣可以動手**。票才是任務本體;
|
||
沒有 SDD 只代表這塊當初沒有寫下設計,不代表這件事沒被批准
|
||
|
||
🔴 **不要為了動手而現編一份 SDD**,也不要去改任何 `status:` frontmatter——
|
||
那是已經取消的制度的殘留物。
|
||
|
||
🔴 **不要把任務 checkbox 寫進 SDD**。要追蹤進度就開票/改票的狀態標籤;
|
||
寫進文件裡的 checkbox 沒有人會回來關掉它(`inkstone/InkStoneCo#49`
|
||
清的就是這一批:378 條沒人維護的 checkbox)。
|
||
|
||
### 第三步:把讀到的東西講出來再動手
|
||
|
||
回覆開頭一行交代即可:
|
||
|
||
```
|
||
📌 票:<owner/repo#N> —— <一句話它要解什麼>
|
||
📋 來歷:<design.md 路徑,或「這塊沒有 SDD」>
|
||
🚧 邊界:<這次不准動的東西>
|
||
```
|
||
|
||
---
|
||
|
||
## 什麼時候該停下來問
|
||
|
||
只有這幾種,**都跟 SDD 在不在無關**:
|
||
|
||
- 找不到對應的票,也問不出是哪一張
|
||
- 票上的要求跟現行規範互相衝突(貼出兩邊出處,給出你的推測,再問)
|
||
- 命中四題公式:花錢/不可逆/跨專案結構/品味方向
|
||
|
||
其餘情況做出最合理的假設、把假設寫進 commit message 或票的留言,繼續走。
|