# 元帅（Marshal）双模式任命与约束 — 测试报告

> 文档编号：TEST-RPT-008
> 日期：2026-06-12
> 被测：`services/backend/src/services/marshal/*`、`platform/khy_platform/cli.py`（`--marshal`）
> 用例：`services/backend/tests/services/marshal/marshalSubsystem.test.js`（node:test，35 用例）
> 关联：[DESIGN-ARCH-024]、[IMPL-RPT-024]

---

## 1. 运行方式与结果

```bash
cd services/backend
node --test tests/services/marshal/marshalSubsystem.test.js
# ℹ tests 35   ℹ pass 35   ℹ fail 0
```

全部 35 用例通过。纯确定性、零外部依赖、零网络。

## 2. 覆盖矩阵

| 模块 / 主题 | 用例要点 |
|---|---|
| `capabilityVector` | 分数随层级单调下降（T0>T1>T2>T3）；强/弱按 reasoning 阈值切分；`KHY_MARSHAL_STRONG_THRESHOLD` 环境覆盖 |
| `marshalAppointment` | 混合池归一化；自动选举挑 reasoning 最高；用户指定→`user-override`；**防呆②** 不在线立刻报错；最弱模型也能被任命 |
| `strategySOP` | schema 枚举=全部意图且含逃生地板（恒只读）；合法选择接受 / 非法 sopId 拒绝并给因 |
| `ruleEngineGuard`（**防呆①**） | 只读放行；弱主不可逆→降级须审批；强主不可逆→跨级放行；逃生地板恒可行；红线硬拦截不可审批解除 |
| `weakMasterProtocol` | **防呆③** Prompt 逐字含需求且声明只改「怎么做」；解析合法/非法；investigate 只读放行；minimal_change 编辑须审批；decompose 确定性拆解 |
| `strongMasterProtocol` | 全权/跨级/反省能力开关；Prompt 精简无 SOP 菜单、含需求、反省态加修正头；ingest 原样接受 |
| `contextBaton`（**防呆③**） | `businessRequest` 冻结不可篡改；mutator 返回新接力棒不污染原态；handover 只换指挥、`assertRequestIntact` 为真、失败日志无损携带 |
| `impeachment`（§5） | 连续两次非法触发、其间一次合法清零；逼宫文案逐字精确、候选为排除失败者后最优；拒绝→挂起、批准→移交清零 |

## 3. 端到端三场景（目标第 6 阶段硬性要求）

同一复杂任务 `TASK = 重构后端登录模块…保持对外 API 不变`：

| # | 场景 | 断言要点 | 结果 |
|---|---|---|---|
| ① | **自动选举** | `mode:auto` 选出 `claude-opus-4-8`；`protocol:strong`；Prompt 逐字含需求；`strong_plan` 接受；快照需求逐字 | ✅ |
| ② | **强主指定** | `--marshal=claude-sonnet-4-6` → `user-override` + `strong`；自由计划被接受、`freePlanning:true` | ✅ |
| ③ | **弱主指定** | `--marshal=qwen-4b` → `weak`；选择题 Prompt 含 SOP 菜单+需求；`investigate` 微步放行；`minimal_change` 编辑 `requiresApproval:true`（系统底线不死） | ✅ |
| ③b | **弹劾→无缝移交** | `gpt-4o-mini` 连续 2 次非法 → `impeach_proposed` 逐字文案、候选 `claude-opus-4-8`；用户批准 → `handover_done`、`requestIntact:true`、新协议 `strong`、失败日志无损接力；移交后恢复治理 | ✅ |
| ③c | **用户拒绝弹劾** | 拒绝 → `suspended`，仍为原元帅，绝不静默覆盖用户意志 | ✅ |
| — | **防呆②（端到端）** | 指定不在线模型 → `appoint` 立刻 `model_not_in_pool`，协调器不进入治理态 | ✅ |

## 4. 核心诉求达成

- **用户意志至上**：最弱模型可被任命；拒绝弹劾即挂起等用户，系统从不擅自换将。
- **系统底线不死**：弱主一切可变动作经规则引擎降级须审批，红线硬拦截，逃生地板恒在。
- **无缝切换**：移交后 `businessRequest` 逐字无损（`requestIntact:true`），步骤/失败日志随接力棒携带。

## 5. 结论

四条防呆红线、三大核心诉求、三场景端到端流转均有对应断言并全部通过。无回归（仅新增模块 + cli.py 透传）。
