74 lines
6.8 KiB
Markdown
74 lines
6.8 KiB
Markdown
# 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)`,stdin `input: 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](https://git.copse.top/root/Jyotisha/actions/runs/2858),validate **6349**,日志明确包含:
|
||
|
||
- `ok 1269 - personal report sections enforce owner-read RLS and service-owned durable transitions`
|
||
- `ok 1270 - stdin PostgreSQL scripts carry large SQL and preserve transaction-local settings`
|
||
- `ok 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 缺口保留;本次门禁与部署成功不能代替报告登录态、真机打印等原真人清单验收。
|