Files
PolyLoop/CHANGELOG.md
T
iomgaa 303e4ebc1c chore(release): 打包元数据补齐,版本定到 1.0.1
发布前置:readme 与 project.urls 从第一版就写全——缺 readme 的话 registry 包页面正文一片
空白,而 twine 只警告不阻塞上传,三步全绿产物却是坏的(PolyGateway 1.1.2 的教训)。
build 与 twine 钉进 dev extra 而不是靠人手装,PolyGateway 那边它们不在任何 extra 里,
于是发布指南得多写一条「记得先装」,那种步骤迟早有人漏。

README 里那条「项目还没有可用的功能、十个模块是空骨架」的横幅早就过期了,而打包会把当时的
README 固化进 sdist、发布后再改无效,所以在构建之前换成安装说明与现状。顺带修两处与事实
不符的:GovDoc-SaaS 的实现已经在 8 月 3 日整体清空,⑥ 对它的验收标准改成设计级验收。

新建 CHANGELOG.md,写清楚首个版本为什么是 1.0.1 而不是 0.x——「公共类型的字段只增不删不
改名」那条承诺从第一个下游装上它那天起就生效,而 0.x 意味着随时可以破坏兼容。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 00:11:04 -04:00

52 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CHANGELOG
**这份文件是「哪个版本改了什么」的唯一权威**`CLAUDE.md` §0)。未发布的改动攒在「未发布」
那一段,发布时改成 `## X.Y.Z(日期)`。发布的完整步骤在
`research-wiki/guides/releasing.md`
版本号语义按 `CLAUDE.md` §1.3:公共类型的字段只增不删不改名,新增字段必带默认值;要删要改
就发新 major 并写迁移指引。
## 未发布
## 1.0.12026-08-11
首个发布版本。十个模块全部落地,四层测试都在跑。
**为什么首个版本是 1.0.1 而不是 0.x**`CLAUDE.md` §1.3 那条「公共类型的字段只增不删不改名」
从第一个下游装上它的那天起就生效,而 0.x 在语义化版本里意味着「随时可以破坏兼容」——两者
对不上。用 1.x 开头是在声明那条承诺现在就算数。
### 公共 API
- **`polyloop.types`**:消息与内容块、上下文与注入、动作结果、预算、停止原因、逐步轨迹的
一行(`StepRecord`)、一次运行的结果(`RunResult`),以及五种持久化日志记录。持久化结构带
独立的 schema 版本,读到不认得的版本直接失败,不靠默认值补齐(`CLAUDE.md` §1.4)。
- **`polyloop.ports`**:五个接缝的 Protocol——模型调用、决策解释、动作执行、存储、事件出口。
每个都带一个同步的 `parameters()`,装配时聚合成参数快照写进运行开始记录,续跑时逐字段比对。
- **`polyloop.session`**`run``resume` 两个入口,以及它们收的两个装配对象
`AgentDefinition` 跨运行不变、`RunRequest` 每次运行一份)。
- **`polyloop.tools`**:工具注册表。注册、模型可见的 schema 生成、存在性与参数校验、分发,
四件事由同一个注册表实例驱动,所以「模型看得见但调不到」这种状态构造不出来。
- **`polyloop.serialization`**:持久化记录的编解码。读到没有版本字段的载荷直接失败。
- **`polyloop.stores`**:逐行追加的 jsonl 存储。必须显式 import,不进顶层。
- **`polyloop.adapters`**PolyGateway 的模型调用适配器,装它要 `polyloop[gateway]`
必须显式 import——顺手导出会让每个进程在 import 本库时把网关连同它的 provider 目录一起拉起来。
### 这一版保证了什么
- **一次运行是有界的**:步数、动作数、连续解析失败次数、提示词规模四个预算,停止判定的顺序
写死在主循环里,判定结果随每一步落盘——崩在中间也不会把「恰好用满预算完成」记成「预算耗尽」。
- **崩溃之后能从断点续跑**:一步之内四次写,其中两次是耐久屏障;恢复读意图日志判断上一步
处在哪一档(还没开始 / 执行完了 / 状态未知 / 日志损坏),按工具声明的重放策略处置。
十个写入边界逐个崩过一遍,续跑结果与不中断跑完逐字段相等。
- **取消能穿透**`asyncio.CancelledError` 不被捕获吞没,取消进来之后在宽限期内写下结束记录
——不写的话恢复会把一次被主动叫停的运行当成可以续跑。
- **并发跑同一份定义互不干扰**:装配对象不持有任何一次运行的状态。
### 已知欠账
- `stores` 只有 jsonl 一种形态,关系数据库那种由下游自己实现,`tests/contract/` 是它的准入标准。
- 契约套件里解释器、执行器、模型客户端那几条等下游把实现接进来才跑得到。
- 原子写的「崩在中间时两者都不可见」与前缀持久性这两条承诺没有机器兜底,标成 `xfail`