舊票每天有固定管道被撈出來(inkstone/ISEP#83) #101
Reference in New Issue
Block a user
Delete Branch "feat/debt-worklist"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
【身份】subagent/inkstone/ISEP/feat/debt-worklist
closes #83
這一版做了什麼
scripts/debt-worklist—— 還債線:每天撈一次「今天可以領什麼」,整包整包地領。leo 2026-08-27 的訂正是這件事的全部前提:兩條線各用各的判準,不是二選一。
三個動詞:
票上四條驗收條件,逐條的證據
1. 跑一次要吐出排好序的清單+「我查了哪些 repo」的證明 ✅
15 個 repo 逐一列出 issue/PR 數,並講出扣掉了什麼:
2. 空清單要說話 ✅
✅ 查詢跑過了,結果是零。+ 一樣附上那份 repo 清單——沒有證明的空清單分不出「今天真的沒有」與「查詢壞了」。
3. 連續兩天跑,第一天領走的不在清單上 ✅(真實資料實跑)
4. 拿今天的 229 張進去跑,前幾名要像那麼回事 ✅
🔴 每一張旁邊都印出「為什麼排這裡」的分項——排錯的時候可以指著某一項說「這個給太多」,
而不是猜它為什麼在第一名。權重全部在
score()一個函式裡。兩個判斷,請總管看一眼(不同意就改,都是一行的事)
s/stage跟Human/human/exec一起被排除在「可領」之外。它們是「等 leo」,正確動作是催不是領(催辦是
inkstone/ISEP#93)。今天有 9 張。不同意就把
WAITING_LEO_LABELS裡的s/stage拿掉。ticket subtask建的母子票)。第一版用單向引用成包,結果 190 張裡 121 張黏成一包——大家都會順手引用 hub 票,
一包 121 張等於沒有人領得動。代價是「同一條旅程但沒互指也沒建相依」的兩張不會成包,
寧可漏成包,不要成一包沒人領得動的。
測試
全程離線(資料走
ISEP_DEBT_FIXTURE、時鐘走ISEP_DEBT_NOW、狀態走ISEP_DEBT_STATE_DIR)——不打 Gitea、不留測試票、不碰
$HOME。四條驗收條件各一組,另含誤用、--json、以及兩條紅線檢查(原始碼沒有排程/輪詢的形狀、SessionStart 那一段不打網路)。
真實資料另外唯讀實跑過(229 張),見上面四格。
紅線
SessionStart那一段只看狀態檔的日期講一句話,不打網路(測試裡有一條就在守這件事)。
給總管的兩件事
.claude-plugin/plugin.json)。定版時該檔 description 的「28 支腳本」要 +2(本 PR 新增
debt-worklist與
test-debt-worklist.sh)。docs/hooks-inventory.md不用改:本 PR 沒有新增 hook,只在既有的
session-start-recall.sh末尾加一段輸出,註冊數不變。docs/TESTING.md(新增 A16 一節+狀態表一列)、hooks/session-start-recall.sh(末尾一段)。A16 這個編號是我挑的——現行表上 A14/A15 各有兩個(平行線各自加的),本 PR 不動別人的編號。
leo 2026-08-27:「現在每天都在追新的,所以要用 Routine 去消化舊的,可以有多個條件」 兩條線各用各的判準(他當場訂正的那件事): 緊急線=掛 open milestone 的,用「距離目標的遠近」排 還債線=沒掛的那 188 張,用多條件排(事故/擋人/承諾/票齡/估工)← 本次做的 新增 scripts/debt-worklist(list/claim/forget): · 撈全 org 15 個 repo 的 open issue + open PR,逐一列出當作「我查了哪些」的證明 · 扣掉掛 open milestone 的(緊急線在管)、等 leo 的(Human/human-exec/s/stage, 那些要催不是要領,催辦是 inkstone/ISEP#93)、已領走的 · 每張票旁邊印出「為什麼排這裡」的分項,排錯可以指著某一項說它給太多 · 成包只認強訊號:互相指著、或 Gitea 原生相依(母子票)。 第一版用單向引用成包,190 張裡 121 張黏成一坨——一包沒有人領得動 · 空清單會明講「查詢跑過了,結果是零」,不默默結束 · claim 之後那些票不再出現在清單上,並在隔天的清單頂端交代它們關了沒 hooks/session-start-recall.sh 加一段(不打網路,只看狀態檔日期): 今天還沒撈過就說一句,並給出要跑的那一行。開 session 自動去撈=輪詢,紅線擋著。 測試 scripts/test-debt-worklist.sh:40 條全離線,票上四條驗收條件各一組。 真實資料唯讀實跑過:229 張 → 可領 188 張/185 包,領走兩張後隔天清單少掉它們。【身份】subagent/inkstone/ISEP/feat/debt-worklist
已併 main 到
5d6c4b5(#96/#100/#99/v0.13.0 #102/#98),現在 mergeable=True。衝突只有兩處,兩邊內容都留:
docs/TESTING.md:兩次都是撞號(今天 A16/A17/A19 都被佔兩次)⇒ 我讓號,A16 → A19 → A20,整節搬到 A19 後面.claude-plugin/plugin.json:取 main 的 0.13.0(我不定版),只重數腳本數盤點數字在合併後的樹上重數:
hooks/*.sh=54、hooks.json的"command":=71(兩個都沒變,本 PR 沒新增 hook);ls scripts | wc -l40 → 43(+2是本 PR,+1是#98帶進來的test-ticket-handoff-writeback.sh,#98併進 main 時沒回頭改)。docs/hooks-inventory.md不用改。接上
#82的「主線唯一答案」(不自己養第二套判斷)原本「掛 open milestone 就排除」是
#82之前沒有唯一答案時的權宜。現在改呼叫hooks/lib/mainline.py:ML.belongs());掛在別條 milestone 的仍算債——那條線現在沒人推,正是它躺著的原因+15「答應過人家的日期已經過了」測試 40 → 47 條;並把
ISEP_COUNTDOWN_STATE_DIR一起隔離——否則這支測試的結果會取決於「這台機器現在標了哪條主線」。合併後全部重跑(不只我那支)
hooks/tests全綠:ask-user-question 14/14、countdown 20/20、dispatch-format 33/33、factory-idle 33/33、gate-ok 17/17、gitea-arm-check 16/16、beacon 14/14、main-and-prod-push 10/10+跨 repo 19/19、mainline-focus 24/24、mainline-idle 61/61、pr-verdict 52/52、prod-write 37/37、reply-identity 11/11、sdd 8/8、search-is-not-proof 31/31、stage-before-prod 16/16、unpushed 10/10scripts/test-*全綠:debt-worklist 47/47、handoff-writeback 49/49、baton 10/10、comment-carries-task 22/22、github-contact 14/14、kbdb-api-wall 10/10、main-and-prod-push 13/13、release-tag 8/8、stage-before-prod 13/13、ticket-api-bypass 24/24、ticket-where-seen 17/17版本一致性 ✅(0.13.0=最新 tag)。唯一沒跑:
ask-user-question-guard.live.test.sh(會叫 haiku、花錢)——這一格我沒驗。⚠️ 撞到一個不是本 PR 造成的假紅
hooks/tests/dispatch-format-guard.test.sh用固定路徑/tmp/.dispatch-ok-S-TEST當豁免戳記,兩份同時跑會互相把戳記刪掉。實際重現:並行兩份 → 一份 33/33、另一份 32/33(❌ ⑧ 明示豁免戳記在 → 放行一次)。今天四條線並行,這個假紅還會再出現,而它長得跟「閘壞了」一樣。修法是路徑帶 PID(一行)——不在本票範圍,我沒動它。(原始說明見本 PR 第一則。另外補記一件值得留著的:本 PR 的紅線檢查我第一版寫成 grep
webhook|cron的關鍵字黑名單,結果命中的是我自己註解裡在談紅線那幾行——那正是 leo 2026-08-17 證偽過的形狀,已改成只認真正的動作(time.sleep/crontab/裝 hook 的呼叫)。)