# Automation Skills

> automation-skills

- Skill: `yakeworld/automation-skills` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add yakeworld/automation-skills`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yakeworld/automation-skills/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: yakeworld (https://skillmd.com/u/yakeworld)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/yakeworld/automation-skills

---



# Automation Skills

## Operational Steps
1. 确认输入参数完整
2. 执行核心操作（参考本目录下的 scripts/ 或 references/）
3. 验证输出符合契约
4. 保存结果并报告

## Pitfalls
- 
- 

## Verification
- 
- 
- 
- 
1. 
2. 
3. 
## IO_CONTRACT

- **input**: `request: str, context: dict` — 用户请求描述、上下文信息
- **output**: `result: dict — 技能执行结果（结构因技能而异）`

> 对应原则：P2（机械原子暴露输入输出规范）

> (P032 语义去重: 移除 2 份截断的 Batch Quality Score Extraction 重复副本, 保留完整 1 份(含 Golden); 父技能标题归位顶部)

# Batch Quality Score Extraction

**触发条件**: 对一批论文（10-34 篇）批量处理 `step_quality_check.md` 中的 quality_score 并写入 `state.json`。

## 背景

Synthos 管线中，每篇论文的 `01-manuscript/step_quality_check.md` 包含一个 JSON 块，其中 `score` 字段有多种格式。
批量处理时必须处理所有格式变体，且需要清理 LaTeX 反斜杠才能解析 JSON。

## 步骤

1. **列出目标论文目录** — 从 paper-queue.json 获取批次列表
2. **逐篇定位 `step_quality_check.md`** — 使用 `os.walk()` 查找，因为文件可能在不同子目录
3. **清理 LaTeX 反斜杠** — 在 `json.loads()` 之前移除所有非法 `\X` 转义
4. **提取分数** — 根据格式类型映射到 0-100 范围
5. **写入 state.json** — 更新 `quality_score` 字段，设置 `gate_status`

## 分数格式映射

| 格式 | 提取逻辑 | 示例 |
|------|---------|------|
| `score`(number) + `max_score` | `score / max_score * 100` | 2.5/10 → 25 |
| `score`(dict) + `total_score` | `total_score * 10` | 7.8 → 78 |
| `overall_score`(number) | `overall_score * 10` | 6.5 → 65 |
| `detailed_scores`(dict) | `avg(vals) / max(vals) * 100` | 均值/最大值 → 百分比 |
| 纯文本（如 "T1 QUALIFIED"） | 人工判断 90+ | QUALIFIED → 95 |

## LaTeX 反斜杠清理代码

```python
import json

def clean_json_for_latex(content):
    """Parse JSON from content containing LaTeX backslash escapes."""
    start = content.find('{')
    end = content.rfind('}') + 1
    if start < 0:
        raise ValueError("No JSON block found")
    json_str = content[start:end]

    result = []
    i = 0
    while i < len(json_str):
        if json_str[i] == '':
            if i + 1 < len(json_str) and json_str[i+1] in '"\\bfnrtu/':
                result.append(json_str[i:i+2])
                i += 2
            elif i + 1 < len(json_str) and json_str[i+1] == 'u':
                result.append(json_str[i:i+6])
                i += 6
            else:
                result.append(json_str[i+1])  # \sigma -> sigma
                i += 2
        else:
            result.append(json_str[i])
            i += 1
    return json.loads(''.join(result))
```

## 陷阱

### 论文目录命名不一致
尝试变体：`name`, `name.replace('_','-')`, `f'paper-{name}'` 等。

### 文件位置不固定
`step_quality_check.md` 可能在 `01-manuscript/`、`07-quality/`、根目录等。
必须使用 `os.walk()` 查找。

### 已处理过的论文跳过
检查 `state.json` 中是否已有 `quality_score`，避免重复写入。

### 批量处理的超时
34 篇论文可能超时。建议分批次（10-15 篇/批），每批一个 queue item。

## 相关

- `ref/latex-escape-json-parsing-fix.md` (research-paper-search) — 完整的 LaTeX 清理代码和已知影响论文清单
- `ref/gate-batch-processing-pattern.md` (quality-gate) — G1-G7 批处理模式
- paper-pipeline — 管线整体编排
- quality-gate — G1-G7 闸门定义

## 验证清单 · VERIFICATION

- [ ] 已用 `os.walk()` 在目标论文目录下定位到每篇的 `step_quality_check.md`（兼容不同子目录与命名变体）
- [ ] 已对 JSON 块执行 LaTeX 反斜杠清理（`clean_json_for_latex`）后再 `json.loads()`，无非法 `\X` 残留导致解析失败
- [ ] 每篇 quality_score 按格式映射表（score/max_score、total_score、overall_score、detailed_scores、纯文本）归一到 0-100
- [ ] 已有 `quality_score` 的论文被跳过（查 `state.json`），无重复写入
- [ ] 批次按 10-15 篇/批拆分执行，避免 34 篇全量超时
- [ ] `state.json` 中 `quality_score` 与 `gate_status` 已更新且可被后续闸门读取

## 约束规则 · RULES

1. **输入约束**: 参数类型、范围、格式必须校验
2. **输出约束**: 返回值结构、编码、命名必须一致
3. **异常约束**: 错误信息必须包含上下文和恢复建议
4. **安全约束**: 不执行未验证的任意代码，不暴露内部状态

## Golden 集合 · GOLDEN SET

- **Golden Input**: 标准输入样本（覆盖正常路径）
- **Golden Output**: 预期输出（精确匹配或格式校验）
- **Golden Error**: 预期错误信息（覆盖失败路径）

> Golden 集合是测试的单一真理来源。所有改进必须通过 golden 测试。

> 违反规则的操作视为不安全，必须拒绝或隔离。

> 每项验证必须可执行、可记录、可复现。验证失败时记录原因和修复。

## Genes (策略基因)

> 紧凑策略表示。条件→策略。需要深度时参考完整文档。

- **[AUTO-001]** 解析含 LaTeX 转义的 JSON 数据 → 在 `json.loads()` 前执行自定义清理逻辑，移除非法 `\X` 转义以保留合法 JSON 结构
- **[AUTO-002]** 处理多种分数格式变体 → 根据字段类型（number/dict/text）映射到统一 0-100 范围，纯文本合格标记默认赋高值（如 95）
- **[AUTO-003]** 目标文件位置不固定 → 使用 `os.walk()` 递归遍历目录查找文件，而非依赖固定路径
- **[AUTO-004]** 论文目录命名不一致 → 尝试多种命名变体（如 `name`, `name.replace('_','-')`, `f'paper-{name}'`）以匹配实际目录
- **[AUTO-005]** 批量处理任务量较大（>10 项） → 分批次执行（每批 10-15 项）以避免超时，每批作为独立队列项
- **[AUTO-006]** 重复处理同一对象 → 检查状态文件（如 `state.json`）中是否已存在结果字段，若存在则跳过以避免重复写入

