Files
PolyGateway/research-wiki/findings/2026-09-09-134-thinking-contracts-validation.md
T
2026-09-09 06:52:27 -04:00

236 lines
30 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-134-thinking-contracts-validation
title: "1.3.4 推理契约验证与发布准备"
date: 2026-09-09
---
# 1.3.4 推理契约验证与发布准备
> 最新状态(2026-09-09):发布准备完成;用户已正式批准将未补全模型矩阵、失败/UNKNOWN/不可达/缺轮及缺下游现行配置证据作为本版验收例外,保留原始结论而非 PASS。可移交合并与包发布;本轮未 merge/push/tag/构建/上传,合并后门与外部产物验收仍待执行。以下各节是分阶段历史,不追改当时结论;最新证据与例外见文末。原始输出在 `tests/outputs/134/`,不提交。
## 基线与修改边界
| 项目 | 实际证据 |
| --- | --- |
| 起点 | `6a09054`,保留既有两个本地测试提交,工作区仅原 `.pi/` 与待提交设计/计划 |
| T0 静态 | `t0-check.log``.exit`make check,退出 0import-linter 1 kept |
| T0 指定测试 | `t0-baseline.log``.exit`660 passed,退出 0 |
| 生产范围 | 只修改 thinkingprovidersclientopenai_compat 四文件;端口、类型、缓存指纹、遥测 schema、embeddingOCR 循环未改 |
| 文档回滚 | `2553fc7``dda5556`wiki 工具 add_entity 会覆盖无 frontmatter 的同名文件,故先补原文 frontmatter,再以节点存在性保护调用工具,显式登记图节点/implements 边 |
## 红绿证据
| 任务 | 红证据 | 绿证据 |
| --- | --- | --- |
| T1 AUTO 成员/MiniMax/未知告警 | `t1-red.log`9 failed103 passed;都是未拒绝/旧 medium/缺不保证文案 | `t1-green.log`112 passed |
| T1 可执行迁移文案 | `t1-guidance-red.log`:1 failed,旧错误无配置例 | `t13-followup-green.log`220 passed(含探针收尾) |
| T2 on_base 不偷带档 | `t2-wire-red.log`:12 failed,旧解析接受非法开启片段 | `t2-green.log`137 passed |
| T2 raw 纯守卫 | 隔离 `raw-guard` 变异:28 failed,含嵌套根与所有档位 | 还原退出 0;详见 mutation-summary.json |
| T3 标准 raw 实际 HTTP | `t3-raw-red-valid.log`21 failed,旧 transport 发出了冲突请求 | `t3-green.log`526 passed(工厂/配置/transportretry/纯解析) |
| T3 前置/准入 | `t3-entry-red.log`:4 failed,旧工厂构造后端/请求进入洋葱/冲突未拒绝 | 同上;额外半开探针测试证明可再次取得探针且 inflight=0 |
| T3 自定义根 | 隔离 `custom-guard` 变异:3 failed,丢 wire 后私有根绕过 | `t3-custom-green.log`3 passed |
| T4 迁移 | `cache-isolation` 变异:去掉显式身份后能力/fallback/wire 各节点红 | `t4-final-green.log`:190 passed(缓存与遥测);新旧身份回滚、租户、多源和 per-call 覆盖均有断言 |
| T4 命中遥测 | `cache-row` 变异:1 failed,历史 low 不应替代本次 medium | 还原退出 0 |
| T7 客户端 NULL | embed False→True6 failedOCR False→True12 failedtextlayout 独立红) | `t7-final-green.log`328 passed |
| T7 阳性/emitter | chat True→False:并发实际档断言失败;去 applies 短路:6 failed | 各还原退出 0chat 糖失败 auto、nearest 失败 medium/成功 low 另有真实链路断言 |
隔离副本来源由 `mutation-import.log` 验证,路径为 `/tmp/pgw134-mutation-*`;无 `.env`、reference、`.pi/`。脚本 `mutate.py`、汇总 `mutation-summary.json`、逐例 `mutation-*-red.log/.exit``mutation-*-restored.log/.exit` 均留存。11 个变异全部退出 1,逐例还原全部退出 0,恢复后校验文件散列。factory 三个变异分别抓到 Authorization 缺失、timeout 退回 5 秒、trust_env 写死 True。
## 调试记录(不把无效红当证据)
| 现象 | 根因与处理 |
| --- | --- |
| 初始 raw 红测试反而 21 passed | 测试选 qwen 纯开关形态却请求 HIGH,旧实现先因形态拒绝;改用可表达 HIGH 的 openai 后全部因目标未拒绝而红。`t3-raw-red.log` 不计红证据,使用 `t3-raw-red-valid.log` |
| 默认 HTTP factory 新测试 5 failed | 开发机 `socks://` 代理被 httpx 构造拒绝;测试 autouse 删除代理环境,仅隔离外部条件,不改生产 factory,仍分别验证 trust_env TrueFalse。`t3-isolated-green.log`207 passed |
| factory 失败随 T3 提交进入历史 | `8e61a66` 当时附带上述未隔离测试;随后 `71f1bdf` 独立修复。最终工作区全绿;不声称每个历史提交均全绿 |
| per-call 迁移工厂测试缺缓存参数 | 合成 env 仍为 cache_backend=noneloader 正确清空 namespacettl;改为 memory+显式 TTL,新测试 9 passed,不改生产配置默认 |
| conda run 默认捕获模式下 stdin 脚本未执行 | T0 第一次文档提交只有原始两文件;通过 --no-capture-output 重跑安全登记并单独提交,未将第一次零输出当登记成功 |
| pi-lens LSP 报缺 pytestloguru、旧 StrEnum Literal 噪音、Python 3.12 语法不支持 | 非 conda 解释器限制;父监督明确批准记录并继续既定 conda pytestruffimport-linter,不改枚举/不加 ignore。后续异步 stale 测试报告已标 superseded,最终实际全量单测输出为准 |
## 当前检查与后续门
| 检查 | 结果 |
| --- | --- |
| `conda run --no-capture-output -n PolyGateway pytest tests/unit/ -q` | `last-unit.log/.exit`**1241 passed3.95 秒,退出 0** |
| `make check` | `last-check.log/.exit`:格式/ruffimport-linter通过,退出 0 |
| `git diff --check` | 通过 |
| 本轮网络/slow | 未执行;所有 HTTP 为 MockTransportSQLite 为临时文件,无付费调用 |
| 独立 verifier/集成/slow/下游迁移 | 由父会话后续执行,本轮不声明通过;设计所列真实缺测和下游缺失仍有效 |
日志方案沿已批设计:未知能力沿既有 loguru warning,实际调用仍经 TelemetryEmitter 单点出口,四类行来源和 NULL 契约用既有 schema 验证,不新增运行时数据面。
## T5T6 与 T8 文档续作(起点 16fa0ca
本续作禁止发布/slow/付费调用,未改任何生产文件。已读完整批准设计、计划及 TDDstructured-loggingcommit 技能。独立验证与全量集成/live 仍由父会话负责,本节不表示整个版本验收完成。
| 门/节点 | 本会话实际结果/原始日志(tests/outputs/134/ |
| --- | --- |
| 受影响基线 | `t56-baseline.log`client/config/openai_compat **338 passed** |
| T5 新模块首次 | `t5-first.log`:98 passed;首次无行为红不计TDD,红证据来自下述隔离变异 |
| 当前受影响 | `t56-current-diagnostics-proof.log`client/live_evidence/config **325 passed**;旧异步2/131通知已被当前结果取代 |
| 日常全单元 | `t56-accepted-unit.log/.exit`**1357 passedexit 0**(其后仅取证关联/报告字段收尾,受影响325再通过,最终门见提交日志) |
| 静态 | `t56-accepted-check.log`make check 通过;compileall 测试支持模块通过;生产43模块123依赖、1契约通过 |
| live 采集 | `t56-accepted-collect.log/.exit`e2e **90 tests collectedexit 0**;仅采集,不是真实通过 |
### 隔离语义红→还原绿
仓库外临时副本只复制 src/tests/必要工程文件,不复制 `.env`、reference、`.pi`PYTHONPATH及 cwd 指向副本,import来源见 `t56-mutation-import.log``t56-consumer-mutation-import.log`。每个变异均目标 AssertionError、退出1,恢复散列一致后节点退出0,不靠 import error 当红。
| 变异 | 目标节点(tests/unit/test_live_evidence.py | 红/还原 |
| --- | --- | --- |
| 整类 skip | test_whole_exception_class_skip_is_forbidden | 10 |
| 正文子串 model_not_found | test_incomplete_or_ambiguous_error_body_fails | 10 |
| UNKNOWN 安静→PASS | test_coverage_is_proposition_specific | 10 |
| 缺轮缩分母 | test_missing_round_never_reduces_denominator | 10 |
| 身份无证据→skip | test_identity_requires_independent_raw_evidence | 10 |
| 丢第一轮 | test_round_consumer_keeps_first_success_when_second_assertion_fails | 10 |
| 部分档未覆盖→模型PASS | test_partial_uncovered_and_failed_rounds_never_become_model_pass | 10 |
| 不交付独立raw快照 | test_raw_identity_snapshot_reaches_round_consumer | 10 |
汇总与逐例日志:`t56-mutation-summary.json``t56-consumer-mutation-summary.json``t56-mutation-*-{red,restored}.log`;脚本 `mutate-live.py``mutate-live-consumer.py`。主工作区从未放回假绿策略。
### 实现与矩阵边界
取证按 session/parent→attempt→HTTP;零HTTP和多HTTP分开,404严格唯一完整证据,成功非流式原始JSON独立解析并拒重复键。成功SSE不预读、不捕获。真实RetryMW两并发逻辑轮次各503→成功验证精确成功call_id;取消ContextVar复位、资源关闭与逐轮报告写失败显式失败均有离线节点。报告不保存任何原始正文/异常,白名单字段含校验布尔、状态、身份资格与固定安全原因;假凭据/提示词sentinel逐文件无泄漏。
四live文件均迁入窄通道,装配拒绝/平铺键/合成Protocol移入日常;外部Protocol缺包单列未覆盖。M3真实开启改medium,M2 AUTO复用既有T10档;L4迁为退出受管的raw-only高档,双来源本地拒绝由已实现单测守卫。L8不可关闭装配拒绝不计live,未知wire仍显式全None离线验证。UNKNOWN不靠completion长度或prompt锚点升格;L2b仅保留指定历史prompt锚点命题,不是关闭能力。
默认轮数/并发未增加,删除额外UNKNOWN长度锚点调用;T10保留既有一次重试设置,去除60s stall缩小值。静态矩阵:L1–L7合计93逻辑调用,L8可关闭19型号×5=95T10 NONE 26×5=130及条件长复核≤78,开启57档×5=285,默认基线15,其他chat6+embed1=7;总上界703,不含既有治理重试/结构化重问。没有执行这些调用。
### 调试与未验证项
| 项 | 实际处置 |
| --- | --- |
| 新RetryPolicy测试参数误写base_delay_s | 当前工具实报TypeError,查源码后改backoff_base_s/backoff_max_s239及后续242/325通过;该失败不计目标红 |
| make check初报SIM117/B017 | 合并测试上下文,按真实解析异常指定类型,不加ignore;最终静态门通过 |
| pi-lens解释器/StrEnum噪音 | 记录 `t56-diagnostics.txt`,conda内真实导入与ruff为门,不改任务外枚举;pytest wrapper generator的return report是协议必需,独立next/send/StopIteration.value测试通过 |
| T10型号→400机器字段基线不存在 | 父会话明确确认:不编造白名单,实际400默认FAIL并逐轮留证。纯负向契约精确类型/状态/type单独测试;具体live预期拒绝未验证、需人工基线 |
| 结构化反馈重问(已被本次审查修复替代) | 原固定摘要会误拒正常反馈重问,独立审查判 P1;不再保留为可接受限制,修复与真实 StructuredMW 离线两响应证据见下节 |
| 发布/集成/live/下游 | 本任务未执行,M2空wire、M3非流式UNKNOWN、身份不足、三项目实际配置缺失仍保留为证据门 |
文档已同步README M1M9、CHANGELOG未发布段、env注释、ARCH D11/5.1/7.5/7.8、旧设计替代指针及既有schema/metric;无版本bump、无新生产字段/DDL。Wiki站已下线,不虚报线上页更新。
续作提交:`73008ad test: apply evidence-based live checks without hiding regressions`。最终提交前实际门:`t56-precommit-unit.log/.exit` **1357 passed/0**`t56-precommit-affected.log` **331 passed**(包含生产默认factory节点),`t56-precommit-check.log/.exit` **make check通过/0**`t56-precommit-collect.log` **90 collected**`t56-precommit-compile.log`通过;`git diff --check`通过,`git diff --quiet -- src`确认生产零差异。T8仅文档部分完成,不勾选完整验收门。
## 独立审查四项修复(起点 d332287)
按 receiving-code-review 对照实际调用链核验 `verify134/live-contracts.md`:四项均成立。此处沿用户限定仅更新既有 finding/plan,不新建图实体或扩写设计。生产/版本零差异;没有 live、付费请求或子代理。本节是实现者核验,不冒充新一轮独立复审。
| 审查项/核验依据 | 最小修复与守卫 |
| --- | --- |
| P1 结构化重问:StructuredMW._with_feedback 追加两消息,旧 hook 固定完整摘要必错 | 仅结构化模型 smoke 启用原提示词前缀摘要、成对 assistant/user 字符串与已有预算;首个 attempt 仍精确原消息。薄委托保存本次摘要只校验 HTTP 保真,不从 wire 反填预期,不关闭重问。真实 GatewayClientStructuredMWMockTransport 缺字段→合法响应恰两 HTTP PASS;破坏前缀、角色、内容类型、配对、预算、wire 均 FAIL;首轮凭空反馈另有 FAIL 守卫 |
| P1 未登记候选:旧 None 分支被置 cannot_disableABSENT 假失败 | 明确 observation-only,先全轮请求/身份资格,再 UNCOVEREDABSENTOBSERVEDUNKNOWN 与资格 FAIL 四组运行真实 T10 消费者(剔除 .env 读取语句),不调用模型、不改长复核条件或轮次 |
| P1 结论重新 UUID,多个型号失去对应关系 | 每用例显式传同一 run/model;子运行用该 run 下唯一 matrix_id 关联,结论含完整计划/完成分母。L1–L8、T10短长/各档/默认全部复用;两型号一 PASS 一 UNCOVERED,在 NONE、tiers、L8 三组逐文件验证关联和轮数 |
| P2 机器字段未落盘 | 仅精确 model_not_found 保留;其他字符串(含假凭据 sentinel)为 omitted;写入端再拒未知机器值,绝不输出任意上游 type |
### 本轮先红后绿与验证
日志位于 `tests/outputs/134/`,各命令结果后立即保存 `.exit`,原命令不接管道。
| 命令/节点 | 红证据 | 绿证据 |
| --- | --- | --- |
| `pytest tests/unit/test_live_evidence.py -k structured_reask -q` | `review-f1-red`1 failed6 passed,合法两响应误判 FAILexit 1 | `review-f1-green`7 passedexit 0 |
| `pytest tests/unit/test_live_evidence.py -k first_attempt_requires -q` | `review-f1-first-red`:首轮多反馈被放行,1 failedexit 1 | `review-final-affected`:含该节点共129 passedexit 0 |
| `pytest tests/unit/test_live_evidence.py -k unregistered_candidate -q` | `review-f2-red`ABSENT 被误判FAIL1 failed3 passedexit 1 | `review-f2-green`4 passedexit 0 |
| `pytest tests/unit/test_live_evidence.py -k capability_conclusions -q` | `review-f3-red`:三组结论缺型号断言红,3 failed,exit 1 | `review-f3-green`:三组+未登记四组共7 passedexit 0 |
| `pytest tests/unit/test_live_evidence.py -k safe_machine_type -q` | `review-f4-red`:三组缺机器字段,3 failedexit 1 | `review-f4-green`3 passedexit 0 |
| `conda run --no-capture-output -n PolyGateway pytest tests/unit/ -q` | — | `review-final-unit`**1375 passedexit 0** |
| `make check` | — | `review-final-check`:格式/ruffimport-linter 1 keptexit 0 |
| `conda run --no-capture-output -n PolyGateway pytest tests/e2e/ -m slow --collect-only -q` | — | `review-final-collect`**90 collectedexit 0**;不是90通过 |
上表节点命令也均加 `conda run --no-capture-output -n PolyGateway`;未使用缺 import 的伪红。最终受影响文件129单测通过,相比111新增18节点。pi-lens仍提示非conda缺httpx/pytest/pydantic及StrEnum等旧噪音,按已批准方向记录后继续conda门;新增测试命名空间显式 Any 类型,不抑制真实错误。
**尚未完成**:修复后独立复审、集成/make test覆盖率、真实能力取证、下游迁移和发布;T8/T9保持未勾选。M2空wire、M3非流UNKNOWN、真实机器拒绝白名单及外部服务状态不因离线绿变成已覆盖。
## 重启恢复与 embedding 报告补漏(起点 3eb22d2
恢复时实际分支为 `feature/1.3.4-thinking-contracts`HEAD=`3eb22d2`,已跟踪工作区无差异,仅既有 `.pi/` 未跟踪;前轮代码提交仍在,重启未丢代码。按用户限定只修测试与本 finding,不动生产 API/版本/计划,不联网、不付费、不运行 slow、不派子代理。本节为实现者验证,不冒充独立复审或版本验收。
`tests/outputs/134/slow-gate.log` 保留,大小 1625 字节;`slow-gate.exit` 不存在,属于重启中断、未取得终态,不能宣称 slow 通过。修复前后 SHA-256 均为 `05967dcf749b13db815dd80449a0db5b3e7ad2144aa2ae216f8c9ab5ecb21bf5`。历史日志不覆盖、不续写,也不把旧 full-gate 作为本轮测试证据。
| 根因/范围 | 本轮修复与证据 |
| --- | --- |
| embedding 消费者遗漏四个字段 | 仅在原 finally 报告出口增加 `requested_model=source.model``provider=source.provider``planned_rounds=1``completed_rounds=1`;完成计数指已收尾轮次,FAIL/UNCOVERED 也计入,不代表成功。沿用原 matrixroundsessionparentattempt 关联,不新建报告框架 |
| 环境可覆盖请求型号 | 既有 `test_live_evidence.py` 增加真实 probe 消费者回归:AST 仅剔除 `.env`pytestmark 顶层读取,合成环境实际经过 GatewaySettings;两种 probe 型号覆盖都与原 chat 型号不同,HTTP 与报告必须等于本次 source,不能拿默认型号占位 |
| 成功与所有目标错误路径 | 真实 OpenAICompatTransportLiveCaptureObservedTransport+报告写入;仅 HTTP 边界 MockTransport。两型号×成功/503/严格404ConnectError 共8节点,分别 PASSFAILUNCOVEREDFAIL;同时断言唯一报告、逻辑 UUID/attempt 配对、请求校验、状态/错误类型与客户端关闭 |
| 安全边界 | 假凭据及私有提示词 sentinel 放入成功 model 回显、错误正文和请求异常;逐份 Markdown 断言不泄漏,仍只写安全机器枚举/固定原因,不复制原始正文与异常 |
日志均在 `tests/outputs/134/`,命令不接管道,先保存真实退出码到同名 `.exit` 再展示输出。
| 命令(pytest 前缀均为 `conda run --no-capture-output -n PolyGateway` | 实际结果/日志 |
| --- | --- |
| `pytest tests/unit/test_live_evidence.py -k embed_probe_report -q`(修复前) | `embed-report-red.log/.exit`8 failed129 deselectedexit 1;八例均在真实报告消费处 `KeyError: requested_model`,不是 importmock 签名失败 |
| 同命令(四字段补齐后) | `embed-report-green.log/.exit`8 passed129 deselectedexit 0 |
| `pytest tests/unit/test_live_evidence.py tests/unit/test_embedding.py tests/unit/test_openai_compat.py::TestDefaultClientFactory -q` | `embed-report-affected.log/.exit`188 passedexit 0 |
| `pytest tests/unit/ -q` | `embed-report-unit.log/.exit`1383 passedexit 0;格式化后 `embed-report-final-unit.log/.exit`1383 passed4.45秒,exit 0 |
| `make check` | 首次 `embed-report-check.log/.exit` 为新断言排版失败(exit 2),不是行为红;仅对该测试文件运行 conda ruff format。`embed-report-check-green.log/.exit`:94文件格式合格、ruff通过、import-linter 1 kept0 brokenexit 0 |
pi-lens 仍报非 conda 解释器缺 httpxpytestdotenvpydantic 及旧 StrEnum 噪音;按任务授权记录,不添加 ignore、不改枚举、不扩环境修复范围。实际 conda 解释器为 `/home/iomgaa/miniconda3/envs/PolyGateway/bin/python`,本会话导入四依赖成功(httpx 0.28.1、pytest 9.1.1、python-dotenv 1.2.3、pydantic 2.13.4)。conda 启动器自身另有 base Python 3.13 的 RequestsDependencyWarning;未静音,不宣称输出零告警,测试进程与静态门实际退出0。
本修复不补写真正缺失的历史报告、不改变 embedding 能力判据;真实服务、slow、下游与发布证据仍由后续验收负责。
## 独立审查补正:取消不计完成轮(起点 7f6a824)
独立 verifier 指出:probe 的 finally 无条件写 `completed_rounds=1`,但 CancelledError 穿透时仍是 `FAIL/轮次未完成`,分母记录自相矛盾。已对照源码并在真实消费者复现,接受该问题;上节“已收尾即完成”的措辞不适用于取消,本节修正为**取得正常成功或普通异常分类终态才算完成**,不是 finally 执行过就完成。
最小修复仅在 probe 初始化 `completed_rounds=0`,成功判定或普通异常分类返回后置1;finally 写实际计数。取消仍穿透、计数保留0,不新增捕获 BaseException、不动生产 API/版本/分类器。扩展原消费者参数化测试增加两型号取消节点:真实 task 在 MockTransport 进入等待后由调用方 cancel,断言 CancelledError 穿透、task.cancelled、报告 FAIL/未完成、planned=1completed=0、原调用关联及客户端关闭;其他8例保持完成1。所有节点只替换外部 HTTP,不联网、不付费、不跑 slow。
| 命令(pytest 前缀为 `conda run --no-capture-output -n PolyGateway` | 本轮实际证据(tests/outputs/134/,各有 .log.exit |
| --- | --- |
| `pytest tests/unit/test_live_evidence.py -k 'embed_probe_report and cancelled' -q`,修复前 | `embed-cancel-red`2 failed137 deselectedexit1;两例均先验证取消穿透、报告存在及资源关闭,再因 `completed_rounds` 实际1而期望0失败 |
| `pytest tests/unit/test_live_evidence.py -k embed_probe_report -q`,修复后 | `embed-cancel-green`10 passed129 deselectedexit0;覆盖原8例与新增2例 |
| `pytest tests/unit/ -q` | `embed-cancel-unit`1385 passed4.08秒,exit0 |
| `make check` | `embed-cancel-check`:格式/ruff通过,import-linter 1 kept0 brokenexit0 |
既有非 conda LSP 误报继续只记录(本次额外将 `asyncio.timeout` 误判为缺属性);conda pytest 实际可执行,base RequestsDependencyWarning 未静音。此处是针对独立审查问题的实现及自验,修复后独立复核仍交父会话;不冒称审查门或版本验收已通过。原 slow 日志不改写。
## 1.3.4 发布准备与用户验收例外(2026-09-09,起点 b7e6943
**授权与边界**:用户正式批准不再补全模型矩阵,保留失败/UNKNOWN/不可达、未完成轮次及缺下游现行配置证据为本版验收例外,继续 1.3.4 发布准备。例外不是测试通过,不调整分类器/覆盖分母/能力表,不把渠道问题自动归因成库外错误,也不免除受影响下游首次新语义读写前的缓存迁移。原设计/计划的“需取证或人类明确豁免”分支由本次授权满足;不勾选完整 T8/T9 或任何尚未执行的发布门。
本轮仅修改 README、CHANGELOG、pyproject、包版本和本 finding。没有新增测试或生产行为变更;原红绿与变异按前述节点复用,不为了版本 bump 人为造红,不启动子代理,不重跑付费模型矩阵。`.env.example` 与 ARCH 的行为同步已在既有提交完成,Wiki 仍下线。
### 已核对并复用的证据
下表路径未写前缀时均相对 `tests/outputs/134/`;这些是已有原件,本轮只核对,不冒称本轮新跑。
| 门/范围 | 原始证据与适用结论 |
| --- | --- |
| 生产独立审查 | run `b8552a94-dc93-4834-b9ff-c6b457c315ae``verify134/production.md`:目标生产 diff 无 CriticalImportantMinor;后续仅测试补漏及本轮文档/版本,不重演同一生产审查 |
| 四项取证修复复审 | run `3bdee9d3-4678-4ddb-83d9-544156eb00cc``verify134/executable-retry.md`HEAD 3eb22d2 四项真实消费者复审无问题,1375 单元/18 定向节点通过,90 仅采集 |
| 取消计数独立复核 | run `c317eac4-e214-46fc-86a5-08a0d2187d3b``recovery/cancel-recheck.md`b7e6943 限定复核无阻塞,139 取证单测与 make check 通过;取消 completed=0、普通终态=1、穿透与资源关闭 |
| 红绿/变异 | 前文对应的11个契约变异、8个假绿变异、审查四项红绿及 embedding 报告/取消红绿均保留;不外推成新 live 证明 |
| 日常全量 | `full-gate.log/.exit`1508 passed、23 skipped、108 deselected、95%覆盖率、exit0`full-gate-monitor-note.md` 说明外层监控包装失败不等于 pytest 失败。该历史全量早于 embedding 报告补漏;其后测试改动由1385单元及独立复核补证,不声称是新 HEAD 的完整全量 |
| M2 空 wire AUTO | `recovery-20260909/m2-auto.log/.exit`2 passed、80 deselected、exit0M2.5 run `946ac7bf89d742aba8717e722c1e2f60`、M2.7 run `5587e6d9de1e4c7bb6a352afedb7e732` 各5/5轮流式、并发1,最终 wire 无偷带 medium、请求/身份资格及开启命题通过。只消除这两个单元的缺测,不外推其他模式/渠道 |
| Redis 时间语义 | `recovery-20260909/non-llm-slow.log/.exit`contracts/integration slow **18 passed、156 deselected、exit0**1142.05秒),不等同整个 slow 套件通过 |
上述独立报告原件位于 `/home/iomgaa/.pi/agent/sessions/--home-iomgaa-Projects-PolyGateway--/subagent-artifacts/outputs/<run>/`;本轮另原样复制到 `release/reused-reviews/`,不覆盖旧报告、不提交运行产物。
### 最新实测、网络诊断与明确未覆盖
| 项目 | 已取得的事实/本版结论 |
| --- | --- |
| 旧完整 slow 中断 | `slow-gate.log` 无对应 `.exit`,保留原 SHA-256 `05967dcf749b13db815dd80449a0db5b3e7ad2144aa2ae216f8c9ab5ecb21bf5`;不把日志中的局部成功当整套通过 |
| embedding 定向实测 | `recovery-followup-20260909/embedding.log/.exit`1 failed、exit1。独立三请求诊断 `channel-diagnosis-20260909.jsonl` 同一源 `minimax_1`、请求 `text-embedding-v1` 得503`error.type=new_api_error``error.code=model_not_found`、无可用渠道语义命中;**不是**404且 type 不匹配,仍 FAIL,不改成严格404未覆盖或“所有网关不支持 embeddings” |
| M3 与 claude 开启档位 | `recovery-followup-20260909/remaining-tiers.log/.exit`1 passed、1 failed、60 deselected、exit1(首错停止)。M3 run `8c852937e7144fa4b1641744785c9b2b` 六个显式档各5轮、共30/30完成,流式开启命题 PASSclaude-opus-5 run `d0303b5033f4449d82838690f1671470` 五档各5轮、共25/25完成,但至少一个开启命题 FAIL。逐轮请求成功不等于型号能力 PASS,也不能据M3流式覆盖消除非流式 UNKNOWN |
| claude 独立网络诊断 | `channel-diagnosis-20260909.jsonl` 中 high+简单题/复杂题均 HTTP200、SSE有DONE、回报身份一致;usage推理token=0reasoning_content原长1但去空白长0(只有空白)。可证明该次传输完成却缺非空推理信号,不能证明 high 已开启、不能把空白提升 OBSERVED,也不据此断言所有渠道/档位均不能推理。三请求诊断完成不等于三项能力通过 |
| 剩余矩阵停止 | `remaining-20260909/matrix.log/.exit`:选中40节点,在首个 gemini-3-flash NONE 节点约1080秒后 KeyboardInterruptexit1,无测试终态通过汇总。日志不能独立证明停止原因或网络根因;保持未完成,不算40失败或40通过,不继续补跑 |
| 其余证据缺口 | 历史 UNKNOWN/身份不足、未执行的型号/模式/关闭单元、型号级400机器字段基线、下游现行配置缺证据均按原记录保留。GovDoc/CHS 现行配置未取证,Video-Tree退出迁移后的历史兼容测试也非现行配置验收;不宣称三项目完成本版迁移 |
所有已有逐轮报告仍保留在 `live/<run>/`,汇总文件不能覆盖失败原件。本轮盘点共有453份报告:PASS标签255、FAIL标签108、UNCOVERED标签33、无status的轮数汇总57;**混有逐轮、命题、pytest及历史报告,不能相加成独立模型/测试通过率**。716个历史证据文件的 SHA-256 清单保存在 `release/prior-evidence-sha256.json`,最终复核字节不变。盘点首跑因轮数汇总无status产生 KeyError,保存 `release/evidence-audit.log/.exit`(exit1);修正盘点脚本区分汇总后 `release/evidence-audit-final.log/.exit` 为exit0,未修改原报告或生产代码。
### 本轮发布准备亲跑结果与交接门
| 检查/命令 | 实际结果/证据 |
| --- | --- |
| 先查远端占用 | 改文件前 `git ls-remote --tags origin refs/tags/v1.3.4 refs/tags/v1.3.4^{}`exit0且空;匿名 GET 包 simple/polygateway 索引HTTP200、不含1.3.4GET releases/tags/v1.3.4 HTTP404。日志 `release/remote-*`,未读取或输出凭据;未来发布前仍需复查以免竞态 |
| 版本与 README 数字 | 两处版本均1.3.4README安装下界改为 `>=1.3.4,<2`,新增醒目迁移警示和例外指针;CHANGELOG按实际日期2026-09-09定版。`inspect.signature` 实测 TelemetryRecorder 不含self为26参,能力表24条/含AUTO10条;`release/evidence-audit-final.log` |
| `make check` | `release/check.log/.exit`:94文件格式通过、ruff通过、import-linter 1 kept0 broken、exit0 |
| `conda run --no-capture-output -n PolyGateway pytest tests/unit/test_package.py -q` | `release/package.log/.exit`**6 passed0.08秒,exit0**,两版本一致且导出面可用 |
| `conda run --no-capture-output -n PolyGateway pytest tests/unit/ -q` | `release/unit.log/.exit`**1385 passed4.41秒,exit0**,未新增测试,无新付费调用 |
conda 启动器既有 RequestsDependencyWarning 保留,不宣称零告警。本轮 conda 内实际导入 dotenvhttpxredis.asyncio 成功;工具的非conda LSP旧诊断不转成代码修改或忽略规则。
**可移交合并与包发布,不等于已发布。** 父会话按本版例外边界完成本次文档/版本差异审查,再执行合并后静态/日常门及未豁免的发布检查;不把本次例外解释为必须补全模型矩阵,也不把豁免项勾成已跑通过。merge/push/tag/构建/twine上传/下载解包独立安装/Release及registry页面检查均尚未执行;只能在实际完成后记录。不得覆盖已有同版本不同字节。