图片不再自动重绘
全部先从原书提取。像素低、看起来不够好、可以画成 SVG,都只记录问题,不触发重绘。用户明确指定某张图后,才调用参考生图。
流程说明 · v5 规则更新与代码审查 · 2026-09-06
先从 PDF 建立可追溯来源,用 BookMD 和对象登记保存正文、图表与公式,再运行已写好的固定生成器。原由 Sol 承担的职责全部改交 Astra;生成器能力不够时停止转换,说明问题,由你决定是否及如何修改。流程放在开头,问题解释和新增插件审查放在最后。
一 · 整体管线
阅读顺序:来源准备 → 来源审核 → BookMD 制作 → 内容审核 → HTML 生成 → 机械验证 → 成品审核 → 发布。各环节的模型分工紧接在下一节;实际试跑状态见文末增补。
程序记录 PDF 哈希、物理页范围、章节范围、政策版本,以及用户确认的固定生成器、模板、组件与验证规则版本;明确整书或试跑。先核对已声明能力;发现不支持的内容类型或结构就进入 HOLD_FOR_USER,不能自行扩展生成器。不能用候选抽取结果反推原书范围。
程序提取原始文字、图像、页面截图;Luna max 看原页做 OCR、分区和阅读顺序候选。原始抽取不被“清洁结果”覆盖。
独立检查整页区域覆盖、OCR、源阅读顺序、公式发现、表格发现、图片提取。全部完成、问题修完且证据有效后,来源快照才可冻结。
Spark 清理和翻译纯文本,包括图题、表内文字;Luna max 识别数学与表格的结构。图片默认原图。正文、公式、图、表通过稳定 ID 与来源关联。
检查译文、纯文本连续性、块类型、数学结构、表格结构、图片使用规则和交叉引用。检查的是中间内容,不提前替代浏览器视觉验收。
只运行冻结的现成代码:解析受限 BookMD → 语法树 → 绑定来源和对象 → 固定组件渲染 → 嵌入资源。HTML 不是修复源;不支持的结构、组件缺陷或需要越界配置都停止当前转换并报告,不自动改引擎、不转成截图绕过。
程序验证结构、引用、格位、数学合法性、内容序列、资源和构建模式;生成带哈希的结果。不使用 AI 凭感觉认定代码断言通过。
冻结实际 HTML 后,分别审核文本版式、数学、表格、插图、阅读器、资源、重复和可访问性。视觉任务必须收到浏览器实际截图。
固定程序核对 A/B/C/D 都属于当前版本、没有未解决问题,再上传并验证公网加载。样书预览是另一个明确标注的通道,不能借预览上传绕过正式门禁。
二 · 各环节的模型分工
以下为最新项目路由:原来分配给 Sol 的全部职责改用 Astra,保留 high / xhigh 档位;Spark 与 Luna max 的职责不变。它不是官方翻译质量基准。生产与审核可以用同一型号,但必须是不同任务、独立判断,输入与范围可追溯。
| 环节 | 默认执行者 | 具体做什么 | 什么时候用 Astra |
|---|---|---|---|
| 范围冻结、提取、截图 | 固定程序 | PDF 哈希、页范围、原始抽取和图像提取;不做语言理解。 | 工具失败由 Astra high 定位;如需改工具链或生成器,先停止并提出方案,获得用户批准后另做工程修订。 |
| OCR、页区与源顺序 | Luna max | 看原页转写,判断图题/正文归属,给出源顺序及不确定区域。 | 补充放大图和上下文仍无法确定的少量区域交 Astra high/xhigh。 |
| 纯文本清理 | Spark | 处理断行、空格、软连字符等候选;不得改写含义。来源疑问回 Luna 看图。 | 不因“吞吐高”改交 Astra;只有具体未决语义问题才升级。 |
| 翻译与术语 | Spark | 正文、标题、图题、表格文字、注释、可访问说明;译名和用法提示分字段。 | 少量术语冲突、复杂关系句;只发相关来源、译文和上下文。 |
| 数学与表格录入 | Luna max | 从源图识别数学关系、行列和合并格;文字翻译另外交 Spark。 | 复杂矩阵、嵌套结构或难辨符号交 Astra xhigh;不能猜不可读信息。 |
| 原图提取后的对照 | Luna max | 看原书图和提取图:裁剪、子图、标注是否完整。画面低清仅记录。 | 少量无法确定的原图/提取图差异;不把原书事实审判加给该任务。 |
| 用户指定图片重绘 | ChatGPT Image 工具 | 仅对指定图、按原图参考和授权范围生成候选;Luna max 独立比图。 | Astra 只处理未决比图问题;不代替生图工具编写矢量绘图。 |
| 固定生成器的运行与能力缺口 | 固定程序;Astra high / xhigh 诊断 | 生成器已提前写好。日常只运行,不让模型临时编写解析器、组件或修复函数。遇到不支持内容,Astra 提供最小复现、范围和方案。 | 没有用户批准不能改代码;获准的独立修订任务中,局部工程用 high,结构或跨组件设计用 xhigh。 |
| 日常构建、机械门、上传 | 固定程序 | 运行既定逻辑,产出日志和状态。AI 只处理失败原因,不代填通过记录。 | 确认程序缺陷也不能自动修:Astra 解释原因并请用户决定;禁止代填 PASS 或放宽门禁。 |
可调用的模型标识:gpt-5.3-codex-spark、gpt-5.6-luna(max)、gpt-6-astra(high/xhigh)。官方文档将 Spark 标为纯文本;Luna 和 Astra 支持图像输入;Astra 的模型标识为 gpt-6-astra,官方支持 high / xhigh 推理档位。依据:Codex 模型说明、Luna 模型页、Astra 模型页。模型文档核对日期:2026-09-06。
三 · 中间格式与生成器
不是把普通 Markdown 随便导入浏览器,而是使用受限的 BookMD 语法;否则复杂表格、矩阵和来源映射仍会变成自由文本。
---
schema: bookmd/1
title: 示例章节
---
@block id=p020-g03 kind=paragraph source_map=sm-p020-g03
这里是经过对照的译文。行内数学由 @math eq-inline-01 引用。
@end
@equation eq-01
@figure fig-1-18
@table table-1-01
正文文件 + alignment.json + math.json + tables.json + figures.json
↓
固定组件生成
↓
output/book.html
本段是结构示意,实际语法以生成器的 CONTRACT 为准。
| 内容 | 上游怎么保存 | 生成器怎么处理 | 改错改哪里 |
|---|---|---|---|
| 正文与图题文字 | Spark 产出译文;稳定块 ID;来源区间对齐。图题与正文身份分离。 | 按块类型生成段落、标题、列表、引用、注释;禁止把制作提示当正文。 | 只改对应文本单元或块类型;保留 before/after 和来源。 |
| 图片 | 原图及来源记录;裁剪范围;图题;若授权重绘则另存逐图授权与候选记录。 | 读取已审核的指定资产,统一尺寸与布局;不在生成时临时调用生图。 | 修改提取范围、选用资产或图题字段,不修改 HTML 内的图片字符串。 |
| 公式 | 稳定 ID 和可验证的数学语法树;LaTeX 可作编辑输入,但解析后只认一个权威结构。 | 固定原生数学组件,无截图背景;行内与独立公式分开。当前原型使用受限 MathML AST。 | 只改合同已支持的公式 AST 数据;不用正则猜边界。若必须改共享数学组件或新增类型,停止转换并等待用户决定。 |
| 表格 | 格位、行列、合并关系、标题和脚注;文字翻译与网格结构分别处理。 | 生成原生 table;局部滚动由表格容器负责,不挤坏整页。 | 改单元格或表格结构;禁止笼统“修 table”顺便吞入前后段落。 |
八类公式模板作为目标规范保留:行内上下标、映射与元组、向量与矩阵、行列式、方程组、求和与上下限、多行对齐、表内数学。某类模板出现在示例报告里,不等于冻结生成器已完整支持该类所有结构;以用户确认版本的能力合同为准。模板不能自动保证识别忠实度。
| 范围 | 可以做 | 不能擅自做 |
|---|---|---|
| 内容输入 | 按既有合同更正指定 ID 的译文、来源映射、数学 AST、表格格位、图题及原图选择;保存前后差异。 | 发明新块型、新字段含义,或用原始 HTML 绕过解析。 |
| 文档化配置 | 仅使用批准版本已经支持的配置项和值域。 | 借配置注入 CSS/JS,覆盖全局组件,放宽合法性断言。 |
| 引擎与配套规则 | 读取版本和能力说明;运行;诊断;提出变更方案。 | 自动改解析器、schema、数学渲染器、模板/CSS/JS、验证器或新增修复脚本来绕过固定流程。 |
先判断是输入写错,还是正确内容也无法由固定生成器表达。前者在既有合同内改输入;后者提交源页与对象 ID、截图/最小输入、生成器版本、实际错误、影响范围、可选方案及风险。没有批准,不继续生成正式产物、不改最终 HTML、不降级内容、不宣布完成。
HOLD_FOR_USER · 等待用户决定(工作流状态,不是假装已调用目标暂停接口)
原因:当前固定版本无法无损处理某源对象
附:源位置 + 最小复现 + 能力缺口 + 影响范围 + 方案
等待:用户决定是否修改、修改范围与采用方案
获准后:独立新版本修订 → 回归 → 确认切换 → 作废受影响旧证据 → 恢复转换
能力预检不能保证提前发现所有缺口;后续任何阶段发现同类问题都采用同一停止规则。Astra 有能力写代码不等于有权限改生成器。本报告的编辑代码不是书籍生成器,二者分开。
四 · 图片处理规则
本节取代 v3 中“低清或适合矢量表达的图片必须生成”的条件,不保留自动重绘的后门。
| 遇到的情况 | 默认处理 | 不能做什么 |
|---|---|---|
| PDF 中有原始图片对象 | 直接提取;保留来源页、图 ID、原始文件及哈希。使用原图进入书籍。 | 不能仅因“有更漂亮的画法”替换内容。 |
| 图由多个 PDF 对象组成 | 按完整图域渲染提取,保留所有子图、标注与箭头;核对裁剪范围。 | 不能漏掉图内文字,也不能把相邻正文切进图内。 |
| 分辨率低或观感不佳 | 优先确认是否有更高质量的原始嵌入对象;仍低清则保留,记录可读性限制。 | 不自动补纹理、不猜字、不把生成细节当恢复细节。 |
| 几何图适合 SVG | 仍使用原书提取图。原 PDF 自带矢量内容可忠实提取或渲染。 | 不手写 SVG/canvas 重画;“适合 SVG”不构成生图授权。 |
| 纸边、异色边框、固有背景 | 可裁去图域外无关纸边;图内固有黑底、色块、线条必须保留。无法确定边界就先保留并标记。 | 不以“去背景”为由抹掉图内信息;不另加与页面不协调的卡片底框。 |
| 原书有或没有图题 | 有则保留其编号与忠实译文;无则不增加。必要的制作信息留在审核记录。 | 不把“原书插图”“AI 重绘”之类制作说明擅自变成正文图题。 |
| 用户明确说“重做图 1.18” | 登记该图授权与修改范围 → 参考原图调用 ChatGPT Image → 独立对照 → 通过后采用。 | 不能顺便重做其余图片;生成失败不能靠放宽忠实度要求通过。 |
公式和表格不受“保留原图”影响:公式仍以原生数学结构渲染,表格仍以原生表格渲染。否则等于把先前的公式截图问题带回来。
每图决策:
没有针对该图的明确用户请求 → 原书提取图
有逐图请求 → 校验 figure_id + 原图哈希 + 请求记录 + 允许修改范围
→ ChatGPT Image 生成候选 → 原图/候选截图对照
→ 通过才替换;不通过则保留原图并说明
图片审核问“与原图是否一致”,不问“原书科学观点是否正确”。
五 · 专项检查安排
21 是检查点数量,不要求同时开 21 个 agent,也不意味着每项都必须用 AI。每个任务包只包含一个检查点、一个模态子范围;代码负责的断言不包装成“专家意见”。
| 编号 / 中文名称 | 只查这一项 | 必须输入什么 | 默认模型 |
|---|---|---|---|
| A-COVERAGE 原页区域覆盖 | 是否有漏登记或错误排除的内容区。 | 全部范围页的无框整页、可读分区及带框对账图;排除清单。 | Luna max |
| A-TEXT OCR 文字准确性 | 转写字符、词句是否符合原页。 | 原页文字截图与对应转写;不可读项必须标记。 | Luna max |
| A-ORDER 源阅读顺序 | 正文源块该怎样续接;不管 HTML 行段距。 | 原页和相邻页、源块及顺序边;图题身份。 | Luna max |
| A-MATH 数学源对象登记 | 行内和独立数学对象是否漏登记、切错范围。 | 全部原页及数学区域清单,不只检查已找到的公式。 | Luna max |
| A-TABLE 表格源结构登记 | 源表格、行列、合并格是否完整登记。 | 所有表格截图及原始格位清单。 | Luna max |
| A-FIGURE 图片提取完整性 | 图片、子图、图内标注是否提取完整。 | 原页图域与提取结果成对输入。 | Luna max |
| 编号 / 中文名称 | 只查这一项 | 必须输入什么 | 默认模型 |
|---|---|---|---|
| B-PROSE 文本转换忠实度 | 清理、翻译后的内容是否同义完整;含否定、数值、单位及提示串入。 | 源文与目标文本。正文、图题、表内文字分别分包,不能漏出总体应审清单。 | Spark |
| B-CONTINUITY 纯文本连续性 | 全序列是否断裂、跳章、回跳、异常重复或缺头缺尾。 | 隐藏图片、样式和控件后的实际正文序列;分包边界有重叠上下文。 | Spark |
| B-SEMANTICS 文本块类型 | 段落、标题、列表、引文、注释是否分对类型。 | 源文本身份与 BookMD 块;源版式有疑问回 A-ORDER,不让 Spark 猜图。 | Spark |
| B-MATH 数学结构忠实度 | 公式结构、主字形、上下标、行列关系是否与源式一致。 | 源式截图与数学 AST 的可读投影。 | Luna max;难项 Astra xhigh |
| B-TABLE 表格结构忠实度 | 格位、行列、合并关系是否与源表一致;不兼做译文审查。 | 源表截图与表格 AST 的网格投影。 | Luna max;难项 Astra xhigh |
| B-FIGURE 图片使用合规性 | 是否使用正确源图;替换图是否有逐图授权;不审原书事实。 | 来源、最终资产、哈希和用户请求记录。 | 代码核验 + Luna max 处理图像疑点 |
| B-XREF 引用目标正确性 | “见图/表/节”等引用是否指向正确对象。 | 引用文本、目标清单及来源关系。 | Spark;存在性由代码先查 |
| 编号 / 中文名称 | 只查这一项 | 必须输入什么 | 默认模型 |
|---|---|---|---|
| D-LAYOUT 文本版式 | 页边界、分点并列、标题、注释、行段距、缩进、异常空白和文字重叠。 | 实际 HTML 的全部正文截图;缩略接触表用于找大问题,细节用可读截图。 | Luna max |
| D-MATH 数学显示 | 实际公式是否缺字、破碎、被裁切或退化为普通文本/截图。 | 源式与 HTML 公式截图逐个成对,包括行内公式。 | Luna max;难项 Astra xhigh |
| D-TABLE 表格显示 | 表头、格位及首末列在实际视口是否显示完整。 | 原表与 HTML 表格截图;局部滚动状态。 | Luna max |
| D-FIGURE 插图成品对照 | 与原图含义一致、没有丢失错配;图题格式和插入位置正确。 | 原书图截图 + HTML 中该图截图,附附近引用与图题。不能只交图片文件路径或哈希。 | Luna max |
| D-UI 阅读器交互 | 目录关闭只留打开按钮;覆盖打开不挪正文;控件、锚点、全屏和关灯状态可用。 | 402×874、3840×2160 视口及状态操作证据;位置、滚动测量。 | Luna max + 固定测量程序 |
| D-RESOURCE 资源可用性 | 图片、字体、脚本、样式是否自包含且加载成功。 | 资源清单、请求日志、离线加载与路径检查结果。 | 固定程序;失败文本可交 Spark 归因 |
| D-DUPLICATE 异常重复 | 相同文本、图片或邻接序列是否被错误重复插入。 | 全书扫描候选和源页对应;区分原书重复与转换重复。 | 代码扫描;文本候选 Spark、图片候选 Luna max,分开派单 |
| D-A11Y 辅助阅读可达性 | 可访问树阅读顺序、名称与键盘可达性是否正确。 | 可访问树、键盘轨迹;视觉焦点截图另分包。 | 代码 + Spark 读语义;焦点视觉子任务 Luna max |
所有专项都要绑定对应案例库的版本和案例 ID,再给本次应审对象,不用一句“认真通读”替代操作标准。无表格等不适用项需要来源范围支持的缺席证据;不能仅因表格登记为空,就认定原书没有表格。
六 · 冻结审核与修复循环
| 界面状态 | 应如何产生 | 不允许混成什么 |
|---|---|---|
| 未派单 / 等待前门 | 没有实际任务,或正式前置 Gate 尚未通过。 | 不显示“审核中”。工程草稿预演须单列。 |
| 审核中:已查 n / 应查 N | 来自当前任务的对象观察记录和任务运行状态。 | 不能从对话时长、子任务数量推算完成度。 |
| 需修复 | 专项完成且提交具体未解决问题;其它专项可继续当前快照。 | 不能遇到一个问题就默认其余对象无问题。 |
| 证据不完整 | 缺任务清单、对象记录、截图或必要结果。 | 不同于“已审核且没有问题”。 |
| 已过期 | 证据绑定的对象或依赖已经改变。 | 不能让旧 PASS 继续放行新产物。 |
| 通过 | 当前范围全部完成、问题归零、证据有效,机械聚合接受。 | 不同于“脚本运行完”“模型说 PASS”“上传成功”。 |
| 等待用户决定 | 正确内容超出固定生成器能力,或必须改引擎、组件、规则才能继续;提交具体缺口后停止当前转换。 | 不是完成,也不是自动获准修代码;用户决定前不得自行推进相关构建或发布。 |
增补说明 · 问题、困难与疑问解释
全部先从原书提取。像素低、看起来不够好、可以画成 SVG,都只记录问题,不触发重绘。用户明确指定某张图后,才调用参考生图。
v4 核查时 A、B、D 的正式任务清单缺失;聚合脚本返回“证据不完整”。C 已执行,但拒绝草稿构建和未批准图片。
Spark 处理纯文本;Luna max 处理 OCR 与常规视觉;Astra high/xhigh 只接少量难题和经用户批准的工程修订。固定脚本执行不另算一个 AI 模型。
v5 更新报告和执行规范,并对现有插件做静态审查与合成反例测试;没有启动全套书籍审核、重建样书、修改生成器或重装插件。下方 Gate 与工作量数字明确沿用 v4 的历史核查,不冒充本轮重跑。下文“应怎样执行”是新版要求,不冒充已经实现的调度系统。旧样书中已用的生成图片也没有因修改报告自动换回原图。
增补一 · 试跑问题与 Gate 实况
核查范围为月球书前两章工程目录;v4 轮次实际执行了现有的 Gate 聚合脚本,v5 没有重新运行它。聚合脚本只读证据并判定状态,不会自动创建或运行审核 agent。
2026-09-06 核查结论:0 / 4 道正式 Gate 可认定通过。
执行:python3 scripts/gates.py --project-root . --gate ALL
退出码:1;总状态:FAIL
核查对象:已发布的前两章候选,不是整本月球书
| 门 | v4 核查返回结果 | 具体证据 | 说人话 |
|---|---|---|---|
| A · 来源六专项 | EVIDENCE_INCOMPLETE | E_ASSIGNMENT_MISSINGqa/assignments/A.json 不存在;正式 qa/gates/A 证据目录也未建立。 | 有抽取和 OCR 生产记录,却没给六项独立审核建立正式“必须检查这些对象”的清单。 |
| B · 内容七专项 | EVIDENCE_INCOMPLETE | E_ASSIGNMENT_MISSINGqa/assignments/B.json 不存在;正式 B 证据目录未建立。 | 做过 Spark 翻译对照和定点修复,但未汇成当前版本的七项完整签核。 |
| C · 生成机械门 | FAIL | E_BUILD_NOT_RELEASE:构建仍为 DRAFT。E_FIGURE_STATUS:图片未满足正式发布批准状态。 | HTML 能生成、测试能通过,不代表它是正式构建。C 的拒绝是真实结果,不是“未显示”。 |
| D · 成品八专项 | EVIDENCE_INCOMPLETE | E_ASSIGNMENT_MISSINGqa/assignments/D.json 不存在;正式 D 证据目录未建立。 | 只做过部分浏览器操作,没有把全文截图、每个图表公式和交互状态交给八项完整终审。 |
脚本会在缺少任务清单时提前返回。因此上表是“当前首先阻止放行的原因”,不是所有潜在缺陷的完整列表。A、B、D 这次运行的是聚合判定,不能记成其专项审核已经启动。
即使马上取消强制重绘,A、B、D 缺清单和证据的问题仍然存在。样书还确认有“3.5 billion → 3.5 亿”“convection currents → 对流电流”“词表用法提示混入正文”等未解决文本错误。这些也是不能宣布通过的实际原因。
57 个范围内物理页,2,669 个来源原子,252 个分组,40 条明确续接;31 幅插图、2 张表、6 个已登记数学对象;402 个翻译 ID。已有 13 个翻译包、11 个独立忠实度报告及 1 个漏项补查、41 项生成器测试和部分浏览器测量。这些是工作量与局部证据,不是正式审核通过数。“6 个已登记公式”也不证明来源中只有 6 个应登记公式。
完整试跑案例见前两章试跑结果报告;旧报告中的强制生图讨论已被本版图片规则取代。
图 1.18、2.7 不再需要为了满足旧规则而反复生图:允许直接保留原图,清晰度差照实记录。但两图仍要完成提取范围、标题、位置和含义对照,不能直接改成“审核通过”。旧样书中另有 15 幅生成资产;后续按本规范迁移时,无逐图授权的应换回原图。当前线上样书未执行这项迁移。
增补二 · 主要困难与失败风险
| 风险 | 最常见的错法 | 具体拦截办法 |
|---|---|---|
| 来源在进入账本前已遗漏 | 所有已检测 ID 都有归属,却少了一段原文或一个行内式。 | 全物理页覆盖清单独立于检测清单;无框整页观察后再对账。 |
| 跨页或图题归组错 | 把图题当下一句,把页脚当正文,把原书异常擅自改顺。 | 保留源块和边界 ID;看整页及邻页;区分源顺序、译文连续性与文本版式。 |
| 译文流畅但关系错 | 量级错十倍,currents 词义错误,图题漏子图限定。 | Spark 独立源译对照;数值/单位配对检查和具体失败案例,不做全书盲替换。 |
| 原图模糊而模型想补全 | 把“看不清”变成自信猜测,或者默认生成更锐利的伪细节。 | 默认原图,模糊照实标记;没有逐图授权不允许重绘。 |
| 数学/表格结构错误 | 矩阵主字形丢失、方程组散成段落、单元格吞掉正文。 | 源结构专项 + 生成器结构断言 + 原页/HTML 截图对照,三者各管一层。 |
| 补丁修一处坏一片 | 正则扩散、组件副作用、重新组装覆盖已审核译文。 | 指定 ID 和旧值;只在既有合同内修改数据;内容/对象序列差异检查;受影响实例回归。组件修改须先获用户批准。 |
| 审核形式完成、实际没看 | 拿任务数量当进度,拿自己数的 N 当应审 N,拿旧 PASS 当新批准。 | 独立清单、实际调用记录、冻结快照、逐对象观察与截图;缺证据就不放行。 |
不能承诺“永远不再出错”。可以做到的是:不让漏派单、无证据、旧版本通过或已知未修问题被包装成终审完成;出现问题时能定位到原页、源块、对象、组件和责任检查点。
增补三 · 疑问解释
有两套相互核对的清单:第一套从 PDF 页数和用户范围生成“每页都必须看”的清单;第二套才是抽取出的对象清单。Luna 的覆盖专项先看无框整页及分区放大图,再看带框对象对账图,找没有登记的区域、被误排除的内容。代码只能检查“登记内容都有归属”,不能证明未登记的内容不存在。
Gate A 的闭合条件是:全部范围页有有效观察证据;每个可见内容区均有保留、合理排除或待解决决策;保留区域映射到来源原子;无未解决区域;来源六项当前版本均完成。它是有证据的审核标准,不是对 PDF 信息完整性的数学保证。
Spark 记录 A 的末句、B 的首句和源 ID,不自行脑补连接。调出 A/B 所在整页及相邻页,Luna 判断漏块、错阅读顺序、图题混入正文还是原书本来如此。漏块回 P1;错连接修阅读顺序;源文正常而译文跳义只修译文。不能看到跨页就机械拼接,也不能不说明就调整原书内容。
PDF→MD 的主要工作是识别、归组、转写和翻译;程序负责搬运数据与检查可计算规则。确定性主要指 MD→HTML:相同输入、组件和版本应生成相同结果。程序由工程阶段编写一次,日常执行不再由模型自由创作 HTML。
调度器应记录所需型号、实际型号与替换原因;Spark 不可用就明确报告,并征求是否改用其他型号。不要在报告写“Spark 翻译”,实际却交给 Luna。所有后续状态都应从实际任务记录读取,不能从计划表抄过去。
本次新管线是 A 六项 + B 七项 + D 八项,七不是整个流程的专家总数。旧插件曾采用“七专家 + 三读者”;它与新管线的分阶段 21 检查点不是同一套已运行任务。若继续保留三名最终读者,他们也必须各有唯一专项和正式记录,不能用三个泛读 PASS 替代上述检查;本轮没有新增或执行三名泛读。
增补四 · 尚未完成的实施工作
上表是应补齐的状态展示规范。当前原型有证据校验代码,但缺正式任务清单和完整派单/回收执行,不能声称这套状态面板已上线。
增补五 · 来源与适用范围
scripts/gates.py、build/validation.json、任务/证据目录存在性、qa/preview-open-issues.json 与 PILOT-HANDOFF.md。v4 于 2026-09-06 实际运行 ALL 聚合,返回 1;v5 只沿用这份历史记录,没有重跑书籍 Gate。febe6a847c725b22c95c33d3692bcebdd755325aa2721b6f386c937f4927ff13。范围为原 PDF 物理页 12–68;不代表整本书。新方向是:原图默认保留,Spark 承担纯文本主力,Luna max 承担常规视觉,Astra 处理少数难题与获准的独立工程修订;但先前试跑缺少正式审核编排的事实必须补做,不能靠调整图片规则或改写状态说明消除。
增补六 · Astra 对现有插件的重新审查 · 2026-09-06
结论:值得修改,而且有几处是已复现的代码漏洞。模型升级有助于处理难题,但不会自动修好一个接受空截图、错误映射和旧审核记录的校验器。
本轮更新报告和后续执行规范;插件、书籍生成器、线上样书都未改动。下面的实现建议需要你决定后才能进入独立的工程修改。新要求与旧插件有冲突时,以你这次的要求为准,不能照旧插件自动重绘、调用旧型号或改生成器。
| 对象 | 实际是什么 | 本轮确认的边界 |
|---|---|---|
| 已安装插件与工作区插件 | 入口说明、工作流、质量合同、七份案例库索引及绑定、阅读模板、初始化、校验、发布脚本和测试。 | 核心校验脚本一致;仍采用“直接整合 HTML + 七专家 + 三泛读”的老机制。本轮是规则与代码审查,不是重新逐图复核案例库或逐页审核整本书。 |
| 月球书 BookMD 原型 | 另一个项目里的 CONTRACT、固定 build 程序和 A/B/C/D 聚合程序。 | 已有结构化输入和依赖哈希设计,不能把旧校验器的所有漏洞不加区分地归给它;它也不等于已经装入插件的通用生成器。正式审核缺失情况沿用前文 v4 记录。 |
| 本报告的新执行规范 | Spark / Luna max / Astra 分工,原图默认保留,固定生成器,21 个专项检查点。 | 是你要求的执行合同,不是已实现的调度器。尤其不能拿这份表去证明实际任务已用指定模型运行。 |
我复用插件自己的两页测试工程,在临时目录里更改一个条件,再调用其原有校验器。PDF 页数沿用原测试的模拟值 2;没有把假证据写进任何真实书籍项目,也没有伪造一次真实终审。下面的“通过”指这份合成输入获得程序 passed: true,不是书籍质量通过。
| 实验 | 具体输入或改动 | 实际结果 | 说明什么 |
|---|---|---|---|
| P01 · 图片根本不是图片 | 沿用现有测试:PNG 文件内容只有 png、image 等文字;HTML 的部分 data URI 也不是有效 PNG。 | 终审通过 | 检查了文件/后缀,没有证明它可以解码并展示。 |
| P02 · 空证据 | 把 23 份截图、文本导出和台账文件全部清成零字节,审核 JSON 不改。 | 终审通过 | “附件在”代替了“附件里有可核查内容”。 |
| P03 · 指向不存在的正文 | 译文映射的 target_id 改为 HTML 中没有的 missing-node。 | 终审通过 | 源块在清单里登记了,不代表它真的出现在成品里。 |
| P04 · 文字变了,旧报告还有效 | 实际正文从“连续正文。”改为“完全无关的替代内容。”;译文映射与审核记录保持旧值。 | 终审通过 | 既未对账输出文字,也没有让旧审核结果随产物变化失效。 |
| P05 · 公式变普通文字 | 登记的公式对象变为 <div id="equation-1">没有数学结构的普通文字</div>。 | 终审通过 | 公式校验没有要求该对象真正含有合法数学结构。 |
| P06 · 覆盖数随便填 | 七份报告均填总数/已查数 999,图清单其实只有 1 幅;确认问题数填 17,issues 仍为空。 | 终审通过 | 没有用独立应审清单对账,也没有校验统计与问题记录的关系。17 本身不必代表仍未修复,但必须有可解释的记录。 |
| P07 · 没审核却显示通过 | 删除全部七专家和三读者报告,运行非 final 的机械模式。 | 两个审核分类均为 true | 机械模式可以不执行人工审核,但分类必须是“未执行”,不能用“没报错”显示通过;不等于 final 模式也允许报告缺失。 |
| P08 · 长段落重复两次 | 同一合成长段落插入两遍。 | 终审通过 | 当前重复阈值从三次起算,漏掉两次异常重复。 |
| P09 · 三次重复对照 | 同一长段落插入三遍。 | 拒绝:HTML_DUPLICATE_TEXT | 证明重复检测确实运行了;P08 不是因为测试没走到这段代码。 |
| P10 · 读取顺序被解析器改了 | <p>甲<span>乙</span>丙</p> 应按“甲乙丙”读取。 | all_text() 得到“甲 丙 乙” | 解析器先合并父节点文字,再追加子节点文字,丢失混合内容顺序。这不是浏览器显示结果,但会污染使用该函数的校验。 |
插件根目录:plugins/pdf-book-to-html/
既有测试:python3 -B -m unittest discover -s plugins/pdf-book-to-html/tests -p 'test_*.py'
结果:Ran 21 tests — OK
额外探针:reports/scripts/probe-plugin-gates-v5.py
命令:python3 -B reports/scripts/probe-plugin-gates-v5.py
结果副本:reports/pdf2html-plugin-audit-v5-probes-2026-09-06.json
实验只更改 TemporaryDirectory 中的合成工程。
本轮没有修复这些漏洞,因此旧校验器仍保留上述行为。优先级说明:P0 是可能错误放行或违反用户授权边界;P1 是覆盖、定位或维护可靠性。所有代码修改均为建议,不构成自动修改许可;涉及生成器、组件或配套验证规则时,必须走前文“等待用户决定”的流程。
| 优先级 / 问题 | 已查到的具体依据 | 建议如何处理 | 验收时必须看什么 |
|---|---|---|---|
| P0 · 旧规则与新要求冲突 | SKILL.md:24 仍强制子任务使用 gpt-5.6-sol high;第 52 行及 agents/openai.yaml 仍要求低清或适合矢量的图调用生图。 | 统一一份版本化执行合同:纯文本 Spark、常规视觉 Luna max、原 Sol 职责 Astra;图片只凭逐图用户请求重绘。入口、派单器、案例库指引、校验与文档读取同一合同。 | 任务回执的实际型号符合合同;无指定图授权时生成请求为零。仅把报告里的名称换掉不算插件迁移。 |
| P0 · 生成器不是插件内的固定产品 | workflow.md:74 仍让 integrator 自由整合正文、图表、公式和界面;BookMD 原型位于另一个项目,尚不是插件统一固定入口。 | 先选择并由用户确认一个已写好的生成器版本,登记支持的块型、数学类型、表格能力、配置与限制。转换任务只能提交合规数据,不能自行改引擎。 | 构建前后生成器及组件文件无变化;遇到不支持结构输出能力缺口并停止,不偷偷改代码、降级截图或直接补 HTML。 |
| P0 · 清单可以自我闭合 | 旧初始化只复制 PDF 并记页数;validate_project() 核查“已登记块有归属”,不证明整页所有内容都已登记。 | 保留由 PDF 范围独立产生的逐页必审清单;覆盖专项先看无标框整页,再与提取框比较。页内空登记、排除区域、低置信区域都要有明确处置。 | 给一页故意漏一段的样本,不能因其余块全部映射就通过。零对象不能自动等于原书无对象;仍需视觉判断,不宣称数学保证。 |
| P0 · 源—译—成品对账不完整 | P03/P04;validate_book.py:527–535 只在目标恰好存在时检查它是否非空,漏了不存在的分支。 | 逐段确认目标存在且唯一,成品可见文本/结构与权威内容一致;明确哪些空白规范化允许,哪些数字、符号、顺序变化禁止。 | 不存在目标、换词、少句、多句、错序分别失败;只加隐藏转录文本不能抵消读者实际可见层丢失。 |
| P0 · 附件存在不等于证据有效 | P01/P02;_evidence_paths():259、_required_artifact():280 主要检查存在性及后缀。 | 图片必须解码且尺寸有效;台账必须按 schema 解析并逐对象记录;截图绑定来源页、成品对象、视口与版本。图像内容是否表达一致仍交对应视觉专项。 | 空文件、假 PNG、空 JSON 台账、缺一对象、截图来自另一图,分别被代码或专项对照拒绝。尺寸检查本身也不是看过图的证明。 |
| P0 · 审核者自己填分母 | P06;_validate_specialists():644 只验证 total == reviewed,没有从冻结任务包验证应审对象集合。 | 调度侧固定 expected_ids;报告逐项列 observed_id、判断和证据。要求集合相等、无重复、无缺项。问题数由问题记录计算,而不是自由填写。 | 1/1、999/999 都不能替代真实对象集合;已修问题有修复和复查记录,未修问题必定阻止通过。 |
| P0 · 旧审核继续放行新产物 | P04;旧 SKILL.md:63 甚至禁止要求内容摘要值;审核报告不绑定当前产物与依赖。 | 需要的是简单版本绑定,不是复杂签名基础设施:记录源文件、权威内容、生成器、模板、规则与当前 HTML 的版本/哈希;依赖变动则相关审核过期。 | 改一个受审对象后原 PASS 不能直接复用;未变化的独立对象可按已批准的复用规则保留,不能仅换报告里的哈希。 |
| P0 · “未执行”被显示成通过 | P07;_report():981 用“没有该前缀的错误”计算各分类布尔值,而非记录该检查是否执行。 | 使用明确状态:未派单、进行中、证据缺失、需修复、过期、通过、等待用户。汇总由检查实际执行状态和结果共同决定。 | 删掉所有审核文件运行机械检查,应显示审核未执行;不能给 UI 两个绿色 true。月球原型前文的 A/B/D 不完整状态是另一套逻辑,不混为同一漏洞。 |
| P0 · 数学/表格只查到外壳 | P05;validate_book.py:595–609 对公式主要拒绝 blockquote/空文字,表格主要确认存在 td/th。 | 以生成器支持的 AST 为准,检验数学节点类型、操作数、上下标及矩阵格位;表格检验网格、合并、标题和脚注。来源忠实度与最终显示分别由专项检查。 | 普通 div、空主字形、少一矩阵格、跨行合并错位均失败;不能靠写一个数学 class 名称通过。原型已具备的结构检查应保留复用,不重新自由造组件。 |
| P1 · 校验器把文本顺序读错 | P10;Node.all_text():72 和 _visible_text():223 将父文字与子元素分开拼接。 | 保留文本节点与元素的原始交错序列;纯文本连续性任务接收按实际 DOM 顺序导出的正文,不把 aria-hidden 等同于 CSS 不可见。 | 带 span、em、链接、上下标的混合内容顺序均正确;视觉可见文本与无障碍文本分开测试。 |
| P1 · 全书重复扫描不够完整 | P08/P09;第 469–486 行对长段落和完全相同图片载荷采用三次阈值;文档要求的重复块序列未在此实现。 | 从两次起生成候选,加入连续块序列、不同包装的相同资产检测,再与来源对账。不能把原书有意重复一律删掉。 | 复制“段落+图+图题”的整组能被定位;原书合法重现可记录依据后保留。 |
| P1 · 独立审核与案例校准缺证据 | _validate_specialists():630 接受 independent=true;校准是三个长度不少于 12 的字符串,附一组 case_ids,并非逐案例判断。 | 生产者不得代写审核结论;派单记录实际任务 ID、型号与输入快照。把每份案例库拆为单一职责的专项包,要求指出具体缺陷、位置、该判失败的理由及正确反例。 | 换新任务并不自动等于独立:审核者必须得到原始来源与成品,而非仅生产者摘要。不能通过自填布尔值或复制案例 ID 声称完成校准。 |
| P1 · 测试只证明旧断言自洽 | 21 项既有测试全部通过;它们的完整通过夹具却使用不可解码的图片和占位台账。 | 保留快速结构测试,另补真实图片、真实可解析台账的集成夹具和坏样本库。上面每个漏洞成为修复前失败、修复后通过的回归测试;保留正常反例防止误杀。 | 至少把 P02、P03、P04、P05、P06、P07 加入发布前必跑断言。测试通过只能证明所测条件,不能代替来源与视觉审核。 |
| P1 · 工作区模板与已安装版不一致 | 目录对比只发现 assets/quality-template.html 不同;工作区有新增的八类公式模板,当前安装缓存没有这段。 | 把插件版本、生成器版本和模板版本分别展示。确认哪些是用户尚未批准合入的草稿,再决定发布,不自动覆盖安装缓存。 | 启动时读到的实际路径和版本与批准版本一致。这也可能是此前“先看效果再合入”的有意状态,不凭差异就指责安装失败。 |
| P1 · 发布器仍按旧门与旧入口工作 | stillframe_reports.mjs:153 调旧 validate_book --final;第 180 行还要求 /reports/{slug}/ reader 路径成功。新版报告中心要求直达内容页。 | 把正式书籍发布与通用报告发布区分;正式发布读当前统一 Gate 和不可变产物,核验报告中心直链、公开内容、CSP 与上传字节一致性。 | 新版门有一项不过就拒绝书籍正式发布;不依赖已弃用的中转页。此项是静态兼容风险,本轮没有用真实书籍执行失败上传试验。 |
最直接的解释:现有系统能证明“有人交了一份写着 PASS 的文件”,却不能充分证明“那个人看了当前版本、看全了,而且附件真的展示了被审对象”。截图哪怕肉眼一眼就能看出问题,也要先保证审核者实际收到并检查了那张截图,且这次观察没有被旧报告替代。当前这些条件没有被可靠落实。
本轮实验证明的是门禁和测试的缺口,不证明某一个历史 reader 偷懒、伪造或没有视觉能力。要归因到某次运行,还必须取回该任务的实际输入、截图、阅读范围、版本和逐项输出。缺少这些记录,就应写“无法追溯具体漏检环节”,不能补一个听起来专业的理由。
因此不建议再叠一轮泛读,也不建议把所有工作换成 Astra。保留你要求的专项分工;让每个专项拿到准确的应审对象和可用证据,发现问题继续完成本专项,再由确定性规则汇总。Astra 只处理剩下的少量难项,以及获准后的工程工作。
含义是:发现缺陷后把问题、最小复现、影响范围和方案交给你;由你批准一个独立修订版,再测试和切换。不是边做一本书边偷偷改全局组件,更不是因为不能改代码就把失败改成通过。
本节依据:插件 SKILL.md、references/workflow.md、quality-contract.md、reader-specialists.md、案例库索引/绑定与失败分析;scripts/init_book_project.py、validate_book.py、stillframe_reports.mjs、现有测试与本轮探针;安装缓存与工作区模板对比。以上路径均为工程追溯标识,必要代码行为和实测结果已写在正文,公网读者无需访问本机文件。