Independent Staging Quality Gate run 2683 唯一失败: database-consultation-session-capacity 期望 false:session_missing, 实际是 f:session_missing。夹具把 boolean::text 的 false 规范成 psql -A 的 f。 五处期望值对齐既有合同;无 Docker 源码合同锁住 false→f。
64 lines
2.8 KiB
Markdown
64 lines
2.8 KiB
Markdown
# TASK · staging 门禁因容量合同 `false:` / `f:` 失配一直红(2026-09-16)
|
||
|
||
基线:`origin/staging` @ `8cb1877e`。最近一次含门禁路径的 staging 提交是 `1e3570b4`(其后 `8cb1877e` 为纯文档)。Gitea Independent Staging Quality Gate run `2683` / job `6103` **failure**。
|
||
|
||
## 事故实证
|
||
|
||
validate 步「Validate backend, package, frontend, and database contracts」失败。Python 快速门已通过。唯一 `not ok`:
|
||
|
||
```
|
||
not ok 1109 - append_consultation_question ignores thinking fields and enforces the physical JSON cap
|
||
location: frontend/tests/database-consultation-session-capacity.test.ts:120
|
||
Expected values to be strictly equal:
|
||
+ 'f:session_missing'
|
||
- 'false:session_missing'
|
||
```
|
||
|
||
同文件后面 `"false:invalid_question_message"`、三处 `"false:session_full"` 会被同一条夹具改写打红,只是第一条先炸。
|
||
|
||
从 `dcfc2f15`(BUG-732)起到 `1e3570b4`,staging 上每一次跑完的质量门都是 failure;中间被更新推送 cancel 的不算绿。
|
||
|
||
## 根因
|
||
|
||
`frontend/tests/helpers/postgres-fixture.ts` 的 `psql()` 对输出做:
|
||
|
||
```ts
|
||
.replace(/(^|:)false(?=:|$)/gm, "$1f")
|
||
```
|
||
|
||
`boolean::text` 是 `false`,`psql -A` 是 `f`。这条改写让既有合同(`true:f:f`、`f:grant_failed`)跨表示稳定。BUG-732 的真实库合同用了 `success::text`,却按未规范化的 `false:` 写期望值。执行方当时无 Docker,该文件 skip,带红合入。
|
||
|
||
## 决策记录
|
||
|
||
- 不删夹具的 false→f 规范化(billing / topology / report 等合同依赖它)。
|
||
- 不改 `append_consultation_question` 运行时 SQL。
|
||
- 产品授权:直接修测试并推 staging 重跑门禁。
|
||
|
||
## 硬红线
|
||
|
||
1. 不改 `.gitea/workflows/**`、不提升 `main`、不动 DNS。
|
||
2. 不改迁移、不改 RPC 签名/error_code。
|
||
3. 不顺手升级依赖、不顺手修无关 warning。
|
||
4. Bug 历史不写入姓名、出生资料、密钥。
|
||
|
||
## 任务分解
|
||
|
||
1. 五处期望值改为 `f:session_missing` / `f:invalid_question_message` / `f:session_full`。验收:源码不再出现 `"false:session_missing"` 等。
|
||
2. 夹具改写保留,加一行说明。验收:`database-billing-admin` 等既有 `f:` 断言的源码合同仍在。
|
||
3. 无 Docker 源码合同:夹具必须保留 false→f;真实库合同必须用 `f:`。验收:`consultation-session-capacity.test.ts` 新增一条,定向套件绿。
|
||
4. `docs/BUG_HISTORY.md` 连续号 **BUG-739**。关联 BUG-732。
|
||
5. 推 `origin HEAD:staging`,门禁对**本提交 SHA** 必须绿(或明确写出环境缺口)。
|
||
|
||
## 让步顺序
|
||
|
||
改期望值即可。禁止为了让测试过而拿掉夹具规范化。禁止改生产 SQL。
|
||
|
||
## 开工前置
|
||
|
||
```
|
||
git fetch origin --prune
|
||
git status -sb # 第一行必须是独立 worktree 分支
|
||
```
|
||
|
||
BUG 编号起点:开工时最大号 **BUG-738**,本单用 **BUG-739**。
|