# Daily Summary Job 自适应取证与动态问题可视化设计

**日期：** 2026-08-09
**状态：** 已完成交互设计确认，等待书面规格复核
**目标 skill：** `C:\Users\admin\.codex\skills\daily-summary-job`

## 1. 背景

`daily-summary-job` 已能从开发证据生成 Markdown 日报和自包含交互 HTML，并支持算法场景、问题目标、四种视图模式、验证门禁和旧报告兼容。

当前仍有两类体验缺口：

1. 当证据不足时，skill 只能依据已有材料生成报告，不能主动向当前任务的 Agent 或用户补充询问，因此前后对比、原因可信度、解决机制和验证结果可能不完整。
2. HTML 中的问题诊断节点偏静态，连通关系、原因传播、解决方法和改善结果缺少统一、自然的动态表达。

本设计把 skill 升级为“主动取证与问题解释器”：先发现报告证据缺口，主动获取必要背景，再构造问题模型、自动选择可视化，并用轻量因果路径与活动检查器解释问题和解决效果。

## 2. 目标

- 在生成日报前，自适应判断是否需要补充信息。
- 优先询问仍在参与当前任务的主 Agent 或子 Agent，再询问用户。
- 用户追问最多四个，每个问题均可跳过。
- 将取得的信息整理为问题背景、现象、触发条件、原因链、影响、解决方法、作用机制和改善结果。
- 根据问题的主要可观察效果自动选择可视化；存在两个同等合理方案时才询问用户。
- 用轻量因果路径作为主连通骨架，用活动检查器展示原因流、证据、解决机制、前后效果和追问依据。
- 保持证据边界、离线自包含、安全校验和旧报告兼容。

## 3. 非目标

- 不把 HTML 升级成持久化日报编辑器。
- 不允许页面中的临时输入绕过报告事实合同或直接改写源报告。
- 不要求每次生成日报都进行固定问答。
- 不为了视觉丰富而虚构坐标、比例、指标或验证结果。
- 不将某一种领域视图固定为所有任务的通用模板。

## 4. 总体工作流

完整流程如下：

1. **证据扫描**：读取当前对话、相关代码差异、提交、测试结果、计划、设计文档、检查点和可见 Agent 报告。
2. **缺口检测**：检查当前事实是否缺少会改变日报结论或可视化的关键信息。
3. **Agent 取证**：若当前任务存在仍可联系的贡献 Agent，向其提出范围明确的问题。
4. **用户追问**：只询问 Agent 和现有证据仍无法回答的高价值缺口，最多四问。
5. **问题建模**：把证据和回答归一化为问题、原因、影响、方法和改善结果。
6. **视觉规划**：按问题类型选择主视图、次级检查器、模式和前后对比方式。
7. **报告生成**：渲染 Markdown 与离线 HTML，并验证问题、回答、节点和证据引用。

Agent 不可用时直接跳过第 3 步。现有证据已充分时跳过第 3、4 步。

## 5. 自适应取证

### 5.1 缺口优先级

按以下优先级决定是否追问：

1. 修改后是否存在相同条件下的匹配验证。
2. 修改前后是否存在可比较的数值、行为、状态、场景或截图。
3. 错误原因是已验证根因、静态分析、当前假设还是结论冲突。
4. 问题影响、剩余风险和下一步完成标准是否明确。

只有缺口会改变核心结论、证据等级、可视化模式或前后效果时才提问。剩余缺口不会改变这些内容时立即停止。

### 5.2 Agent 询问规则

- 仅询问参与当前任务且仍可联系的主 Agent 或子 Agent。
- 每个问题必须关联一个明确事实缺口，例如发现方式、变更范围、原因证据、验证命令或结果。
- 不要求 Agent 复述完整工作过程，只返回结论、证据位置和未解决项。
- 已有报告能回答的问题不得重复询问。
- Agent 无响应或不可用记为 `unavailable`，不占用用户四问额度。
- Agent 结论冲突时保留双方结论和来源，不由生成 Agent 猜测裁决。

### 5.3 用户追问规则

- 用户问题总数不得超过四个。
- 每次只提出当前信息价值最高的问题。
- 每个问题显示：询问原因、会补全的结论、2–3 个快捷建议、自由文本补充和“跳过/按现有证据生成”。
- 快捷建议只能来自已有证据能够支持的状态，例如“已执行匹配复测”“尚未验证”“只有静态分析”；不得提供带有虚构结果的选项。
- 跳过后将对应内容记录为缺失证据，不进行推断。
- 用户回答进入规范化事实源后，才用于 Markdown 和 HTML 渲染。

