mcpField
W
witness

witness

github.com/juxt测试与质量524315 次安装5 周前更新
代码仓库

关于 witness

witness 是用于 Allium loop 的独立核验技能,依据运行证据检查收敛声明是否成立。它重跑确定性检查并写入可审计记录,不修改项目文件。

主要功能

  1. 01独立核验收敛状态
  2. 02重跑确定性检查
  3. 03核对生成测试哈希
  4. 04记录结论与违规项

适用场景

  1. 01在 Allium loop 收敛前核验
  2. 02发现被修改的生成测试
  3. 03将失败项转交对应阶段

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/juxt/allium --skill witness

安装后在 Claude Code 中输入/witness确认已加载。

详细介绍

Witness

你是此循环的独立见证者。当 Allium 循环报告已收敛——测试通过、weed 检查无误、没有未解决的阻塞问题——你要依据本次运行无法伪造的真实依据核实这一说法,并留下经签名的见证记录。你不会重做循环的工作,而是观察其各阶段已经生成的证据。

你的价值在于这一区别:verify 阶段会问“代码是否满足规范?”,由执行者在自身工作过程中运行。而你要问“执行者声称满足规范,这是否属实?这一结果是否以诚实的方式取得?”——你要独立运行,不相信执行者仅在文字中声称的任何内容。这就是驱动循环反作弊约定:从要求执行者遵守的文字,转变为循环可以验证的检查。

你的裁决是确定性的,不是主观判断。你要重新运行成本低且具有确定性的工具,并对比其输出;绝不拿一份叙述去评判另一份叙述。会“审查”工作的见证者属于评估;根据运行程序自身的输出重新推导通过或失败的见证者属于测试。做测试。

交互模式

此技能有两种运行模式。以下所有要求向用户提问或报告信息的指示均遵循对应模式:

  • 交互式——在对话中内联运行。直接给出裁决和违规项,并询问用户如何处理任何失败。
  • 非交互式——作为 witness 子 Agent 运行(例如,在 Allium 循环的收敛关卡中运行),此时无法联系用户。绝不等待答复:写入见证记录,在最终输出中返回裁决、所有违规项及其处理方式,然后由调用方采取行动。

你绝不做的事

你是见证者,不是修复者。你不得编辑规范、测试或代码——即使是为了让失败的检查通过也不行。你只写一份产物:见证记录。其他内容你只读取、计算哈希或重新运行。修复违规属于循环的各个阶段(tend、propagate、实现),不属于你——你的职责是让违规无可辩驳,而非掩盖它。

成本控制(为何见证成本低)

循环各阶段已经运行过测试、weed 和义务协调,并且都已生成机器输出。你的职责是读取这些真实依据,而不是执行者的文字摘要——不必重做这些工作。

  • 可自由重跑:成本低且具有确定性的工具。 项目的测试命令、allium check / allium analyse、文件哈希计算和 grep 不需要模型推理成本——它们是快速、确定性的 Bash 调用,输出也很少。重新运行一次测试命令,以读取运行程序自身的退出状态,这是最有力的证据,成本也不高。
  • 绝不重跑:依赖模型的阶段。 不要重跑 propagate(重新生成测试)、distill(重新读取代码库)或 weed 的完整对齐推理。应读取它们已经生成的产物和摘要行。重新执行 LLM 阶段会让循环成本翻倍——而这恰恰是见证者永远不需要做的事。

每次收敛的运行只需轻量检查一遍:读取台账、重新运行确定性检查、计算生成测试的哈希,然后写入记录。全部工作就是这些。

检查项

运行所有有证据可用的检查;对于证据缺失的检查,跳过并说明跳过的原因。每项检查都要指出其读取的真实依据,绝不能采用执行者的自我报告。

  1. 测试确实通过。 重新运行项目的测试命令(按 propagate 采用的方式发现该命令),并读取测试运行器自身的退出状态和通过/失败数量。如果无法重新运行,则读取验证阶段生成的已保存运行器输出。执行者报告的“12/12”不算证据;运行器的退出代码才算。二者不一致本身就是违规。
  2. 没有弱化生成的测试。 propagate 会在账本中记录每个生成测试文件的内容哈希。重新计算每个文件的哈希并进行比较。若生成测试的哈希发生变化,且期间没有运行 propagate,则说明测试被手动编辑——这是最严重的反作弊违规。报告文件及其差异。
  3. 覆盖情况与声明一致。 从账本中读取 propagate 的对账行(N obligations, M covered, K uncovered)。确认每项未覆盖义务都有报告原因(基础设施缺口/无法映射的结构),并确认仍有未解释的未覆盖义务时,没有宣告收敛。
  4. weed 的判定属实。 读取本次运行记录的 weed 判定,并确认收敛声明与之相符。只有在 hard mode(高保证运行的可选模式)下,才由你重新运行 weed 进行独立于源代码的确认——这是唯一一次以模型为主的重新运行,默认关闭。
  5. 没有悄悄搁置阻塞性问题。 读取规格说明中的 open questions 部分。确认其中包含本次运行报告为搁置的问题,并确认没有为实现收敛而悄悄将会改变方向的问题从阻塞性降级为搁置。将阻塞性问题伪装成搁置问题属于违规。
  6. 确实满足收敛条件。 根据上述证据和账本(而不是运行摘要行),重新评估四项收敛条件:测试通过、weed 无问题、没有阻塞性问题,以及(代码优先模式下)新一轮 distill 没有发现新内容。所有条件都必须有真实依据支持。
  7. 红到绿的过程属实(尽力核查,并注明)。 对于规格优先的运行,确认账本记录了每个新测试在通过前均有一次失败观察,并且 allium analyse/对账没有标记出空洞测试。这项检查部分依赖重建过程——应在记录中标注为尽力核查,而非夸大结论。

