Skip to content

bug(adapter): mixed-case LI_PLUS_WEBHOOK_DELIVERY value splits bash and PowerShell ports #1804

Description

@smileygames

目的

LI_PLUS_WEBHOOK_DELIVERY の値を大小文字混在で書いたとき、bash port と PowerShell port が別の挙動になる。3 port の parity を回復する。

観測事実(2026-08-24 実測)

比較演算子が port ごとに違う既定を持つ:

port 演算子 大小文字
adapter/claude/hooks/on-user-prompt.sh :28 [ "$WEBHOOK_DELIVERY" != "mcp_hook" ] 区別する
adapter/codex/hooks/on-user-prompt.sh :39 同上 区別する
adapter/codex/hooks/on-user-prompt.ps1 :41 $webhookDelivery -ne 'mcp_hook' 区別しない(PowerShell の -ne は既定で case-insensitive)

同一ホスト上で実測:

'Mcp_Hook' -ne 'mcp_hook'   -> False  (PowerShell: 等しいと見なす)
[ "Mcp_Hook" != "mcp_hook" ] -> true  (bash: 異なると見なす)

したがって LI_PLUS_WEBHOOK_DELIVERY=Mcp_Hook と書かれた workspace では、bash port は呼び出し半分を emit し、PowerShell port は抑止する。同じ config を読んで逆の結論に至る。

channel 値についても同形。

前提

論点

方向は3つある。

  1. 正規化:3 port とも読み取り直後に小文字化して比較する(bash は tr '[:upper:]' '[:lower:]'、PowerShell は .ToLowerInvariant())。混在値を受け入れる方向。
  2. 厳格化:PowerShell 側を -cne にして case-sensitive へ揃える。混在値を拒否する方向。未知の値は既定(poll)へ落ちるため、Mcp_Hook は poll 扱いになる。
  3. 検証:未知の値を検出して警告を emit する。

Li+config.md のテンプレートは小文字で書かれており、コメントも小文字の3値を列挙している。したがって混在値は設定ミスであり、受け入れるべきものか拒否すべきものかがそのまま方向1と2の分かれ目になる。rules/model/subtractive-structural-beauty.md の「binary only — required or unnecessary」に照らせば、黙って一方に倒れる現状(port ごとに別の方へ倒れる)が最も悪い、という点は方向によらず共通。

決める前に、同じ config を読む他の値(LI_PLUS_MODE / LI_PLUS_CHANNEL / LI_PLUS_BASE_LANGUAGE / LI_PLUS_PROJECT_LANGUAGE)が3 port でどう比較されているかを掃引すること。本件だけを直すと同じクラスが残る。

変更予定ファイル(方向未確定のため暫定)

  • adapter/claude/hooks/on-user-prompt.sh / adapter/codex/hooks/on-user-prompt.sh / adapter/codex/hooks/on-user-prompt.ps1
  • adapter/claude/hooks/on-session-start.sh / adapter/codex/hooks/on-session-start.sh / adapter/codex/hooks/on-session-start.ps1 —— 掃引の結果、同じクラスが在れば
  • tests/ —— 3 port × 混在値の契約テスト

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug動いていない、壊れているforming本文を再構築しながら要求を整えている状態

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions