# Cumcm Fullflow

> 数模竞赛全流程总指挥：把“建模 → 方案评审 → 代码实现 → 代码检测 → 结果驱动的模型复盘与优化 → 论文起草/改写/校验”串成一条留痕流水线，每个阶段用全新独立会话完成（评审与检测不得看到作者推理），并在数据确认、模型定稿等关键门禁停下等用户拍板。当用户要求“从赛题一路做到论文”“把整套流程跑完”“重跑某年某题”“帮我组织一条数模流水线”时使用；只要评论文、只要写代码、只要建模等单项任务不要用本技能。

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

---


# 数模全流程总指挥

本技能是**编排者**：建运行目录、生成密封输入、调用阶段执行技能、守门禁、核验回执并记录流程。各阶段（含论文三段与结果驱动的模型复盘）的专业工作由**全新独立会话**完成；总指挥不得自己产出模型、代码、论文、数据分析或评审结论。

总指挥只传递任务和证据，不替执行技能做领域判断。四个核心执行 Skill（建模、方案评价、代码编写、代码评价）的内容保持独立；`cumcm-paper-writer` 是论文阶段的独立执行 Skill，由总指挥按 S5a/S5b/S5c 调用，不把写作逻辑内嵌到总指挥。

## CLI 工具（工程外壳）

安装包附带 `工具/cumcm-flow`（Windows 优先，也提供 PowerShell/Unix 启动器）。CLI 是 Command-Line Interface，即命令行界面；它只负责工程操作，不建模、不写代码、不评审、不写论文，也不替代本总指挥或四个核心 Skill。

陌生机器先运行：

```text
cumcm-flow doctor
cumcm-flow doctor --json
```

常用工程命令：

```text
cumcm-flow init <运行目录>
cumcm-flow seal S1 --run-dir <运行目录>
cumcm-flow verify S1 --run-dir <运行目录>
cumcm-flow status <运行目录>
```

`doctor` 检查 Python、六个 Skill、总指挥脚本、包元数据、常用可选依赖、Pandoc/Git、写权限和历史机器路径提示；`--strict` 与 `--network` 用于更严格的部署检查。缺少 MATLAB、OCR、LibreOffice 或某些科学计算包时，CLI 只报告事实，不能把它们伪装成已内置。Windows 安装器完成复制、备份和安装后体检；CLI 不改变阶段顺序、门禁或独立会话要求。

## 依赖技能

按名称查找技能目录：先 `$CODEX_HOME/skills/<名称>/SKILL.md`，找不到再查当前工作区同名目录。缺任何一个都先停下报告，不要用近似技能顶替。

| 阶段 | 技能 | 职责 | 执行者 |
|---|---|---|---|
| S1 | `数学模型建立` | 拆题（**逐问四遍复读**）、数学化、检索、取数，产出建模方案与数据文档 | 全新子代理 |
| S2 | `cumcm-model-review` | **逐问重读原文 + 四遍分析**，逐模型/算法联网查证，出诊断分与修改方案 | **独立子代理**（禁止看到作者推理） |
| S3 | `cumcm-code-writer` | 按定稿方案写代码，三轮自测，出附录与结果文档 | 全新子代理 |
| S4 | `cumcm-code-reviewer` | 8 点链检测；**必须干净副本复跑 + 独立复算** | **独立子代理** |
| S4R | `数学模型评价`（cumcm-model-review，结果驱动复盘） | **前置：S4 判定代码合格**。**逐问重读原文 + 四遍分析**后，拿到真实结果回看模型：假设是否被推翻、结构是否缺机制、参数与灵敏度是否需要调整；给出可执行优化方案与"是否需要返工"结论 | **独立子代理** |
| S5a | `cumcm-paper-writer`（起草） | 按格式与风格基线成文 | 全新子代理 |
| S5b | `cumcm-paper-writer`（改写） | 只按体检报告与改写手册降 AI 味，不得改数字/公式/结论 | 独立子代理 |
| S5c | `cumcm-paper-writer`（校验） | 格式 + 风格 + 数字集合一致性三重校验 | 独立子代理 |

## 阶段隔离（硬要求）

派发一律通过一个**独立任务适配器**完成：适配器选择当前平台可用的独立会话 API（例如独立子代理或独立任务线程），但不得把本线程历史带给执行者。适配器必须返回并记录 `session_id`/`thread_id`；不能确认上下文隔离或不能传递任务正文时，停止并报告，不能由总指挥自行执行该阶段。

执行者输入只能是：

1. 赛题目录（`00_题目/`）；
2. `_handoff/<阶段>_manifest.json` 登记的密封产物（含 SHA-256 与 evidence/lead 角色）；
3. 本阶段技能的 `SKILL.md` 与其 references。

**禁止**传入作者对话历史、作者总结、未登记的草稿。清单中 `role: lead` 的条目（自测记录、流程日志）只能当待验证线索。

流程：

```text
建运行目录 → build_handoff.py 生成密封清单
→ 独立任务适配器派发（记录会话 ID）
→ 执行者写回执 _handoff/<阶段>_receipt.json
→ verify_receipt.py 校验结构、哈希、门禁和前置阶段
→ 追加流程日志 →（门禁处停下问用户）→ 下一阶段
```

