subagent state machine label mechanism - Liplus-Project/liplus-language GitHub Wiki

subagent state-machine label 機構導入 — Anthropic Agent View 同型 surface の repo 永続化判断

改名注記 (#1688): 本 entry が導入を判断した状態機械 label は、導入時の名前 done から #1681 で review-pending へ改名された。Decision Structure は時系列 log ではなく現在の構造を表す state 形エントリ + edge の意味グラフであり、維持運用は履歴の消去ではなく refactor である (rules/evolution/evolution.md Reader/writer pairing) ため、本文の label 名は現行名 review-pending に置き換えてある。判断そのものは無効化されておらず改名されただけなので、supersede edge は張らない。ただし次の 2 つは当時の literal のまま残す: (a) 本判断より前に retire されていた別 label としての done、(b) 却下案としてのみ提案された label 名。

判断

2026-05-12 セッションで Anthropic Claude Code が /goal および Agent View を build-2026-05 リリースで追加したことを契機に、Li+ 側で subagent state-machine label 機構 (in-progress / review-pending / waiting / blocked) を導入する判断を確定。subagent への label 編集権限 (state-machine label に限定) を partial 緩和する spec 変更を伴う。main 側 label 適用は best-effort / 観察モードで開始、enforcement 強化は段階的に判断する。

背景

Anthropic 側が CLI session-local の Agent View で agent state 観測 surface を提供したのに対し、Li+ は同型な state machine を repo 永続 surface (issue label + comment) として獲得する設計判断。動機は Sheepdog Engineering の initiator 軸を AI 側に渡す方向と整合する cross-session 観測 infra の必要性。

特に以下の scenarios で価値が出る:

  • CHANGES_REQUESTED 後の re-delegation (新規 subagent への handoff context)
  • pause / blocked からの別 session 再開
  • human review 待ち状態の cross-session 観測

旧 done label の retirement 根拠「Redundant with issue closed state」は old done (漠然と「終わった」) を前提にしたもの。本判断で導入する label (役目完了、orchestration 待ち。現行名 review-pending) は closed state と別軸 (closed = issue 全体決着、review-pending = 実装フェーズ終了) なので、retirement そのものを撤回する。

制約

  • subagent label 権限緩和は state-machine lifecycle label 4 種 (in-progress / review-pending / waiting / blocked) に限定。type / maturity / marker / non-state lifecycle (backlog / deferred) は parent retain。
  • close 操作は parent retain (変更なし)。
  • waiting / blocked 遷移時は subagent が issue comment に reason を書き込む義務を負う (cross-session handoff context)。
  • main 側 label 適用は mandate しない (best-effort / 観察モード)。
  • 旧 done の retirement 根拠は新 semantic で解消され、Retired Labels セクション (該当 1 行) を rules/operations/operations.md から削除する。

結論

採用案: 単一 review-pending label を executor-agnostic に運用し、subagent 側のみ mandate、main 側は best-effort / 観察モード。

却下案 1 (executor-agnostic 単一 label、両者 mandate): main 側で review-pending の fire タイミングが transient (PR open + CI green + 自レビュー → 即 merge へ continuous flow) で滑り、旧 done 廃止理由「使われなかった」の再発リスクが高い。

却下案 2 (executor 別 2 label = subagent 用 done + main 用 awaiting-merge。いずれも当時の提案名で、採用されていない): label vocabulary 数の増加による冗長性。Master の判断で「label の数を増やすより観察フェーズで main 適用頻度を測る」方針を採用。

却下案 3 (subagent 用のみ追加、main 側完全省略): main flow の cross-session 観測価値 (session 境界中断時の handoff) が失われる。best-effort で残すことで観察 surface を確保。

関連

  • 起票 issue: Liplus-Project/liplus-language#1276
  • label 改名 issue: Liplus-Project/liplus-language#1681 (done → review-pending) / 本 entry への反映: #1688
  • 関連 spec literal:
    • skills/task-subagent-delegation/SKILL.md line 12 / 22 (subagent label 制限の現行 spec、本判断で部分緩和)
    • rules/operations/operations.md Retired Labels セクション (旧 done 廃止記録、本判断で削除対象)
    • rules/task/task.md Label Definitions (Lifecycle 軸、本判断で review-pending / waiting / blocked 追加)
  • 関連 Decision Log:
  • 外部 references:
    • Anthropic Claude Code /goal: code.claude.com/docs/en/goal.md
    • Anthropic Claude Code Agent View: code.claude.com/docs/en/agent-view.md