# ISS-0023: 自动诊断在无用户指令时触发

## Background

Workspace `ws-1776139348995-a7101b3a3` (O11Y-2392287), dev 环境。

用户添加 Jira issue source 后，系统自动触发了完整诊断流程（加载 `tidb-knowledge-base` + `tidb-clinic-diagnosis` skill，运行 `collect_evidence.py`），整个过程在用户发送任何消息之前就完成了。

用户明确表示："不需要自动触发诊断行为"。

## Observed Behavior

1. 用户在 workspace 中添加 Jira issue O11Y-2392287
2. 系统自动加载 skill 并在后台运行 `collect_evidence.py`
3. 自动诊断静默完成——输出**未被 messages API 捕获**
4. 用户的第一条消息是追问"这个集群在这个时间点还有什么别的告警么？"，而非诊断请求
5. 用户困惑于诊断是否由自己触发

## Impact

- **用户失去控制权**：用户无法决定何时开始诊断，无法先设置上下文或提供额外信息
- **上下文污染**：自动诊断占用了 agent 的上下文窗口，后续用户提问时 agent 已经带着自动诊断的结果在回答
- **审计缺失**：自动诊断的输出不在 messages API 中，postmortem/regression 流程无法评估这部分内容
- **资源浪费**：如果用户只是想问一个简单问题，不需要完整诊断，自动触发浪费了大量 tool call 和时间

## Root Cause

workspace 初始化流程中，当 Jira source 数据准备就绪后，会自动触发诊断。相关代码在 `backend/investibook/core/acp.py` 中的 auto-chat / session 初始化逻辑。

具体触发链路：
1. 用户添加 Jira source → source preparation 完成
2. workspace 状态变为 "ready"
3. 系统自动发送诊断 prompt 给 agent（等同于用户发了"开始诊断"）
4. agent 开始运行完整诊断流程

问题在于第 3 步：不应该自动发送诊断 prompt，应该等待用户主动发消息。

## Fix Plan

### Option A: 移除自动诊断（推荐）

1. 在 `backend/investibook/core/acp.py` 中，找到 source ready 后自动触发诊断的逻辑
2. 移除自动触发，改为向用户展示提示消息："Issue 数据已就绪，发送消息开始诊断。"
3. 让用户显式请求诊断

### Option B: 自动诊断改为 opt-in

1. 在 workspace 设置中增加 `auto_diagnose: boolean`（默认 false）
2. 仅当用户显式启用时才自动触发诊断
3. 自动诊断运行时，确保输出写入 messages API

### 两个方案都需要修复的附带问题

- 确保所有诊断输出（无论自动还是手动）都被 messages API 捕获
- 这对 postmortem/regression 工作流至关重要——不在 messages 里的内容无法被评估

## Verification

1. 创建新 workspace，添加 Jira issue source
2. 验证诊断**不会**自动启动
3. 验证用户必须显式发送消息才能触发诊断
4. 验证诊断输出出现在 messages API 中
5. 用 replayer `--check` 验证 message_count 和 tool_calls 都能正确统计
