2Origin.org

Bugscope · bug 透视镜 —— 审视"影子冒充对象"的哲学方法论

Status: Philosophy · 方法论定义(非实现) Date: 2026-08-08 来源: 审视 uking 收集的真实 bug 后,从底层问题抽象出的哲学理论(2026-08-08) 增补: A6 / Q0 来自本象 video 方言落地时同一个错连犯四次(2026-08-09),见 §2 A6

普通排障问"这段代码为什么错"。 Bugscope 问更深一层:"系统在哪里把影子当成了对象本身?"


1. 它是什么

Bugscope 不是又一个调试工具。它是一套审视方法——用来回答"为什么会有这个 bug"的第二层追问。

它扎根于 2Origin 的本体论:影子和对象的区分。系统常把一个低维表征(标记、字段、返回码、声明)当成真实状态(真的发生、真的验证过、真的是那个东西)。这就是认知越界——bug 的深层根因。

2026-08-09 起它不再纯粹是"事后"的。 A1–A5 都在问"这个已存在的结论怎么来的", 而 A6/Q0 问的是"我正要用的这把尺子对不对"——因为有一类错误在结论产生之前 就烧进了度量方式里,等到有结论可审视时,五条公理已经全部照不出它(见 §3 Q0)。 所以现在它是一件双向的工具:向后审视既有结论,向前拦住选错的代理。

2. 六条公理

A1 · 存在 ≠ 验证 一个东西"存在"(标记在、字段在、返回了)不等于它被"验证过"(真实发生、真实有效)。

实例:crashlog 误报——"标记存在"被当成"真崩了",实际 pid 还活着(多实例残留)。

A2 · 自证不成立 一个系统不能用自己的输出证明自己的输出。"我说我写好了"不是"写好了"。

实例:幂等账本丢数据——"写入返回成功"被当成"账本真的更新了",读改写不原子。

A3 · 判断与决策分离则必被替身 有判断依据的层没有决策权,有决策权的层没有判断依据——于是"表象"替身"事实"。

实例:RFC-0001——南桥有 risk 判据但没决策权(被 harness 闸门拦),请求从未到达南桥。

A4 · 缺席不会自己发声 系统只报告它做了什么,不会自动报告它没做什么。因此每一个承诺(可审计、不丢学历、 幂等成立),在它失效的那一刻都是不可见的——不是被谎报,是根本没有影可看。

实例:审计写失败被空 catch 吞掉,动作照做并如实返回 doneA1/A2/A3 全部不命中——done 是真的、有回读观察不是自证、判断与决策同层。 但"这次动作可追溯"这个承诺已经悄悄失效,而调用方毫不知情。 第二例:CLI 漏给内容来源 → 静默写出 0 字节文件并报 done且完全符合"写后观察一致"。 RFC-0004 原文:「验证器抓不出来,这类死角只能在入口拦。」

A5 · 验证会衰减 A1 说的是"从没验证过"。A5 说的是另一件事:验证过的,会过期。 一次成立不是永久成立;世界会变,而 verified 标记不会自己变回去。

实例:demo/task2 两条结论「Codex 沙箱只读导致落盘被拦」当日已被推翻(真因是 harness 审批闸门 + 本机沙箱 runner 损坏),但至今仍是 verified: true;SessionStart 的 bundle 把"推翻"和"被推翻的"并排注入、之间无任何链接,每个新会话都要重新裁决同一场官司。 根因在表达力:facts[].verified 是 boolean 而非状态机,系统唯一的手段是"再追加一条", 所以矛盾只会累积

先例(必须承认):这是 1978 年的已解问题——Jon Doyle 的 Truth Maintenance System (MIT AI-TR-419)让每条信念挂 justification,支撑撤销则信念自动退出,靠 dependency-directed backtracking 传播。A5 不是新发现,是我们撞到了一个老问题。 该抄,不该发明。

A6 · 代理不继承被代理者的性质 用 X 判断 Y 时,X 只是 Y 的一个影子。影子的亮度不等于对象的重量。 系统一旦把代理变量当成被代理者,所有下游判断都带上代理的偏差——而这个偏差 在代理与对象碰巧一致的样本上完全不可见。你会看到它"work 了",然后把它推广到必然失效的地方。

