6.8 KiB
6.8 KiB
PROGRESS-report-density-fix2-20260923 · BUG-1011 快照 SQL E2BIG 修复
当前状态(2026-09-23)
BUG-1011 已修复,Gitea 门禁全绿,staging 已部署。 修复提交 018b2b4883eede47dae60f8860d92da0fac82f5e;run 2858 / validate job 6349 为 3,764 pass / 0 fail / 0 skip,publish job 6350 成功。匿名 /api/health 返回 200,deployment.gitCommit 与 deployment.apiGitCommit 均等于修复 SHA;/login 200、未登录 /api/account 401。未提升 main。
| 项 | 事实 |
|---|---|
| 工作树 / 分支 | .worktrees/report-density-fix2-20260923 / codex/report-density-fix2-20260923 |
| 基线 | 451a58089a2eaa8c7e5ae1f0648199b008aa0dc2(任务书更正提交) |
| 开工 Bug 最大号 | BUG-1014;本单修复既有 BUG-1011,不新增编号 |
| 根因 | 约 428,557 字节的完整快照 SQL 被放进 psql -c 单个 argv;超过 Linux MAX_ARG_STRLEN 约 131,072 字节 |
| 原门禁 | run 2857 / validate 6347:3,762 tests / 3,761 pass / 1 fail,唯一失败为 spawnSync docker E2BIG |
| 本轮门禁 | run 2858 / validate 6349:3,764 tests / 3,764 pass / 0 fail;cancelled/skipped/todo 均 0 |
| 名称多重集合 | 比较上述两个真实 job 完整日志:既有名称消失 0,新增恰好 2 条,新增失败 0 |
| 本机 Docker | Server 29.8.0 可用,但 compose 创建网络报 all predefined address pools have been fully subnetted;未清理其他会话资源 |
G1:实现与范围审计
frontend/tests/helpers/postgres-fixture.ts新增psqlScriptAs(role, password, sql),stdininput: sql,参数-X -At -v ON_ERROR_STOP=1 --single-transaction -f -,显式maxBuffer: 16 * 1024 * 1024。- 既有
psql与psqlAs实现、签名和 argv 一字未改。其余测试继续使用原有单事务-c路径。 database-personal-report-sections.test.ts仅更换完整快照写入和大 JSON 读回两个调用入口。后者依据任务书 G1 的显式大缓冲要求;不裁剪 payload,也不把完整对象比较降级成局部检查。- reader Markdown、engine packet、snapshot 构造、哈希、首版保留与越权隔离等原断言原样保留。
- 新增
database-postgres-fixture-contract.test.ts,真实启动 fixture,执行 UTF-8 大于 131,072 字节的 SQL;验证事务本地set_config(..., true)对后续查询仍可见,并完整取回 1,048,577 字节 stdout。 - 原静态
postgres-fixture-contract.test.ts新增 stdin / maxBuffer / 单事务 / 旧-c路径合同;其首次新正则遗漏换行,已在提交前改为匹配空白并复验 3/3。没有为通过测试修改共享 helper。 - 独立只读审查未发现具体缺陷,确认共享 helper、完整 fixture 与原断言不变。运行证据以下列真实 Gitea 日志为准,不以审查替代运行。
G2:原值 / 新值 / 原因
| 原值 | 新值 | 原因 |
|---|---|---|
完整快照写入走 fixture.psqlAs(...),SQL 作为单个 -c 参数 |
仅该大快照写入走 fixture.psqlScriptAs(...) |
避免 E2BIG,保留整段单事务语义 |
大 JSON 读回走默认输出缓冲的 fixture.psql(...) |
读回走新 helper 的显式 16 MiB 缓冲,仍用 postgres 角色 | 防止默认 1 MiB 输出缓冲导致 ENOBUFS;原完整对象断言不变 |
| 无大脚本及大输出运行时合同 | 新增超 argv 限制 SQL、事务本地设置与大 stdout 合同 | 防止传输和事务语义回归 |
| 原快照、幂等、RLS 断言 | 全部原样 | 本单只修测试传输,不改产品性质或断言标准 |
本机验证(不等同远端通过)
| 检查 | 实际结果 |
|---|---|
tsc --noEmit |
0 错 |
npm run lint |
0 error / 119 既有 warning;未顺修无关 warning |
| 受影响测试文件 ESLint | 0 error |
| 静态 fixture 合同最终复验 | 3/3,通过;不启动 Docker |
| 目标快照与新运行时合同定向 | 均失败在 Docker 网络创建,未执行 SQL;不是产品断言失败 |
npm run test:db |
47 tests / 8 pass / 39 fail / 0 skip;含 Docker 网络、Windows symlink 与路径相关失败,不能说所有失败均为 Docker |
npm test |
3,707 tests / 3,618 pass / 89 fail / 0 skip;该次运行未包含后来新增的静态合同,不能将其写成最终全量成绩或名称对照完成。最终名称比较以 Gitea 两个 job 为准 |
npm run build -- --webpack |
webpack 与 TypeScript 通过;页面数据阶段因 Skill runtime alias symlink EPERM 在 /api/daily-starlanguage 失败;本机 Static/gzip 未取得 |
git diff --check |
通过 |
本机初次定向因新树缺 tsx 无法启动,随后复制相同锁文件对应的既有依赖,不升级依赖。两次指定固定日志路径的重定向被工具拒绝后,改用工具自动创建的后台日志,未覆盖被拒目标。
Gitea 真实数据库与门禁证据
run 2858,validate 6349,日志明确包含:
ok 1269 - personal report sections enforce owner-read RLS and service-owned durable transitionsok 1270 - stdin PostgreSQL scripts carry large SQL and preserve transaction-local settingsok 1872 - large PostgreSQL scripts use stdin without changing shared -c helpers# tests 3764/# pass 3764/# fail 0/# skipped 0。
完整 test:db 本机命令列出的 47 个测试名称,逐一在 validate 6349 日志中找到 ok 记录,无缺失;门禁通过证据来自完整 npm test 中的数据库用例,不声称门禁另跑了独立 test:db 命令。migrate run 2859/job 6351 和 deploy run 2860/job 6352 均成功。匿名 health 未提供 swisseph_available 字段,本轮没有额外访问内部健康接口,不将该字段写成已验证。
与 job 6347 的名称多重集合比较:REMOVED [];新增只有上述两条 helper 合同。原快照测试首次真正执行完整落库、冲突完成保留首版和他人不可读断言,全部通过,未触发任务书的产品断言失败停止条件。
交付与边界
- 正常快进推送
451a5808 → 018b2b48,ls-remote已核对完整 SHA。 - publish 6350 成功;后续 run 2859、2860 成功。部署健康 SHA 已追上代码提交。后续验收文档为纯文档,不应触发新部署。
- 没有生产代码/UI 改动;没有改 workflow、schema、RPC、migration、main 或 DNS。
- 未删测试、加 skip、缩短快照;未使用 stash/reset/clean/rebase/强推;未读取保护 pending packets 或借用账号,未清理他人 Docker 资源。
- 仅使用用户已配置并授权的 Gitea token 在内存请求头读取门禁;未打印或落盘凭据。未运行本机跨库 quick/隐私扫描,不声称本机全库隐私通过。
- 本机 Windows 构建与 Docker 缺口保留;本次门禁与部署成功不能代替报告登录态、真机打印等原真人清单验收。