# v0.4 产品迭代：输出控制与可信降密

迭代日期：2026-09-19。v0.4 按 README 路线图完成两项能力：输出侧信息流控制与可信降密。

## 产品边界

v0.3 能在工具执行前阻止危险副作用，并在成功结果后追踪来源；但凭据读取工具仍可能把
结果直接送入模型上下文，且普通转换只能不断继承标签，无法表达“已由可信脱敏器处理”。
v0.4 补上这两个边界，同时不引入 LLM 裁决或通用内容改写器。

## 输出侧信息流控制

- 接入 DSH `tools/post-execute`，在工具体运行后、结果提交给模型前检查输出。
- 默认阻止 `SECRET` 与 `API_KEY`；操作者可通过 `output.blockedTaints` 增加标签。
- 同时检查规范化 value、模型可见 content、additional contexts，以及下游插件接受的替换投影。
- enforce 模式返回原生 `block`；observe 模式记录 `would_block`，不改变结果。
- 检测异常在 enforce 模式失败关闭，且反馈不包含原始输出。

输出门控不能撤销工具已经发生的外部副作用；外发、写入与命令执行仍由
`tools/pre-execute` 规则负责阻止。

## 可信降密

```yaml
output:
  enabled: true
  blockedTaints: [SECRET, API_KEY, PII, CUSTOMER_DATA]
  trustedDeclassifiers:
    approved_redactor: [PII, CUSTOMER_DATA]
```

- 配置只接受精确工具名与合法污点标签，并在加载时校验边界。
- 降密器只能移除指定的继承标签；普通工具保持加法传播。
- 工具自身类别产生的标签与结果正文检测出的标签在降密后重新加入。
- 因此“声明为降密器”不能让仍包含邮箱、密钥等敏感内容的结果通过。
- 配置只能由操作者修改，没有可供模型调用的策略修改工具。

## 证据与隐私

执行回执新增 `output` 元数据：`action`、最终标签、已降密标签。输出被实际阻止时，
最终 outcome 为 `output_blocked`。内存 proof、JSONL、文字报告与 Web 概览只展示这些
标签和动作，不保存结果正文。

## 验收范围

自动化覆盖以下场景：

- 默认凭据结果在真实 DSH post-execute 管线中被替换为安全错误；
- observe 模式只记录、不拦截；
- 未批准的转换无法移除标签；
- 精确批准的降密器可移除指定继承标签；
- 结果仍含敏感模式时确定性重新加标并阻止；
- 输出动作写入回执且不泄漏正文；
- 既有 pre-execute、来源、工具链、界面和安装回归继续通过。

运行 `npm run verify` 可复现类型检查、构建、marketplace 检查、完整测试和进程烟测。
