# 外观线稿（成文前必做）

**公共合同先读**：`prompts/shared/image_gen.md`（线稿只有两条路；CAD 不得当线稿、不得入文）  
**本文件合同**：`references/schemas/design_lineart_brief.schema.yaml`  
**前置**：已有或本轮将写出的 `appearance_schema.yaml` + `figure_plan.yaml`（见 `fill_appearance_schema.md`）  
**性质**：交底入文线稿。途经 1 用材料里已有合格线稿；途经 2 由大模型生成（图生图优先，否则先描述再文生图）。  
**外观入文**：干净**实拍**与**线稿**都要进 Markdown 和 Word；实拍不是线稿，但必须贴进交底。

## 开关

- **默认开启**。不问用户。仅当用户**已经明确说不要线稿**，或 `PATENT_SKILL_SKIP_LINEART=1`，才整段跳过。  
- **禁止**把 CAD / STEP 投影、实拍、场景图当成线稿（不得改 `kind: lineart`）。CAD 不入文。

## 步骤

### 0. 规划途经

```bash
python ${CLAUDE_SKILL_DIR}/tools/shared/image_gen.py --case-dir "outputs/{案件标识}"
```

按 JSON `mode`：

| mode | 做什么 |
|------|--------|
| `existing_lineart` | 材料已有合格 `kind: lineart`：入文这些 path，**不要**再调生图 |
| `img2img` | 有合格参考图（含高分 CAD/实拍）→ 写 brief → 门禁 → 图生图；失败则 `describe_then_txt2img` |
| `txt2img` | 无过线参考图 → 写 brief（`source_paths` 可空）→ 按 schema 文生图 |

`design_photos` 列表中的干净实拍须 `use_in_disclosure: true`。

### 1. 读 YAML，联读多视

1. **`Read`** `appearance_schema.yaml`（或 json）与 `figure_plan.yaml`。  
2. 按 `figure_plan.relates_to` 联读多图；件名/造型特征跨图一致。  
3. **`Write`** `design_lineart_brief.yaml`：  
   - `enabled: true`  
   - `overall_shape` / `design_points` / `uncertain` 对齐 AppearanceSchema  
   - 途经 2 且有参考图：每个 `views[]` 填存在的 `source_paths`（CAD/实拍均可作参考；实拍另条入文，CAD 不入文）  
   - 途经 2 且无参考图：`source_paths` 可空  
   - `source_figs` / `relates_hint` 抄自 figure_plan  
   - `gen_prompt`：黑白专利风格线稿、无彩色无棚拍阴影、不发明未见结构、保留可见轮廓与开口/倒角；有参考则「以参考图为准」

### 2. 门禁

```bash
python ${CLAUDE_SKILL_DIR}/tools/shared/design_lineart_gate.py \
  --case-dir "outputs/{案件标识}" --prepare-jobs
```

成功则写出 `lineart_assist/design_lineart_jobs.json`（含 `gen_mode` / `fallback_mode`）。

### 3. 出图（仅 `mode` 不是 `existing_lineart`）

对每一 job，按 `prompts/shared/image_gen.md`：

1. 有 `reference_images`：先图生图。宿主不能图生图或失败 → 对每张参考图写可见细节到 `lineart_assist/{视}_describe.md`，再文生图。  
2. 无参考图：按 `gen_prompt` + AppearanceSchema 文生图。  
3. 不要写死某一家出图工具名。  
4. 输出写到 `output_path`；宿主不能指定路径则复制过去。

### 4. 回写 figure_plan

**线稿与干净实拍都入文**，分配连续 `fig`。CAD 条保持 `use_in_disclosure: false`。`photo_scene` 默认不入。

```yaml
- fig: 1
  role: perspective
  path: assets/view_perspective.jpg
  covers: ["立体图"]
  kind: photo_clean
  use_in_disclosure: true
  reason: 立体实拍
  relates_to:
    - fig: 2
      relation: same_state
      note: 对应线稿
- fig: 2
  role: perspective
  path: lineart_assist/….png
  covers: ["立体图"]
  kind: lineart
  relevance: 80
  quality: 80
  score: 80
  use_in_disclosure: true
  reason: 大模型生成的外观线稿
  relates_to:
    - fig: 1
      relation: same_state
      note: 对应实拍
```

### 5. 成文纪律

- 正文「见图 N」引用实拍与线稿；**Markdown 与同名 Word 都要嵌这两组图**（`md_to_docx.py`）。  
- **禁止**把 CAD 投影或实拍写成线稿。  
- **禁止**把线稿写成「已按国知局规范绘制的正式视图」。  
- `uncertain` 中的特征不得画死成设计要点。

## 自检（内部）

- [ ] 已跑 `image_gen.py`；CAD 未当合格线稿、未入文  
- [ ] `existing_lineart` 则未再调生图  
- [ ] 否则已图生图，或已「先描述再文生图」/ 文生图  
- [ ] 干净实拍与线稿均为 `use_in_disclosure: true`；md 与 docx 都已嵌入  
- [ ] 多视参照了 `relates_to` / `relates_hint`  
