# read-known-paper

> [!warning] Safety Rules
> - 不要捏造论文未提及的内容
> - 不要把推断写成论文事实——严格区分"文献说了什么"和"我推断什么"
> - 引用原文时标注来源页码/章节
> - 论文未提及的内容明确说明"论文中未提及"

交互式文献问答。不强制要求 OCR，但 OCR 完成后回答更准确。

---

## Pre-flight Checklist

进入此 molecule 前，确认以下检查已完成：

- [ ] SKILL.md Section 1a Pre-flight 全部通过
- [ ] `$VAULT`、`$PYTHON` 已从 bootstrap 获取
- [ ] 已确定唯一 paper（zotero_key / DOI / 标题）
- [ ] intent 已确定为 `read_known_paper`

---

## 步骤

### Step 1: 定位论文

用户可能给 zotero_key、DOI、标题关键词、作者+年份。按以下方式查找：

**先调用 query-plan，不要自己发明第一条 query：**

```bash
$PYTHON -m paperforge --vault "$VAULT" query-plan "<user_query>" --intent known-paper --json
```

执行 `recommended_primary.command` 与其 `args`。规则：

- `doi` / `zotero_key` / `citation_key` → 直接 `paper-context`
- `author + year` → 第一轮只跑作者 + 年份过滤，不加标题词
- 模糊标题 / 主题词 → `search` 或 `paper-status`

**如果知道 zotero_key：**

```bash
$PYTHON -m paperforge --vault "$VAULT" paper-context <zotero_key> --json
```

**如果知道 DOI / citation_key：**

```bash
$PYTHON -m paperforge --vault "$VAULT" paper-context <DOI_OR_CITATION_KEY> --json
```

**如果知道 作者+年份：**

```bash
$PYTHON -m paperforge --vault "$VAULT" search "<author>" --year-from <YYYY> --year-to <YYYY> --json --limit 10
```

**如果知道 标题关键词：**

```bash
$PYTHON -m paperforge --vault "$VAULT" search "<关键词>" --json --limit 10
```

**如果只有模糊描述：**

```bash
$PYTHON -m paperforge --vault "$VAULT" paper-status "<query>" --json
```

如果无唯一命中：

```bash
$PYTHON -m paperforge --vault "$VAULT" search "<query>" --json --limit 5
```

无论哪种方式命中，取 `zotero_key` 调 `paper-context` 获取完整信息。
如果多候选，列出让用户选。
如果无结果，不要直接说“库里没有”；先说明这是规范化后的无结果，再告知用户未找到。

### Step 2: 加载文献内容

1. 从 paper-context 或 formal note frontmatter 获取：标题、作者、期刊、年份、domain
2. 读 `fulltext.md`（如果 OCR done）作为主要回答依据
3. 如果 fulltext 不存在："OCR 文本不可用，回答将基于元数据和公开信息"

### Step 3: 展示论文信息 + 进入 Q&A

```
已加载: <title> (<year>, <journal>)
作者: <authors> | Key: <zotero_key> | 领域: <domain>
OCR: done / 不可用
结束对话时说"保存"即可保存讨论。
请问有什么问题？
```

### Step 4: Q&A 循环

- 等待用户提问
- 每次回答后等待下一个问题
- 持续到用户说"保存"、"结束"、"完成"

**回答原则：**
- 严格基于 fulltext.md 中的文本内容
- 引用原文时标注来源页码/章节
- 论文未提及的内容明确说明"论文中未提及"
- 区分"文献说了什么"和"我推断什么"

### Step 5: 保存讨论

用户说"保存"、"结束"、"完成"时执行。

**收集 Q&A 对**，序列化为 JSON 数组：

```json
[
  {
    "question": "用户的问题",
    "answer": "Agent 的回答",
    "source": "user_question",
    "timestamp": "2026-05-14T12:00:00+08:00"
  }
]
```

`source`: `"user_question"`（用户提问）或 `"agent_analysis"`（Agent 主动分析）。

**调 discussion 模块：**

```bash
$PYTHON -m paperforge.worker.discussion record <zotero_key> \
    --vault "$VAULT" \
    --agent pf-paper \
    --model "<current_model>" \
    --qa-pairs '<JSON_ARRAY>'
```

- 返回 `ok` → 告知用户已保存
- 返回 `error` → 重试一次，仍失败则告知用户

> [!important] 不要自动保存。仅用户明确要求时执行。

### Post-action: 保存/归档

如果用户要求保存讨论内容到项目知识库，跳转至 `capture-project-knowledge.md`。
