🔴 現在地(2026-08-12、lead-coder)── この issue の前提は正しい。欠陥は実在する。
⚠️ 下の「✅ 決着済み(2026-08-09、architect 実測)」ブロックは撤回されました。 architect 自身が撤回を投稿しています(この issue のコメント参照)。偽と分かった宣言が「実測した」と名乗ったまま先頭に居るのが最も害なので、私が本文から降ろしました(architect は本文編集権を持ちません)。記録として下に残しますが、内容は誤りです。
何が起きていたか
撤回の理由は seam を 1 本しか数えなかったことです:
見た ExposureDeviation.excluded_names → session_spawn 不在 ← 事実
見落とし router_tools.py:111 _WRAPPER_SUPERSEDED_BASE_TOOLS (#3429)
"spawn_session" を含む
:941 if universal_wrappers_enabled: → :942 strip
registry を 1 本列挙して、seam という軸について結論した形です。
正しい言明(条件付きで真)
既定 scheme (enumerate-all) category 経路を通らない ∴ strip 走らず 到達可能
category 系 scheme + universal_wrappers_enabled: true
strip が走り、catalog 経路も無い ∴ 🔴 到達不能
universal_dispatch.py に spawn_session は 0 件(catalog 経路の不在も確認済み)。
∴ 「既定では起きない」と「機構が存在しない」が潰されていました。 これは将来の前提条件ではなく、今日選択可能な設定での実欠陥です(その mode は #3429 で既に landed)。
未測定 3 点は全て埋まりました
① 動的に excluded_names を足す経路 無し(ExposureDeviation は frozen=True、構築 6 箇所すべて定数)
② 第三者 scheme ★列挙可能(「原理的に不能」ではない)
register_scheme は in-repo 5 モジュールのみ/entry_points 0 件/
plugin は ADR-0064 で別プロセス・別 venv ∴ プロセス内登録不可
③「exclusive-wrapper mode」の出所 ★生きたコード(router_tools.py:111、#3429)。散文ではない
なぜ既存 gate が拾えないか(構造)
llm_reachability.py:160 の判定は "under SOME valid combination of its parameters"=存在量化です。spawn_session は wrappers=False で出せる ∴ 到達可能と数えられます。これは意図的な設計(そうしないと条件付きツールが全て FP になる)であり、∴「設定 X では到達不能」は構造上この gate の対象外です。gate の見落としではなく、gate が答えている問いが違います。
次の判断は owner
選択肢 A/B/C(下記)のうち A(session_spawn に catalog 経路を与え、delegate_to_agent と対称にする) が自然に見えますが、解き方は「category 系 scheme + universal_wrappers_enabled: true を今後も支持する設定として維持するか」に依存します。そこは owner 判断なので、朝の裁定に載せます。
⚠️ 私が 2026-08-12 に書いた「前提が偽である以上 A も B も解くべき問題を持っていない」というコメントは、撤回された測定に基づくもので、誤りです。 問題は実在します。「選択肢の存在は問題の存在の witness ではない」という一般論自体は変わりませんが、今回は問題の存在が別途確認されました。
✅ 決着済み(★2026-08-09、★architect 実測)── 貴殿の 判断は 不要に なりました
«exclusive-wrapper mode で session_spawn が 到達不能» という 本 issue の 前提は 誤りでした。
🔴 ★«個別 entry を 剥がす» 機構は ★現ツリーに ★存在しません
★entry を 落とす 唯一の seam ★_category_exposure.py:105 excluded_names
★それを 非空に する 全サイト ★= ★{"list_actions"} / ★{"mcp_call_tool"} ★の 3 箇所だけ
★session_spawn は ★どこにも 入っていない / ★includes_base_tools は 全設定 True
★session_spawn 自身も 正常(★router="allow" / category="delegation")
私が 矛盾した 理由(★2 つの «既定» の 取り違え)
★config の 既定 ★universal_wrappers_enabled = ★True ── ★wrapper を tools= に «追加» する 話
★scheme の 既定 ★"enumerate-all"(★execution.py:86、★貴殿の default switch #1657)
★→ ★sp_facts で ★universal_wrappers_enabled を ★False に 上書き(★_enumerate_exposure.py:137)
⚪ ★本文の «既定(wrapper 無効)» は ★後者を 指しており ★正しい
⚠️ 私は 起票時に «universal_wrappers_enabled = true の とき» と 書き、
その «true» が どちらの 既定を 指すか 確かめていませんでした。
🔴 ただし 閉じません ── 将来の 前提条件として 残します
★今 ★session_spawn は ★既定で 到達可能 ∴ ★実害なし
🔴 ★将来 «base を 落とす mode» を 作るなら ★その時点で ★A(catalog 経路を 与える)が ★前提条件
★#3903 ② の «背景実行を 一時セッションに 寄せる» 設計とも 併存できる(★今は)
⚠️ 未測定(★引き継ぎ)
★実行時に excluded_names を 動的に 足す 経路が あるか
★第三者 scheme(★register_scheme は import 時 自己登録)── ★in-repo の 5 scheme しか 数えていない
★«exclusive-wrapper mode» という 名前の 出所(★universal_dispatch.py:21 の 記述は
★#3429 で «直さなかった 7 subsystem» を 列挙した 散文で、★生きたコードでは ない)
[lead-coder] — #3895(doc 昇格作業)で発見。doc の欠落ではなく 機能の穴です。
現象
action_retrieval.universal_wrappers_enabled = true のとき
delegate_to_agent 個別 entry は 剥がれるが multi_agent カテゴリの catalog dispatch で 残る
🔴 session_spawn 個別 entry が 剥がれ、catalog 経路が 存在しない
∴ 操作者が exclusive-wrapper を 有効にすると session_spawn を 補償経路なしで 失う
なぜ気づかれにくいか
doc 上 delegate_to_agent と 並べて説明される位置にある
∴ 「同じように残るはず」と 読める
実際は 片方だけ 経路が無い
#3120 の «advertised but not dispatched» と同族ですが、こちらは «mode を切り替えると 消える» —— 既定では見えません。
選択肢
A session_spawn に catalog 経路を 与える(multi_agent カテゴリに 入れる)
→ delegate_to_agent と 対称になる。★私はこれを推します
B exclusive-wrapper mode で session_spawn の 個別 entry を 剥がさない
→ mode の意味が 崩れる(«個別は全部剥がす» でなくなる)
C 現状維持 + doc に明記(#3895 で 実施済)
→ 操作者は 知った上で mode を選べる。穴は 残る
⚪ #3895 が doc に明記済なので、C の状態は 既に成立しています。A/B は 機能を戻す判断です。
⚠️ 緊急ではありません —— 既定(wrapper 無効)では 起きません。exclusive-wrapper mode を 実際に使う人が現れた時に効きます。
🔴 現在地(2026-08-12、lead-coder)── この issue の前提は正しい。欠陥は実在する。
何が起きていたか
撤回の理由は seam を 1 本しか数えなかったことです:
registry を 1 本列挙して、seam という軸について結論した形です。
正しい言明(条件付きで真)
universal_dispatch.pyにspawn_sessionは 0 件(catalog 経路の不在も確認済み)。∴ 「既定では起きない」と「機構が存在しない」が潰されていました。 これは将来の前提条件ではなく、今日選択可能な設定での実欠陥です(その mode は #3429 で既に landed)。
未測定 3 点は全て埋まりました
なぜ既存 gate が拾えないか(構造)
llm_reachability.py:160の判定は "under SOME valid combination of its parameters"=存在量化です。spawn_sessionはwrappers=Falseで出せる ∴ 到達可能と数えられます。これは意図的な設計(そうしないと条件付きツールが全て FP になる)であり、∴「設定 X では到達不能」は構造上この gate の対象外です。gate の見落としではなく、gate が答えている問いが違います。次の判断は owner
選択肢 A/B/C(下記)のうち A(
session_spawnに catalog 経路を与え、delegate_to_agentと対称にする) が自然に見えますが、解き方は「category 系 scheme +universal_wrappers_enabled: trueを今後も支持する設定として維持するか」に依存します。そこは owner 判断なので、朝の裁定に載せます。✅ 決着済み(★2026-08-09、★architect 実測)── 貴殿の 判断は 不要に なりました
«exclusive-wrapper mode で session_spawn が 到達不能» という 本 issue の 前提は 誤りでした。
私が 矛盾した 理由(★2 つの «既定» の 取り違え)
その «true» が どちらの 既定を 指すか 確かめていませんでした。
🔴 ただし 閉じません ── 将来の 前提条件として 残します
[lead-coder] — #3895(doc 昇格作業)で発見。doc の欠落ではなく 機能の穴です。
現象
なぜ気づかれにくいか
#3120 の «advertised but not dispatched» と同族ですが、こちらは «mode を切り替えると 消える» —— 既定では見えません。
選択肢
⚪ #3895 が doc に明記済なので、C の状態は 既に成立しています。A/B は 機能を戻す判断です。