feat(_stopping): 落成停止判定四档,0008 转已接受

四个纯函数各管一档,顺序本身由主循环走:预算准入(A)、提示词规模(B)、连续解析失败(D)、
完成判定(G)。加一个不可变的三计数结构。

三处刻意钉死的边界,都写了测试:
- 两个预算上界同时耗尽报步数那一个。理由是兼容性不是原理(某下游按步数耗尽的占比告警),
  正因为推不出来才必须被测试钉死。
- 预算「达到即拦」用 >=,提示词规模「超过才拦」用 >。两处不是同一件事:一个数已经用掉
  几个额度,一个量一个东西有多大。
- 环境故障排在完成判定前面;未执行不做完成判定;完成信号恒为假不是故障(初稿在这里
  写错过,会让某个下游的每一次运行都在第一步终止)。

不 import polyloop.tools,五个逻辑层模块互不 import,所以「这次执行的工具被标了完成标记吗」
由调用方查好注册表传一个布尔进来。
This commit is contained in:
2026-08-10 01:04:38 -04:00
parent 956d98652d
commit 4bf74bf5ac
3 changed files with 374 additions and 5 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Design 0008 · 工具的实现怎么挂进注册表
**日期** 2026-08-10 · **状态** 确认
**日期** 2026-08-10 · **状态** 已接受(2026-08-10 项目负责人确认
**补充** `0006-public-names-and-signatures.md` 决策六。那一条定了 `ToolSpec` 的五个字段与
`ToolRegistry` 的五个方法,本文补上其中缺的那一样:工具本身的实现挂在哪里。