### 5.4 混合交互边界

真正的取证问答发生在 Agent 对话中。HTML 不负责保存或提交答案，而是展示：

- 为什么提出该问题；
- 问题询问了谁；
- 得到了什么精简回答；
- 回答改变了哪个问题字段、证据等级或视觉状态；
- 哪些问题被跳过或仍缺少证据。

这样既能让回答参与正式校验，又能让报告读者理解结论如何形成。

## 6. 数据合同

新增字段全部可选，旧报告可以完全省略。

### 6.1 `inquiry_session`

用于记录本轮主动取证的精简审计轨迹：

```json
{
  "inquiry_session": {
    "status": "completed",
    "user_question_limit": 4,
    "gaps": [
      {
        "id": "gap-post-fix-validation",
        "kind": "validation",
        "reason": "缺少修改后相同输入的验证结果",
        "affected_fields": ["issues.issue-curvature.problem_analysis.before_after"]
      }
    ],
    "questions": [
      {
        "id": "question-post-fix-validation",
        "gap_id": "gap-post-fix-validation",
        "audience": "user",
        "prompt": "是否对修改后的相同输入重新运行了曲率扫描？",
        "reason": "决定验证结果模式能否启用",
        "affected_fields": ["issues.issue-curvature.verified_result"],
        "answer_status": "answered",
        "answer": "已重新扫描，峰值为 0.18。",
        "evidence_level": "已验证",
        "source_refs": ["本会话用户回答", "tests/output-after.json"]
      }
    ]
  }
}
```

`status` 允许 `not-needed`、`in-progress`、`completed` 和 `partial`。`audience` 允许 `agent` 和 `user`。`answer_status` 允许 `answered`、`skipped`、`unavailable` 和 `conflict`。

验证规则：

- 用户问题数量不得超过 `user_question_limit`，且该限制不得超过 4。
- 每个问题必须引用已声明缺口，并至少关联一个报告字段。
- `answered` 必须包含精简回答和来源；`skipped`、`unavailable` 不得伪造回答。
- `conflict` 必须包含至少两个有来源的相互冲突结论。

### 6.2 `issues[].problem_analysis`

用于表达可视化和解决机制需要的规范化问题模型：

```json
{
  "background": "当前任务目标和问题发生的业务上下文。",
  "symptoms": [
    {"id": "symptom-peak", "statement": "P17 曲率峰值为 0.31。", "evidence_level": "已验证", "source_refs": ["tests/output.json"], "target_ids": ["curvature-peak"]}
  ],
  "triggers": [],
  "cause_chain": [
    {"id": "cause-derivative", "role": "direct-cause", "statement": "端点导数约束不足。", "evidence_level": "静态分析", "source_refs": ["LocalG2CandidateBuilder.cs"], "target_ids": ["candidate-window"]}
  ],
  "impact_chain": [],
  "solution_actions": [],
  "solution_mechanism": {
    "summary": "方法如何作用于问题机制。",
    "evidence_state": "static",
    "target_ids": ["preview-path"]
  },
  "before_after": {
    "comparison_kind": "metric",
    "before": {"label": "修改前", "value": "0.31", "target_ids": ["curvature-peak"], "source_refs": ["tests/output.json"]},
    "after": {"label": "修改后", "value": "0.18", "target_ids": ["verified-path"], "source_refs": ["tests/output-after.json"]},
    "matched_conditions": "相同输入、相同扫描命令"
  },
  "remaining_risks": []
}
```

原因链节点的角色允许 `symptom`、`trigger`、`direct-cause`、`root-cause`、`impact`、`solution` 和 `result`。每个节点必须带证据等级和来源边界。

### 6.3 `algorithm_views[].visualization_plan`

记录自动选图结论：

```json
{
  "problem_types": ["causal", "numeric"],
  "primary_view": "causal-route",
  "secondary_inspector": "cause-flow",
  "selection_reason": "当前问题同时需要展示原因传播和修改前后曲率指标。",
  "mode_targets": {
    "baseline": ["current-path"],
    "current": ["curvature-peak", "candidate-rejected"],
    "proposed": ["preview-path"],
    "verified": ["verified-path"]
  },
  "comparison_presentation": "metric-and-overlay",
  "ambiguous_choices": []
}
```

