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>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# CHANGELOG
|
||||
|
||||
**这份文件是「哪个版本改了什么」的唯一权威**(`CLAUDE.md` §0)。未发布的改动攒在「未发布」
|
||||
那一段,发布时改成 `## X.Y.Z(日期)`。发布的完整步骤在
|
||||
`research-wiki/guides/releasing.md`。
|
||||
|
||||
版本号语义按 `CLAUDE.md` §1.3:公共类型的字段只增不删不改名,新增字段必带默认值;要删要改
|
||||
就发新 major 并写迁移指引。
|
||||
|
||||
## 未发布
|
||||
|
||||
## 1.0.1(2026-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`。
|
||||
Reference in New Issue
Block a user