Files
ISEP/docs/governance/worker-roster.md
T
Leo d2f706a16c 新 repo 的工人不再靠人記得:課程工人 course-hand+開場點名「有票卻沒工人」(inkstone/ISEP#118)
- agents/course-hand.md:管 inkstone/ax-courses、course_gen、llm-wiki-template(c7358 leo「你可以製作一個」)
  假設:llm-wiki-template 也歸課程工人(同為課程素材),總管不同意就把它拆出去
- hooks/lib/roster.py:`負責 repo` 可列多個(、或逗號),新增 which()/uncovered();find() 與閘本身未動
- scripts/roster which 改走 roster.which
- scripts/isep-nag 第④類:org 裡有開著的票、名單上卻沒人負責的 repo,只進開場長版、不進 Telegram
- 測試:roster-guard 25→31、overdue-nag 36→43;兩種突變(拿掉票數條件/只認第一個 repo)都會紅
- 文件:worker-roster.md 回答「新 repo 的工人誰在什麼時候加」;README/plugin.json 工人 8、scripts 65(樹上實數)

待總管定版(改了 agents/scripts,要升版才裝得上)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 13:13:12 +08:00

63 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `agents/` — 工人名單(inkstone/ISEP#86
> leo 派工時派給的不能是「一個 agent」,要派給**有名字的人**。
> 「票上看不出來這件事是誰做的」是這張票的來由。
**一個檔案 一個工人。** 每個檔案只回答四件事:
| 段 | 問題 | 為什麼一定要有 |
|---|---|---|
| `**負責 repo**` | 它管哪個(或哪幾個)repo | 派工時挑人的唯一判準;也是【身份】欄第二格。同一件事的幾個 repo 用「、」隔開(例:`course-hand` |
| `## 開工前先讀` | 它要先讀什麼 | 這是**每個工人各自不同**的部分——共通規定補不了 |
| `## 紅線` | 它不准做什麼 | 全機共通的紅線在共通規定裡;這裡只寫這個 repo 特有的 |
| frontmatter `description` | 一句話它是誰 | `scripts/roster list` 印的就是這一行 |
## 為什麼是這個形狀,不是自己造一套
`agents/` 是 Claude Code plugin **原生**的 subagent 目錄,檔名(frontmatter 的 `name`
就是 `Task` 工具的 `subagent_type`。⇒ 「指名派給誰」不必發明新欄位、不必改派工單格式
(派工單仍然只有 `【工單】` 一行,`dispatch-format-guard.sh` 的行為一個字都沒變)。
## 怎麼用
```
python3 scripts/roster list # 名單:有哪幾個工人、各自管什麼
python3 scripts/roster show isep-hand # 一個工人的全文(它開工前會讀到的東西)
python3 scripts/roster names # 只印名字,給腳本用
```
派工時把名字放進 `Task``subagent_type`;名字不在名單上,
`hooks/roster-guard.sh` 會擋下來並說「**沒有這個人**」,同時把名單印出來。
## 加一個工人
在這個目錄新增一個 `.md`(照既有檔案的四段),然後:
```
python3 scripts/roster list # 新的名字要出現
bash hooks/tests/roster-guard.test.sh # 全綠
```
**不必改任何 hook**——名單是資料,閘讀的是這個目錄。
## 新開一個 repo 之後,工人是誰在什麼時候加的(inkstone/ISEP#118
**以前的答案是「靠人記得」,所以一定會忘。** 實查 2026-09-14org 裡 20 個 repo
名單只蓋到 6 個;`llm-wiki-template`09-01 建)與 `ax-courses`09-07 建)
都是**第一次派工撞上 `roster-guard.sh`** 才發現沒人,而那一刻最省事的出路是
`/tmp/.roster-ok-*` 例外閘繞過去——繞過去之後,下一次還是會撞。
**現在的答案**
- **什麼時候**:建 repo 之後,**開第一張票後的下一個 session 開場**。
- **誰叫**`scripts/isep-nag`(掛在 `overdue-nag-guard.sh` 上,開場跑一次)的第 ④ 類
「**有票卻沒有工人的 repo**」——拿 org 的 repo 清單比對本目錄的 `負責 repo`
- **誰加**:總管。在這個目錄加一個工人檔,或把 repo 寫進既有工人的 `負責 repo`
判準只有兩個事實:名單上沒有人負責它、它有開著的票。
**沒票的 repo 不叫**(封存、投影用、還沒開張的——沒有工可派,就不是缺人),
所以這一段不會變成每天念一串不相干東西的噪音。
**只進開場給總管看的長版,不進 Telegram**——補工人是總管的事,不吵 leo。
手動看一次:`python3 scripts/isep-nag``--json` 裡的 `repos_without_worker`)。