如果存在两个同等合理的主视图，`ambiguous_choices` 保存候选项和差异，并在生成前询问用户；确定选择后保留最终选择理由。

## 7. 自动可视化选择

| 问题类型 | 识别信号 | 默认主视图 | 前后效果 |
| --- | --- | --- | --- |
| 空间/几何 | 位置、路径、碰撞、覆盖、形状 | 场景叠加与局部焦点 | 同坐标叠加、擦除或切换 |
| 数值/性能 | 超限、波动、耗时、误差、资源 | 曲线、阈值和指标卡 | 同尺度曲线和差值 |
| 状态/流程 | 状态错误、分支、生命周期、阻塞 | 状态迁移与当前路径 | 修改前后迁移路径 |
| 搜索/决策 | 候选、代价、扩展、剪枝、失败节点 | 搜索树或图与决策焦点 | 搜索范围和选择差异 |
| 时间/事件 | 顺序、延迟、切换、并发、时序异常 | 时间线与事件窗口 | 对齐事件序列 |
| 因果诊断 | 现象、触发、原因、影响、修正 | 轻量因果路径 | 原因链与改善结果 |
| 数据转换 | 输入、清洗、映射、聚合、错误输出 | 输入/中间态/输出对照 | 转换前后数据对照 |
| 混合 | 两类以上可信证据 | 一个主视图配一个次级检查器 | 主证据决定比较方式 |

选择原则：

1. 优先展示业务领域中可直接观察的问题效果。
2. 只使用证据支持的数据和关系。
3. 一个报告问题只选一个主视图，其他维度进入检查器或图层。
4. 两种方案同样有效时才询问用户，不为细微风格差异打断生成。
5. 没有可信数值或坐标时使用因果或状态关系，并明确证据状态。

## 8. 交互与视觉设计

### 8.1 主布局

- 主画布采用已确认的 **轻量因果路径**。
- 节点沿连续主路径排列，解决方法和验证结果作为清晰分支。
- 避免散乱矩形、交叉斜线和覆盖画布的大型对比条。
- 节点只显示名称、核心值和证据状态；长内容进入活动检查器。
- 主路径可表达输入、处理、异常、影响和结果，也可由具体领域适配器替换为空间、数值或状态主视图。

### 8.2 活动检查器

点击或键盘选择节点后，主画布保持位置稳定，检查器切换到该节点，包含以下标签：

- 背景；
- 原因流；
- 解决机制；
- 证据来源；
- 前后效果；
- 取证与追问。

原因流按“观察现象 → 触发条件 → 原因或假设 → 影响传播 → 修正与结果”展开，每个节点同时显示证据等级。

### 8.3 四种模式

1. `baseline`：展示正常机制、输入、输出和约束。
2. `current`：聚焦当前问题，按顺序展示现象和影响传播。
3. `proposed`：展示解决方法及其作用机制，必须标为 `conceptual` 或 `static`。
4. `verified`：只在存在匹配验证引用时启用，展示实际改善结果。

切换模式时，主视图、检查器、前后效果和验证门禁通过同一状态同步更新。

### 8.4 单一运行时状态

```javascript
{
  algorithmId,
  issueId,
  mode,
  selectedTargetId,
  inspectorTab,
  questionId,
  comparisonState,
  visibleLayerIds,
  evidenceLevel
}
```

切换问题时重置目标焦点和检查器页签；用户关闭所有图层后保持关闭；不可用的 verified 模式必须回退并同步正确图层。

### 8.5 动态效果

- 一次只突出一个当前焦点。
- 原因传播按数组顺序逐步显现，不让所有节点同时闪动。
- 选中节点使用轻量位置、阴影和边框反馈，不改变画布布局。
- 解决预演展示从问题目标到方案目标的作用路径。
- 验证结果展示修改前后对象、指标或状态的匹配比较。
- `prefers-reduced-motion: reduce` 下直接显示最终状态，取消移动和传播动画。

## 9. 异常处理与降级

- 没有可联系 Agent：跳过 Agent 取证。
- Agent 无回答：标记 `unavailable`，继续其他证据路径。
- 用户跳过：记录缺失证据，保留较低结论等级。
- 回答冲突：设置 `结论冲突`，保留来源并增加解决冲突的验证动作。
- 没有修改后数据：隐藏 verified，允许明确标注的解决预演。
- 没有解决方案：隐藏 proposed，只展示问题和下一步。
- 没有可信坐标或数值：改用因果路径或状态关系，不绘制虚假比例。
- 视觉对象或证据引用失效：渲染前拒绝数据。
- HTML 发现外部资源：验证失败。

