# fix: ランチャのチップで「起動中」を取り戻す（#1106）

## 何が起きたか

ランチャのディレクトリチップは、独立した 2 つの事実を**同じチャンネルの同じ強さ**で描いていた。

| 事実 | 枠線 | 背景 wash |
|---|---|---|
| どのディレクトリか（設定色） | 55% | 14% |
| そこで起動中か | 55%（青） | 14%（青） |

`dirChipColor.ts` の `CHIP_BORDER_PERCENT = 55` / `CHIP_TINT_PERCENT = 14` と、
`TerminalCell.vue` の `#3b82f6 55%` / `14%` が同じ数値。色付きが少数派のうちは
「染まっている＝起動中」で読めていたが、#1103 で一括色分けができるようになり大半が染まった結果、

- 「染まっている」が意味を失った
- 青系の色を持つディレクトリは、停止中でも起動中に見える
- 唯一の固有マーカーである 6px ドットも同じ青なので、青いチップ上で消える

`dirChipTint(color, running)` が `running` のとき `{}` を返す作りは、この衝突を
**片側からだけ**避けていた。青が dir 色を上書きしないようにはできていたが、
**dir 色が「起動中」に見えてしまう逆向き**は防げていない。

## 直し方 — 1 チャンネル 1 意味

グリッドのセル本体は既にこの規律を守っている（`CELL_STATUS` / `HEADER_STATUS` / `DOT_STATUS` が
working / blocked で dir 色を**完全に置き換える**）。チップにも同じ規律を入れる。

| チャンネル | 意味 |
|---|---|
| 左端のストライプ（色相） | どのディレクトリか — **ここだけ** |
| 背景 wash・枠線・ドットの脈動 | 起動中 — **ここだけ** |

- 停止中は色の有無にかかわらず背景を持たない（`CHIP_IDLE`）。
- 起動中だけが染まり、ドットが `animate-cell-pulse` で脈動する。
  **脈動は色相に依存しない**ので、青い dir 色の上でも読める。
- `motion-reduce:animate-none`。動きを止めても背景・枠線・ドット色が残るので、
  起動中の表現は**冗長**で、動きが使えない環境でも判別できる。
- ストライプを 6px → 8px。wash を外した分、識別がストライプ 1 本に集中するため。

## 実装

- `dirChipColor.ts`
  - `dirChipTint()` を削除（停止中は背景を持たないので、返すものが無くなる）。
  - チップのクラス文字列を定数化（`CHIP_IDLE` / `CHIP_RUNNING` / `CHIP_DOT_RUNNING`）。
    `cellChromeClasses.ts` と同じやり方 — Tailwind はスキャン対象の `.ts` 内の**完全な**
    リテラル文字列を拾うので、これで動く（変数を埋め込むと拾えない点に注意）。
  - ハードコードされていた `#3b82f6` の出所をここ 1 か所にまとめる。
- `TerminalCell.vue` — チップの `:class` / `:style` 削除 / ストライプ幅 / ドットのクラス。

## テスト

`dirChipTint` のテストは対象が消えるので差し替え。代わりに **DOM で規則を固定する**
（`TerminalCell.spec.ts` は既にチップをマウントして `data-testid` で引いている）:

1. **色付き・停止中のチップは背景を持たない** — これが今回のバグそのもの。
2. **起動中のチップだけが染まり、脈動ドットを持つ。**
3. **色付き・停止中と起動中が、同じ見た目にならない** — 1 と 2 が両方通っても、
   将来どちらかの定数が動けば同じ見た目になりうる。両者を直接比較して差を固定する。

## 非目標

- グリッドのセル本体（既に規律が効いている）
- ディレクトリ色の設定方法（`mulmoterminal-dirs` スキル側）
- ヘッダーの `chips` 設定（別物）
