7b51db3d0b
派工有票號、工人有名字(roster)、留言有【身份】三件都在派工/回覆那頭; 缺的是總管改票的那一刻,把「要改的票」跟「這個 session 派出去的那一批票」比一次 (leo 2026-09-05:「明明已經都憑 milestone 和票號了」——subagent 回報的東西被 總管當成另一件事更新)。 - hooks/dispatched-ticket-stamp.sh(PostToolUse Agent|Task):按 session 記 「哪張票派給了哪位工人」(subagent_type,剝掉 plugin 前綴)。回報(SendMessage)不記。 - hooks/report-ticket-match-guard.sh(PreToolUse Bash):總管 say/close/handback (+ Gitea API 側門)一張不在那批派工票裡的票 → 擋一次,印「X 被派的是 #A」。 判準是票號(唯一識別碼)往放行方向比對,不看措辭(leo 2026-08-17 已證偽文字層封路)。 沒派過工的 session 整支休眠;動被派出去的那張放行;讀取/別的動詞放行; 同一張只擋一次(重下就過);逃生口 report-match-ok。 - 測試 scripts/test-report-ticket-match-guard.sh 31/31(離線,戳記走 ISEP_STAMP_DIR)。 - 盤點:hooks 62→64、註冊 88→90、scripts 66→67(在這棵樹上實數); docs/hooks-inventory.md、docs/TESTING.md A43、plugin.json 描述一併更新。 版本號待總管定(未動 plugin.json version,避開 check-version-consistency)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TGxitYq49FzYC7EFkbhzF5