Files
PolyGateway/research-wiki/findings/2026-09-09-135-release-completion.md
T
iomgaa d2455e8fd4 docs: record 1.3.5 release completion and external verification
Merge-time gates, registry artifacts and anonymous page checks for 1.3.5
recorded as a separate finding; the validation finding gains a status
pointer so its historic 'not yet executed' section is not silently stale.
Released main/tag and uploaded artifacts are untouched.
2026-09-09 14:02:15 -04:00

99 lines
8.3 KiB
Markdown
Raw 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.
---
type: finding
node_id: finding:2026-09-09-135-release-completion
title: "1.3.5 发布完成与外部验收:合并后门、registry 产物与页面亲查"
date: 2026-09-09
---
# 1.3.5 发布完成与外部验收
> 状态:**1.3.5 已发布并完成外部验收,#19 / #23 已评论关闭**。main 与 `v1.3.5` 同指
> `ab00aa44576bd4cd47d0680d107d5191679dc1ee`。发布准备阶段的证据见
> [1.3.5 验收证据](2026-09-09-135-call-observability-validation.md)(其 §8.6 列的"尚未执行"由本文逐项关闭,
> 该文当时结论不追改)。本轮无生产/测试代码改动、未派子代理;原始日志在
> `tests/outputs/135/publish-20260909/`gitignore,不入库)。
## 1. 合并与合并后门
长跑全部在 tmux `pgw135-publish` 串行执行,`PYTHONUNBUFFERED=1`,命令末尾**不接管道**,每门独立 `.exit`
| 步骤 | 结果与证据 |
| --- | --- |
| 远端占用复查(改动前) | `git ls-remote` 最高 `v1.3.4`registry simple 索引按完整字面量 `polygateway-1.3.5` 无命中;Release API `/releases/tags/v1.3.5` 与包页面 1.3.5 均 **404**。origin/main = 本地 main = `af57f93`,无未审变更 |
| 合并 | `--no-ff``ab00aa4``git diff HEAD feature/1.3.5-call-observability` **空**,即合并树与父会话已审的 `433039b` 逐字一致;`merge.log/.exit` |
| CLAUDE.md 纯格式 diff | 合并前仅对该文件 `git stash push`(未 stash 全部),合并后 `stash pop` 回原样;全程未提交、未覆盖 |
| `make lint` | **exit 0**ruff 无自动改动,import-linter **1 kept / 0 broken**`lint.log/.exit` |
| `make test` | **1605 passed / 23 skipped / 108 deselected95% 覆盖,282.48sexit 0**`daily.log/.exit`。skip 与 deselected **不计通过** |
| 真实网关 e2e 冒烟(显式 slow) | `pytest tests/e2e/test_smoke_gateway.py -m slow -v`**4 passed98.00sexit 0**(流式/非流式/结构化 json/结构化模型阶梯);`smoke-gateway.log/.exit` |
| Redis 时间语义(显式 slow | `pytest tests/contracts tests/integration -m slow -q`**18 passed / 159 deselected1138.67sexit 0**`redis-time.log/.exit` |
未补全模型矩阵(用户已批准):本版对 `thinking.py`、能力表、wire 片段、缓存 key 公式、重试/限流/熔断语义一字未改,
故 1.3.4 的型号级结论在其**原有边界**内继续成立,连同其 FAIL/UNKNOWN/不可达/缺轮一并继承,不因本版升格。
本版**已变更**的统计/SQL/PG 口径不复用旧统计,全部由 1.3.5 新测试承担(36 列契约、终态行、真实 PG 30 项)。
## 2. push / tag / 构建 / 上传
| 步骤 | 结果 |
| --- | --- |
| push main | `af57f93..ab00aa4`exit 0`push-main.log/.exit` |
| tag | `git tag -a v1.3.5`,注释 tag 对象 `ab780cf36a8c6b2de316c0b194dcaa9485e8172f`,解引用 = `ab00aa4`push exit 0`remote-refs-after.log` |
| 构建 | 确认 `dist` 是项目内真实目录(非符号链接)后清掉旧 1.3.3/1.3.4 产物;`python -m build` exit 0wheel + sdist 各一份 |
| `twine check` | 两份均 **PASSED**exit 0 |
| 上传 | exit 0。凭据只从 tea 配置读入 `TWINE_PASSWORD` 环境变量,不进 argv/日志;**未重传任何已存在版本的字节** |
产物 SHA-256
wheel `c017599ea6bef69a485e1d35eab2ca89154cd33180ebd6dc759647097221a6b4`
sdist `87fd4151b77f55829b5d3206c5b75ac6c1c6bb8c94faa194955bf0db33ad0211`
## 3. 独立下载、解包与安装后行为
全部在仓库外临时目录(`/tmp/pgw135-registry-*`)进行,不引入新依赖。
| 检查 | 结果 |
| --- | --- |
| registry 下载 | wheel exit 0sdist 因私有索引不镜像 setuptools 需 `--no-build-isolation`(沿用 1.3.4 已记录的处置)exit 0 |
| 字节一致 | 下载的两份 SHA-256 与本地构建**逐字相同** |
| 包内源码 | `__init__.py` / `types.py` / `ports.py` / `telemetry/schema.py` / `middleware/telemetry.py` / `client.py` / `embedding.py` / `ocr.py` 八个文件 wheel、sdist 与已发布提交**散列全等**sdist 内 README == 仓库 README |
| 元数据 | wheel METADATA `Version: 1.3.5``Description-Content-Type: text/markdown`、正文 30465 字符,含《1.3.5 逻辑调用统计与失败诊断》与安装下界 `>=1.3.5,<2`Project-URL 三项齐全 |
| 安装后公共面(`pip install --target` + 仅从该目录导入) | `CallStats``__all__`、frozen、字段 `logical_call_id/attempts/total_latency_ms`;四类响应 `call_stats` 均为**末尾**字段且默认 `None``record_llm_call` 实测 **36 参**10 个新参全为 keyword-only 且**无默认值**`len(schema.COLUMNS) == 36` |
| 安装后终态行行为(离线,httpx MockTransport 固定 503,不发真实请求) | 3 条 `attempt` + **恰 1 条** `terminal_failure`;终态 `attempts=3``total_latency_ms` 非空、`cost IS NULL``usage_source='unavailable'``http_status_code` 为 NULL;尝试行三条均记真实 **503**`error_body``error_type='TransientError'`;四行共享同一 `logical_call_id`;物理列 **37**36 写入列 + `created_at` |
## 4. 外部产物亲查(匿名,看到什么算什么)
| 目标 | 结果 |
| --- | --- |
| Release 创建 | POST **201**,id 22,正文 1898 字符逐字取自 CHANGELOG 1.3.5 段 |
| [包页面](https://gitea.iomgaa.online/iomgaa/-/packages/pypi/polygateway/1.3.5) | 匿名 **200**;可见正文含安装命令与《1.3.5 逻辑调用统计与失败诊断》;页面有指向 `iomgaa/PolyGateway` 的仓库锚点 |
| [v1.3.5 Release](https://gitea.iomgaa.online/iomgaa/PolyGateway/releases/tag/v1.3.5) | 匿名 **200**;可见文本含 `WHERE event_kind = 'terminal_failure'` 与「26 → 36」迁移说明 |
| [Releases 列表](https://gitea.iomgaa.online/iomgaa/PolyGateway/releases) | 匿名 **200**,含 v1.3.5 |
| simple 索引 | 匿名 **200**1.3.5 的 wheel 与 sdist 均列出 |
## 5. issue 收尾
仅动 **#19 / #23**:各评论一条后关闭,随后**以 GET 读到的 state 为准**复核(不拿 PATCH 返回码推断),两者均 `closed`
评论内容点名:自建 recorder 需补 10 参或改 `**fields`**装配期报错**)、PG manual 档补列、
计失败改 `WHERE event_kind = 'terminal_failure'``AVG(latency_ms)``event_kind` 分组;
并明确「新增失败统计列与终态行是**常规口径变更、不是异常字段**」,`http_status_code` 不可当成败判据;
同时声明**未做全模型矩阵、不宣称所有模型或渠道可用**。#22 / #24 未触碰(复核仍 `open`、评论数 0)。
## 6. 真实失败与处置(原件保留,不改写成功)
| 失败 | 根因与处置 |
| --- | --- |
| 首次安装后终态验证 exit 1 | `sqlite3.OperationalError: no such column: id` —— 是**我的验证脚本**臆断了主键列名,实际第 37 个物理列是 `created_at`。改脚本 `ORDER BY rowid` 并把多出的物理列打印出来自证,**未改库代码**;失败日志保留 |
| 首次 Release 创建 exit 1 | `KeyError: 'TOKEN'` —— 变量未 export 到子进程,**未发出任何 API 请求**(不是服务端拒绝)。改为 export 后 201 |
| 包关联 POST **400** | 返回 `invalid argument`,与 1.3.4 同款。**不把 400 当成功、也不据此猜已关联**:另以认证 GET 包 API 读到 `repository.full_name = iomgaa/PolyGateway`,并匿名读到包页面上的仓库链接,两条实测证据才是关联成立的依据;既有正确关系不为重试而解绑 |
## 7. 残余缺口(不自称已关)
| 缺口 | 说明 |
| --- | --- |
| live 覆盖基线 | `metrics/call-telemetry-coverage.md` 的实际基线列仍待首次生产运行填入 |
| 下游自建 recorder | 装配闸只证形状可被接受,证不了函数体真的落这些列(已写进 READMECHANGELOGissue 评论) |
| 模型矩阵 | 未重跑;1.3.4 的 FAIL/UNKNOWN/不可达/缺轮例外原样继承,不外推为「全模型可用」 |
| 其余 e2e | 本轮 slow 只跑了 `test_smoke_gateway.py` 与 contracts/integration 的 Redis 时间语义,`tests/e2e/` 其余文件未跑 |
| 用户文档站(Gitea Wiki) | 本轮未同步;`docs-convention.md` §2 清单待另行执行 |
conda 启动器既有 `RequestsDependencyWarning` 保留,不宣称零告警。本记录落在独立
`docs/1.3.5-release-evidence` 分支,**不改动已发布的 maintagregistry 产物**。