# dsh-agent-teams-fish v0.5.0

**第三轮厂商素材版**：厂商命名空间 **15 → 17**，新增 **StepFun（阶跃星辰）** 与 **Jev（TypeSafe System One）**。

两家都只有「厂商通用图 + 立绘高清」这一档素材（**没有 Q 版岗位图**），因此与既有的 `meta` / `mistral` / `rwkv` / `seed` / `ernie` 同档：成员请求 `member-<vendor>-<role>-v2.png` 时第 1 跳落空、**第 2 跳命中岗位通用图**，头像照常显示、不破图。

## 本版改动

### 一、厂商命名空间 15 → 17

- `src/artwork-source.ts`：`ARTWORK_VENDORS` 追加 `stepfun`、`jev`。这个数组同时是宿主端的**放行白名单**（`artworkCandidates` 只服务登记在册的 token）与队长图的**可达性判据**（`leadArtUrl` 对未登记 token 会回落），漏登记就是「素材在包里但请求永远 404」或「队长头像不跟随路由」。
- `scripts/verify.mjs`：三处硬枚举同步 —— `ARTWORK_VENDOR_ALT` 正则、`GENERIC_ONLY_VENDORS`、以及 `ARTWORK_VENDORS.length === 15` 这条断言（改为 17）。两档合起来必须恰好等于 `ARTWORK_VENDORS`，多一个少一个都失败。
- `scripts/import-vendor-artwork.mjs`：`VENDORS` 同步，保证以后用 `pnpm import:artwork` 导入 `member-stepfun-*.png` 一类文件时不被判成「无法识别」。

### 二、厂商识别规则

| token | 命中 |
|-------|------|
| `stepfun` | `stepfun` / `step-<数字>`（含 `step_5` / `step5`）/ 阶跃 |
| `jev` | `jev` / `typesafe` / `type-safe` |

**`step-<数字>` 那一条不是锦上添花，是必需的。** 本机三条 Step 路由的 provider 段是 `cn-f/cline/cline-free` 这类，**没有一个字母是 stepfun**，而 model 是 `step-5-preview`。只按 provider 名匹配会让整队成员掉兜底头像 —— 与 [0.4.1](v0.4.1.md) 修掉的 `hunyuan3` / `rwkv7` / `seed1.6` 是**同一类病根**：厂商主名后面跟数字时，旧的尾部 `\b` 边界匹配不上。

`jev` 同理认 provider 段（`en-f/cline/typesafe`）与模型名（`jev-router`）两处，任一侧命中即可；`type-safe` 带连字符的写法一并收进，避免换写法就漏。

**两者都保留词边界，且刻意不写成裸 `\bstep[\w.-]*`**：否则 `stepper` / `steps` / `stepstone` 会被吞成阶跃。`step` 后面必须跟分隔符或数字。单测钉住了这两组负例。

### 三、素材（+6 文件，280 → 286）

| 文件 | 规格 |
|------|------|
| `member-stepfun-v2.png` · `member-jev-v2.png` | 256×256 8-bit RGBA |
| `member-stepfun-full-v2.webp` · `member-jev-full-v2.webp` | 1086×1968 / 1109×2016，alpha WebP q92 |
| `brand-stepfun.svg` · `brand-jev.svg` | 24×24 单色内联 path |

制作口径与既有素材一致：四边连通洪水填充（阈值 238）+ 边缘收缩 1px 去背 → 裁到实心包围盒；256 头像是立绘的等比缩小版（高度 254px、水平居中），实测既有素材的墨迹高在 246–255 之间，落点一致。

### 四、⚠️ `brand-jev.svg` 是占位字标，不是官方商标

TypeSafe / Jev 目前**没有公开商标** —— simple-icons 与 LobeHub icons 都查不到（`jev` / `typesafe` / `jev-router` 一律 404）。而仓库门禁 `every vendor ships its own artwork tier` **强制每个厂商都必须有 `brand-<vendor>.svg`**，缺了直接红。

所以本版按既有归一化口径（墨迹框最大边缩到 0.84×24、居中）自制了一个简洁的「J」字标并注入品牌色。**它不是官方商标**，拿到官方素材后直接替换同名文件即可，命名与尺寸口径都不用改。

`brand-stepfun.svg` 没有这个问题：取自 LobeHub icons 的官方单色 path，同样过了 `svg` 自洽性门禁（无外链、无脚本）。

## 验证

- `pnpm typecheck` 通过；
- `pnpm build` 后 `artwork-role-match.test.mjs` 新增 **11 条**厂商用例（含 6 条 stepfun / 4 条 jev / 1 条队长图跟随）与 **2 组**防误伤负例，`custom-artwork.test.mjs` 的命名空间断言同步到 17；
- `pnpm verify` 的素材门禁逐张断言 271 张厂商素材的尺寸、格式、编码与 alpha，并钉住「厂商 + 岗位第一跳」与「队长图跟随路由」两条可达性；
- 素材目录 286 个文件 / 约 29.3 MB。
