Leo
3bc7f3c5f5
派工單只剩票號——閘從驗「有沒有票號」改成驗「是不是只有票號」
...
leo 2026-08-27(inkstone/ISEP#30 comment 4322/4325/4327):
「這些話票上都沒有,你根本沒照規則做事,你的 hook 讓你這樣搞?」
「你用一個 output parser 把你給 subagent 的指令規範,分作幾點,每一點規定格式,
照這種散文寫法根本無法迭代」「警察也不能抓」
「交件方式不需要寫,定義在原則裡⋯⋯每次都一樣提取出來變成共通規定」
「(那些 session 事實)這些為什麼不寫到票裡?」「subagent 回覆時要表明身份」
病根:no-ticket-no-dispatch.sh 驗的是「有沒有一行【工單】owner/repo#N」,
而規則的原文是「派工單只寫票號」。⇒ 把 40 行任務全寫在 prompt 裡、票號補一行,
閘照樣放行。2026-08-27 一天內這樣做了 5 次,每次票上都沒有那份任務。
規則存在,閘只驗了它的殼——同款第 N 次(history-first/KBDB-first/stage-first)。
新增 hooks/dispatch-format-guard.sh(PreToolUse Task|Agent),兩件事:
- 擋:【工單】以外還有實質內容就 exit 2,並指出那些內容該搬去哪
(每次都一樣 → 共通規定;這次才知道 → 寫進那張票。
判準「這句話換一張票還成立嗎?」)
- 注入:合規的派工自動把共通規定送給收工方(交件方式、不准 push main、
org 是 inkstone…)——這是「派工單只剩票號」能成立的前提,
leo 的驗收條件之一就是「收工方沒讀派工單也知道要貼回原票」
判準是結構不是文字(leo 2026-08-17 那條檢驗):問的是「這一行是不是【工單】欄位」
——在不在,不是寫什麼。hooks/lib/dispatch_parse.py 全檔零個「命中某個詞就違規」的比對。
⇒ 也因此不需要語意判官:免費、瞬間、每次結果一樣。
新增 hooks/reply-identity-guard.sh(PreToolUse Bash)+ scripts/ticket 內建檢查:
票上每一則留言第一行要有【身份】(總管/subagent/leo)。貼留言有兩條路,兩條都封
——ticket-api-bypass-guard 是刻意放行「對既有票留言」的,只封正門等於沒封。
實害:多條線並行時總管寫的診斷被當成 subagent 的結論,而其中一則是錯的。
規約寫成文件:docs/governance/dispatch-and-reply-format.md
(§2 那段就是被注入的那份共通規定本體——只有一份,改那裡等於改所有派工)
實測(離線、不打網路、不花錢):
hooks/tests/dispatch-format-guard.test.sh 19/19
hooks/tests/reply-identity.test.sh 11/11
測資裡的 B⑨ 是真跡:產生 ISEP#30 這條線的那一次派工,一字未改。
另 4 份 leo 點名的違規派工拿不回來了——它們住在 prompt 裡,agent 一停就沒了,
這件事本身就是這條規則的證據(見 hooks/tests/fixtures/README.md,不用想像的例子替補)。
升版 0.4.0 → 0.5.0(產物按版本號分資料夾,不升版新閘不會被載入)。
tag 照慣例打在 merge commit 上,所以這條分支上 check-version-consistency.sh 是紅的。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-27 11:35:03 +08:00
Leo
6772ca67d3
每個里程碑都要有真的期限,9999 也擋
...
leo 2026-08-21:「以後所有的 milestone 限制時間」「你根本沒有時間概念,浪費一整天」
實查七個 open milestone:六個期限是 9999-01-01、一個空白。
9999 比空白更糟——盤點時每一格看起來都有值,
於是沒有人發現這裡從來沒有時間壓力。七個已全部改成真日期。
新增 hooks/milestone-due-guard.sh,四向實測:
無 due_on → exit 2
due_on 帶 9999 → exit 2
真期限 → exit 0
只是讀 milestone → exit 0
規範補 M4.8(怎麼定期限、過期只對帳不自動關)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-21 01:25:12 +08:00
Leo
0946f702d7
v0.10.0:補 M4.0(里程碑怎麼組成)、M4.3 改寫成「不准自己打折」
...
leo 2026-08-20 訂正總管寫錯的規則:
「我跟你說要達成的目標,你從 issues 池遍歷找出要完成哪些可以達成,如果沒有才增加 issues,
定下後就不改,而不是要做 5 件事,做不到就改成 2 件,自己打折」
原本 M4.3 寫成「增減都是 leo 的裁決,不是總管的操作」——把重點放錯在「誰有權」,
而 leo 說的是**組成方式**與**不准打折**。
- 新增 M4.0:leo 給目標 → 總管遍歷票池找出達成它需要哪些票 → 池裡沒有才補開 → 定下不改
- M4.3 改寫:定下就不改,尤其不准因為做不完而縮減;做不完就是還沒完成,
里程碑開著、百分比顯示真實完成度。把分母改小只是讓它說謊。
唯一例外是目標本身變了 ⇒ 重走 M4.0,不是打折。
- §15.2 補記:六群的組成就是照 M4.0 走出來的(44 張既有票,沒補開任何新任務票)
2026-08-20 17:58:08 +08:00
Leo
e16d21435f
v0.9.0:全面 PR-only(leo 裁定)+跨 repo 群票載體入規範
...
leo 2026-08-20:「所有 subagent 都是 PR only,在雲端地端總管所做的都是 PR-only。」
⇒ 推翻總管原提案(只有 ISEP 走 PR-only,其他 repo 總管自裁)。
DIVERGENCE §E1 已加註被推翻,原文保留作歷史。
⇒ main-and-prod-push-guard.sh 現行判準只擋 subagent、放行總管,與本條不符,
要改成不分角色一律擋;/tmp/.main-push-ok 戳記隨之作廢(PR review 就是那道確認)。排群 4。
另 §15.5:六個群在 ISEP 各有一張 hub 票(#30-#35),別的 repo 的舊票用 Gitea 原生
dependency 指過去(跨 repo dependency 已實測 201 可用)——milestone 管不到跨 repo,這是載體。
2026-08-20 17:55:35 +08:00
Leo
410771e883
E5 對齊 M4.3:到期只通知,不移票
2026-08-20 17:50:15 +08:00
Leo
64dae34efa
v0.8.0 修訂:刪 M4.7、M4.3 改寫(里程碑內容不增不減)、§15 精簡成方向性規劃
...
leo 2026-08-20 兩則指正:
① 「milestone 確定後怎麼可以再把東西移除?定下工作自己刪掉是什麼意思?根本就沒有什麼降」
⇒ M4.7(降 scope 留痕)整段刪除——它把一個不該存在的操作合法化了。
M4.3 改成:到期只通知 leo;內容增減都是 leo 的裁決,不是總管的操作。
② 「規劃書要大的規劃,方向性,不是寫廢話」
⇒ §15 從逐領域十行大表精簡成:四句方向+六里程碑順序表+三矛盾定案+三件待裁。
2026-08-20 17:42:51 +08:00
Leo
6d61c10cb8
治理規範 v0.8.0:三源整合定案(§15,leo 核准)
...
leo:「把 claude.ai 的規劃、舊有票的需求、現在已經有的機制全部整合,
修正出最終版規劃,核准再動工。」
- §15.1 逐領域十欄對照(A–J),每格標定案
- §15.2 三處矛盾的解法:#40 只減不增 vs E 清單要新閘(→伺服器端優先);
warn-first vs 全 block(→四層定位,#48 是前提);E5 自動打 tag(維持否決)
- §15.3 已成立清單;§15.4 動工順序;§15.5 三件待裁(不擋群 0)
- 最大發現:claude.ai 兩份規劃都沒有「觀測」這一章,而舊票最痛的就是它
2026-08-20 17:40:52 +08:00
Leo
6244baef25
治理規範 v0.7.0:全局遍歷與 mapping 併入本檔(不另立文件)
...
leo 2026-08-20:「我要你修正 sdd-gitea-governance.md 變成新版,不是要你重寫一版」——
總管原本把遍歷結果寫成獨立的 PLAN.md,那正是 §13.3 記的病「同一件事有兩份」,
當場刪除,內容併進本檔。
- §0 公理補第 8 條:票就是問題,衡量進度的是舊問題關掉幾張,不是出了幾個版本
- §13 現況遍歷:14 repo/156 open/45 張管理票分六群,排序按「什麼擋住什麼」,
每條標來源票號與現況;含 #40 憲法七項對帳(總管自己違反兩項,如實記)
- §14 mapping:17 張新票只有 1 張真的推進舊問題(且僅半張);結論是不新增任何票
- §13.9 warn 可行性查證:hookify 的 warn 走 systemMessage 不進 AI,
additionalContext 才進得去——#40 §3 可行,但要用對欄位
2026-08-20 17:32:29 +08:00
Leo
aec7f3a980
治理 M4.7:把票移出里程碑必須寫進里程碑描述(closes #24 的規範面)
...
leo 2026-08-20 抓到:v0.2.0 顯示 100%,但那是把 #5 移出去之後的 100%,
畫面上看不出降 scope 發生過。
與 §3.4(審核完沒關票 ⇒ 數字偏低)是同一個病的兩面——
畫面上的數字不等於實際狀態,而 leo 只看得到畫面。
禁的不是降 scope(卡人閘時降 scope 是 M4.3 要的),禁的是降得無聲無息。
痕跡要留在他會經過的地方=里程碑描述,不是票裡、不是對話裡。
2026-08-20 16:33:08 +08:00
Leo
09979b2357
自我審核修訂:ISEP 的人閘放在 release 不放在每個 PR
...
原本寫『ISEP 自身的修改 PR 必經人閘』——照字面走每個 PR 都要 leo 點頭,
他就變成瓶頸(違北極星 §1)。但完全拿掉,代理就能悄悄放寬管自己的規則。
改成:總管可 merge(loop 不停),但每個 release note 必須逐條列出這一版
改了哪些治理規則與哪些閘,release 就是那道人閘。
=把同步的逐 PR 審批改成非同步的逐版本審批。
2026-08-20 13:04:29 +08:00
Leo
50876ffa4f
治理規範進 docs/:claude.ai 原稿存檔+總管修訂版 v0.6.0+逐條分歧書
...
leo 交辦:把 claude.ai 寫的治理規範整理進 ISEP,並且「查看是否合理,提出意見⋯⋯
改一版你的版本」。原稿作者看不到 codebase,標籤名/hook 名/既有鐵律有實錯。
三份文件:
- _draft-claude-ai-v0.5.0.md 原稿,一字未改,加存檔標頭
- sdd-gitea-governance.md v0.6.0 現行版
- DIVERGENCE-v0.5.0-to-v0.6.0.md 我改了哪 14 處、為什麼
修訂重點(實查 2026-08-20 的現場,不是推測):
- 標籤名幾乎全是憑空的:gate/human・s/review・close/*・hub・type/* 現場一個都不存在。
Human 不改名(leo 08-17 才改過,改名會廢掉他的看板習慣),另加 human/exec 當第二維度。
- 狀態機三態擴成七態:原稿會擠掉 s/triage・s/backlog・s/pending・s/stage,
而那四個態上掛著 179 張 open 票。s/review 與 s/stage 是兩件事,不可互相取代。
- E1–E16 的 hook 全是憑空命名,改成標註「已有 <實際檔名> / 待建」——
E14 其實已經有了(subagent-claim-worksheet.sh),重造就是第 42 支互相打架的閘。
- 刪掉「薄殼只裝 shell-safe 子集」:那是舊薄殼模型的殘留,正是 InkStoneCo#57 的成因,
而且與原稿自己的 P11.2.1/P11.2.4 自相矛盾。
- 排程 job 第一版一律不依賴 Gitea Actions runner(有沒有 runner 未經查證,
依賴不確定存在的東西,壞掉的形式是「以為有人在跑」)。
- 補上原稿整份沒有的「載入契約」一節——那正是 leo 需求 3 的核心,也是 InkStoneCo#14 的根因。
- 補上 M4.6:release note 寫在 release 裡不寫 README(leo 2026-08-20 當場指正)。
- 補上 §3.4 總管收工義務:審核通過的當下就關票(leo 2026-08-20 指出上次 milestone 0% 的病)。
兩個裁決題已按判斷先做、理由寫在 DIVERGENCE §E,leo 可打回:
PR-only 只套 ISEP 不套全部 repo;舊的 duplicate 標籤封存不刪。
2026-08-20 13:02:28 +08:00