Files
Jyotisha/docs/tasks/PROGRESS-report-density-fix2-20260923.md
T

6.8 KiB
Raw Blame History

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,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 缺口保留;本次门禁与部署成功不能代替报告登录态、真机打印等原真人清单验收。