校验不通过（产物缺失、哈希不符、回执字段不全、S2/S4/S4R/S5c 缺复算记录）不得进入下一阶段；上游输入被改动则回到改动发生的阶段重做。编排者**不得修改评审结论**；有异议写《异议说明》并触发复评（S2 ≤3 轮、S4 ≤2 轮、S4R ≤2 轮、S5b→S5c ≤3 轮）。

详见 [references/阶段隔离与交接协议.md](references/阶段隔离与交接协议.md)。若独立执行体因平台故障无法启动，总指挥只能重试、改派另一个独立任务或停下等待用户处理；**不得降级为同线程自执行**。没有隔离执行体就没有该阶段的有效产物。

## 总指挥的职责边界（硬规则）

总指挥可以做：

- 建立/检查运行目录，生成和校验逐文件 SHA-256 清单；
- 读取阶段回执，判断字段、哈希、状态、前置阶段和门禁是否满足；
- 把用户已经确认的选择写入流程日志，并在需要拍板处停下；
- 按阶段契约调用对应 Skill，传递任务书、清单路径和输出位置。

总指挥不得做：

- 自己推导模型、改方程、写求解代码、运行作者代码、编写论文或给出专业评分；
- 以自己的判断替换执行 Skill 的结论，或把未封存的草稿当作证据；
- 在独立任务不可用时以“fallback”名义继续产出专业结果；
- 通过手工改回执、跳过清单或放宽校验来推进阶段。

协议 1.4 的阶段必须使用结构化回执；状态为完成但仍含 P0/P1/阻塞未决项、前置阶段未通过、或输入/产物路径越出运行目录时，校验脚本必须拒绝放行。

## 结果驱动的模型复盘（S4R，新增工序）

**为什么要有这一环**：建模阶段（S1）只有方案与公式，没有求解；假设是否站得住、模型结构是否缺机制，只有拿到**真实求解结果**才能判断。缺了这一环，论文里可能出现"结果算出来了、但模型其实不对"的风险。

**前置门禁（硬）**：**代码不合格不得进入本阶段**。条件：S4 回执 `verify_receipt.py` 校验通过，且检测报告判定代码合格——无 P0；P1 已修复复检，或写明不修的理由与影响。未达标先回 S3 改码 → S4 重验，合格后才跑 S4R。

**用什么技能**：`数学模型评价`（`cumcm-model-review`）——与 S2 同一套查证口径，但输入换成"赛题 + 全部附件 + 冻结方案 + **已验证的求解结果**"，输出聚焦"模型要不要优化、怎么优化"，而不是重评方案本身。

**什么时候做**：S4 代码检测合格之后、S5 论文起草之前。S4 保证结果可信，S4R 才好在可信结果上判断模型。

**必须做什么**：① 重读赛题与附件并自行重建要求卡；② 自行从附件与结果表复算 ≥3 个关键量（与 S4 口径独立）；③ 逐条检查模型假设与结构：结果量级是否合理、边界是否被触及、参数是否需要标定、对哪些参数敏感、有没有更贴题的机制可以补；④ 产出《模型复盘与优化报告》，含**可执行的优化清单**（改动点、预期收益、代价、风险）与明确结论"是否需要返工"。

**回执必须带 `model_change`**：`{"changed": true/false, "requires_rerun": true/false, "summary": "…", "changes": [{"target": "假设/结构/参数/边界条件", "why": "…", "impact": "…"}]}`。

**循环规则**：`requires_rerun = true` → 回派 S3 改码/重跑 → S4 重验 → S4R 复评，**≤2 轮**；`false` → 记录"模型定稿（结果验证后）"进 S5。优化只做有证据支撑的改动，不为凑工作量改模型；两轮后仍不收敛，停下把偏差表交用户拍板。

## 逐问复读与多轮分析（S1 / S2 / S4R 强制）

建模与评价类的三个阶段，**每一问都要回到赛题原文重读，并做四遍分析**，四遍记录必须逐问留痕：

1. **抄读**（**无技能预读会话**）——该问原文连同附表/附注/单位逐句摘出，标页码；
2. **自解**（**无技能预读会话**）——不看方案、不看任何 skill，自己写出该问目标、变量、约束、必须输出与红线；
3. **对照**——方案/结论与①的原文逐条比对，逐条标「做到了 / 写偏了 / 完全没提」并给位置；
4. **反查**——从阅卷人角度挑歧义、多解、隐含条件、单位与量纲陷阱、必须提交的表/图/文件。

**必须开两次会话**：先派**无技能预读会话**完成 ①②（该会话不加载任何 skill，只读 `00_题目/`，产物 `_handoff/<阶段>_preread.md` 逐问给出「原文摘录 + 页码 + 自解清单」），把它哈希封进 `build_handoff.py` 生成的清单；再派技能会话做 ③④ 与正式工作。这样拆题不被技能的写作惯例与选型偏好带跑。

