diff --git a/docs/superpowers/plans/2026-10-16-hide-collector-staff-ui.md b/docs/superpowers/plans/2026-10-16-hide-collector-staff-ui.md
new file mode 100644
index 00000000..52f59d02
--- /dev/null
+++ b/docs/superpowers/plans/2026-10-16-hide-collector-staff-ui.md
@@ -0,0 +1,415 @@
+# 隐藏「采集专员」可见 UI(预签改名)— Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** 协议单/科研捐赠/缴费确认时间线等隐藏用户可见「采集专员」;预签全链路文案改为「市场专员」;`collectorUserId` 静默保留(新建默认当前用户,编辑不清空)。
+
+**Architecture:** 纯前端展示层改动。移动协议表单对 `collectorUserId` 使用已有 `hidden: true` 模式(不渲染但仍进表单状态与 payload);Web 去掉选择器 DOM,保留 `formData.collectorUserId` 回填与提交。预签只改可见 label/title/提示语,字段名不变。后端与转正式映射不动。
+
+**Tech Stack:** Vue 3 + Element Plus(web-admin);Vue 3 + Vant(mobile-oa-h5);`node:test`(mobile-oa-h5)
+
+**Spec:** `docs/superpowers/specs/2026-10-16-hide-collector-staff-ui-design.md`
+
+---
+
+## File map
+
+| 文件 | 职责 |
+|------|------|
+| `mobile-oa-h5/src/market/modules/protocol.js` | 协议/捐赠详情去掉采集专员行;表单字段 `hidden: true` |
+| `mobile-oa-h5/src/market/list-presenter.js` | 协议列表卡去掉采集专员字段 |
+| `mobile-oa-h5/src/market/modules/presign.js` | 预签详情 label → 市场专员 |
+| `mobile-oa-h5/src/market/presign/presign-list-model.js` | 预签列表/详情字段 label → 市场专员 |
+| `mobile-oa-h5/src/views/market/presign/PresignOrderForm.vue` | 表单 label / 选择器 title → 市场专员 |
+| `mobile-oa-h5/src/market/*.test.js` 等 | 同步断言 |
+| `web-admin/.../protocol/ProtocolFormDialog.vue` | 去掉采集专员表单项;保留静默写入 |
+| `web-admin/.../protocol/ProtocolViewDialog.vue` | 详情去掉采集专员 |
+| `web-admin/.../protocol/index.vue` | 列表去掉采集专员列 |
+| `web-admin/.../research-donation/list/*` | 捐赠表单/列表/详情同上 |
+| `web-admin/.../clinical-payment-confirm-timeline/index.vue` | 去掉采集专员展示 |
+| `web-admin/.../presign-order/PresignOrderFormDialog.vue` | label → 市场专员 |
+| `web-admin/.../presign-order/index.vue` | 转正式确认文案改写 |
+
+---
+
+### Task 1: mobile-oa-h5 — 协议表单/详情隐藏采集专员(TDD)
+
+**Files:**
+- Modify: `mobile-oa-h5/src/market/module-contracts.test.js`
+- Modify: `mobile-oa-h5/src/market/mobile-parity-ui.test.js`(若有「采集专员」可见断言)
+- Modify: `mobile-oa-h5/src/market/modules/protocol.js`
+- Modify: `mobile-oa-h5/src/market/list-presenter.test.js`
+
+- [ ] **Step 1: 改测试 — 表单字段 hidden;详情/列表不再含「采集专员」**
+
+在 `module-contracts.test.js` 把人员 optionKey 测试改为:
+
+```js
+test('protocol personnel fields use isolated hydrated option collections', () => {
+ const fields = getMarketModule('protocol').formSections.flatMap((section) => section.fields)
+ const collector = fields.find((field) => field.key === 'collectorUserId')
+ assert.equal(collector.optionKey, 'collectorStaff')
+ assert.equal(collector.hidden, true)
+ assert.equal(fields.find((field) => field.key === 'salesUserId').optionKey, 'salesStaff')
+ assert.equal(fields.find((field) => field.key === 'regionManagerUserId').optionKey, 'managerStaff')
+})
+```
+
+在 `list-presenter.test.js`:删除或改写 `field.label === '采集专员'` 的断言(列表卡不应再有该 label)。
+
+在 `module-contracts.test.js` / 详情相关测试:若断言详情含「采集专员」,改为 assert 找不到该 label。
+
+- [ ] **Step 2: 跑测试确认失败**
+
+```bash
+cd mobile-oa-h5 && node --test \
+ src/market/module-contracts.test.js \
+ src/market/list-presenter.test.js
+```
+
+Expected: FAIL(`hidden` 未定义或仍存在「采集专员」字段)
+
+- [ ] **Step 3: 实现 — protocol 模块**
+
+`modules/protocol.js`:
+
+1. 详情 `fields` 中删除:
+ `{ label: '采集专员', value: person(...) }`
+2. 表单改为:
+ `{ key: 'collectorUserId', label: '采集专员', type: 'select', optionKey: 'collectorStaff', hidden: true }`
+
+`list-presenter.js`:删除
+`field('采集专员', personName(...))` 这一行。
+
+**勿改** `protocol-form-defaults.js` 的默认当前用户逻辑。
+
+- [ ] **Step 4: 再跑测试**
+
+```bash
+cd mobile-oa-h5 && node --test \
+ src/market/module-contracts.test.js \
+ src/market/list-presenter.test.js \
+ src/market/protocol-form-defaults.test.js
+```
+
+Expected: PASS(含新建默认 `collectorUserId` 仍为当前用户)
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add mobile-oa-h5/src/market/modules/protocol.js \
+ mobile-oa-h5/src/market/list-presenter.js \
+ mobile-oa-h5/src/market/module-contracts.test.js \
+ mobile-oa-h5/src/market/list-presenter.test.js \
+ mobile-oa-h5/src/market/mobile-parity-ui.test.js
+git commit -m "$(cat <<'EOF'
+fix(mobile-oa-h5): hide collector staff on protocol UI
+
+Keep collectorUserId in form state as a hidden field with create defaults.
+EOF
+)"
+```
+
+---
+
+### Task 2: mobile-oa-h5 — 预签文案改为「市场专员」(TDD)
+
+**Files:**
+- Modify: `mobile-oa-h5/src/market/presign/presign-list-model.test.js`
+- Modify: `mobile-oa-h5/src/market/module-contracts.test.js`(若有预签「采集专员」断言)
+- Modify: `mobile-oa-h5/src/market/presign/presign-list-model.js`
+- Modify: `mobile-oa-h5/src/market/modules/presign.js`
+- Modify: `mobile-oa-h5/src/views/market/presign/PresignOrderForm.vue`
+- Modify: `mobile-oa-h5/src/market/mobile-parity-ui.test.js`(预签相关文案)
+
+- [ ] **Step 1: 改测试期望 label 为「市场专员」**
+
+`presign-list-model.test.js` 示例:
+
+```js
+{ key: 'collectorUserName', label: '市场专员', value: '采集员甲' },
+```
+
+`module-contracts.test.js` 中预签详情若有:
+`field.label === '采集专员'` → `'市场专员'`。
+
+- [ ] **Step 2: 跑测确认失败**
+
+```bash
+cd mobile-oa-h5 && node --test \
+ src/market/presign/presign-list-model.test.js \
+ src/market/module-contracts.test.js
+```
+
+Expected: FAIL(实际仍是「采集专员」)
+
+- [ ] **Step 3: 实现改名**
+
+1. `presign-list-model.js`:`label: '采集专员'` → `label: '市场专员'`
+2. `modules/presign.js`:详情 `{ label: '采集专员', ...}` → `{ label: '市场专员', ...}`
+3. `PresignOrderForm.vue`:
+ - `` → ``
+ - `title="选择采集专员"` → `title="选择市场专员"`
+4. **不要**把 `form.collectorUserId` / `v-model` 改成 `salesUserId`
+
+- [ ] **Step 4: 再跑测试**
+
+```bash
+cd mobile-oa-h5 && node --test \
+ src/market/presign/presign-list-model.test.js \
+ src/market/module-contracts.test.js \
+ src/market/presign/presign-form-view.test.js \
+ src/market/mobile-parity-ui.test.js
+```
+
+Expected: PASS
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add mobile-oa-h5/src/market/presign \
+ mobile-oa-h5/src/market/modules/presign.js \
+ mobile-oa-h5/src/views/market/presign/PresignOrderForm.vue \
+ mobile-oa-h5/src/market/module-contracts.test.js \
+ mobile-oa-h5/src/market/mobile-parity-ui.test.js
+git commit -m "$(cat <<'EOF'
+fix(mobile-oa-h5): rename presign collector label to 市场专员
+
+Keep collectorUserId for convert-to-protocol mapping.
+EOF
+)"
+```
+
+---
+
+### Task 3: web-admin — 采集协议单隐藏采集专员
+
+**Files:**
+- Modify: `web-admin/src/views/cell-storage/protocol/ProtocolFormDialog.vue`
+- Modify: `web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue`
+- Modify: `web-admin/src/views/cell-storage/protocol/index.vue`
+
+- [ ] **Step 1: 表单 — 删除「采集专员」`el-form-item` 模板块**
+
+在 `ProtocolFormDialog.vue` 删除约:
+
+```vue
+