新 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>
This commit is contained in:
2026-09-14 13:13:12 +08:00
parent 25da674615
commit d2f706a16c
11 changed files with 304 additions and 19 deletions
+22 -1
View File
@@ -7,7 +7,7 @@
| 段 | 問題 | 為什麼一定要有 |
|---|---|---|
| `**負責 repo**` | 它管哪一個 repo | 派工時挑人的唯一判準;也是【身份】欄第二格 |
| `**負責 repo**` | 它管哪個(或哪幾個)repo | 派工時挑人的唯一判準;也是【身份】欄第二格。同一件事的幾個 repo 用「、」隔開(例:`course-hand` |
| `## 開工前先讀` | 它要先讀什麼 | 這是**每個工人各自不同**的部分——共通規定補不了 |
| `## 紅線` | 它不准做什麼 | 全機共通的紅線在共通規定裡;這裡只寫這個 repo 特有的 |
| frontmatter `description` | 一句話它是誰 | `scripts/roster list` 印的就是這一行 |
@@ -39,3 +39,24 @@ 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`)。