Files
Jyotisha/docs/tasks/PROGRESS-report-density-fix2-20260923.md
T
jesse-uxandClaude Code 018b2b4883
Independent Staging Quality Gate / validate (push) Successful in 11m8s
Independent Staging Quality Gate / publish (push) Successful in 3m52s
fix(test): stream large report snapshot SQL
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 18:51:08 +08:00

68 lines
5.7 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.
# 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 尚未发生,不能预写成功。
## 下一步
1. 完成本机可执行的静态、前端与构建验证,并如实记录环境失败。
2. 仅提交本单允许文件;推送前 fetch 并核对远端 staging,若有并行推进则保留双方历史,不强推。
3. 推送后读取 Gitea validate 日志。只有 `database-personal-report-sections.test.ts`、新增大脚本合同和全部 `tests/database-*.test.ts` 在 Linux runner 通过,且无其他失败,才把 BUG-1011 改为 resolved;否则保留 investigating 并记录原文。