implementation always delegated - Liplus-Project/liplus-language GitHub Wiki
実装は常に subagent へ委譲する(親は実装しない)
Question
親エージェントが自分で実装コードを書いてよいか。書いてよいなら、委譲との切り分けは何を基準にするか。
Current resolution
実装は常に subagent へ委譲する。親は実装しない。 適用範囲は Li+ 全体(LI_PLUS_REPO の自己進化 PR も、USER_REPO<N> のユーザーリポジトリも同じ)。差分の大きさによる例外を置かない。
親が保持するのは委譲の判断、brake 1 / brake 2 の判定、セルフレビュー、マージ判断。委譲された subagent は skills/operations-on-pr-review/SKILL.md の停止条件どおり PR open + CI green で停止して報告し、そこから先は親が持つ。
判断軸は規則の単純さ。条件分岐を持つ規則は適用の瞬間に判断を要求し、その判断が毎回その場の感覚に落ちる。
Edges
- depends on
parallel-subagent-eval-model-floor— 一般委譲がmodelを省略して親モデルを継承する方針(#1554)が前提。実装が常に委譲になると実装者のモデル階層が全 PR の品質に効くため、この方針が変われば本判断の前提も変わる - depends on
brake1-single-round-cap— 1巡制限下では初回実装の質がそのまま出荷品質に効く。実装者を固定することは、その変数を一定に保つ側の判断にあたる - conflicts with (現時点で対立 entry なし)
背景
PR #1581(#1575、300行超・3実装 + docs + test)を親が直接実装したことが起点。判断の瞬間に「小規模だから」「文脈が既に手元にあるから」という理由で委譲を省いており、その基準が明文化されていなかった。
結果として brake 1 を commit 前に実行することになり、評価者3体へ生きた working tree を渡した。評価者Aが mutation test でソースを差し戻した最中に評価者Cが走り、Cは存在しない flakiness を実欠陥候補として報告した(memory/promotion_tally.md の cluster brake1-evaluation-baseline-not-isolated)。
判断の前に確認した反証
AI 側は当初「親実装は単一 issue の直列作業では正当」と推奨しており、根拠は3点だった。いずれも Master が聞いた上で、規則の単純さを優先する判断が下されている。
| AI 側の論拠 | 実測 |
|---|---|
| 差分サイズは基準にならない | 1行が load-bearing だった実例(#1556/PR #1557、リリースを止めた実物の broken link 2箇所)と、300行超が大半定型だった実例(PR #1581)が併存 |
| トークン軸は委譲の根拠として弱い | 高いのは実装でなく brake 1。#1554 の実測で評価者21体 ≈260万 / 実装2体 ≈40万。PR #1581 は評価者3体 ≈65.8万 |
| 親コンテキストの節約は半分しか成立しない | 親は brake 1 判定・セルフレビュー・マージを保持するため、判定時に同じ文脈を報告から組み直す必要がある |
受容した対価
- 親は判定時に文脈を組み直す。 実装時に持たない代わりに、brake 1 の指摘を裁く時点で報告から再構成する。組み直しは劣化コピーであり、この損失は受容済み。
- 小規模変更でも委譲プロンプトの作成コストが乗る。 1ファイル1行の変更でも例外を置かない。例外条項を置けば適用の瞬間に判断が要求され、それが単純さを崩すため。
- 委譲プロンプトが新しい汚染面になる。 親のプロンプト記述の誤りがそのまま評価・実装の前提になる実例が3件記録されている(#1557 = 解決集合の条件が仕様より狭い / #1560 = 古い ref の diff を渡した / #1561 = title の ASCII 制約を body まで拡張し、repository governance と衝突)。実装委譲が必須化すると、この面を通る回数が増える。
汚染面の言語境界
委譲プロンプト内の成果物例は、例文であることを理由に独立した ASCII-only category へ入れない。issue / PR / commit のタイトル例は ASCII 英語のみとし、body 例は対象成果物の governing language contract で解決する。
body 言語の解決順は、対象成果物への human 明示指示、thread で受容済みの合意、対象 repository / workspace の project-language default。これらと別に対象 repository 固有の governance を同時に満たす。host workspace の言語契約は LI_PLUS_REPO governance を上書きせず、liplus-language の issue / PR / commit body は日本語要件を保持する。
byte-level の ASCII 検証はタイトル field に限定する。body は well-formed UTF-8 と mojibake なく表示されることを検証する。却下した経路は、title と body を一つの ASCII-only clause に束ねること、および body を bare な LI_PLUS_PROJECT_LANGUAGE だけへ無条件に固定すること。
副次的な効果(決定理由ではない)
著者と判定者が分離する。 親が著者だと brake 1 の判定が内側からの判定になる。PR #1581 で親は自分の書いたコードについて評価者指摘を裁き、1件(${VAR:-unset} と literal unset 設定の衝突、1/3)を却下した。判定だったのか防衛だったのかは内側から分離できず、skills/evolution-parallel-agent-eval 自身が前提にしている introspection gap が判定側に残る形だった。
AI 側はこれを「観測して決める項目」として提案していたが、常時委譲の採用により観測対象そのものが消えた(比較の片腕が無くなるため)。分離は決定の理由ではなく結果として得られる。
Related
- #1582 — brake 1 / brake 2 を CI green 後へ固定し、委譲の停止条件へ接続する(本判断の実装先)
- #1575 / PR #1581 — 親実装の実例、および汚染の観測元
- #1561 / PR #1622 — 汚染面の言語境界を title / body の field 契約へ分離した実装
skills/task-subagent-delegation/SKILL.md— 委譲の意味論(何を渡し、親が何を保持するか)skills/task-subagent-prompt/SKILL.md— 委譲プロンプト内の成果物言語と検証方法skills/operations-on-pr-review/SKILL.md— 停止条件(auto/semi_autoの subagent は PR open + CI green で停止)