# 页码与文件身份踩坑记录(供后续 agent 查阅) ## 一、页码偏移不能推导 **已实测的偏移漂移案例**: | 文件 | 情况 | |---|---| | NASA v2.1(51页) | 印刷页与物理页差 4,但被大量空白隔页打乱(4/6/7/8/44 等),目录页码不可换算 | | 微软 434(88页) | 偏移 +3;同源的 90 页版偏移不同,**同品牌不同版本偏移不一致** | | 华为 665(175页) | **不印连续页码**,页眉印章节号;且目录第 8 章编号比实际页眉整体小 1 | | 可口可乐 Zero(146页) | 印刷号是"章.节"小数码(1.0、2.03、9.02)非页码;偏移从 +4 一路漂到 +138 | | 麦当劳 104页件 | 偏移 +3,5 个锚点确认 | | 麦当劳 Feel-Good(10页) | 全篇无印刷页码,物理页即唯一编号 | | 巴西联邦(45页) | 正文区偏移 0,但封面与目录为无号前置页 | | RMIT(86页) | 偏移 0,无空白隔页 | | **万科(124页)** | **全书无任何印刷页码**,唯一导航是页眉「章名 + 章节号」(如 品牌标志 / 2.14) | | **咖啡四本(山池/amble sheep/M Stand/Blue Bottle)** | 四本**均无印刷页码**,一律以物理页引用 | | 闻献(65页) | 印刷页=物理页,**零偏移**(p3 右下 "003") | | 观夏(71页)/花西子(100页) | 均无页码,按物理页计 | | pidan 2.0(32页) | 由 Illustrator(Windows) 生成,1.0 由 InDesign(Mac) 生成 | **「红色数字=页码」的陷阱(万科)**:章节扉页右侧有一个**竖排红色数字**,极易被误读为页码。300dpi 裁切右侧后确认——那是旋转 90° 的**章节号 "1.0"**,不是页码。 **遇到疑似页码的孤立数字时,务必 300dpi 裁切放大确认方向。** 竖排/旋转排版在 100dpi 下与横排数字无法区分。 **结论**:必须逐页目视确认。**先渲染前 5-8 页,找到至少 2-3 个锚点,再建立偏移关系,且每跨一个章节要重新验证。** ## 二、目录不可信 华为第 8 章目录编号与实际页眉整体错开 1。**目录只用于理解结构,不用于定位。** ## 三、文件身份的三重陷阱 ### 陷阱 1:同一文件被重复收录 用 `md5 -q` 或比较字节数验证: ```bash md5 -q "file1.pdf" "file2.pdf" # 或 stat -f%z "file1.pdf" "file2.pdf" ``` **已发现**(截至本批次共 **6 组** MD5 完全相同): - 麦当劳三份 10 页文件(`【必看042】`、`【必看126】`、`【手册VI 751】`)**MD5 完全相同** `0a53d6bf…`,是同一文件收录三次 - 贝壳 `【必看071】` 与 `【手册VI 1148】` **MD5 相同** - 华为 `【必看175】` 与 `【手册VI 666】` 字节数相同(14,014,170) - pidan `【必看032】` 与 `【手册VI 1070】` MD5 相同 - 蓝瓶 `【必看120】` 与 `【手册VI 1088】` MD5 相同 `e7a92e93bc469e291534dfc7e2cdac3b` - 观夏 `【必看010】`↔`【手册VI 1080】`、`闻献 【必看006】`↔`【手册VI 1100】`、`花西子 【必看011】`↔`【手册VI 1161】` 均为 MD5 相同 > **连带影响**:本项目记录的「1,607 份」是**物理文件数**。任何按文件计数的统计都必须先 `md5` 去重,否则重复收录会被当成多份证据。 ### 陷阱 1b:`md5` 查不出的两类重复(**必须三路交叉去重**) **类型 A:同版不同扫描** —— NASA `【必看049】` vs `【手册VI 634】` - MD5 **不同** - 同 Title(NHB 1430.2)、同 Pages(60)、同扫描仪(Canon DR-7550C),仅页面尺寸不同 **类型 B:同版不同改** —— 阿那亚 `【金山岭】阿那亚项目VI设计.pdf` vs `【总监经验分享】阿那亚标志设计.pdf` - MD5 **不同** - **字节数完全相同**(4,348,424) - 同内部 Title(`aranya_manual_1_0622.o.l_s`)、同 Creator/Producer、同 CreationDate(2017-06-22) - **仅 char 3,206,300(ModDate 区)一个字节不同** > **去重三路交叉**: > 1. `md5` 相同 → 字节相同 > 2. **字节数 + pdfinfo Title + CreationDate 三者相同** → 同版不同改 > 3. Title/Producer/Pages 高度相似 → 同版不同扫描 > > 只做第 1 路会漏判。实测 89 份被误计为 89 份唯一内容,实为 **88 份**。 ### 陷阱 1c:文件所有权错位(最严重) `阿那亚品牌资料全收录`(276 页)**物理 p3 显示为第三方付费资料库「看鉴品牌 Brand Insight/Copyright ©2024…严禁外传」的「阿那亚专章」**,不是阿那亚自有文件。 > 前 19 处错位都是版本/年份/重复层面的,**这一处是文件所有权层面的**——把它当品牌自有文件分析「品牌如何做 VI」,结论会完全错误。 > > **深读前务必看第 2–4 页有没有版权声明、出版方名称、"仅供内部参考"字样。** ### 陷阱 2:文件名与内容无关 - `【必看175】华为...2.0(134p).pdf` —— 文件名标 175 实为 134 页,"175"是库内编号习惯 - 餐饮招商抽样 8 份中,**2 份名实不符**(喜茶文件名"招商加盟"实为对外品牌册;便利蜂无加盟章节) - pidan 两份"品牌手册"实为**产品目录**与**包装图册**,明文约束都是 0 条 **做法:开 PDF 先翻目录与页脚。** ### 陷阱 3:版本号与元数据矛盾 - 可口可乐 Zero:封面 v1.0,页脚"Confidential: December 2009",版权"Copyright 2008" - 巴西联邦:封面 v.1.1–JAN/2023,元数据标题写 V3_JAN23 - pidan 2.0:文件名"2026版",Illustrator 创建时间 2024-07-23 ## 四、必须判断文件性质 | 类别 | 特征 | 处理 | |---|---|---| | (a) 现行 VI 执行文件 | 有约束条文、最小尺寸、禁止示例 | 五步法完整执行 | | (b) 品牌故事/介绍 | 无约束,通篇形象 | 记录"为何无约束" | | (c) 招商加盟材料 | 投资额、回本周期、加盟流程 | 重点看 VI 是否缺席 | | (d) 设计提案 | 有效果图、方案对比 | 标注为提案,非现行规范 | | (e) 产品目录 | SKU 规格卡、分类目录 | 判断规则是否以成品形式存在 | **性质不同,可比性不同。pidan 与餐饮招商的教训是:把 (b)(c)(e) 当作 (a) 分析,会得出完全错误的结论。** ### 本批次实测:叫「品牌手册」的多半不是 VI 手册 | 文件 | 标称 | 实际性质 | |---|---|---| | 山池品牌手册(35p) | 品牌手册 | (b)+(c):p29–34 全为招商,零门店规范 | | amble sheep(39p) | 品牌手册 | (b):品牌资产画册,仅 p4 属 VI | | M Stand(120p) | 品牌手册 | (b):仅 p2–p3 属 VI,p11–62 是门店实拍 | | Blue Bottle(62p) | 品牌手册 | (b)(c):p9 明写 "EACH OF OUR CAFES IS UNIQUE" | | 观夏(71p)/闻献(65p)/花西子(100p) | 品牌手册 | 叙事型企业册,**零 VI 章节**(花西子 p3 目录八章无任何 VI 模块) | > **高效判别法**:翻目录。**目录里没有「标志/色彩/字体/版式/物料」任一章的,几乎可以确定不是 (a)。** ## 五、"对不上"不能直接下结论 麦当劳案例:先发现既有记录"全部落空",追查三份 10 页文件后发现**11 条中 9 条精确命中**。 **既有记录错的是文件身份标签,不是内容。** 因此:发现页码对不上时,必须先定位真实来源文件,再判断记录对错。**"对不上"只能说明找错了文件。** ### 反向也要注意:记对了位置,也可能记错了内容 本批次咖啡/美妆七份文件的既有引用**页码零误差**,多条精确命中(花西子 p.26 园林轩窗+并蒂莲完全命中)。 **但既有记录普遍只记「画面长什么样」,系统性漏掉「体系里有什么」**——花西子 p.3 目录(证明无 VI 章节)、p.45(品控一票否决权)、观夏 p.64(未润色采购笔记)都是高价值漏记。 > **结论:既有记录可用于快速定位,不能替代品读。** ### 已确认的「引用指向另一份文件」 - 蓝瓶:既有引用「第 77、122、134 页」→ 派读文件 `【必看120】` 仅 62 页;**只能属于 139 页的 `【必看122】`/`【手册VI 1218】`** - 万科:既有页码引用 → `【手册VI 862】` **全书无印刷页码**,引用不可能指向它 - 观夏:p.59 记为"瓷件",实为**蜡杯**;瓷件在 p.6 ## 六、元数据检查命令 ```bash # 页数与基本属性 pdfinfo "file.pdf" # 是否重复 md5 -q "file1.pdf" "file2.pdf" # 是否无文本层(决定能否用文字辅助定位) pdfinfo "file.pdf" | grep -i producer # Producer 含 "Image Conversion" → 无文本层,只能目视 ``` ## 七、渲染建议 ```bash pdftoppm -f <起> -l <止> -r 100 -png "file.pdf" /tmp/prefix ``` - `-r 100` 足够识别版式、色块、图文关系 - **需要读小字注或色值时用 `-r 200` 或更高** - 单次 4-6 页,避免上下文膨胀 ## 八、中文条款必须 200dpi 复核(实测误读案例) 北京大学办法印刷 p2=物理 16 一条约束: - **100dpi 下误读为**:「标志墨稿**非印刷**的情况下才能应用」 - **200dpi 复核后正确为**:「标志墨稿**只有在单黑印刷**的情况下才能应用」 **「只有在单黑印刷的情况下才能应用」是完全不同的规范**(单黑印刷是特定工艺),前者则无意义。 > **凡是需要引用中文条文原文的页面,一律用 `-r 200` 并裁切放大复核。** 100dpi 只用于判断版式结构。 ## 九、版本号陷阱的又一种形态 阿德莱德大学导视手册:`pdfinfo` 的 Title 字段写 **"2011"**,但文档页脚印 **JUNE 2013**。 > **引用版本时以文档内页脚/扉页为准,不以元数据为准。** 已知同类:可口可乐 Zero(封面 v1.0/页脚 December 2009/版权 2008)、巴西联邦(封面 v.1.1-JAN/2023/元数据 V3_JAN23)、pidan(文件名"2026版"/Illustrator 创建 2024)。 ## 十、页码偏移会分段漂移,且新版本会推翻旧版本的偏移表 北京大学办法(98 页)实测: | 区段 | 映射 | 偏移 | |---|---|---| | 前置目录区 | 物理 9/10 = 罗马 vi/vii | **+3** | | 正文区 | 物理 16 = 印刷 2 | **+14** | **同一份文件内偏移从 +3 跳到 +14**(物理 15 是无号章节扉页)。 > 再次印证:**任何偏移表都是逐份、逐区段的目视记录,不是可外推的公式。** ## 十一、性质判定的两条新捷径 1. **看第 2–4 页的版权页** —— 苏州博物馆元数据 Title 直接写「方案A(水印)」,全书水印「新世相|千鲤文化」,是**乙方提案**而非品牌文件;国博 41 页 PPT 导出,采样 6 页全为馆情/藏品/授权产品,**无 VI 规则** 2. **看有没有自带文档号与审批邮箱** —— 星巴克 WPS VI 手册自带 SJ 文档号(SJB14-34174)与审批邮箱,说明是品牌自出的执行文件;而 gaga 只写「Design by A Black Cover Design」、Tagi 嵌「Brand Design 不等咖啡」,都是**乙方出品,不应作现行规范引用** ## 十二、⚠️ 双页跨页合并:会让全库页数统计系统性偏低,且**无法用元数据识别** **广发银行 VIS**:`pdfinfo` 的 Pages = **61**,但它实际是 **118 个印刷页**,因为**一个 PDF 物理页里并排放了两个跨页**。 **换算关系:`印刷页 = 2 × 物理页 − 2`**(已用物理 p4=印刷 6/7 等锚点确认)。 > ### ⚠️ 最难的一条:页面尺寸筛查**完全无效** > > 该件页面尺寸为 **A4 横向(841.89×595.276)**,而**两页 A5 竖版并排恰好等于一张 A4 横向**——**二者元数据完全同形**。 > > **实测结果**:全库 1,561 份按比例扫描,筛出 **19 份**比例≈2.00 的真跨页(可口可乐 2020 的 67 份同源件、广汽丰田 211p、振华重工 86p、优酷 42p 等),**广发银行一份都没抓到**;另有 **268 份** A4 横向属**不可判别区间**。 > > **结论:必须逐份目视中缝(装订线/装订位痕迹),没有捷径。** 用 `pdfinfo Pages` 做的任何统计都会系统性偏低。 > > **也否证了一条旧推断**:跨页**不只**出现在 (b)(c) 类文件——可口可乐 2020、广汽丰田、振华重工、优酷**都是 (a) 类 VI 执行文件且为真跨页**。 ## 十三、文件名与元数据 Title 互相矛盾时,两个都不可信 `【手册VI 809】中信银行视觉识别系统(VIS)手册()`: - **文件名**:视觉识别系统(VIS)手册 - **pdfinfo Title**:营业网点形象建设标准-办公应用 - **封面实写**:VIS 视觉识别系统系统手册(2014版) **两个不可靠信源给出了两个不同的错误答案,只有封面可信。** > 若此前有人按 Title 归类,会把它误记为「网点建设标准」。**引用任何文件身份时,封面 > 元数据 > 文件名。** ## 十四、命名不指示层级,只指示来源 lululemon 在库中有**两份同名不同层的文件**: - 219 页「品牌手册」——**里面没有 VI** - 16 页「品牌LOGO 规范手册」——**里面没有品牌故事** **命名不指示层级,只指示来源。** 判别「品牌手册」与「视觉识别系统」两种叫法的真正依据是: > **文件里有没有「不许可」。** 手册承诺「我们是谁」,VIS 承诺「你不能怎么做」。 > > 反例:**广发「管理手册」的「管理」是虚的**——正文没有任何审批流、版本效力条款或责任人。**「管理」不等于治理;治理信号要看审批/召回/签字条款是否真的存在。** ## 十五、⚠️ 第 4 路去重:改版会被前三路全部漏判 `【手册VI 330】`(64 页,2016-08 改版)与 `【必看181】`(56 页,2013-03 初版)——**同一份 Apple logo guidelines 的改版**: | 去重路 | 结果 | |---|---| | ① md5 | **不同** ❌ | | ② 字节数+Title+CreationDate | **字节不同、CreationDate 不同** ❌ | | ③ Title/Producer/Pages 相似 | **Pages 不同(64 vs 56)** ❌ | | **④ 页数 + 文档内部日期** | **命中** ✅ | > **改版文件通常同时改变页数与内部日期,因此前三路全部失效。** > > 判别方法:**渲染第 2–3 页找版本日期或版本号**。同一 Title 下、页数接近、日期不同的两份,几乎必然是同一文件的改版。 > > **这三路漏判的方向是安全的**——它们不会把改版误判成重复,只会漏掉。**但漏掉意味着把一个版本当成两个证据来源。** ## 十六、L2 单资产层的资产类型极度单一(实测) 以文件名+元数据筛全库 1,279 份,命中单资产关键词 96 份,**真正「整本只服务一个资产」的仅约 40 份,且 90% 是 logo 指南**。 **以下资产类型全库零命中**:字体/字库独立手册、色彩体系、插画风格、动效、纹样、图表规范。 > **含义:本项目至今无法回答「一套字体的 VI 手册会长什么样」,因为库中没有样本。** 遇到声称提供字体规范的文件,先核实它是否只是 Logo 指南的附属章节。 ## 十七、⚠️ 「主动声明放弃」几乎不存在——用沉默定义的变量要警惕 对 6 份 L0/L1/L2 文件实测「主动声明放弃管控范围」:**命中 0 次**。 实际发生的两种声明是: - **转交**(lululemon):「本指南覆盖 basic guidelines…specific communications materials 请咨询我们」 - **拒绝封口**(IBM Be Equal):「Guidance is **not limited to** this document」——**与「主动放弃」方向相反** > **用「沉默」当变量定义,等于把「没想清楚」和「有判断」混为一谈。** > > **判据**:若一个变量的取值需要靠「文件没说什么」来判定,它就不可靠——请改用文件**实际给了什么**来定义。 > > 本项目因此否决了「授权半径」变量,改提名「**约束硬度**」(绝对值 vs 关系式)为候选。 ## 十八、麦当劳 104 页件偏移存疑(按纪律 #5 不下结论) - 某一轮单锚点目视测得物理 p10 = 印刷 8,即偏移 **+2** - 本文件早前记录为 **+3(5 锚点确认)** - 物理 p12 是满版无页码 art 页,**无法取第二锚点** > **单锚点不足以推翻多锚点记录。** 已标记待复核,两值并列保留。 ## 十九、Spotify 有两份页数相同但内容不同的文件 - `【手册VI 286】`(437KB,Adobe PDF Library 11.0,英文,页眉 "Spotify Partner Guidelines") - `【手册VI 533】spotify-识别指南`(5,045,640B,Adobe PDF Library 10.0.1) **页数同为 21p,但 MD5 不同、Producer 不同。** > **引用「Spotify 21p」前必须先确认指向哪一份**,否则页码不可换算。 > > 同类风险:lululemon 的 `【手册VI 1123】`(16p LOGO 规范手册)与 219p 品牌手册是**两份不同文件**,不可混引。 ## 二十、⚠️⚠️ 最高危:`pdftoppm ... -` 不写 stdout,图像比对会**静默返回空** ```bash # ❌ 错误写法:以为 "-" 表示输出到 stdout pdftoppm -f 7 -l 7 -r 45 -gray -singlefile -png "$A" - | md5 # → d41d8cd98f00b204e9800998ecf8427e ← 这是"空字符串"的 MD5 # ✅ 正确写法:必须给真实前缀 pdftoppm -f 7 -l 7 -r 45 -gray -singlefile -png "$A" /tmp/probe/t && md5 -q /tmp/probe/t.png ``` **本项目真实踩中**:用它做去重图像探针,**7 组候选全部返回"内容相同"**——因为两侧都是空。 若不是文本层差异引起怀疑,这个假信号会直接把 7 组全判成重复,**污染全库去重结论**。 > **判据:任何比对工具若"全部命中",先打印它自己的输出长度,确认它真的产出了东西。** > > **同一批文件 100% 相似不是证据,是 bug 的症状。** **附带一条仍然成立的经验**:低 dpi 灰度图**不足以**判别小字差异。 全季两份在 p7 的差别是「投影仪安装须知」虚线框——必须 130dpi 以上目视才能看到, 但两者在 p1/p4/p6/p8 又完全一致,所以**"多数页相同"也不等于重复**。 **去重终判(本轮 7 组 C 类全部结案)**: | 组 | 结论 | 证据 | |---|---|---| | 牧高笛 33p | **合并** | 文本 22/22 行逐行重合,8 探针全同 | | 茶百道 37p | **合并** | 双方均无文本层,8 探针全同 | | 京东 77p | **合并** | 文本 95.4% 重合(差异为字距),8 探针全同 | | 高端女装 42p | **合并** | 文本 81/81 行重合,8 探针全同 | | 野狗 130p | **合并** | 8 探针全同 | | **全季会议室标准 10p** | **不合并=不同修订版** | **130dpi 目视 p7:A 有「投影仪安装须知」虚线框+6 张安装示意图,B 完全没有**;7 探针中 6 个不同 | | **小鹏 217p** | **不合并=不同版本** | **110dpi 目视 p2 目录:A 页码呈「0 0 7」字距拉开且缺「辅助图形**1**-」「品牌**字体**-标识示意」,B 为「007」「辅助图形1-」「品牌字体-标识示意」** | → **唯一内容数由 1,272 下修至 1,267。** ## 二十一、⚠️ 文本层可能是替换密码,数值会静默出错 【必看038】斐乐 FILA 19p 的 `pdftotext` 输出: ``` 0GýDJBM'JMB -PHPT Clear Space Requirements ``` `0GýDJBM` 实为 `Official`。**字符被整体替换,而 `mm` 数值全部丢失。** 后果是「最小尺寸 14/16/18/18mm」这个错数字**传播了两轮**:既有记录写 14/16/18/18,下一轮 agent 复核后写成 14/16/16/18——**四次取值没有一个是对的**。200dpi 逐页目视实测是 **4/10/10/10mm**。 > **判据一**:凡数值型条目来自 `pdftotext`,必须至少抽一页 200dpi 目视比对。 > **判据二**:该数值**已经在记录里出现过第二次**,就说明它没被真正验证过——错数字最擅长藏在这种位置。 > **判据三**:若 `pdftotext` 输出里出现 `ý` `þ` `Ã` 这类字符,或英文全是大写但拼写怪异,判定为替换密码,**该文件全部数值改走目视**。 > > 本项目已确认:多数 CJK PDF 文本层不可靠、部分数字 PDF 可读但只能定位、**加密/子集化 PDF 的数值不可信**——这是第三类。 ## 二十二、⚠️ 子 agent 的「实测值」也会错,必须抽验 上一轮 agent 声称「FILA 实测 14/16/16/18mm,第三个值对不上,按纪律只报不改判」。 **它自己也错了四个值。** 它遵守了纪律(不擅自改判),但纪律没有要求它**目视复核**——它大概率同样依赖了文本层或低 dpi 渲染。 > **「我标了『只报实测值』」不等于「我实测过」。** 报错数字的成本远低于承认不确定。 > > **父会话抽验规则**:凡子 agent 报告里出现具体数字且该数字进入最终结论的,**至少抽 1 条 200dpi 目视**。本轮抽验 1 条即命中 100% 错误率。 ## 二十三、⚠️⚠️ 「全量检索零命中」可能是纯故障——必须报告有效产出量 复核 agent 用 `tesseract -l chi_sim+eng` 跑中文 OCR。**本机只有 `eng`/`osd`/`snum`,没有 `chi_sim`**,命令**静默失败**,生成 **120 个 0 字节 .txt**——而它已据此写下「M Stand 全 120 页零约束」。 它在同一份报告里**主动撤回了这条判定**,改用目视重验 p1–120,结论仍成立,但证据等级必须改写。 > **这是本项目见过最危险的一次失误,因为它伪装成了最可靠的证据。** > > 「全 120 页、零命中、毫无破绽」之所以成立,**恰恰因为什么都没读到**。 > 若非收尾 sanity check 数字符量,错误会从「未验证」升级为「已验证」——**比原断言错得更深**。 > ### 硬规则 > **凡以「跑一遍没命中」为证据,必须同时报告两件事:①跑了多少 ②读进去多少。** > > **计数完整 ≠ 检索成功。** 那个实例里输出文件数是 146/146(看似完美),实际字符量是 0。 > > **通用检查**:`ls -la *.txt | awk '{s+=$5} END {print s}'` —— 总量为 0 就是故障,不是发现。 **三次教训是同一个形状**: | 工具 | 静默失败方式 | 表面 | |---|---|---| | `pdftoppm … -` | 不写 stdout,返回空字节流 | MD5 正常,只是两个空值相同 | | `tesseract -l chi_sim+eng` | 缺模型,返回空文本 | 文件数 146/146 齐全 | | FILA 替换密码 | 返回**错**内容 | 有输出,格式正常 | > **失败是静默的,而成功时输出看起来完全正常。** 这类工具不能靠「看起来有结果」来判断,必须靠**产出量**。 ## 二十四、⚠️ 单页「中缝纯白」不能证明是跨页合并 A4 横向 PDF 里有两种:①**两页竖版并排的跨页本** ②**单页横版设计**。二者元数据完全同形。 **初版判据(错)**:渲染 p3,测中央 3% 竖条白色像素比 ≥0.98 → 判为跨页合并。 **结果**:321 份中命中 47 份。 **证伪**:目视 `pidan品牌手册2018版.pdf` p3——那是**单页横版,只是左半页留白**,右侧是 Operation overview 年表。内容根本没跨中缝。 **修正判据(对)**:必须同时满足 ①中央竖条纯白 ②**左右两半都有内容**(各自非白像素 >2%) ③**多页取样**(p2/4/6/8/10),要求 ≥80% 的页同时满足。 **修正判据(也错)**:必须同时满足 ①中缝纯白 ②左右两半都有内容(各 >2% 墨迹)③多页取样(p2/4/6/8/10)≥80% 命中。 结果 47 → **4 份**。看起来收敛了。 **但抽验这 4 份中的第 1 份就再次证伪**:目视 `pidan产品手册2020.pdf` p4——那是**贯通全幅的双语时间轴**,左半 2015–2017、右半 2018–2019,中缝只是两列之间的空隙,**不是装订线**。 > **目视 4 份,命中真跨页合并 0 份。** **最终结论:这条自动判据整体不可用。321 份全部标为未决,必须逐份目视。** > **两次尝试,同一个形状的失败:** | 判据 | 命中 | 抽验 | |---|---:|---| | 中缝纯白 | 47 | 抽 1 → 假阳性 | | 中缝纯白+左右有内容+多页 | 4 | 抽 1 → **仍假阳性** | **失败是结构性的**:跨页本的装订线特征是「两个独立页面各有自己的页眉页脚与版心」,而**单页横版设计同样能造出中缝**——双栏、时间轴、对称构图都产生同样的像素特征。 > **「中缝在哪」不在像素里,在语义里。** 不读出左右两半的页码/页眉是否独立,就判不了。 > > **任何自动判据报出数量后都要抽 1–2 份目视。本项目两次都验证了这条,且两次抽验都失败。** ## 二十五、⚠️⚠️ 合理的数字会填掉难辨的数字 FILA 最小尺寸被**三个独立读取者**读成三种值: | 读取者 | 报出的值 | 是否自称实测 | |---|---|---| | 既有记录 | 14/16/18/18 | — | | agent(约束硬度轮) | 14/16/**16**/18 | 是 | | agent(承担方轮) | 14/16/18 | 是(自称 correction found) | | **600dpi 复核** | **4/10/10/10** | — | **三次错误全部落在 14–18 这个区间**,因为 FILA 文本层是替换密码,数值读不出来,而 **14/16/18mm 恰好是品牌手册最小尺寸的「典型合理值」**。 > **正确值 4mm 之所以三轮没人读到,正是因为它不像一个最小尺寸该有的值。** > > **判据:如果某个数值「太合理」——正好落在同类文件的常见区间——它反而更可疑。必须提高分辨率复核到无可争议。** > > 复核方式:不要整页看,**裁切带测量标尺的那一小块**。父会话 600dpi 裁切后标尺括号与「4mm」标签完整无歧义。 ## 二十六、⚠️ 「无文本层」不等于「没有内容」——它只等于「检索不到」 麦当劳真 VI 手册(【手册VI 428】,104 页)被**三轮判决任务连续排除**,理由都是「无文本层,未逐页目视」。 **父会话用 40dpi 联络表一次通览 104 页即确认它就是正本**——内页目录写明 03 BRAND GUIDELINES,还有 Logo Guidelines、Image guidelines #1–#4、Store requirements 技术立面图。 > **「检索不到」和「不存在」是两个判断。** 把前者当后者,等于把最贵的那份文件扔掉了。 > > **动作纪律:任何被判为「因无文本层而排除」的文件,必须至少做一次联络表通览**(PIL 拼图,40dpi 即可,成本极低)。 > > 本项目已有两份文件因此被误判:麦当劳(104 页真 VI)与这一轮的 47 份跨页本候选。 ## 二十七、⚠️ macOS `xargs` 没有 `-d`,整条命令静默失败 `xargs -d '\n' -I{} ...` 在 macOS(BSD xargs)上**不存在 `-d` 选项**,命令直接失败、无报错。 agent 用它跑全库 MD5,**只产出 48/1561 行**。如果不核对行数,会直接得出「全库仅 48 个唯一文件」的荒谬结论。 > **与 PITFALLS 二十/二十三同一形状:工具静默失败伪装成结果。** > > **判据:任何批量命令,先核对「预期条数 vs 实际条数」。** 不核对就不要用它的输出。 **批量处理请直接用 Python**,不要跟 BSD/GNU 的选项差异搏斗。 ## 二十八、⚠️ `pdftotext` 非空 ≠ 内容有效 全库 1,271 份抽取「全部非空、2876 万字」——**但 326 份(25.6%)<50 字/页**,`2.3_符号指示系统.pdf` 全书 **1 字/页**。 那 326 份产出的是页眉页码、分隔符之类**页面伪影**,不是内容。 > **判据:全库关键词统计必须先按「字/页」分层,并把有效分母写进结论。** > > 本项目这轮所有比率都以 **840** 为分母,不是 1,271。**分母错了,分子再准也没用。** ## 二十九、⚠️ 装饰排版页在 100dpi 下错得最离谱 一善儿童书店 p11(数字被排成一串超大字号装饰): | 分辨率 | 读到的内容 | |---|---| | 100dpi | 5 家门店 / 1800㎡ / 20000+ 曝光 | | **200dpi** | **5 种语言 / 1800 种 / 20000+ 平方户外空间** | **错 3/5。** > **越是「排版成大字当装饰」的数字,低分辨率越容易读成另一个合理解。** > > 判据同第二十五条:**数值越醒目、越符合常识,越要提高分辨率复核。** ## 三十、⚠️ 小数点是本项目丢过最贵的字符 星巴克 p6 最小尺寸被读成「**375″**」,300dpi 复核的真值是「**.375″(9.5mm)/ Web 50 pixels**」。 **根因**:正文小字号 + 低分辨率 → 小数点消失 → 剩下一个**荒谬但格式正确**的数字。 > ⚠️ 注意方向:**错的值不合理(375 英寸的 logo),对的值看起来太小(.375 英寸)**。 > > **合理性与真实值无关,只与你的先验有关。** 你觉得「最小尺寸应该是 9.5mm 而不是 375 英寸」,于是补了小数点——**方向正好相反**。 > **判据**:任何英寸/英尺值,**先确认小数点是否存在**,再判断量级是否合理。顺序反了就会被自己的常识带偏。 ## 三十一、⚠️ 六轮变量判决的共同死法 | 变量 | 死法 | |---|---| | 授权半径 | 用沉默取值 | | 版本层密度 | 字段混入别的层 | | 约束硬度 | 是模块属性不是文档属性 | | 离现场距离 | 主变量不可评分 | | 承担方测量能力 | 两个轴都不是它 | | 约束产出介质 | 与量纲混淆,方向相反 | > **六个都是「中层标签」——描述文件或场景的某个侧面,但都不触及产生数字的物理事实。** > > 底层的三样是:**量纲**(数字能不能被核)、**产权**(谁有权改)、**基准**(相对式能不能还原成绝对值)。 > > ⚠️ **反面可能性必须保留**:再失败一次的话,说明的不是「找错了层」,而是**现象本身多维、不存在主导维度**。 > > **判据:提名新变量前,先问「这是中层还是底层」。** 中层标签已连续失败六次。 ## 三十二、⚠️⚠️⚠️ 找到文件 ≠ 找到正本 麦当劳 104 页件(`【手册VI 428】`)被连续三轮任务以「无文本层」排除。父会话用 40dpi 联络表看到「3 BRAND GUIDELINES」「Logo Guidelines」「Image guidelines #1–#4」「Store requirements」+ 技术立面图,**当即断定「麦当劳真 VI 手册已定位」,并写进仓库关闭长期待决项**。 **下一个 agent 推翻了我**。这不是官方 VI 文件,**是学生作业**: | 证伪信号 | 出处 | |---|---| | **人名+编号** `Gloria Yasein / N0753203` | 物理 p3 | | **第三方版权+会过期的东西** `©2014 McDonald's`/`Coca-Cola Ltd. used under license`/`Printed in Canada`/有效期 2014-11-20 至 12-03 的**加拿大沃尔玛优惠券** | p85 | | **跨市场拼接** 印度菜单 + 印尼活动锁定件在相邻两页 | p52–p53 | | 再发布容器 TCPDF/Vebuka.com/ISSUU | 元数据 | > **企业 VI 母版不会嵌入一张会过期的、单一市场的、带第三方版权的促销券。这一条单独结案。** > ### 判别正本的四个外部信号(任一即可) > 1. **人名+编号**(学生作业、设计师署名) > 2. **第三方版权**(`used under license`、`Printed in XX`) > 3. **会过期的东西**(促销有效期、活动日期、时效声明) > 4. **跨市场拼接**(相邻页属于不同国家) > > **四条全都在文件里,而且全都不在目录上。** > > **「目录里写着 BRAND GUIDELINES」只能证明它自称是什么,不能证明它是谁做的。** ### 我在同一张 40dpi 联络表上同时读错了三处 | 我写的 | 实际 | |---|---| | 「麦当劳真 VI 手册已定位」 | **学生作业** | | 「p1 有 Santa Tracks 06/13/2013」 | **不存在**(400dpi 裁切整个右下象限只有金拱) | | 「p4 = 目录」「p59 = Healthy Options」 | **p7**、**p57** | > **一次联络表通览,同时产出 1 个正确观察和 3 个错误。** > > **联络表只能回答「有没有这类内容」,不能回答「这份文件是谁做的」「哪一页是哪一页」。** ### 两条延伸教训 1. **一个早已存在于项目记录里的反证,比一份没读过的正本更容易被漏掉。** 下结论前先搜「这个文件此前被判过什么」——**记录的检索成本远低于文件的通读成本**。 2. **连续被以「无文本层」排除的文件,尤其可疑。** 排除理由越方便,越可能是没查。 ### 附带取证纠正 - `3/8" DIA ANCHOR BOLTS` → **400dpi 实为 `3/4"`**。**这条数字早已被引用,说明它很可能从未被目视验证过。** - Logo Guidelines 是 **8 条**,不是 7 条。 - 偏移 **+3**(5 锚点:37→34、51→48、53→50、57→54、98→95),**推翻 PITFALLS 十八的 +2**。 ## 三十三、⚠️ 子 agent 推翻父会话结论时,不要要求它「谨慎」——要保护它推翻的权利 麦当劳这轮,agent 在封存答案里把「项目记录与任务书矛盾」登记为**待检假设**(而不是选一个信),开 PDF 后直接验证并**推翻了父会话上一轮刚写进仓库的结论**。 **这正是任务书里「你要的是判决不是确认」这句话兑现的样子。** > ⚠️ 如果任务书写成「请确认麦当劳手册已定位」,agent 大概率会顺着写,然后错误被固化。 > > **判决性任务必须明确授权:可以推翻父会话刚下的结论,而且推翻会被优先采纳。** ## 三十四、⚠️⚠️ 页脚小字最危险:错在语义补全,不是乱码 兜底类型判决轮里,agent 在**一条关键证据上 200dpi 误读页脚**,把 > 「本手册所示的字体和图片仅作手册说明用途,**必须获得正式的版权后方可使用**」 读成了「**本手册所有未标注的内容均应参照范例进行绘制**」——一句语义通顺、但**完全不同**的完备性默认条款。 **据此建立的新类型 N6 已撤回**,依赖它的判据 4 一并重写。 > ### 为什么这道自查拦不住它 > > 中文正文读不出来时会产生乱码,**乱码自己会报警**。 > **页脚读错时产生的是一句通顺的句子——它看起来完全正常。** > > **「我目视过吗」这道自查对乱码有效,对语义补全无效。** > **判据:页脚、版权栏、法务小字、水印,必须 400dpi 以上裁切转写。** > > 已用 500–550dpi 复核全部高风险转写:招行 p5、巴黎 p42、广发 p2 正文与页脚,逐字无误。 > > **600dpi 裁切带标尺小图这个方法,本项目已三次成功拦截错误**(FILA 4mm、麦当劳 3/4"、本页)。 ## 三十五、⚠️ 并行会话会对同一文件给出互相矛盾的结论 麦当劳 104 页件,本轮有**两个 agent 独立处理**: | agent | 结论 | |---|---| | 深读轮 | **不是正本,是学生作业**(p3 人名+学号、p85 加拿大沃尔玛优惠券) | | 兜底轮(早几十分钟启动) | 「**confirmed as genuine (a)-class VI**」,全 104 页无出口 | **两个结论不矛盾,但也不互相覆盖**——兜底轮回答的是「这份文件属于哪一类」,深读轮回答的是「这份文件是谁做的」。**只有后者能推翻前者的前提。** > **判据:并行任务的结论必须回写到同一处,再统一裁决。** 不要让两份看起来都对、但建立在同一个未经检验的前提上的结论各自留在仓库里。 **这正是麦当劳事件真正的成本**:不是 agent 判错了,是**父会话把一个未检验的前提("文件已定位")当成结论写进了仓库,并关闭了一个长期待决项。** > **长期待决项的关闭条件应当比结论的产生条件更严。** > 「我找到了一份很像的东西」永远不足以关闭「真正的 X 在哪里」。 ## 三十六、⚠️⚠️ 关键词零命中可能是术语换了,不是内容没了 8 份汽车文件宽窄双口径检索:「**净空**」0、「**试驾**」0、「**改装**」0、「**展厅**」0。 **但净空确实存在** —— 广汽丰田用的是「**不可侵犯区域**」,一个法律词。**法规标识也没被忽略,被重新命名为「非品牌识别元素」。** > **判据:做全库关键词统计前,先确认这个词在该行业的说法。** 同一概念在不同品类有不同名字:净空/不可侵犯区域/keep-out zone/exclusion zone/安全边距。 > > 与第三十二同族:**外部信号缺失 ≠ 内部事实缺失。** ## 三十七、⚠️⚠️ 枚举足够多的切分,总会找到一个「显著」的 约束产出介质轮报出「screen 伪绝对值 6.7% < physical 10.5%,**Fisher p=0.6871**,方向相反」,并据此写成「模式三十一 · 决定性」。 **下一轮把那个标签随机化、枚举全部切分,结果:13.88% 的随机切分能得出 Fisher p<0.05。独立复核比率是 1/77(1.3%),而非 8.6%。** > **那个「发现」落在随机波动范围内。** > > **判据:凡靠分组比较得出的结论,必须报告它在随机标签下的重现率。** 只报 p 值不报随机基线,等于没做检验。 ## 三十八、⚠️ 统计函数返回「所有 p 都是 0.0000」一定是实现有 bug 量纲轮自检:Fisher 实现漏了项,全部 p=0.0000。**a=0 时 p 必须等于 1,不可能为 0。** agent 用「品茶实验」(已知双侧 p≈0.4857)自检推翻了自己的实现,重写为精确算法。 > **判据:拿一个已知答案的算例自检。** 不用自检,统计结论就是把 bug 当发现。 > > 另两例同轮拦下:变量遮蔽 `c+d`(`d` 仍是字符串)→ TypeError;**40dpi 联络表把 LEGO 页码读作「+3 偏移」,200dpi 实为偏移 0**。 ## 三十九、⚠️⚠️ 容器指纹(Producer/Creator)不等于内容造假——按容器判会造出 2/3 假阳性 麦当劳事件之后,容易滑向「凡 `TCPDF`/`issuudownload.net` 的都可疑」。**这条推论是错的。** 实测同一容器下的三份文件: | 文件 | 容器 | 判决 | |---|---|---| | `【手册VI 428】McDonald's` | TCPDF + Vebuka | **伪**(学生作业) | | Lexus 品牌指南 | TCPDF + Vebuka | **正本**(p50 `P4-020 (1/04) 00202-LEXGUIDEBK Printed in U.S.A. (5M) ©2004 Lexus`) | | Jeep 服饰 | TCPDF + Vebuka | **正本** | | `【必看088】Tiffany` | issuudownload.net | **伪**(学生作业) | | 匡威 Converse | issuudownload.net | **正本**(p18 带 `Converse Netherlands B.V. … número 34186851` 荷兰商会注册号) | **按容器判,正本里会误杀 2 份,伪本只抓到 1 份。** **容器只能用来排优先级(先看谁),不能用来定罪。** 定罪必须回到内容里的版权声明、法律主体、承印信息。 反过来,**一个指纹反而成了学生作业的强证据**:`N07xxxxx` 学号序列同时出现在麦当劳 `N0753203`、Burberry `N0728408`、Tiffany `N0733170` 三份不同品牌的文件里。这是可批量扫描的正例指纹。 ## 四十、⚠️⚠️ 找「不可能存在」的东西,不要只找「可疑」的东西 识别伪正本时,「像不像正本」这类**存在性**检验会踩语义补全的坑(小字读错、版权栏格式相近)。 **「不可能存在性」检验不受这个坑影响**——它们读出来是荒谬的,不是相似的: 1. 末页 Sources 页粘进 `google.com/search?rlz=1C1GCEU_enUS850US850&biw=1920&bih=920&tbm=isch&gs_l=img.1.0.35i39I`(带浏览器会话参数) 2. `Signed……` / `Date…./…./…` 的**空白未填**伦理审批表,出现在名为「XX 品牌手册」的文件里 3. 品牌手册里出现**会过期的东西**:优惠券有效期、活动日期、任期 4. 学生姓名 + 学号 **判据强度排序**:不可能存在 > 外部归属 > 存在性相似。 ## 四十一、⚠️⚠️ 纵向对读的前提本身要先被检验——「同一个品牌的不同版本」经常根本不是同一本书 任务设定「蔚来 398p(2019) → 176p(2021) → 198p(2023),约束去哪了」。实测: - **398p** = 《NIO 视觉识别系统》第 1.4 版,封面印「严格保密」,全书 287 条约束,**真 VI 手册** - **176p / 198p** = 《一个PDF看懂蔚来》2020.12 与 2023.07 版,**同一本企业宣传册的两版**,零 VI 章节 **三份里有两份不是同一本书。** 「版本变薄 = 约束被移走」这个推理链从第一步就不成立。 **做纵向对读之前必须先证明三件事**: 1. 三份是**同一类文档**(都叫品牌手册?不必然) 2. 三份有**版本继承关系**(版号/日期/前后文引用,不是文件名相似) 3. 页数差**不是装订颗粒度不同**(一本合订本 vs 一本单册) 蔚来这一例还叠加了一个陷阱:**「一个PDF看懂蔚来」和「蔚来视觉识别系统」都叫蔚来品牌手册**,在文件名层面完全无法区分。 > **纵向对比的失败模式不是「数错了」,是「比的根本不是同一种东西」。** 横向对比至少保证是同类文件,纵向对比连这个都没有。 ## 四十二、⚠️ 转交型出口:子文档版本号可能高于母手册 蔚来 v1.4 母手册全书无展厅/空间章节,治理页(p386、p395)把这一层外移到 4 份独立文档,其中 `NIO House 室内标示系统设计第 1.7 版` —— **版本号高于母手册的 1.4**。 推论:**母手册的版号不等于它所辖文件集的最高版号。** 想知道一个品牌 VI 系统的真实版本状态,只看母手册会低估。 判断「这份手册管到哪」的时候,必须把它的**转交指针追到底**,否则会把「转交出去的层」误判成「漏写的层」。 ## 四十三、⚠️⚠️⚠️ 同一个标题在 30 / 200 / 600dpi 下被读错三次 亚朵 p 段的章节标题 `3.2 生动态化应用系统`: | 分辨率 | 读成 | |---|---| | 30dpi(联络表) | 「生化应用系统」 | | 200dpi | 仍不确定 | | **600dpi** | **「3.2 生动态化应用系统」** | **连 200dpi 都不够。** 这不是新坑,是第三十八条(装饰排版页 100dpi 错 3/5)的升级版,但严重性完全不同: - 100dpi 错的是**普通正文**里的数字 - 这里错的是**整个章节的名字** 而本项目研究的东西(终稿权、版权、承印、审批方)**大量集中在页脚、版权栏、章节标题这类「排版元素」上**——恰好是低分辨率最读不对的地方。 > **要研究「谁说了算」「归谁所有」,直接上 600dpi,不要 200dpi。** > 200dpi 复核这条纪律是为**中文条文**设的,**不适用于排版元素**。 ## 四十四、⚠️ 任务前提里的「版本关系」可能根本不存在 蔚来那份(`REPORT-VERSION-DIR.md`)任务设定「398p(2019) → 176p(2021) → 198p(2023),约束去哪了」。实测 176p/198p 是**同一本企业宣传册的两版**,与 398p **毫无版本关系**。 假日那份被怀疑是「版次不明的第二份」,实测**两条路径 MD5 相同,是同一份**。 > **文件名里的「品牌名 + 页数」不构成版本关系。** 做纵向对读前必须先证明:(1) 是同一类文档;(2) 有版本继承关系(版号/日期/正文互相引用);(3) 页数差不是装订颗粒度不同。 > > 三条任一不成立,这次纵向对读就是无效的。 ## 四十五、⚠️⚠️ 批量抽取语料必须先验证产出,再相信「零命中」 执行者穷举任务把 1,561 份 PDF 全量抽文本层。这是个正确做法,但**结果必须先验产出**才能用于统计: - 1,561 份 → **1,527 份可用**(分母不是 1,561) - **33 份空文本层**——空是内容属性还是抽取失败,必须区分 - **0 个零字节失败**——这一项必须单独报,因为零字节失败会伪装成「零命中」 - 374 份低密度需单独标记 **零字节文件 = 工具故障;小体积文件 = 内容属性。** 两者混在一起,会把「没抽出来」统计成「没有」。 另:串行抽取 1,561 份耗时约 40 分钟(10 分钟只完成 116 份),换多进程后大幅加速。**大规模抽取必须多进程,且必须能从断点续跑。** ## 四十六、⚠️ 关键词计数只能作召回,不能作证据 同一轮里,`\\bIT\\b`、`\\bmembers?\\b`、`\\bpress\\b` 在全库造成严重假阳性。 执行者任务的处理方式值得固定下来: > **没有任何一类是靠计数成立的——每一类都必须有目视转写证据。** 计数回答「该往哪看」,不回答「有没有」。把计数当证据,等于把召回率当精确率。 ## 四十七、⚠️⚠️⚠️「agent 主动纠正」本身是需要复核的断言 `REPORT-VERSION-DIR.md` 的 agent 在正文里主动声明:「200dpi 抓住了文本层错误(`pdftotext` 把蔚来 p65 的『请阅』静默补成『请参阅』),以 200dpi 为准」。 **我在没有独立复核的情况下,把它作为「又一个文本层语义补全实例」写进了仓库。** 后续 `REPORT-HANDOFF.md` 的 agent 在 600dpi 逐字复核同一页: > 「完整规范请阅**参**品牌资产管理中相关的具体文件。更多详情请阅**参**上述文件。」 **两处都是「参阅」,原文本就含「参」。不存在补全。那条记录是错的。** > **agent 声明「我纠正了一个错误」时,它报告的是自己的判断,不是事实。** > > 本项目已有一条同构结论:**执行者被点名 ≠ 执行者有权批准。** 一次自我纠正被报告、被采信,中间**还差一道独立目视**。 > > 尤其危险的是这类「自我纠正」听起来特别负责——它主动削弱自己,反而更容易被免检。 **固定动作:任何进入仓库的「agent 自我纠正」,一律降级为「待复核断言」,由另一条证据线确认后才能升格。** ## 四十八、⚠️ 断链有三态,最危险的一态是「检索成功但链接仍断裂」 判别转交是否可达时,只查「文件在不在」是不够的。实测三态: | 态 | 现象 | 风险 | |---|---|---| | 1 | 文件不在库 | 执行者知道要问人 | | 2 | 文件在库且对 | 正常 | | **3** | **文件在库、检索成功、但它不是那份文件** | **执行者会找到一个看起来对的东西,然后照着它做** | 汉庭指名「华住提供的 VI 系统手册」,库内确有 `华住酒店集团品牌手册`(89 页),但它是集团企业形象册,**零 VI 章节**。 > **态 3 比态 1 更危险:态 1 会让人去问,态 3 让人不再问。** > > 任何「指针可解析」的结论,必须**打开目标确认它含有指针所承诺的内容**,不能停在「文件存在」。 ## 四十九、⚠️⚠️ Agent 可能做完全部取证却没写报告——任务仍被标记 succeeded 实测:「非商业主体 VI」任务把 1,561 份抽取、十份全部目视、几十页高分辨率取证**全部做完**,过程记录的最后一句是「Writing the report」——然后**在写文件之前结束了**。 `SEALED-PUBLIC.md` 在,`REPORT-PUBLIC.md` 不存在。**任务状态是 succeeded,零字节失败。** > **任务成功 ≠ 交付物存在。** 父会话必须检查文件是否真的落盘,不能只看状态。 **缓解措施(已在后续任务书中加入)**: 1. 关键结论**边做边写**,不要攒到最后一次性落盘 2. 至少在取证主轮结束后先写一版**含全部关键引文的骨架**,再补分析 3. 父会话收割时**一律先 `ls` 交付物**,缺失则用 `task_append` 让它续写——**它的上下文和渲染产物都还在,续写比重跑便宜得多** **更一般的教训**:长任务的失败点往往不在难处,在收尾。**收尾动作要和取证动作分离,交替进行。** ## 五十、⚠️⚠️ 分类失效的根因往往是「行定义不干净」,不是粒度太大 旧兜底分类被判死的理由是「混了三种语法、跨六层」。重画时找到了真正的根因: > **把字段升成了类别。** 把「答案的产物是什么」(终稿 vs 修订)和「渠道是什么」(邮箱 vs Slack)当成类别。 后果是可算的:**招行与微软这两个同类实例在旧表里被拉开 8 位,于是交集必然非空。** 而且旧表里**有两行根本不在这一层**(验收手段/边界声明属性)。 > **判据**:一个分类如果「互斥性失败」,**先查是不是有几行在回答不同的问题**,而不是先怀疑粒度。 > > 把「产物是什么/渠道是什么/谁来批准」三种东西塞进同一列,交集非空是数学必然,不是数据问题。 > > 检验方法:**同一份文件的两个同类实例,在表里隔了几位?隔得远 = 混了字段。** ## 五十一、⚠️ 分类建完之后必须做留出检验 新兜底五级判定顺序在 **7 份文件**上建起来(招行/星巴克/亚朵/F1/巴黎/汉庭/微软)。 > **用它自己见过的样本无法证明它成立。** 这正是本项目七个候选变量连续被否决的同一个陷阱——每一次都是从「横截面上看着成立」开始的。 **已派留出检验**:8–12 份未参与建类的文件,跨品类跨语言跨主体性质,回测三件事——判定是否稳定、五级顺序是否真互斥、**「假设了执行者哪种能力」这条是否重新掉进不可证伪陷阱**。 第三条最关键:设计者自己承认那条判据**是上一轮被降级的不可证伪判断换了个位置回来**,替代方案是强制回答「**不具备此能力会被推向什么后果**」。 > **「换个位置」不等于「脱胎换骨」。必须实际检验替代方案是否真的可证伪,而不是换了说法。** ## 五十二、⚠️ 页码偏移不要照抄任务书,必须自己实测 同一个文件被两个独立 agent 实测,结论可以不同: | 文件 | 任务书记载 | 实测 | |---|---|---| | 汉庭 | +3 | **+4**(物21 = 印17,两个 agent 各自独立目视得出 +4) | > **任务书里传递的偏移值是上一轮的结论,不是事实。** 每次用到都要自己用页脚锚点实测。 > > 正确的处理方式是**两个值并列**并注明未决,而不是挑一个信。 ## 五十三、⚠️⚠️⚠️「用后果句替代不可证伪」是一个恒真的门槛,不是修法 兜底分类的替代方案是:把「假设了执行者哪种能力」降为验证手段,强制回答「**不具备此能力会被推向什么后果**」,使五条可证伪。 留出检验判定:**掉了,而且比原来更深。** | # | 硬理由 | |---|---| | ① | 能力栏**由类别唯一决定**——是查表,不是测量 | | ② | 它与类别分处**正交两轴**(执行者轴/答案归属轴),后果句在原理上无法推翻标签 | | ③ | **「写不出后果就作废」这道门槛恒真**:只要条款管的就是「没写到怎么办」,那么「不照做就没有依据」对**每一条都成立** | **实测五条后果句,3 组互换后无损**——把 Q1 的后果句安到 Q3 上,同样通顺。 > **它没有变可证伪,只是换了个列放着。** > > 一般规律:**当一条判据的判别式恒真时,它就不是判据。** 它降级为「提问的起点」——换手册时用它提问,但不用它分类。 ## 五十四、⚠️⚠️ 分类留出检验的三个必查项(本项目固化) 一次分类建完之后,**必须**在未参与建类的文件上做留出检验,并逐项检查: 1. **子类包含关系**——Q2 外派型实测是 Q3 请示型的**真子集**(「处置权在某人那里」必然蕴含「答案在某人那里」),顺序分不开。**4 处双判据同时成立中 2 处顺序判错。** 2. **最尖锐的形态有没有格子**——英格索兰 `this is a dynamic document`、`subject to change without notice`、CUNY `arguably incomplete` 全部落进「非兜底」。**手册自认非终局,却没有格子。** 3. **判定稳定性**——间隔重判一次。凯迪拉克物214(审批权在 `publicis.com` 外部代理的具名人 Grace Fong 名下)**从 Q3 改成 Q2**。**判定不稳定 = 判据依赖了不属于它的信息。** > **留出样本的实际分布也必须报**:本次请示型 7/转交型 1/**让位型 0、外派型 0、自担型 0**。**五类里三类一次都没出现**——这是「分类覆盖了现实」的警报,比「误分类率」更有信息量。 ## 五十五、⚠️ 反面教材:零命中最常见的成因是工具故障 **青奥会**文本层 152 字/页,**关键词零命中**——目视立刻读到「无权在未得到…授权的情况下使用」。 同型已发生过三次:招行 VI 文本层 **0 字符**、亚朵 **179 字符/180 页**、麦当劳 21 份 ISSUU 件**全部读不出字**。 > **任何「零命中」在成为结论之前,必须先回答:这个文件有文本层吗?文本层有多长?** > > 报告口径固定为:**「跑了 N 份,读进去多少字符」**——先验产出,再信统计。 ## 五十六、⚠️⚠️⚠️「缺失型断言」的抽样区不只在页码里,还在「章节类型」里 中粮 200p **逐页目视**结论:国标/法规/属地审批**零条**(全书 image-only,文本层 200 字节,200 页渲染 0 失败)。 但创维 186p 的同类内容**全部存在**: | 位置 | 内容 | |---|---| | p97 合同书模板 | 引用**《中华人民共和国合同法》** | | p126 包装模板 | **国家强制认证产品/企标 Q/SCWR 003-2017** | | p87 | **粤ICP备15057125号** | > **它们不在治理章节,在应用稿件里。** > > 已有的方法论只防住了「页码抽样区外」,**没防住「章节类型区外」**——只读规范章节会把有约束的文件误判为零约束。 > > **固定做法:任何「某类内容不存在」的断言,必须同时扫过 ①条款层 ②应用稿件层 ③版式标注层。** > > 同一份文件的反例:创维的约束在稿件层、中粮的兜底(p176「可退级使用弱势背书」)也在稿件层。 ## 五十七、⚠️ 用「证据类型」检查主张,别只检查证据 模式二十七「中文 VI 把本地义务入册」被判死的根本原因,**不是引文错,是引文类型与主张不匹配**: - 主张:**中文特有**(一个关于语言/国别的属性) - 证据:招行 p3「任何新增运用项目必须向总行办公室提出申请」、p5「本手册未包括的内容,请通过总行办公室获取设计标准」 - **这两条引文不含任何「本地」属性**——它们是**缺口回填**(手册没写的去找总行办公室) > **用一条无本地属性的证据支撑一条本地性主张,是循环论证。** > > 检查动作:把主张里的每一个限定词(中文/大型/公共/跨国)拿去问证据——**这条证据真的带这个限定词吗?** 带不上就是类型错配。 ## 五十八、⚠️⚠️⚠️ 三次同类事故:agent 报告转述未经复核就写进仓库 本项目已发生**三次**同一形态的事故: | # | agent 声称 | 实测 | |---|---|---| | 1 | 蔚来 p65「`pdftotext` 把**请阅**补成**请参阅**」 | **600dpi 证伪**——原文两处均含「参」 | | 2 | NatGeo 113p「**中文版**」 | **全英文**(可打印字符 0.997),全库无中文版 | | 3 | 亚朵 p39「`7mm厚铝板烤漆,银粉银漆`」 | **该句不存在**——p39 是施工图页,实为 `1.5mm厚不锈钢围边箱体,深灰色烤漆` | **三次都是同一个动作**:agent 报告里的一句话,被我直接搬进仓库、模式卡、甚至继续传给下一个 agent。 **根因**:agent 的报告和 agent 的引文,**在转述层级上丢失了「我有没有亲眼看过」这个标记**。 **固定动作**(已写进派发模板): 1. **凡引用具体数值/具体页码/具体措辞的引文,进入仓库前必须由父会话打开渲染图确认。** 2. **父会话写进下一个 agent 任务书的引文,必须标来源等级**(「父验/文本层/仅转述」)。 3. **同一份引文被引用第二次时,必须重新核**——第一次可能是错的,第二次更可能是错的(因为它已被当成事实传播)。 > **这是本项目第 58 条,也是最便宜的一条:错误不会自己暴露,只会越传越像真的。** ## 五十九、⚠️「工艺名替代了数值」是错的——真正的零参数在金属侧 封存时预测「每种工艺名都在替代某个数值」。**实测方向相反**: - **工艺参数可以是数字,而且有手册真的写了**:伏牛山泉 p17 给 `铜版纸175线/胶版纸国产133线/进口150线/新闻纸100线`;亚朵 p39 施工图给 `1.5mm厚不锈钢围边箱体,深灰色烤漆` - **金属侧全库零参数**:凯迪拉克 p181 四种工艺(Embossing/debossing/varnish as ink/silver ink or foil)**一个数都没有** > **泛化到「工艺」这一层会得出错误结论。零参数是金属侧的属性,不是工艺的属性。** > > 这是「约束硬度不是文档属性」的同构错误——**别把某一子类的性质推广到整层。** ## 六十、⚠️ 免责条款的锚点可能不在你以为的地方 滴滴 p16 的免责原文是「始终以实际情况下**标志的可识别性**为最终判断依据」。 > **免责保护的是「标志能不能被认出来」,不是「颜色对不对」。** > > 一份手册可以在颜色语境里写免责,但它的法律锚点在**可识别性**上——**读免责条款时必须找到它到底在保护什么**,否则会把「免责存在」误读成「数值可核」。 ## 六十一、⚠️⚠️ 一个判据在 27 份样本里只命中 1 次——那是**未经检验**,不是「有效」 兜底分类第二轮检验:修正建议 R1–R7 落地后,**Q2 外派型在 15 份新样本 0 命中,两轮 27 份只中 1 次**。 于是 R7「给 Q2 加义务转移门槛」**一次都没触发过**。 > **一条修正措施如果从未被触发,它没有被验证,也没有被否定——它只是没有被执行过。** > > 「没触发」和「工作正常」在报表上长得一模一样。必须区分: > - **触发过且通过** = 有效 > - **触发过且不通过** = 无效(可据此修) > - **一次都没触发** = **未经检验** **检验动作**:报出每条修正的**触发次数**。触发次数为 0 的修正,不得计入「已修复」。 ## 六十二、⚠️「不可证伪」的替换物必须能拒绝点什么 原方案「写不出后果就作废」被证明恒真(OPPO物10/施华洛世奇物127/贝壳物96 上 **100% 通过率**)——因为「不照做就没有依据」对每一条兜底条款都成立。 替换物:**「失败条件必须与条款同页可读,读不到就作废」**。 > **它在贝壳物96 上当场判死了一条旧门槛会放行的条款。** > > **判据有效性的实际含义不是「能分类」,是「能拒绝」。** 一条从不拒绝任何东西的判据,就是恒真的装饰。 **但要明说代价**:它检验的是**条款**,不是**类别**,**救不了分辨力**。不要用一个诚实的局限去掩盖另一个没解决的问题。 ## 六十三、⚠️ 文本层可以是纯符号密文,连「密度」这个指标本身都是假的 **百度VI** 的文本层是 `\\x01\\x02○` 这样的符号密文(子集字体替换密码的极端形态)。 后果比「零命中」更严重:**连「374 字/页」这个密度指标本身也是假的**——你报告的分母建立在垃圾字符上。 > **固定动作**:任何文本层统计,先**打印前 200 个字符看一眼**。 > 只看长度不看内容,会把密文当成「低密度但有效」。 ## 六十四、⚠️⚠️⚠️ 网络中断已四次吞掉已完成的工作——收尾必须与取证交替 本项目已有**四次** agent 在完成(大部分)取证后因 `net::ERR_CONNECTION_CLOSED` 中断: | # | 任务 | 损失 | |---|---|---| | 1 | 非商业主体 VI | 报告完全丢失,父会话自建 | | 2 | 非商业主体补写 | 再次失败 | | 3 | 工艺名承载语义 | 报告在中断前一刻落盘,**仅缺最后一节** | | 4 | 字体规定穷举 | **只落盘招行一个样本**,其余十份样本的取证全部白做 | **已落盘的纪律**: 1. **取证主轮结束后先写含全部关键引文的骨架**,再补分析 2. **每完成一个样本就落一次盘**,不要攒到最后 3. 脚本从 stdin 读会触发 macOS spawn 递归崩溃,**多进程脚本必须写成文件并加 `__main__` 保护** **仍未解决的结构性问题**:长任务的收尾阶段天然脆弱。**正确做法是让「写」这个动作穿插在「做」里面,而不是放在末尾。** ## 六十五、⚠️ 已出版手册里会有低级复制粘贴残留 招行 1.0 **p42(1.9.2 英文字体)的正文段与 p41(1.9.1 中文字体)逐字相同**——英文字体页上仍然写着「本手册指定的**中文字体**为**方正兰亭黑**」。 > **这份手册在 p41 认真写了「鉴于美观和**版权**的考虑」,却在相邻两页之间犯了一个复制粘贴错误,并且出版了。** > > **推论:「某一章写得很规范」不能推出「这一章被读过」。** 规范性和校对是两件事,而**跨页的一致性恰恰是错误最容易藏的地方**——因为没有人会去比对相邻两页。 --- ## 第 66–70 条(本轮新增,2026-10-14) ### 66 · `net::ERR_CONNECTION_CLOSED` 第 5 次吞档 —— 骨架必须先行 「11 条答案写成方法手册草稿」任务读完全部 6 份必读文件(含 1027 行 PITFALLS), 在准备写正文时连接中断,**磁盘零产出**,全部作废。 **新规:读完 PITFALLS 后、读任何其他文件之前,先把章节标题和占位行写进目标文件。** 之后每写完一节立刻 `cat >> ` 追加,并 `wc -l` 确认行数在涨。 **禁止**用 `write` 或 `>` 写正文(会覆盖),只用 `>>`。 凡是「读完很多文件再一次性输出」的任务书,都是高危任务书,要拆成「边读边写」。 ### 67 · 200dpi 读对了,读法仍然不合规 —— 「读对」不能追认「读法」 方太841 的页码对 `31|32`,agent 在 **200dpi** 下读出并据此**升级为高置信**; 父会话按项目规则在 **600dpi** 复核,确实是 `31|32`——**读对了**。 但项目规则是「排版元素一律 400–600dpi」,**读法违规**。 **新规:凡 200dpi 读出的排版元素,即使读对,也不得单独支撑「高置信」标签。** 命中时只能标 `低置信(读法不合规)`,并留待600dpi 复核。 **这次是运气好;读法不合规的读对一次,不构成读法合规的证据。** ### 68 · 「有几个字重」有两个答案 —— 正文计数 ≠ 版面计数 OPPO p40 正文写「六种重要的字重,**包含**正体和斜体」, 版面实给 **6 组 × 2 = 12 个字面**(特浓/特粗/粗体/适中/标准/细体,每组配 Italic)。 上游引文把这页读成「3 个 Italic」——**同一页三个数,没一个对得上**。 **新规:「本字体家族提供 N 种字重」里的 N 一律不引用。** 要引用就写「版面实给 N 个字面,逐个标注为『xxx/xxx Italic』」。 **正文对齐只证明作者写过一句话,不证明版面执行了它**——与「页码对齐只证明位置」同源。 ### 69 · 手册的字面会拼错,而且错得与对处无法区分 中粮 `【手册VI 808】` p42,英文字重标签逐字为 `Regular`|**`Blod`**|`Black`—— **`Bold` 缺字母 o**,父验 600dpi 目视确认。同一页「该缺失的字形 o」在字母表里完整出现。 **新规:转录时保留原样,不要顺手改对。** 改对了就丢掉了「这份手册有错」这个事实, 而这个事实比字重名本身重要。修订只在订正清单里做,并注明原字形。 **推翻了默认前提「手册是权威来源」**——此前 203 张卡片都默认「手册写了什么就是什么」。 ### 70 · 分母不可比:`-layout` 的字节数 ≠ 字符数 字体研究补完发现分母 915 **无法复现**,唯一能复现的是 **1,159** (plain `pdftotext` + 每页 ≥50 字符)。 原因:`-layout` 模式使字节数膨胀 **2.6×**,且**中文 3 字节/字**。 **新规:跨轮比较分母前,必须先对齐三件事——①抽取模式(plain / -layout) ②计量单位(字符 / 字节 / 页)③每页阈值。四项口径只要有一项不同,两个数就不可比。** `wc -c` 与 `wc -m` 在中文语料上能差 3 倍——**统计脚本里必须显式写出用的是哪一个。** ### 71 · 「跨页换算式」不能是全局式 —— 常数是每份文件各自的前置页数 `DRAFT-VI-METHOD.md` §1 把 `印刷页 = 2 × 物理页 − 2` 列进「已定案的数字」, 证据是广发物4=印 6/7、沙特阿美物77=印152、物165=印328(三处都成立)。 **父会话实测反例**: - `【手册VI 781】广发银行 61p MD5 6e733e3977ef` p4,600dpi 目视:**左下 6、右下 7**。`2×4−2=6`=**左**页,成立。 - `【手册VI 841】方太 35p MD5 0ac3f653e376` p17,600dpi 目视:**31|32**。`2×17−2=32`=**右**页,左页是 `2×17−3=31`。 **正确写法**:`印刷页左页 = 2 × (物理页 − 前置物理页数)`,**前置页数逐份实测**。 方太比广发多 1 张前置物理页,落点就差 1、且左右互换。 **新规:凡「已定案的数字」里出现带常数的线性算式,必须列出至少 2 份不同文件的实测常数; 只有一个常数就是假设,不是定案。** 三份文件同余只说明这三份同余。 ### 72 · 订正链会自我继承 —— 第二轮订正仍然错在同一个字上 星巴克最小尺寸被订正了**两轮**,第二轮仍然错: - 第 1 轮:「375″」→ `.375″(9.5mm)/ Web 50 pixels` ——数值对了 - 第 2 轮(600dpi):`.375"`(**直双引号**)+ `9.5mm`(**一位小数,不是 9.525mm**)+ **归属是 Siren 不是星巴克** **第 1 轮已经看了同一页,却仍写成 `.375″`。** 说明**「订正」这个动作本身会继承上一轮的抄写习惯**。 **新规:同一句被订正第二次及以上时,必须重新渲染、重新逐字转写,不得在旧记录上做局部修补。** 订正清单里的每一条都要写「本轮重读了哪一页、用的什么 dpi」,而不是「修正为……」。 ### 73 · 同一页上并存两个同类值时,**小的那个会被当成全品类值** 星巴克 p6 一页之内有两个 `MINIMUM SIZE` 块: - `Siren minimum widths:` → `Print .375" (9.5mm)` / `Web 50 pixels` - `Wordmark minimum widths:` → `Print .5" (12.7mm)` / `Web 200 pixels` **我们连续三轮把 `.375"` 当成「星巴克的最小尺寸」。** 它只是美人鱼标志的。 **危险形态**:抄错的那一个**并排印在正确的那一个旁边**,位置对称、格式一致、字号相同, **它不会因为不合理而显眼**——这是「合理的数字会填掉难辨的数字」的版面版。 **新规:凡「某物的最小/最大 X」,先数清这一页(或这一节)里有几个同类块,确认主语是谁。** 主语写在冒号后面,很容易被整块略过。 ### 74 · 同名不同物:`.375"`(Siren)与 `50×50px`(Wordmark 件)**不是同一条规定** `Web size: 50 pixels` 在【手册VI 520】p6(Siren);`50×50px` 在【必看152】p12。 **合并它们会造成一个自洽度更高的假结论**(看起来「px 与 mm 绑定」得到了两次印证)。 **新规:两个值长得像,不等于同一条规定。** 必须核对:同一份文件?同一页?同一个主语? ### 75 · ⚠️ 一个**不存在**的错误,经过两轮审计被放大成需要「订正」的事实 **本条推翻本项目自己上一条(第 75 条的前身)的结论。** 蔚来 p65 争议句,父会话 600dpi 逐字裁切确认原文为: > `完整规范请·阅·参品牌资产管理中相关的` > `具体文件。更多详情请·阅·参上述文件。` **「参阅」=「阅」+「参」,所以「请参阅」和「请阅参」是同一串三个字(请-阅-参)。** **根本不存在「请阅参」这个错误。** 而本项目围绕这个不存在的错误,发生了: 1. 草稿写「请阅参」——**其实是对的**,只是被当成了错字 2. 第一轮审计员说「600dpi 实为『请参阅』,**其后无参**」——**错**,他���「请参阅」当成了两字 3. 父会话据第 2 条把方法文档订正成「请/阅/参(3字)」——**结论对,理由错**,且差点沿用「请阅参是错的」这个前提 4. 复活普查员说「应改成 请/阅,**其后无参**」——**错**,它沿用了第 2 条那个错误来源 > **两轮审计各错一次,方向还相反,而错误源头只有一个:没人先确认「参阅」是两个字还是三个字。** **新规(本项目最重要的一条转写纪律)**: - 凡两个字组成的高频词,**先确认它是两个字还是三个字**,再谈它有没有被读错。 - 判定动作:**把词拆成单字,逐字与渲染图对齐**。`pdftotext -bbox` 会输出逐字坐标,**词边界不可信、单字边界可信**——用它来数。 - **审计不是免检层。** 审计员引用的结论要回到原始像素;本项目已出现「两轮审计一致通过、两边都错」。 ### 76 · 有些「错误形态」和「正确形态」是**同一个字符串** —— 检索无法区分,这类订正从一开始就不可自动化核验 用复活扫描器自查时发现:`D-06 请阅参` 这条死亡断言的**检索式本身是废的**。 **因为「请阅参」与「请参阅」是同一串三个字(请-阅-参)。** 实测:两个模式在 `brand-vi-appreciating-method.md` 里**命中的行数完全相同(各 2 处)**。 > 复活普查员报告的 A2「method:642 应改成 `请/阅`,其后无『参』」——**这是一条由废检索式制造的假阳性**, > 而它引用的来源(DRAFTAUDIT 的「其后无参」)本身也是错的。**一个假阳性引发了第二个假阳性。** **新规**: - 凡要给一条死亡断言配检索式,**先验一遍「正确形态」不会被它命中**。命中的就说明这个形态不可用。 - **不可用的订正必须改判为「人工核验项」并显式标注**,不许留在自动化台账里充数。 `D-06` 现在就是这个状态:**它从「60 条死亡断言」的有效分母里划掉**。 - 更一般地:**有些错误根本不存在**。本项目为一个不存在的错误跑了四轮订正、两轮审计、两次复活检测。 **自动化流程会忠实地放大一个假前提——它不会因为前提是假的就停下来。** ### 77 · ⚠️ **本条已被推翻。原文描述的那个案例是伪造的。保留原文供追溯。** **原标题声称**:文本层会跨栏拼接出一句手册上不存在的话,并举【雅迪 p22「错误使用中文斜体」】为例,说它是左栏 `错误使用中文字体` + 右栏 `错误使用斜体` 拼出来的。 **父会话 600dpi 逐字复验结论:该标签真实存在,原判为假。** 三条独立证据: 1. **渲染图**:橙色标签 **`错误使用中文斜体`** 印在**左栏**,位于 `错误使用中文字体` 与 `横向拉伸中文字体` 之间;其右侧样张是**明显倾斜的「雅迪科技集团有限公司」**——即「汉字伪斜体」被列为**禁例** 2. **原始文本层**:`pdftotext` raw=1,**连续字符串,非拼接** 3. **`-bbox` 逐字坐标**:`x=117.6, y=518.7`,**独立 word token**,落在左半页; 另一条 `错误使用斜体` 在 **`x=826.3, y=616.7`**(右栏)。 **两者 x 相差 708、y 相差 98 —— 物理上不可能由抽取顺序拼成。** **原判是怎么错的**:上一轮 agent 把「标签按栏序分块」当成了「标签与标签之间无分隔」,据此断定是拼接。 **它其实没有做 `-bbox` 坐标核对**——而坐标是唯一能一锤定音的证据。 **凡断言「这是拼接/这是伪造的」,必须给出坐标或渲染图,且该证据必须能区分两种解释。** > **代价已经付出**:基于这条假前提,我们把「汉字无斜体是全库空白」写进了方法文档第七条, >并准备把「汉字不设伪斜体」当作**本项目的原创补白**写进 VI 方法。 > **而雅迪早在 44 页的 VIS 手册里就把它列成了禁例。** **新规(替换原第 77 条)——其中第 2 条已提升为独立条目 103,不要只读这一段**: 1. **「全库 0 份写出 X」这个结论,必须至少有一个候选反例经过 `-bbox` 坐标核对或 600dpi 目视**才成立。 没有反例可核 ≠ 没有反例,只等于没去找。 2. **宣布一个空白之前,先跑一次反向检索** → **已提升为独立条目 `103`,见下文**。 3. **审计不是免检层**:本项目已发生「审计员为不存在的事实造证据」「审计员把真实存在的证据判为伪造」**两个方向的错误**。 **审计结论与被审计结论冲突时,回到原始像素。** > 🔴 **2025-??-?? 修正**:第 2 条原本**只以正文形式埋在本条目里,没有独立编号**。 > 后果实测到了:自动生成的 `PITFALLS-INDEX.md` 按标题索引,**把「三十二」指向了第 525 行 > 「找到文件 ≠ 找到正本」这条完全无关的条目**——执行者靠 `grep` 才找到真正的规则。 > **一条活着的规则不能住在一条已被推翻的条目里**:索引按标题建,条目被推翻后, > 住在里面的一切都会被当成已失效。**已提升为独立条目 103。** ### 78 · ⚠️ 渲染机缺字体 → 我们自己的目视验证会看到豆腐块,而我们会把它当成「这份件坏了」 损坏普查查到形态 3(文本层完整、版面不可读)的**机制**: `pdffonts` 实测该件 `MicrosoftYaHei` **emb=no**(字体外链),本机无此字体 → **整栏正文渲染成 `□□□□`**。 **全库有 20 件外链了 Windows 专有中文字体。** > **这是本项目验证方法自身的盲点,比样本损坏严重得多。** > 我们一直用 `pdftoppm` 渲染 + 目视作为**最高等级的证据**。但**渲染结果取决于渲染机装了什么字体**—— > **一本完好的手册,在缺字体的机器上会渲染成一页豆腐块,而我们会把它记成「这份件损坏」。** **新规(三条)**: 1. **凡渲染结果大面积豆腐块/方框,先跑 `pdffonts`,不要先下「损坏」的结论。** 顺序反了就会把「本机缺字体」写成「这份件坏了」,且这条错误会跟着进台账。 2. **`emb=no` 是风险标记,不是判决。** 实测 20 件里抽验 3 件,2 件字体会正常替换(SimSun 等有替代)→ **无 tofu 判定前不得计入损坏数**。 3. **脚本报出异常大的比例时必须先验证脚本**:本次字体筛查先报出「705 件 / 55.5%」,**解析列取错**(读成 `uni`/`objID` 而非 `emb`),修正后是 **142 件 / 11.2%**。**未抽查就会把一个错一个数量级的数写进报告。** **顺带把形态 3 的危害钉死**:它让**「文本层交叉核验」这个手段整体失效**——文本层说「有」,版面上是豆腐块。 ### 79 · 🔴 「X 份里 Y 份」的分母,是**当初被送进裁决集的那批**,不是全库 —— 而且那批本身就漏了 交付页数清单时才发现:`真跨页 39 份 / 12.1%` 的分母是 **321**,不是 **1,561**。 **全库 1,238 份横版里,只有 321 份进过裁决集;917 份从未裁决。** 更糟:**39 份本身是漏计的**——`PITFALLS 十二` 自己记录为真跨页的 **振华重工 86p/广汽丰田 211p/优酷 42p,都不在那 321 行里**。 父会话 500dpi 独立复核振华重工:**物8 = `09|10`、物9 = `11|12`,步长 2,是确凿的真跨页。** **同一个项目自己记过的「确证样本」,在自己的裁决集里消失了。** **新规**: 1. **凡写「X 份里 Y 份」,必须同句写出 X 是怎么选出来的**——是全库?还是某个子集?子集按什么选的? 2. **裁决集必须和「已确证清单」对表**。`PITFALLS` 里标为确证/已定案的条目,**必须出现在裁决集里**;对不上就是裁决集漏了。 3. **一���「全库 N 份」型结论,先检查它的分母是不是一个子集。** 这次的 12.1% 看起来像全库比例,实际是 321 份里的比例。 **顺带**:全库物理页实测 **90,098**,而本项目他处记 **71,510 / 72,672**——**文件自身不自洽**。 按 PITFALLS 70,**不合并、不选边**,三个数并列。 ### 80 · 「可打印率」这个指标**测不出它被设计来测的东西** 可打印率 = 可打印字符 / 总字符。**但替换密码的字符在 Unicode 里仍然是字母**——**可打印率恒为 1.000**。 - 按 `<0.60` 筛,全库只中 **2 份** - 按信号字符筛,中 **69 份** - **SONY 可打印率 1.000(最高档)却是信号字符 0.450(最该怀疑的那一档)** > **指标与真实风险方向相反。** 一个「健康度 1.000」会让人放心,而它恰好是最该不放心的情况。 **新规**:**任何评分式徽章都必须拿已知件反向验证过**——至少要能在一份已知替换密码的文件上报警。 **推荐换成陈述事实、不评分**:`文本层可用于定位吗?= 可用 / 稀疏(伪影层) / 低密度 / 替换密码嫌疑 / 工具故障 / 未测`。 本项目已实测:**贴「已核」标签只提高它「看起来已核」的概率**(A 类仍 14%/7.7% 错误率)。 ### 78 · ⚠️ 修正:判据不是 `emb=no`,是**字体形态** **父验 600dpi 复核后的更正(视觉审计报告)**:把 21 件 A 类外链字体的 `type+encoding` 逐条打出后发现—— **只有 `CID` + `Identity-H`(CMap 存在字体内部、无可回退 → 必出豆腐块)才真失败。** | 形态 | 行为 | |---|---| | `CID` + **`Identity-H`** | **真豆腐块**(易至 266:131 页中 33 页用它,29 页 >50% 字符来自它) | | `GBK-EUC-H` / `UniGB-UTF16-H`(预定义标准 CMap) | **本机正常替换** | | `WinAnsi`(简单字体) | **正常替换** | > **名义高危 21 件 → 真风险 1 件。** > **而豆腐块是逐页的,不是逐文件的**:易至 p7 完全正常(该页没用到外链字体),p30/p45 才是豆腐块, > **且 p30 上照片里的标志依然清晰——一整页「看起来没事」,正文却是方块。** **新规**:跑 `pdffonts` 时**必须同时解析 `type` 与 `encoding` 两列**,只看 `emb` 会把 24 件里的 20 件误判为高危。 **已交付可跑脚本 `/tmp/vi-agents/fontcheck.sh`**(退出码 `0 可用 / 2 豆腐块风险 / 3 无字体信息 / 4 用法错`)。 **本轮的实测结论**:**豆腐块没有污染任何一条既有结论**——42 份交集逐张实看,**0 降级 0 作废**, 全季 959 首页 CAD 标题栏 `茶几/Q4.0-KF-CJ580 竹木色,圓形` 逐字对上,麦当劳 428 p3 `Gloria Yasein / N0753203` 600dpi 清晰。 > **但这个结论来自运气,不是方法。** 并且**全部结论只对这台机器成立,换机即失效。** ### 81 · `find -name "*.pdf"` 会静默漏掉大写扩展名 全库计数出现 1,560 vs 1,561 的差 1。定位到 **`【手册VI 239】Santander_桑坦德风格指南**.PDF**(大写 `.PDF`)被 `find -name "*.pdf"` 直接丢掉。** **新规**:**凡用 `find` 统计语料份数,必须用 `-iname`(大小写不敏感),并与另一条独立路径(Python `os.walk` / `rglob`)对数。** **差 1 份永远是工具问题,不是语料问题**——差 1 时先查工具,再查内容。 ### 82 · 一个判据「稳定」的真正原因,可能是**它几乎不触发** 五级兜底判定顺序换一下会不会变结论:原测 **6/559(1.1%)** 顺序敏感。 **但剔掉 Q4 的过度捕获(376 次命中里 265 次=70% 只匹配到裸 URL)后,顺序敏感降到 0/559 = 0.0%。** **真正的结论不是「稳」,是「**没什么可区分的**」**: **Q0/Q2/Q5 合计只占 1.4%(8/559)。** > **「第一个是就定类」这条规则已被撤回**——它在一个几乎没有内容的表上当然稳定。 **同一个 agent 在同一项里废掉了两个版本的脚本**: - **v1 报「100% 顺序不变」,那是假象**——句子切分把条款截断,各判据根本不会同时命中 - **v2 报 1.1%**,那是 Q4 太宽造成的 > **顺序稳定性测试最容易产出的是「100%」这种好看的数字,而它通常意味着测试没有真的在做事。** > **必查:判据的覆盖率。覆盖率近零的「稳定」,等于没测。** ### 83 · 「空着的审批栏」会稳定命中**设计为留空的模板** 第 10 条「找『不可能存在』的东西」**首次实测:14 个视觉裁决的命中里,0 个真阳性。** - **ESA p125 @400dpi** 是 `7.3.1 FAX GRID` 模板(`Date 00-00-2010 / Ref ESA XYZ 567`) - **SoM p19 @400dpi** 是信笺规格(`Date 00/00/00`) > **空白是设计,不是疏漏。** 这一类信号**无法靠「空着」识别**,必须先问「**这个位置本来该不该有东西**」。 **为什么这条特别危险**:它**看起来**是最客观的信号(一个空栏是事实,不需要解释), **而它恰恰是最容易被模板触发的**。 **新规:凡以「某处是空的」为信号的判据,必须先在模板类样本上验证——信笺规格、传真表格、台账、合同模板全是天然的假阳性源。** ### 84 · 有一层规定**不以陈述句形式出现**——漏扫时不会留下任何「我查过了」的痕迹 **禁例栏**:一组「标签 + 一个反例样张」。**全件 `Do not` 命中 0**(雅迪实测)—— **禁止力 100% 由反例承担,不靠任何关键词。** **因此纯关键词检索对这一层必然零命中,而零命中无法与「没扫」区分。** **实测三条规定落在三个不同的非条款层**(硬未读 109 份,确证下限 ≥4 条): 应用稿件层(韩束 p27 脚注)/版式标注层(OPPO p22 数值全印在色条上)/禁例栏(雅迪 p22)。 **只扫条款层会全部漏掉。** → **自检从三层升为四层,禁例栏优先。** **与「应用稿件层」的界线(按载体,不按位置)**: **看这一页的反例样张是「手册自己印的」还是「要交付的那件东西」。** **而且禁例是被编号、进目录的章节**(雅迪 `A3.3`、OPPO `13 标志错误示例`)——**进目录的东西按定义不是标注层。** ### 85 · 🔴 「穷尽性」必须显式标记,因为它改变禁止力,而版面没有提示 同一排「禁例栏」里可以同时存在: - **雅迪**:纯标签,**全件 `Do not` 命中 0**——只能当**禁止** - **Honda**:**明写 `These do not necessarily represent all cases or errors`**——🔴 ~~**全库唯一自认非穷尽的一件**~~ **已被推翻,见 PITFALLS 94** > **两者放在同一排执行者手里,会得出相反的强度预期,而版面没有任何提示。** **新规**:每个禁例栏必须标一个**穷尽性**:`穷尽(全库仅此)` / `示例(不代表全部)` / `未声明`。 **这是 PITFALLS 31 的第七次重犯**——上次是把字段升成类别,这次是把「一栏」当成同一种东西。 > 🔴 **订正(2025-??-??,`REPORT-SELFCONTRADICT.md`)**: > **「Honda 是全库唯一自认非穷尽的一件」是错的。** > 实测**全库自认非穷尽的件 ≥10 份不同内容 / 32 页**(1,132 份的 0.9%), > **硬未读 109 份内就有 4 份**(Broward、Tripadvisor、VCC、Tesla)。 > **Honda 只是印这句话最多的一件(7 页)**——见 PITFALLS 94。 > > **但订正不改变本条的结论,反而让它更强**:穷尽性**不是二元事实,至少三档** > (穷尽 / 明说不穷尽 / 未声明),而**明说不穷尽的只占 0.9%,未声明的是压倒性多数**。 > **「未声明」这一档没有依据可查——所以它才是最需要被标出来的那一档。** ### 86 · 🔴 找到**两处**条款层与禁例层的真冲突——手册与自己冲突 - **Honda**:条款层 p44 授权 `Use white model badge art when readability becomes an issue`; 禁例层 p45 **`Do not change colors.`** ——**换白色就是换颜色。** ✅ **p45 显式回指条款页** `shown on pages 38 and 44` - **EveryMatrix** 43p MD5 `33c119adb2fa`:p27 `a white/black logo can be used instead`; p28 `Do not alter the colours… Only use the specific color code` —— ❌ **无回指、无例外** > 🔴 **OPPO 那一处已从「真冲突」降级为「跨层误读」,原文保留**: > p22 给浅绿 10%、p25 写 `禁止使用浅绿色标志`,**但 p22 从没说过「比例不指标志」**—— > **这不是两个规定打架,是规定没写而读者替它写了。** > **⇒ 全库真冲突的已知条数是 2,不是 3。** > **反向对照极重要,而且保护机制有两种、不等价**: > **Honda 靠互指、拜耳靠「就地例外条款」**,两件都没出事; > **两样都没有的 OPPO 与 EveryMatrix 都出事。2:2,n=4——这属「一次都没被证伪」,不属「有效」。** > **互指的普遍度比预想低得多**:硬未读 109 份只有 20 份(18.3%)有正文级互指; > 全库 111/1,132(**9.8%**);**Honda 式回指 = 0/109,全库无第二例。** **新规(两条,不是���条)**:**凡禁例栏否定一条授权,必须在同一屏内给出:①回指授权页码,或 ②就地写明例外条件。** > **写成两条是因为互指要维护页码(改版就指错),例外条款成本更低。** > ⚠️ **证据 n=4,状态「可执行、待检验」,未做留出检验。** **补一条本轮实测出来的、更危险的形态**(原文没有,是新发现): > **最危险的不是「颜色值写错」,是「讲同一件事的两页互相打架且无外部物证可裁决」。** > 颜色值写错反而不可怕——**色卡能核**。 > 而「授权页说可以 A、禁例页说禁止 A」**没有任何外部物证能裁决谁对**, > 且只要禁例页本身是**目录一级条目**,执行者**不需要跨页比对就会中招**。实测三例(Tesla p12、EveryMatrix p28、OPPO p25)。 > **附带一条:同页正文与同页图版给出不同值,危害更高但引用次数最低**(Tesla p9/p10 写 `the 4 shown here` 只列 3 个名字,图版实为 4 个底色)—— > **因为人默认把色板图当示例、把正文当规定,恰好反了。** ### 87 · 同一条规定被写两遍且**详略不同**——韩束的字号 **条款层 `字号88`(无单位)/稿件层 `88pt`(有单位)。** **新规:凡读到一条规定,务必看一眼它有没有在另一层被重写一遍——两遍不一致时,差异本身就是信息** (此处差异是「有没有单位」,而**没单位的那个在条款层**,也就是最容易被引用错的那个)。 ### 88 · 🔴 200dpi 不只**漏字**,还会**补出限定语**——风险是污染不是丢失 广发每页页脚,600dpi 实读 vs 200dpi 记录: | | 内容 | |---|---| | **原件(600dpi)** | 「…仅作手册说明用途**必须获得正式的版权后方可使用**」 | | **记录(200dpi)** | 「…仅作手册说明用途**,在使用之前须获得正式版权后方可使用**」 | | **差** | 多出「,在使用之前须」七个字;少一个「的」 | **这不是 PITFALLS 34(漏字)的复发,是它的反向。** > **漏字会被发现,补字不会——因为补出来的东西读起来是对的。** > 更糟的是**补出的限定语天然更像法律条款**(「在使用之前须」正是法务文书的口吻), > 所以它在人工复读时**比真句子更不像错**。 **它推翻了一条项目的基础假设**:此前默认「低 dpi 只会少信息」,于是风险=**丢失**。 实际上风险=**污染**。两者对策不同——**丢失可以重采,污染必须逐字重核**, 而且污染会一路抄进下游(本次同一串错引文在仓库里有**两处**)。 > ⚠️ **当前 n=1,不得当通则引用。** 正在跑基线测量:文本层对 7 类排版元素的零差异率。 > **在那之前,任何「200dpi 读排版元素」的结论一律不得追认**(这条与 67 不冲突,67 是禁令,88 是成因)。 ### 89 · 引文里的**转写约定**会被下游当成原文去检索 微软/港科大的页码,我们记作 `P.81`/`P.102`;**600dpi 实读四份印的都是裸数字 `81`/`102`**,`P.` 是我们加的转写约定。 > **约定混进引文栏,下游就拿它去检索原文,然后查无此项——而我们会把「查无此项」读成「原件没有」。** > 本次连带查出第二个后果:全季封面 `V 4.0` 的 `V` 与 `4.0` 之间**有一个空格**,原记录漏了, > **所以这条结论一直「查无此项」**。逐字差一个空格,检索就命中不了(PITFALLS 75 的同源坑)。 **新规**:引文栏只放**原件上确实印着的字符**。凡我们补的标点、缩写、空白,一律写进括注,不进引号内。 ### 90 · 🔴 排版元素的位置**必须先用 `-bbox` 定**——猜位置比读错字更危险 微软/港科大那四个页码,**没有一份在页脚,全在右上角**(微软 `x≈1174,y≈36`、港科大 `x≈770,y≈37`)。 当初能取到证,**是碰巧取样覆盖了版面全宽,不是方法规定的**。 > **危险不在于读错,在于「读不到」会被读成「不存在」。** > 页脚抽样抽不到右上角的页码 → 零命中 → 按旧口径宣布「该件无此规定」。 > **这是把「我找错地方」记成了「它没有」。** > **新规:裁切框由 `-bbox` 坐标算,不由版面印象猜。** 印象只用来决定先查哪一类。 ### 91 · 落库脚本用 `index()` 取**第一个**匹配,落在同名骨架段上 `DRAFT-V3.md` 的 §0–§6 各出现两次(一次骨架占位、一次真身)。脚本 `list.index("## 0. 本稿的读法")` 取到**第一个**, 把 35 行占位段当正文落进了方法文档。 **退出码是 0,文件能打开,CI 通过。** 三个信号全部为绿。 > **唯一的检出手段是核对行数**:预期 +550,实得 +34。 > **新规两条**: > ① 目标文件里存在同名重复段时,一律取**最后一次**出现,并把「只有 N 次」写成 `assert`; > ② **任何落库脚本跑完都要报「预期行数 vs 实际行数」**,不报就算没跑完。 > 这与 PITFALLS 34 同源:**自动检查只检查了你想让它检查的那件事。** ### 92 · 🔴 反向检索只管「搜不到」,**管不了「搜到了却扔掉」** 第 32 条要求「宣布空白之前先跑反向检索」。但反向检索的前提是**你手上什么都没有**。 > **雅迪那次的失败发生在这个前提不成立的地方**:`错误使用中文斜体` 被搜到了, > 然后被判为「跨栏拼接产物」而丢弃。 > **任何形式的白板检索都不会报错的——因为要检的那一步根本不是检索。** `REPORT-META` **G-3** 的四步反例搜寻(换说法/换层/归一化断行/记分母), **四步全部是「把检索改宽改细」,没有一步覆盖丢弃动作**。 原验收第 2 条写「雅迪 1/1 通过才算数」,**实测 0/1**。 **新规(父会话补,作为前置条件)**: > **如果检索返回了东西而你正准备丢弃它,四步全部不适用。** > 此时先问两件事:①`-bbox` 坐标能否区分两种解释 ②600dpi 目视能否看到它。 > **通过后才允许继续走四步。** **这条前置条件自己也有洞,必须一并说**:一个把真阳性全部拦下来的「丢弃检查」同样是错的。 所以验收要**测它的假阳性率,不是召回率**——取 10 组已知真阳性,看它会不会把它们也拦下来。 **该基准目前不存在,所以这道新防线同样标「可执行、待检验」。** **为什么这条比第 32 条更隐蔽**: 第 32 条的失败(该搜的没搜)会让你**怀疑自己的检索式**; 本条的失败(搜到了却没用)会让你**怀疑自己的判断**—— 而**判断失效时人往往更自信,因为它看起来经过了审查**。 (对应仓库 `situation-index.md` **E34** 与 `situation-entries.md` **模式六十二**。) ### 93 · 🔴 `difflib` 在**大段移动**上会给出与事实相反的结论——必须配第二个口径 落库审计实测:把 1,568 行的新文件与 952 行的旧快照做 `difflib.SequenceMatcher` 比对, **得到 1 个 `replace` 块,声称「16 行旧内容被 1 行 `---` 替换」**——即判定为**内容丢失**。 **实际:零丢失。** 那 16 行原封不动躺在 1250–1271 行,只是被移动了位置。 **为什么**:`SequenceMatcher` 把「移动」解释成「删除 + 新增」。段落整体前移时, 它找不到足够的公共行来锚定位置,于是把整块报成替换。**报出来的块大到无法人工判读时,人会倾向于相信工具。** **修法(本次靠它救回结论)**:加第二个**位置无关**的口径—— ```python from collections import Counter lost = Counter(x.strip() for x in old if x.strip()) - Counter(x.strip() for x in new if x.strip()) # 本次 lost 为空 ⇒ 零丢失 ``` **两个口径的盲区方向相反,必须交叉**: - `difflib`:对**移动**敏感(误报丢失),对**复制**不敏感(漏报重复) - 多重集差集:对**移动**免疫(正确),但对「A 行被复制成 10 份」不敏感(漏报重复) > **新规:报「内容丢失」或「内容零丢失」,两个口径都要跑,且结论要写明用的是哪个。** > **单口径的「零丢失」和单口径的「有丢失」同样不可信。** > 本次若只信 difflib,会得出完全相反的结论,并据此去"修复"一个没有坏的文件。 **附一条非空行口径的盲区**:全程用 `strip()` 后非空比对,**看不见空行与位置变化**—— 段落被并入另一段而文字未变的情形查不出来。审计里那个双 `---` 分隔符就是人工抽查才发现的,不是脚本查出的。 ### 94 · 🔴 被引用最多的样本,会在记忆里**冒充成唯一** 「Honda 是全库唯一自认非穷尽的一件」这句,被引用、复述、并写进了 `PITFALLS 85` 与 `situation-entries.md` 模式六十。 **实测推翻:全库 ≥10 份不同内容 / 32 页都写了非穷尽声明**,硬未读 109 份内就有 4 份。 **Honda 不是唯一,它只是印这句话最多的一件(7 页)。** > **它为什么会被记成「唯一」?因为它被反复打开。** > 每一次需要举一个「明说不穷尽」的例子,最省事的就是拿 Honda—— > 于是「我见过的唯一一个」被写成了「全库唯一一个」, > 而**没有任何一步去数过第二件**。 **新规(三条)**: 1. **凡写「唯一/只有/首个/全库仅此」,必须附一次穷举检索式和它的命中数。** **「我记得只有这一件」不是证据,是记忆。** 2. **凡某样本在本项目里被引用 ≥3 次,它的一切属性都要重新核**—— **引用频次会污染「唯一性」「罕见性」「代表性」这三类判断,而这三类都不影响结论是否正确,只影响它被引用成什么样。** 3. **被推翻时不要只改结论,要改动作**——本条推翻后新增的是「穷尽性至少三档」这个结构, 不是「Honda 不是唯一」这句事实。**事实订正会过期,结构订正会留下来。** > **同族已犯**:广发「真值」那句在同一条目上连踩两次(`situation-entries.md:2310` 与 `:3639`); > EDP「品牌字体」被写成 Noto Sans SC(实为 FT Base)。 > **共同形状:一个低置信样本被抄进多处之后,每一处都成了「已核」的证据。** ### 95 · 「CI 通过」是**有分母**的断言——本项目自己的检查器只覆盖 52.4% 本会话多次把「`npm run ci` 零死链」当作质量信号引用。**实测该信号的覆盖范围**: | 项 | 实测 | |---|---| | 全库 `.md` | **927** | | 检查器实际扫描 | **486**(`node scripts/check-deadlinks.mjs` 自报) | | **从未被扫** | **441(47.6%)**——`notes/` 291、`meta/source/` 90、`drafts/` 32、`.tmp/` 28 | | 排除是否合理 | **合理**(都不是 wiki 页面),**但排除之后没有人数过** | > **「零死链」的真实含义是「486 份里零死链」,不是「927 份里零死链」。** > 引用它而不带分母,等于把一个 52.4% 覆盖的检查说成全库检查。 **同一轮查出的第二件**:README 的项目结构树写着 `l1-modeling/` `l2-design/` 等 5 个目录,**全部不存在**(真实是 `modeling/` `design/` …), 另有 `book/` 目录同样不存在。**已修**(实测 170 篇 md,不是 README 写的 ~190)。 > **为什么死链检查器抓不到它**:那些是 **ASCII 树里的裸文字,不是 `[text](path)` 链接语法**。 > **检查器结构上就抓不到**——这不是它没跑,是它的正则覆盖不到这种形态。 > **「检查通过」与「它检查的东西存在」是两件事。** **新规**:凡引用自动检查的结果作质量证据,**必须同时报「检了多少 / 一共多少」**。 零死链、零告警、测试全过、构建成功——**全都是有分母的断言**, 而**分母天然小于直觉上的「全部」**(本项目一次就藏了 47.6%)。 **附带一条本轮自伤的记录**:为验证这件事我临时写了个死链扫描器, 它报出「其他目录 2440 条死链」,与检查器的零死链直接冲突。 **按项目自己的规矩(异常大比例先怀疑脚本),我判定是我的正则把代码块里的示例链接也吃了,放弃该数字。** > **这就是「脚本报出异常大比例时先在已知件上验证脚本」这条规程的一次现场应用——它拦住的是我自己。** ### 96 · 🔴 扫描器必须先在**已知阳性**上灌测,否则会以「零误报」的样子交差 正文/图版普查(`REPORT-PAGEVALUE.md`)第一版判据 A=「同页有 ≥2 个数字+单位串」。 把它灌进**已知阳性**(特斯拉物 p9/p10,`the 4 shown here` 只列 3 个名字)→ **返回 0**。 原因:**那一句里的「4」是裸计数,不带单位**;而色块探测又以 A 命中为前提, 于是这两页**连渲染都没跑过**。 > **若不做这次灌测,这一轮会以「17 页全过、零误报、零漏报」的样子交差——而它对真阳性完全失明。** > 「零误报」和「零漏报」在报告里长得一模一样。 **新规**:**任何以「找 X」为目标的扫描器,上线前必须做两件事,且顺序不可颠倒**: 1. **在 ≥1 个已知阳性上灌测**(召回检验)。**召回 0 ⇒ 扫描器作废,不管它的精确率多好。** 2. **在 ≥1 个已知阴性上灌测**(精确率检验)。 ⚠️ **这两件事必须分开报**:只报精确率会得到一个「零误报」的漂亮数字,而它可能什么都没找。 (与 PITFALLS 82「一个判据『稳定』的真正原因可能是它几乎不触发」同族: **那一条讲覆盖率,这一条讲召回。覆盖率与召回是两件事,都要报。**) ### 97 · 文本层对排版元素的零差异率是 **86.7%**——而差异**全部是空白类** 30 份 × 2 处 = **60 组**(`REPORT-TEXTFID.md` 434 行,70 次 600dpi 分段渲染,零字节产出 0)。 **零差异 52 组(86.7%);6 组差异全是「补字」,2 组是「断行归一化后可对齐」;漏字 0、换序 0。** | 元素类 | n | 零差异 | 率 | |---|---:|---:|---:| | 页脚 | 24 | 21 | 87.5% | | 色卡标注 | 19 | 17 | 89.5% | | 章节标题 | 9 | 8 | 88.9% | | 版权栏 | 7 | 6 | 85.7% | | 版本栏 | 1 | 0 | **n<5,不引用** | | **法务小字/页眉/稿件标注** | **0** | — | **未取到样本** | **那 6 条补字全是空白/控制类,无一为限定语**: `F O WRESTLING`(空格)、`28\t\x07SIGNATURE…`(控制符)、`Do not infringe copyright`(U+200B)、 `請使用真正的 PANTONE ® 色版`(空格)、`Pantone公司所有 。)`(空格)、`VE RS I O N`(空格×4)——**字词序列不变。** > 🔴 **但这不能用来给广发那次开脱。** 广发页脚 200dpi 补出的是**七个字的限定语** > 「,在使用之前须」,属**污染**而非空白噪声。 > **本轮限定语补字只能写「未发现」,不能写「零」——因为分母里根本没有限定语密集的样本。** > **「未发现」与「零」的差别在这里是实质性的,不是措辞问题。** **三条工程结论(可直接用于流水线)**: 1. **`y%≥90% → 页脚` 这个判据大面积误命中正文与图注**(实测至少 7/60 组)。 改成 **`y%≥88% + 同文本在 ≥4 个不同页复现** 后,24/30 份直接命中真页脚。 2. **`y%` 落在页脚带 ≠ 会被印出来**:ADBOE p56 的 bbox 在 `y%=97.2%` 给出 `simulations using Adobe Captivate® software.`,**600dpi 实拍该位置无任何字**(隐藏文本), 真页脚在 `y%=93.6%`。**跨页复现也拦不住隐藏文本——只有目视能拦。** 3. **`-bbox` 的词边界不可信、单字边界可信**:行归组吞掉一个汉字造出 `PantonePantone` 假象。 **那是工具产物,不是文本层缺陷——但两者都会出现在你的差异表里,必须能分开。** ### 98 · 「数目相等」太容易成立,因此**不能当判真依据** 正文/图版普查拿到 **6 个「正文数目=图版数目」的正对照,6/6 成立**。 > **一个在样本上 100% 成立的判据,分不清「真的对」和「本来就该对」。** > 反过来,「数目不等」的扫描器其假阳性会**整齐地落在五类可预先排除的形态上**: > **F1 目录页/F2 指引 vs 示例/F3 底色 vs 底图/F4 线 vs 填充/F5 可用 N 种 vs 层级表**。 > **这五类没有一类需要看像素就能排除**——所以假阳性那一栏比真阳性那一栏更值钱,它是扫描器能不能复用的判据。 ### 99 · 🔴 同一会话内两个 agent 以**完全相同的错误**死在同一步——那不是巧合,是操作模式 本会话出现两次 `invalid param: file not found (2013)`: - 留出检验续篇:在「Now actually looking at them」——**第一次打开渲染图**时中断 - 定向补读:在「Viewing the known-positive pages」——**同样是在开始看图**时中断 **两次的触发点完全一致:批量打开渲染图。** > **这不是偶发故障,是操作模式撞上了限制。** > 已完成的工作都没丢(落盘纪律救的),但**重跑的成本是整段重跑**。 **规避措施(已写进续跑任务书,直接可用)**: 1. **一次只开 1–2 张图**,读完立刻 `cat >>` 落盘,再开下一批。 2. **每 2–3 张图落一次盘**,不要攒到一整页看完再写。 3. **两段式取证**:整页用**低 dpi 定位**(实测 122dpi 的整页仍可读), 裁切条再用 **600dpi** 取证。**这不是妥协,是正确做法**—— 全页 600dpi 只会烧上下文,不增加任何证据。 4. 某张图连续读不出来就**记下来跳过**,最后单独说明哪几张没读成、是否影响结论。 **为什么这条值得单独记**:它和 PITFALLS 66(骨架先行)是同一类防护的延伸—— **落盘纪律保证「已做的不会丢」,但不能保证「正在做的能做完」**。 后者要靠**把不可逆的大步骤切成小步**。 ### 100 · 🔴 「把护栏提到前面」解决不了「读到但不评估」 我提过一个方案:**13 条处境的「不适用的情况」是第五格,读者只在决定要用之后才读到, 护栏是事后闸门不是事前筛子——建议把它提到每条开头。** 独立检查(`REPORT-COST.md`)在**第 0 步就推翻了它**: 1. 全库检索 59 份报告,**已知误用实例只有 1 例**; 2. 那一例里,**护栏与被引用文本相隔 3 行、在同一张 7 行表内**——他逐字引用了触发条件与动作并给出**行号**; 3. **他从头到尾没引用过第 5 格**——他最终抓错时用的理由是「按它自己的**触发条件**它根本不触发」, **也就是靠第 1 格纠正的,不是靠第 5 格**; 4. **而且前置化已经成功实现过一次**:留出检验续篇的封存对象写的是 「动作栏原文照抄 +「不适用的情况」栏」,**9 条一次不漏**——**它不是靠改布局实现的**。 > **⇒ 真正的失效在「取用动作与护栏评估之间没有强制连接」。** > **前置化只提高「读到」的概率,而这里失效在「读到但不评估」。** > 那一例是先用了(`:124`),**290 行后**(`:414`)自己开一节才抓到。 **而移动护栏有一个反向副作用**(同一份报告指出): **前置化会拆散五格表,可能降低护栏被整体抄走的概率。** 本项目的护栏一直是**随整张表一起被复制**的——拆开反而可能丢。 **新规**:**在提议「调整信息位置」之前,先证明失效发生在「没读到」而不是「读到但没评估」。** **这两个的修法完全相反**:前者调布局,后者加强制连接点(例如要求取用时同时复述护栏)。 ⚠️ **本条按 `未经检验` 记**:n=1,且那一次**无法证明他读到了第 7 行**——若是「没往下读」,前置化可能有效。 **但「先证明失效在哪一步」这个要求本身不依赖 n=1,它依赖的是逻辑,不是样本。** ### 101 · 「代价」「警告」「免责声明」是三样东西,混在一栏里会让验收去找不存在的东西 13 条处境的代价栏实测:**可观测 6 · 部分 5 · 不可观测 2**。那两条不是代价—— **B-5 是警告**(无人能指认自己有没有这种倾向),**C-1 是免责声明**(且与它的「不适用③」逐字重复)。 **混写的后果不是「写得不够好」,是「验收会去找一个不存在的观测,找不到就以为规则没生效」。** **判据(可复用)**:**执行者能否在不依赖规则作者解读的情况下,独立说出「代价出现了」?** **更要紧的结构发现**:同一个军火库里有**两套代价语法**—— 括号式 `代价〔…〕` 全文件 **11 处,11/11 写成「多 N 次可数动作」**,且**全部落在模式四十七~六十**。 **13 条处境是散文式的,继承了前半程的失败率。** > **所以这不是「两种写法并存」,是「修了一半」——后半程改好了,前半程没改。** > **凡发现一处修好了,就该问同一份文件里还有多少处没修;它们往往是同一个成因。** ### 102 · 🔴 「订正栏」可以订正一个**不存在的原值**——而整行读起来仍然自洽 Tesla p19,A1-2 那一行原文写成: | 正文(目视) | 原记录 | 判定 | |---|---|---| | `10.5pt. Arial Bold, 185R, 18G, 49B (Red)` | `.95pt.` → 实为 `10.5pt.`,一致 | **通过** | **父会话实测**:`pdftotext -f 19 -l 19` 的文本层原文**就是** `10.5pt. Arial Bold, …`。 **`.95pt.` 这个「原值」在原件里不存在**——是书写时凭空造出来的,然后再「订正」它。 **为什么整行读起来没问题**:左栏是**现在看到的**,中栏是**声称曾经记错的**, 而右栏的判定「一致」同时对两者成立。**没有任何一处自相矛盾。** > **这是本项目第二次为不存在的事实造证据**(第一次是蔚来「请阅」,PITFALLS 75)。 > **两次的失败位置不同,但形状一样:都是「订正」这个动作本身没有被核对。** **新规(两条)**: 1. **凡写「X → 实为 Y」的订正,必须能指出 X 出自哪一行。** 指不出来 ⇒ **不是订正,是新写**,按新写处理(要取证、要跑门禁)。 2. **订正栏与证据栏的字符必须逐字对得上。** 最省事的自查: **把 X 拿去 `pdftotext` 或回原文件搜一次,搜得到才算订正。** **同轮的第二个实例,形状略不同但同源**: 另一个 agent 把「600dpi 比 200dpi 多一个数量级」判为夸大并订正了—— **它量的是压缩后的字节,而代价栏写的是「裁切 vs 整页」**。 按像素重算:**600dpi 裁切 vs 200dpi 整页 = 1.34× 像素 / 0.91× 字节**, **「一个数量级」只在「整页 vs 整页」上成立**。 > **订正的人换了比较对象却没有说明,于是把一个正确的数字改成了错的。** > **推论:订正必须连同「原来比的是什么」一起记录,否则订正不可追溯、也不可撤销。** ### 103 · 宣布空白之前先跑**反向检索**:搜「谁写了这一条」 **搜到的要么是空白,要么是反例,没有第三种结果。** > **本条原本以正文形式埋在已推翻的第 77 条里,没有独立编号。** > 自动索引按标题建,于是把「三十二」指向了另一条完全无关的条目—— > **执行者是靠 `grep` 才找到它的。** 教训见下方「为什么必须独立成条」。 **为什么必须独立成条(本次事故)**: > **索引是按标题建的,而标题属于条目。** > **一条被推翻的条目,其标题下的所有内容都会被读成已失效——包括里面活着的规则。** > **所以「推翻一条」不等于「推翻它下面的每一句」;但只要规则没有独立编号,索引就无法区分。** **触发条件**:任何形如「全库 0 份写出 X」「这份手册没有 Y」「从未有过 Z」的断言,**在写下来之前**。 **配套要求**:**「全库 0 份写出 X」必须至少有一个候选反例经过 `-bbox` 坐标核对或 600dpi 目视**才成立。 **没有反例可核 ≠ 没有反例,只等于没去找。** ⚠️ **本条有边界,且边界写死在第 92 条**:反向检索**只管「搜不到」,管不了「搜到了却扔掉」**—— 雅迪那半次失败是**搜到了被判为拼接而丢弃**,任何形式的白板检索都不会报错。 **引用本条时必须同时引用第 92 条。** ### 104 · 🔴 **HTTP 200 不携带「指针存在」的信息**——而「检查链接是否可用」正是很多条款的核心动作 留出检验(`REPORT-HELDOUT2.md`)的 B-2 组:某手册承诺一个媒体包 URL。 **检验者编造了一个不存在的路径,两者的返回是逐字节相同的 1559 字节(MD5 `0411f4d4…`)。** > **「返回 200」在一个 SPA 壳站上对任何路径都成立,所以它测不出「这个指针指向的东西还在不在」。** > **而 B-2 唯一被信任的字段——「出口今天是否可用」——测的正是这件事。** **这不是那个站点的问题,是一类判据的问题**: > **凡用「请求成功」证明「目标存在」的,必须另有一个与路径绑定的信号** > (Content-Length 量级/Content-Type/正文里出现预期字符串/`robots.txt` 或 sitemap 里有这条路径)。 > **只有一个与路径无关的成功信号,等于没有信号。** **同族**:本会话已抓到两次「判据在两个方向上都失效」—— ①已知阳性被判 0(`PARTNER INSTITUTIONS` 不在 L2 词表里); ②`pending` ⊂ `depending`、`matte` ⊂ `matter`、`4 mil` ⊂ `$4 million`——**子串命中制造出看似相关的命中**。 > **两条合起来的教训**:**一个判据必须同时在「已知阳性」与「已知阴性」上灌测**, > **而且阴性要用「容易误中的相似项」构造**——用明显无关的样本测精确率,测不出子串陷阱。 ### 105 · 「代价」栏测的是**执行之后**——样本停在执行之前时,你测到的 0 次触发不是「代价被避免」 留出检验 8 个代价分句里 **4 个 0 次触发**。逐条查后发现它们不是同一件事: | 0 次触发的真实原因 | 含义 | |---|---| | 代价真的被避免了 | ✅ 这才是「代价栏有效」 | | **样本根本没执行到那一步**(例如 B-1 的两半:待定区 4 份、变更表指针 36 份**根本不存在**) | ⚠️ **代价栏测的是执行之后,样本停在执行之前** | > **这两种 0 在报告里长得一模一样。** 必须逐个 0 追问「是避免了,还是没走到」。 > **不追问就会把「样本不具备执行前提」写成「这条规则有效」。** **配套口径**:**报告 0 次触发时必须写明「样本在该分句上是否具备执行前提」**, 不具备的记 `不适用` 而非 `未触发`。 ### 106 · 🔴 「未取到样本」可能是**抽样失败**——同一批文件,定向检索一次就出了 上一轮文本层基线(`REPORT-TEXTFID.md`)在 `法务小字 / 页眉 / 稿件标注` 三类上写「**未取到样本**」, 并据此说「86.7% **不可外推**到这三类」。 本轮用**同一批文件**、只换检索策略: | 元素类 | 前序 | 本轮 | 检索式差异 | |---|:--:|:--:|---| | 法务小字 | **0** | **99 处 / 14 件**(收窄到 `y%≥70` 后取 9 组) | 前序搜「法条/法规/版权」——**本语料具名法律文书真命中 0**;改成**限制性陈述**(`不得/不可/未经/仅作/prohibited`)就出来了 | | 页眉 | 0 | **14 组** | `y%≤12 & h%≤2.8` + 跨页复现 | | 稿件标注 | 0 | **15 组** | `h%≤2.8 & y%≥40` + 短行含数字 + 尺寸词形 | > **「库里没有这类东西」和「我用错词去搜了」在报告里长得一模一样。** > 上一轮自己也写了「法条这条路度量不出规模」——**但它把「这条路量不出」推广成了「这类东西少」。** **新规**:**凡写「未取到样本」,必须同时写明试过哪些检索式、各自的命中数。** **一次命中都没有就写「这类东西不存在」,等于把检索词的局限当成了语料的属性。** (与 PITFALLS 32 同源,但方向相反:那条防「搜到了不敢用」,**这条防「没搜到就宣布没有」。**) ### 107 · 🔴 中文限制词的**判别力**要实测——`须` 在本语料里 96% 是「必须」的子串 任务书给的 6 个限定语是 `须/应当/必须/经/后/前`。在广发 73,227 字里实测: | 词 | 命中 | **判别力** | |---|---:|---| | `须` | 160 | ❌ **其中 151 是「必须」的子串**,真正独立的只有 9 | | `后` | 126 | ❌ 大量是普通语序 | | `经` | 35 | ❌ 弱 | | `应当` | **0** | ❌ 本语料不用这个词 | | **`仅作`** | **119** | ✅ **真正有效** | | `仅` | 130 | ✅ 有效 | | `不可` | **57** | ✅ 有效 | > **广发那次 200dpi 补出的「,在使用之前须」,用 `须` 根本检不出来——因为 94% 的 `须` 来自「必须」。** > 而**真正能定位它的词是 `仅作`**(原文就有「字体和图片仅作手册说明用途」)。 **新规**:**凡用「限定语」当特征词,必须先统计该词在语料里的构成**—— **子串吞掉多少、独立命中多少**。**一个 96% 被更大词吞掉的特征词,不是特征词。** ⚠️ **本条的当前后果**:`REPORT-TEXTFID2.md` 里「限定语补字」的**有效分母只有 2 组**, 所以那一格写的是「**未发现**」而不是「零」——**这个口径是对的**, 但理由不是「没有限定语」,而是**「用这 6 个词检不出来」**。两者对下一步的指引完全不同。 ### 108 · 🔴 「文本层有、页面上没有」——**这是补字的反向,而它至今只有 1 例** 【手册VI ADBOE】p56 文本层底部整行是 ROT+1 密文:`t %FTJHO DPNQFMMJOH` → 逐字右移一位 = `s DESIGN MANAGER`。 **600dpi 目视该位置非白像素 = 0**——**页面上什么都没有。** **这是本项目目前唯一一个「文本层 ≠ 页面」的实例**,方向与广发相反: - 广发:**页面有,低 dpi 读法补出了字**(污染) - ADBOE:**文本层有,页面没有**(幻影) > **此前项目只防「文本层补字」,没防「文本层有而页面没有」。** > 后者更隐蔽:**它在检索时会稳定命中,而你在页面上永远找不到它。** **成因**:`ToUnicode` 映射错位 1(CID 字体映射表偏移一位)。 **新规**:凡文本层出现**可解码但语义不通的整行**,必须渲染同位置确认它是否真的印在页面上。 **「文本层命中」不等于「页面上有」——这一条此前只对 `emb=no` 成立(那是豆腐块方向),现在对映射错位方向同样成立。**