# Git Diff for Human Reasoning

Git Diff for Human Reasoning

Every investigation eventually reaches the same moment. Two competent people look at the same evidence and walk away believing different things. That isn’t unusual. What’s unusual is what happens next. We compare their conclusions. Not their reasoning. We argue over who is right. We almost never ask where they first began thinking differently. That struck me as backwards. 每一项调查最终都会到达同一个时刻:两位能力相当的人看着同样的证据,却得出了不同的结论。这并不罕见。罕见的是接下来发生的事情:我们比较的是他们的结论,而不是他们的推理过程。我们争论谁是对的,却几乎从不追问他们是从哪里开始产生分歧的。这让我觉得本末倒置了。

We archive evidence. We rarely archive reasoning. Every investigation leaves behind artifacts. Logs. Disk images. Photographs. Witness statements. Source code. Those artifacts become part of the permanent record, indexed, hashed, preserved for years. Ironically, the reasoning that connected them usually disappears. The assumptions made along the way. The alternative explanations that were considered and rejected. The moment someone’s confidence changed. Those things typically survive only in memory, in scattered notes, or in a conversation that was never written down at all. 我们归档证据,却很少归档推理过程。每一项调查都会留下痕迹:日志、磁盘镜像、照片、证词、源代码。这些痕迹成为永久记录的一部分,被索引、哈希并保存多年。讽刺的是,将它们串联起来的推理过程通常会消失——包括沿途做出的假设、被考虑过又被否决的替代解释、以及某人信心发生动摇的瞬间。这些东西通常只存在于记忆、零散的笔记,或者从未被记录下来的对话中。

Weeks later, someone reviewing the investigation may have every piece of evidence the original investigator had — and almost none of the analytical path that made those pieces meaningful. When disagreement shows up, we reconstruct the reasoning after the fact instead of inspecting reasoning that was recorded as it happened. I began wondering whether that missing artifact — the reasoning itself — was worth preserving. Not because it determines the truth. Because it explains how the truth was pursued. We preserve evidence remarkably well. We preserve reasoning remarkably poorly. 几周后,审查调查的人可能拥有原始调查员所拥有的每一份证据,却几乎无法还原使这些证据变得有意义的分析路径。当分歧出现时,我们是在事后重构推理,而不是检查在发生时就被记录下来的推理。我开始思考,那个缺失的“工件”——推理本身——是否值得保存。不是因为它能决定真理,而是因为它解释了真理是如何被追寻的。我们保存证据做得非常出色,但保存推理过程却做得非常糟糕。

Every investigator leaves fingerprints. Every investigator develops habits. Not bad habits, thinking habits. Some build a timeline first, before anything else. Some distrust timelines on instinct, because clocks drift and nobody double-checks them. Some constantly ask, “what evidence would change my mind?” Others ask, “what explains the most observations?” Some investigators are naturally skeptical of a source until it survives repeated scrutiny. Others are naturally generative — they build a hypothesis fast and spend the rest of the investigation trying to break it. Neither approach is wrong. They’re different. And that’s exactly why an investigation benefits from more than one independent person working it. If everyone followed the exact same process, they’d likely miss the exact same blind spots. Independent thinking isn’t noise to eliminate. It’s information to preserve. 每位调查员都会留下指纹,每位调查员都会养成习惯。不是坏习惯,而是思维习惯。有些人会先建立时间线;有些人出于本能不信任时间线,因为时钟会漂移且没人会去复核。有些人不断问:“什么证据会改变我的想法?”另一些人则问:“什么能解释最多的观察结果?”有些调查员天生对来源持怀疑态度,直到它经受住反复审查;另一些人则天生具有创造性——他们快速建立假设,然后花剩下的时间试图推翻它。这两种方法都没有错,它们只是不同。而这正是调查受益于多位独立人员参与的原因。如果每个人都遵循完全相同的流程,他们很可能会错过完全相同的盲点。独立思考不是需要消除的噪音,而是需要保存的信息。

The problem was never that investigators think differently. The problem is that we usually throw away the record of how they thought differently. By the time an investigation is written up, most of that path has disappeared into a polished narrative. The report tells you where they arrived. It rarely tells you the route they took. I started wondering if the route was actually the interesting part. What if we could diff reasoning the way Git diffs code? 问题从来不在于调查员的思维方式不同,而在于我们通常丢弃了他们如何产生不同思维的记录。当调查报告写好时,大部分路径已经消失在润色后的叙述中了。报告告诉你他们得出了什么结论,却很少告诉你他们采取了什么路径。我开始怀疑,路径本身才是最有趣的部分。如果我们能像 Git 对比代码那样对比推理过程会怎样?