## 10. 响应式、无障碍与离线要求

- 桌面端使用主画布和右侧活动检查器。
- 900px 以下检查器移动到画布下方。
- 560px 以下使用单列控制和内容布局。
- 节点支持点击、Enter 和 Space；方向键只在非表单控件聚焦时切换问题。
- 所有交互提供可见焦点、`aria-pressed`、角色和证据状态文本。
- 颜色不能作为唯一状态信号，必须配合标签、线型或图标。
- HTML 继续内联 CSS、数据和 JavaScript，不包含外部 URL、`link` 或 `script src`。

## 11. 向后兼容

- `inquiry_session`、`problem_analysis` 和 `visualization_plan` 均为可选。
- 缺少新字段时继续使用现有 `issues`、`algorithm_views` 和 `task_validation`。
- 无 `algorithm_views` 的 legacy 报告继续隐藏领域画布并保留文本诊断。
- 现有 Markdown 基础章节语义不变；存在问题模型时增加主动取证摘要、问题机制和前后效果内容。
- 更新模式按稳定 issue ID 合并，不擦除历史证据状态变化。

## 12. 预期文件范围

- `SKILL.md`：增加主动取证、停止规则、问题建模和自动选图流程。
- `references/report-schema.md`：增加三个可选扩展合同。
- `scripts/prepare_report.py`：验证新字段，渲染 Markdown，并校验 HTML 引用。
- `scripts/test_prepare_report.py`：新增合同、追问预算、自动选图、兼容和交互回归。
- `assets/interactive-report-template.html`：增加活动检查器页签和取证摘要区域。
- `assets/visualization-runtime.js`：扩展单一状态、因果路径、检查器和比较联动。
- `assets/visualization-adapters.js`：增加轻量因果路径适配策略，同时保留通用回退。
- `assets/visualization-styles.css`：实现确认后的轻量路径、原因流、响应式与 reduced-motion。
- `agents/openai.yaml`：更新 UI 描述和默认提示。

不修改 ParkingRobot 业务代码。

## 13. 测试与验收

### 13.1 Python 合同与工作流测试

- 无缺口时不生成问题。
- Agent 能回答时不重复询问用户。
- 用户问题按既定优先级产生且最多四个。
- 跳过、不可用、回答和冲突状态均正确归一化。
- 问题必须关联缺口和报告字段。
- 已验证原因、结果和 after 数据必须有来源。
- 原因链、解决机制和前后对象必须引用存在的视觉目标。
- 八类问题能选择预期视图；真正歧义时产生候选选择。
- legacy 报告继续完成 render、validate 和 update 往返。

### 13.2 HTML 与 JavaScript 测试

- 轻量因果路径、活动检查器页签和取证摘要钩子存在。
- 节点选择同步检查器、原因流、解决机制和前后效果。
- proposed 和 verified 门禁遵守证据状态。
- 关闭最后一个图层后保持全隐藏。
- 问题切换、模式回退和图层状态不漂移。
- 影响传播顺序和 reduced-motion 行为正确。
- 输出不包含外部资源。

### 13.3 端到端与浏览器 QA

- 临时 legacy 报告和新问题模型报告均通过 CLI 往返。
- 分别验证无需追问、Agent 已回答、用户补充、用户跳过和结论冲突场景。
- 浏览器验证算法/问题选择、四模式、节点点击、Enter/Space、活动检查器页签、图层和前后效果。
- 验证桌面、900px、560px 和 reduced-motion。
- 若浏览器运行时不可用，明确记录为 `待验证风险`，不得以源码检查替代。

## 14. 完成标准

- skill 能在证据不足时按三级策略主动取证，并遵守最多四个用户问题。
- 取得的回答可追溯到缺口、报告字段和证据来源。
- 问题背景、原因、影响、解决机制和改善结果形成结构化问题模型。
- 自动选图规则覆盖八类问题，并只在真正歧义时询问用户。
- HTML 使用轻量因果路径和活动原因检查器，动态展示问题、方案机制和验证效果。
- 新旧报告均通过自动化、CLI 安全门禁和相应浏览器验收。
