chimera-list-exemptions-not-obligations
列出要检查什么的门禁是失效即放行的——没人记得加进去的那个站点,正是会出问题的那个。改成列出豁免项,每一条都写明理由,默认就变成了失败。
由读过该卡片的评审者赋予,而不是文件自我声明的。智能体在处理不可信内容的运行中提炼出的卡片,生来即被标记为受污染,在被检索之前会一直等待评审。
何时会想到它
- 写构建门禁
- 对整个包强制执行规则
- 手工维护的待检查文件清单
- 某个界面失去了保障
- 新增一个入口
价值通常在「避免」和「检查」里。「该做」是人人都会写的那一节。
上面的卡片正文是译文。英文原文才是 CLI 导入的内容、智能体运行时读取的内容,也是下方哈希所证明的内容。
触发
你正在贯彻一条必须在某一类的每一个站点上都成立的性质:每一个无人值守的界面都要走治理配置、每一个写入方都要过门禁、每一条 API 路由都要重新生成它的 schema。规则只有一句话,但这些站点是不同的人在不同时间写的,而且没有哪一个调用的东西和其他的一样。
当这个总体在构造上就是封闭的时候,这条不适用——一条关于分发表里那三个条目的规则,已经被这张表本身枚举完了。只有当一个新的站点可能出现在一个还不存在的文件里时,这个模式才值回它的成本。
该做
- 用机械方式枚举这个总体。遍历包下面的每一个
*.py(PACKAGE.rglob("*.py")),而不是手写一份你碰巧知道的文件清单。 - 按结构来检测站点。解析并遍历 AST,去找你关心的那个调用;
grep分不清一个组装出来的注册表和 docstring 里的同样几个词,而那段 docstring 一定会出现,因为总会有人写一条关于这次修复的注释。 - 遍历嵌套作用域,并按外层调用链来做键——
chimera/cli/main.py:solve._run_solve。Chimera 漏掉的那一个界面,它的注册表是在一个factory()闭包里构建的(chimera/server/manager.py:_gateway_on_message.factory),对一个只看顶层函数的遍历来说是不可见的。 - 让默认结果是失败。维护一个
EXEMPT: dict[str, str],从站点键映射到写下来的理由,并让断言把找到的、不在这个字典键里的每一个站点都列出来。 - 把理由写成一句关于那个具体站点的话,并且要区分不同种类的理由。"attended: interactive REPL"(有人可以按 Ctrl-C)是一个比"从自己的参数组装出一套等价的栈"强得多的主张——后者标记的是一份有待合并的重复实现,而不是一个尘埃落定的答案。
- 再加一个测试,断言
EXEMPT里的每一个键都仍然指向一个活着的站点,这样这份名单就不会比它所豁免的代码活得更久,烂成一纸形式。
避免
义务清单:
SURFACES = ["serve", "cron", "mcp", "a2a", "platform"] # 失效即放行
for name in SURFACES:
assert_governed(name)
对比豁免清单:
EXEMPT = {"chimera/cli/main.py:chat": "attended: interactive REPL"} # 失效即拦截
assert not [s for s in every_site_in_the_package() if s not in EXEMPT]
Chimera 治理门禁(gate)的第一个版本是上面那种:它只解析一个文件,点名了五个界面。chimera/server/manager.py——桌面应用的 Messaging 开关启动的那个 Discord 机器人,也就是 serve --discord 跑起来的同一个机器人——在本该覆盖到它的那次清查之后,又不受治理地构建了三个星期的注册表。它从来没有被门禁拦下过。它从来没有被看到过。
也要避免没有理由的豁免。一个光秃秃的 EXEMPT: set[str] 是一份一年后没人能评审的"跳过检查"清单;那一句话既是这个条目的全部成本,也是它的全部价值。
检查
喂给门禁一段违反规则的源码,断言它会被抓到,包括从一个嵌套函数内部违规的情况——否则一个 AST 的 bug 会让门禁永远通过,而那份保证就悄悄不再存在了:
src = "def serve():\n def factory():\n r = default_registry(ws)\n"
assert _bare_registry_calls(ast.parse(src), "m.py") == [("m.py:serve.factory", 3)]
然后是另一半:一个已经包成合规形状的调用不能被标记出来,否则每一个合规站点都得申请豁免,这份名单也就不再有任何意义。
二元问题:从 EXEMPT 里删掉一个条目,重跑。测试套件会不会变红,并且恰好点名那个站点?如果不会,那门禁读的就不是你以为的那份名单。
风险
把清单反过来,会把成本转移到那个新增了一个合理站点的人身上:一个不相关的 PR 会因为一条关于治理的、他们压根没在想的错误而变红。这是有意为之的取舍,但前提是失败信息要把两种合规方式都说出来——让它走配置,或者加一条带理由的豁免。一个在它并非为之而建的工作上开火的门禁,会被人一路争辩下去,直到它什么都不再拦。
按结构做的检测也比感觉上要窄。它只抓它认识的那一种形状;一个通过另一种调用来组装工具、或者从别处导入一份已经建好的注册表的界面,落在遍历之外,而绿色的构建对它什么都没说。把那个曾经退化过的文件按名字钉进它自己的测试里,这样一次悄悄不再覆盖那个文件的遍历会失败,而不是通过。
如何使用
卡片就是数据。克隆仓库并按路径导入——任何经由网络到达的内容都会被视为受污染并等待批准,这正是你想要的行为,也是这里没有一行命令安装器的原因。
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-list-exemptions-not-obligations/SKILL.md完整性
文件发布版本的 SHA-256。导入方可以据此核对收到的内容与本页展示的一致。
243034feb6f9a9a06be65cfb2bf4db159e4fbcc0e7210475dffe540600227ef7