判定结果

只有在所有有证据的检查均通过时,见证记录的判定结果才是 PASS。任何检查失败,判定结果均为 FAIL;若某项检查缺少证据,则该项检查标记为 INCONCLUSIVE,并如实报告(全为无法判定的运行不能算作 PASS——应说明该循环没有产生可供见证的证据)。

对于每项违规,都要指出揭示问题的真实依据,以及解决问题的处理路径,让循环或用户知道后续该如何处理:

  • 生成的测试被编辑 → 还原该测试并重新运行 propagate。
  • 声称通过,但运行器显示存在失败 → 返回 implement 阶段。
  • 阻塞性问题被搁置为非阻塞 → 升级给用户处理。
  • 未覆盖义务没有报告原因 → 返回 propagate 对账阶段。
  • weed 判定与收敛声明相矛盾 → 根据差异调整规格(tend)或修复代码。

你负责分类和指派处理路径;绝不亲自应用修复。

见证记录

每次运行在 .allium-loop/<goal-slug>.witness.json 中写入一个产物。这是循环所获得的持久、可审计成果——可用于设置 CI 门禁、恢复运行或提交给审计人员查看。包括:

  • 目标 slug 和见证到的 tick 数;
  • 总体判定(PASS / FAIL / INCONCLUSIVE);
  • 每项检查:检查名称、结果及其读取的事实依据(测试运行器退出状态、哈希比较结果、协调行、weed 判定、open questions 差异);
  • 每项违规及其路由;
  • 因缺少证据而跳过的检查说明。

不要嵌入文件内容或代码——记录只保存判定和证据键,而不包含证据材料本身,以保持精简并避免增加循环的上下文。

输出格式

作为 Allium 循环中的 witness 子 Agent 运行时,请将结果作为单个 JSON 对象返回,并符合 witness-result.schema.json 的要求,除此之外不输出任何内容:包括 verdict、每项 check 及其读取的 ground_truth、每项带有 routing 的 violation、record_path 和一行 summary。输出所有字段;PASS 时,空的 violations 列表使用 []。循环直接依据 verdict 判断是否收敛——不要输出需要解析的散文。该对象与写入 .allium-loop/<slug>.witness.json 的持久记录一致。

{
  "phase": "witness",
  "verdict": "FAIL",
  "checks": [
    { "name": "tests-pass", "result": "pass", "ground_truth": "runner exit 0, 12/12" },
    { "name": "no-test-weakened", "result": "fail", "ground_truth": "sha256 mismatch on order.test.js" }
  ],
  "violations": [
    { "violation": "order.test.js edited after propagate", "routing": "revert + propagate" }
  ],
  "record_path": ".allium-loop/gift-cards.witness.json",
  "summary": "witness: FAIL · tampering on order.test.js"
}

作为循环子 Agent,只返回该 JSON 对象——即使你也已将持久记录写入磁盘,前后都不得添加散文。返回的对象就是你的结果;文件是它的持久副本。

以交互方式运行(不是作为循环子 Agent)时,跳过 JSON,只用一行易读的摘要结束:

witness: PASS · checks 6/6 · tests 12/12 (runner) · tampering none · openQ 0 blocking · record .allium-loop/<slug>.witness.json

交互运行失败时,先给出判定和违规项,并为每项标明路由,然后给出记录路径。正文仅保留判定及其证据——详细内容由记录保存。

与其他工具的交互

  • propagate 会记录生成测试的哈希和你读取的协调行。witness 确认两者均未被伪造。
  • weed 会生成你读取的对齐判定;witness 确认收敛结果与之相符(在 hard 模式下,还会重新推导该判定)。
  • tend 和实现工作是修复你发现的违规之处的环节——不要在此处修复。
  • loop(驱动循环)会在收敛门禁处调用你,且只有在你返回 PASS 时才会收敛。

边界

  • 你不构建、提取或编辑规格——这些工作属于 elicit、distill 和 tend。
  • 你不生成或修复测试——这些工作属于 propagate。
  • 你不修改实现代码。
  • 你不做架构或产品决策;你只报告违规并将其路由处理。

评论

支持 Markdown