Nobody reviews two versions of a file by reading each one top to bottom and holding the difference in their head. A diff tool does that reconstruction for you; it doesn’t tell you which version is better, it just shows you exactly where and how they parted ways. When two investigators disagree, we still tend to do it the old way: put both reports side by side and ask a third person to reconstruct where the thinking diverged. That reconstruction is slow, it’s subjective, and it’s usually incomplete, because neither analyst ever recorded their reasoning in a form that could actually be compared. 没有人会通过从头到尾阅读两个版本的文件并把差异记在脑子里来审查它们。差异对比工具(diff tool)会为你完成这种重构;它不会告诉你哪个版本更好,它只是准确地向你展示它们在何处以及如何分道扬镳。当两名调查员意见不一致时,我们仍然倾向于用老办法:把两份报告放在一起,让第三个人去重构他们的思维在何处产生了分歧。这种重构既缓慢又主观,而且通常是不完整的,因为没有分析师以一种真正可比较的形式记录过他们的推理。

This does not mean nobody has tried to structure or preserve reasoning before. Structured analytic techniques, argument-mapping systems, and analytic-provenance tools have been doing parts of this work for years. I could not find a practical workflow centered specifically on freezing two independently authored reasoning paths, asking a separate reviewer to align them, and preserving those alignment decisions as part of the resulting diff. That narrower combination is what Reasoning Diff Lab is testing. A full treatment of the prior art, SEAS, CISpaces, W3C PROV, argument mapping, and the analytic-provenance literature is in the research assessment linked at the end. 这并不意味着以前没有人尝试过结构化或保存推理过程。结构化分析技术、论证映射系统和分析溯源工具多年来一直在做这方面的工作。但我找不到一种实用的工作流,专门集中于冻结两条独立撰写的推理路径,要求独立的审查员进行对齐,并将这些对齐决策作为最终差异报告的一部分保存下来。这种更细分的组合正是 Reasoning Diff Lab 正在测试的内容。关于现有技术、SEAS、CISpaces、W3C PROV、论证映射和分析溯源文献的完整论述,请参阅文末链接的研究评估。

So I built enough of an answer to find out whether the question was worth asking. I called it Reasoning Diff Lab. Status: pilot-ready, empirically unvalidated. The current v2.0.0 release includes the analyst-entry workflow, frozen path snapshots, reviewer alignment, deterministic comparison reports, and three synthetic cases. It passes 58 tests with 0 failures, and a full build produces 22 divergence events across those cases. That proves the instrument runs as designed. It does not prove that investigators will find it useful — that is exactly what the pilot below is designed to determine. 所以我构建了一个初步的答案,以验证这个问题是否值得探讨。我称之为 Reasoning Diff Lab。状态:试点就绪,未经实证验证。目前的 v2.0.0 版本包括分析师录入工作流、冻结路径快照、审查员对齐、确定性对比报告以及三个合成案例。它通过了 58 项测试且零失败,完整构建在这些案例中产生了 22 个分歧事件。这证明了该工具按设计运行。但这并不证明调查员会觉得它有用——这正是下面试点项目旨在确定的目标。

What it actually is: It’s a local-first research prototype that compares two independently produced reasoning paths against the same evidence set. I want to be just as clear about what it doesn’t do, because this is the part that matters most. It does not determine truth, rank investigators, or declare one analyst better than the other. It does not infer a contradiction from wording — a contradiction only exists in its output if a human reviewer explicitly confirms one. It does not replace human review; it tries to make that review faster to start, and harder to skip a step in. 它实际上是什么:这是一个“本地优先”的研究原型,用于对比针对同一证据集独立产生的两条推理路径。我想明确说明它不能做什么,因为这才是最重要的部分。它不能判定真理、对调查员进行排名,或宣布某位分析师比另一位更好。它不会从措辞中推断矛盾——只有当人类审查员明确确认时,矛盾才会存在于其输出中。它不能取代人工审查;它试图让审查过程启动得更快,并让审查过程中更难跳过步骤。

Each analyst breaks their reasoning into small typed pieces — an observation, an assumption, an inference, a claim, an explicit unknown — and tags which evidence and which earlier piece each one depends on, with a confidence level attached. A reviewer who authored neither path matches the two sets: same position, related but distinct, or unrelated. Contradiction is separate — it must be declared by the reviewer and is never guessed by the system. From there, everything is mechanical: the tool walks the matched and unmatched pieces and reports what it finds. If the report says two analysts diverged, you can trace that line back to the exact evidence, the exact… 每位分析师将他们的推理分解为小的类型化片段——观察、假设、推论、主张、明确的未知项——并标记每个片段依赖于哪些证据和之前的哪些片段,同时附上置信度。未参与路径撰写的审查员将两组内容进行匹配:相同立场、相关但不同,或不相关。矛盾是单独处理的——它必须由审查员声明,系统绝不会猜测。此后,一切都是机械化的:工具会遍历匹配和未匹配的片段并报告其发现。如果报告显示两位分析师产生了分歧,你可以将该路径追溯回确切的证据、确切的…