落点：S1 写入《问项卡》的「四遍记录」栏；S2 / S4R 写入报告的「逐问四遍记录」。任务书必须写明这条要求，回执新增：

```json
"per_question_reread": [
  {"question": "问题一", "source_quotes": "原文摘录 + 页码", "rounds": 4, "conclusion": "四遍结论"}
],
"preread": {"artifact": "_handoff/S2_preread.md", "sha256": "…", "session_id": "…", "no_skill": true, "rounds": ["抄读", "自解"]}
```

新运行的 `rounds` 必须 ≥4；`verify_receipt.py` 对协议 1.4 强制校验逐问结论、原文页码、预读会话 ID 与清单哈希。旧协议 1.2/1.3 的历史回执按原口径兼容存档，不追溯。

## S1 / S2 更严验收（协议 1.3，自 2026-09-11 起对新运行生效）

**S1 回执额外字段**

```json
"self_check": {
  "formula_implementable": true,        // 每问变量表/方程/边界/初值/参数来源齐备
  "acceptance_criteria": true,          // 每问写明对照对象、残差量级、收敛判据
  "dimension_check": true,              // 逐式量纲检查留痕
  "assumptions_with_evidence": true,    // 每条假设：依据/可检验性/不成立的后果
  "requirement_mapping": true,          // 题面每条要求 → 方案落点
  "data_traceable": true,               // 附件字段→清洗→模型输入一一对应
  "risk_list": ["…至少 3 条，各带验证计划…"]
}
```

**S2 回执额外字段**

```json
"strict_review": {
  "requirement_coverage": {"total": 12, "satisfied": 12, "partial": 0, "missing": 0},
  "evidence_table": [{"claim": "…", "evidence": "复算值/来源", "result": "成立"}],
  "counter_checks": [{"model": "问题一模型", "test": "极端/退化/交叉验证", "finding": "…"}],
  "verdict": "通过|有条件通过|需返工",
  "conditions": ["…"]
}
```

门槛：S2 的 `requirement_coverage.missing` 必须为 0（否则结论只能是「需返工」，回 S1 补齐）；`counter_checks` 每个主选模型至少 1 条；`verdict` 与 P0/P1 清单必须一致。`verify_receipt.py` 对 `"protocol_version": "1.3"` 及以上的 S1/S2 回执强制校验。

## 运行目录

`<工作区>\运行\<年><题>-<题目简称>\`：

```text
00_题目/       赛题与附件只读副本
_handoff/      各阶段密封清单与回执
00_流程日志.md 每阶段追加一行
01_建模方案/ 02_方案评审/ 03_代码/ 04_代码检测/ 05_论文/ 交付/
```

建骨架用 `scripts/make_run_dir.py <运行目录>`；重跑前先 `--reset` 把旧目录移入 `_回收站/`。

## 门禁与停止条件

- **门禁 A（数据）与门禁 B（模型定稿）必须真停**：把候选、代价、推荐理由与阻塞点交给用户拍板，答复要点写入流程日志。
- 迭代上限：S2 ≤3 轮、S4 ≤2 轮、S4R ≤2 轮、S5b→S5c ≤3 轮；达上限仍不达标时停下报告偏差表，不得静默放行。
- 论文风格：严格目标为 14 项指标全部落在语料 p25–p75；交付下限为越界 ≤3 项且不超 p05–p95。

## 修订规程（评审提出 P0/P1 后必走，不得跳步）

评审或检测给出 P0/P1 后，**禁止“凭推理直接改”**。必须按下列五步执行，并把过程写进《修订说明》：

1. **定位**：把问题拆成可判定的子问题（求什么、涉及哪个方程/参数/数据/引用）。
2. **收集**：先在本地语料与既有材料里找依据（`数据集/`、`训练语料/`、已有文献）。
3. **联网查证**：检索并对**至少 2 条可打开来源**取证（优先原始论文、权威教材、官方文档；付费墙打不开就找开放获取版本或替代来源）。
   取证要记录：标题、作者、年份、DOI/URL、访问日期、**支撑了哪一条结论**；读不到的写“仅题录级”。
4. **修改**：按证据修改方案，并在《修订说明》里写成“依据来源 → 修改内容 → 验收方法”三段式；
   若查不到支撑来源，则**降级结论**（改成保守表述或标“未核实”），不得把猜测写成结论。
5. **复评核验**：把来源清单随密封清单交给下一轮复评，由复评方**独立复核来源真实性**与结论一致性。

《修订说明》必须包含一张来源表（编号/来源/支持结论/是否读到正文），缺表视为修订未完成。

## 硬规则

- **数字可追溯**：论文与结果文档中的每个关键数值都要能追到结果表；对不上改代码或改口径，不允许改论文数字凑。
- **只读引用**：`数据集/` 与 `训练语料/` 只读；产物写进本次运行目录。
- **诚实标注**：未核实的数据、文献、结论标“未核实”；没跑通就写“未跑通”。
- 详细阶段契约见 [references/阶段契约与门禁.md](references/阶段契约与门禁.md)；脚本见 `scripts/build_handoff.py`、`scripts/verify_receipt.py`、`scripts/make_run_dir.py`。