实例(本象 video 方言,2026-08-09,全部实测):

代理 X 被代理者 Y 十秒内就能想到的反例 实际后果
音量峰值 + 镜头切换 内容价值 「他大声说『一个没装上』」 加权召回 33.4%,跑输随机基线 40.7%
时间活跃度 画面重要性 「固定不动的价格牌」「主播的脸」 自动裁剪把主播摄像头裁掉了
语速 / 情绪能量 爆点 「他在赶时间念稿」 ρ = 0.06–0.29,无关;语速 top1/top2 是全片最该删的两段
话密度(字/秒) 内容价值 「安静展示一张海报 5 秒」 ρ = 0.568,目前"成立"

最后一行最重要:那个成功的信号,用同一把尺子量一样有失效域。 它现在管用只是因为素材恰好是纯口播。A6 不只抓失败,它还把成功正确地标注成"有条件的"。

A6 与前五条的关系:A1 怀疑读数的真实性,A6 怀疑尺子的对应性。 代理失效时通常没有任何报错——管线照常输出,只是输出的是另一个问题的答案, 所以 A6 常与 A4 成对出现(上表四例里三例是"零 error 全错")。

3. 审视七问

Q0 我正用 X 判断 Y。举得出一个「X 高而 Y 低」的反例吗?      ← A6(事前)
Q1 这个"事实"是观察来的,还是声称来的?
Q2 这里有没有"存在性检查"被当成"验证"?
Q3 谁在证明?证明者和被证明者是同一个吗?(自证)
Q4 判断依据在谁手里,决策权在谁手里?它们在同一层吗?
Q5 这里承诺过什么?那个承诺失效时,谁会知道?        ← A4
Q6 这条结论是什么时候成立的?世界变了之后谁去改它?    ← A5

任何一个问题的答案是"是的/可疑",就标记该处为候选 bugscope 命中。

Q5/Q6 是 2026-08-08 补的:拿 A1–A3 逐条检验参考实现已复现的缺陷时,发现有两类 三条公理全部不命中、却确实是真缺陷——"承诺悄悄失效"(无谎报、无自证、无分离) 与"验证已过期"(当初确实验证过)。方法论自己被自己的 §4 照出了盲区。

Q0 是 2026-08-09 补的,而且它排在 Q1 之前——因为它管的是尺子,不是读数。 同样的过程:拿 A1–A5 逐条检验 video 方言的四次失败,发现五条公理全部不命中、 而结论完全无效——那些结论确实是观察来的(A1 不中)、不是自证(A2 不中)、 判断与决策同层(A3 不中)、没有承诺失效(A4 不中)、没有过期(A5 不中)。 病根在结论产生之前:它烧进了度量方式里,于是产出的是「用错的尺子量出的正确读数」。

Q0 的判据是能不能举出反例,不是代理准不准:

举不出 → 你没想清楚这个代理凭什么成立,不许动手。 举得出 → 那个反例就是必须先测的第一个用例,且它描述的失效域必须写进 limits(第七要素)。

举得出反例不等于代理不能用(话密度就能用),只等于它有已知失效域、必须声明。 这一问必须制度化成新增度量/打分/排序逻辑时的必答题——上表四次, 提出者事后都能在十秒内想到反例,事前一次都没想。靠自觉无效,四次实测就是证据。

4. 自我指涉(它最深的点)

一个审视"自证式结果"的方法论,自己也要能被审视。"这个 bug 是影子/对象混淆"这个判断本身,也可能是我把声明当事实。

硬规则:每个被透视的结论,必须能指出可复核的证据(source),否则这个结论也只是影子。

这与本境"source 必须可复核"(RFC-0005 §3.2)同构——方法论自身落地了它审视的原则。

5. 诚实边界

6. 与 2Origin 的关系

Bugscope 是 2Origin 哲学(影子 vs 对象)在排障维度的投影:

同一条哲学,一个向前(构建),一个向后(审视)。


License: Apache-2.0