5.7 KiB
5.7 KiB
PROGRESS-report-density-fix2-20260923 · BUG-1011 快照 SQL E2BIG 修复
当前状态(2026-09-23)
实现已完成,真实数据库验证仍待 Gitea Linux 门禁。 本轮从更正后的 origin/staging 基线 451a58089a2eaa8c7e5ae1f0648199b008aa0dc2 建立独立 worktree;没有修改旧的 staging-gate-red-20260923 worktree。BUG-1011 尚不能标记 resolved。
| 项 | 事实 |
|---|---|
| 工作树 / 分支 | .worktrees/report-density-fix2-20260923 / codex/report-density-fix2-20260923 |
| 基线 | 451a58089a2eaa8c7e5ae1f0648199b008aa0dc2(任务书更正提交) |
| 根因 | 约 428,557 字节的完整快照 SQL 被放进 psql -c 单个 argv;Linux MAX_ARG_STRLEN 约 131,072,门禁真实报 spawnSync docker E2BIG |
| 本机 Docker | CLI/daemon 存在,Server 29.8.0;创建 compose 网络时报 all predefined address pools have been fully subnetted,未清理其他会话网络 |
| 远端门禁 | 前一 run 2857 / validate job 6347 唯一失败仍是本 BUG;本轮代码尚未推送,暂无新 run |
| 状态 | investigating;等待真实 PostgreSQL 快照测试和完整数据库套件证据 |
实现与范围审计
G1:专用 stdin 单事务 helper
frontend/tests/helpers/postgres-fixture.ts新增psqlScriptAs(role, password, sql)。- 既有
psql与psqlAs的签名、argv、事务行为保持不变;未迁移其他数据库测试调用。 - 新 helper 通过 stdin (
input: sql) 传输 SQL,使用-X -At -v ON_ERROR_STOP=1 --single-transaction -f -,并设置maxBuffer: 16 * 1024 * 1024。 database-personal-report-sections.test.ts仅把完整快照写入调用和大 JSON 读回调用切换到新 helper;其他psql/psqlAs调用保持原样。- 完整虚构 reader Markdown、engine packet、snapshot JSON 构造、哈希、幂等/首版保留、owner-read RLS 与越权断言均未裁剪、删除或弱化。
- 新增
database-postgres-fixture-contract.test.ts:真实 fixture 路径构造 UTF-8 SQL 大于 131,072 字节,验证set_config(..., true)后续可见,并验证超过 1 MiB 的 stdout 能完整取回。这些运行时合同仍需可用 Docker 才能执行。
G2:原值 / 新值 / 原因
| 原值 | 新值 | 原因 |
|---|---|---|
完整快照写入使用 fixture.psqlAs(...),SQL 作为单个 -c 参数 |
仅该大快照写入使用 fixture.psqlScriptAs(...),SQL 经 stdin、整段单事务执行 |
避免 Linux E2BIG,同时保留 set_config(..., true) 所依赖的事务语义 |
完整快照读回使用默认 fixture.psql(...) 输出缓冲 |
该大 JSON 读回使用新 helper 的显式 16 MiB maxBuffer |
避免完整 payload 超过 Node 默认 1 MiB stdout 缓冲而产生 ENOBUFS;不改变断言 |
| 无大脚本运行时合同 | 新增超 argv 限制 SQL、事务本地设置可见性和大 stdout 合同 | 防止后续回退到 argv 传输或移除显式输出缓冲 |
验证账本
| 检查 | 结果 |
|---|---|
./node_modules/.bin/tsc --noEmit |
通过,0 错 |
npm run lint |
通过,0 error;保留仓库既有 119 条 warning,未顺修无关 warning |
| 受影响文件 ESLint | 通过,0 error |
tests/postgres-fixture-contract.test.ts |
2/2 通过(不启动 Docker) |
tests/database-postgres-fixture-contract.test.ts |
失败于 startPostgresFixture() 创建网络:all predefined address pools have been fully subnetted;未执行 SQL,不是 helper 或产品断言失败 |
tests/database-personal-report-sections.test.ts |
同一 Docker 网络创建错误;未执行迁移、快照写入、读回或 RLS 断言 |
npm run test:db |
47 tests / 8 pass / 39 fail;数据库 fixture 均在 Docker 网络创建时报 all predefined address pools have been fully subnetted,未执行 BUG-1011 SQL;本机环境缺口 |
npm test |
3,707 tests / 3,618 pass / 89 fail / 0 skipped;相对本轮此前记录的 3,704 名称基线新增 3 个合同测试,未发现 BUG-1011 引入的业务失败;失败含既有 Windows 路径、Docker 地址池、symlink EPERM 与既有断言,不能记全绿 |
npm run build -- --webpack |
编译与 TypeScript 通过;页面数据阶段因 Windows Skill runtime symlink EPERM 在 /api/daily-starlanguage 失败,未取得 Static/gzip |
node --import tsx --test tests/postgres-fixture-contract.test.ts |
3/3 通过(静态合同,不启动 Docker) |
node --import tsx --test tests/database-postgres-fixture-contract.test.ts |
1 fail(Docker 地址池创建前阻断),2 个静态 fixture 合同通过;没有执行 SQL |
./node_modules/.bin/tsc --noEmit |
通过,0 错 |
| 受影响文件 ESLint | 通过,0 error |
git diff --check |
通过 |
git diff --check |
已通过当前代码差异检查 |
硬红线核对
- 未修改
.gitea/workflows/**、schema、RPC、migration、生产代码或共享psql/psqlAs。 - 未删除、skip 或弱化测试;完整快照 fixture 与断言保留。
- 未使用
git stash、reset、clean、rebase或强推。 - 未读取或提交
references/oracle/artifacts/pending_packets内容;未读取、猜测或借用凭据;未清理其他会话 Docker 资源。 - staging 推送、Gitea 新 run、publish/deploy 与 health SHA 尚未发生,不能预写成功。
下一步
- 完成本机可执行的静态、前端与构建验证,并如实记录环境失败。
- 仅提交本单允许文件;推送前 fetch 并核对远端 staging,若有并行推进则保留双方历史,不强推。
- 推送后读取 Gitea validate 日志。只有
database-personal-report-sections.test.ts、新增大脚本合同和全部tests/database-*.test.ts在 Linux runner 通过,且无其他失败,才把 BUG-1011 改为 resolved;否则保留 investigating 并记录原文。