pbl_runtime_ext/docs/work-log-2026-09-22.md
2026-09-22 11:48:27 +08:00

8.0 KiB
Raw Permalink Blame History

Work Log — 2026-09-22(M11b-2c-A 实跑 pytest + selftest 并落盘留证 / QC 退回响应)

  • 模块仓库: modules/pbl_runtime_ext(PBL scense_runtime 薄扩展,M11a/M11b 单事务事件+状态写入与广播)
  • 任务: [M11b-2c-A] 实跑 pytest + selftest 并落盘留证(QC 退回 5 条意见逐条响应)
  • 执行环境: Python 3.10.12 / pytest 9.1.1 / venv=.venv(已存在,pip install -e . 已装)
  • 起始 HEAD: 51c3f26(含 5542cf5 PBL-RTX-0004 修复)

1. 本轮时间线(命令与结果)

# 命令 结果 退出码
1 .venv/bin/python -m pytest tests/ -v --tb=short 9 passed in 0.40s(collected 9 items) 0
2 .venv/bin/python scripts/m11b_selftest.py 总计 110 项,PASS 110,FAIL 0 / RESULT: PASS 0
3 .venv/bin/python scripts/m11b2c_p99_probe.py --samples 30 write(INSERT) P99=0.1946ms / read P99=0.1238ms / write(UPDATE) P99=0.4233ms,P99 结论:达标 0
4 bash tests/run_m11b1a_localdb.sh 失败(实库 DDL 装载 ERROR 1064,见第 4 节) 1

留证落点(project-directory-spec 第五节 develop 落点,非模块仓库内临时目录):

  • projects/pbls/docs/02-develop/m11b2c-pytest-run.log — 本轮重跑,含完整命令 + 时间戳 + 9 passed + EXIT_CODE=0
  • projects/pbls/docs/02-develop/m11b2c-selftest-run.log — selftest 110 项 + P99 数值行 + 实库 runner 原样输出与根因
  • projects/pbls/docs/02-develop/m11b2c-pytest-run-history-20260921T1150-failed.log — 上一轮 3 failed, 6 passed 失败证据归档保留(未覆盖、未删改)

2. QC 退回意见逐条响应

QC 问题 本轮处置 证据
#1 T3 因 PBL-RTX-0004 失败(_apply_state UPDATE 分支 NOT NULL 全列构造) 采纳 (b) 路线:该缺陷已在前序 commit 5542cf5 修复(build_row(full_row=False) UPDATE 语义 + required_columns 识别 nullable/排除自增与 DEFAULT 列 + self_check 闭环门禁)。本轮实跑 T3 由 FAIL → PASS,未使用 xfail / 未放宽断言阈值 / 未静默跳过 pytest 日志 T3 PASSED;selftest B7[顺序与版本] 全 PASS
#2 仓库唯一留证是失败证据(collected 0 items / EXIT_CODE=5、EXIT_CODE=1),与「实跑留证」表述矛盾 重跑并覆盖到规范落点,两份 log 均含完整命令行、时间戳、9 passed、EXIT_CODE=0,并补 m11b2c_p99_probe.py 成功输出(P99 数值行 + P99 结论:达标);旧失败证据改名归档不丢失 上述三个 log 文件
#3 探针 assert len(rows) == 1 恒不成立(预热 state_key 与采样同 (tenant,session),entity_ids 在内存替身未下推)→ T4/T4b 崩溃、P99 从未产出 预热改用独立 session_id=90911;采样侧按 entity_id 二次过滤后断言;新增「返回行 entity_id 与请求一致」断言(bad_rows 计数并入 verdict)防再次静默放宽 探针输出 read 行 entity_id 一致性校验:PASS 全部与请求一致;T4/T4b/T4c 全 PASS
#4 .m11b2c_tmp/ 5 个 .out/.err 临时产物被 git 收口提交进模块仓库,污染仓库且不在规范落点 git rm -r --cached .m11b2c_tmp/ + 物理删除目录;.gitignore 已含 .m11b2c_tmp/、.pytest_cache/、__pycache__/、.venv/、*.log;留证迁至 projects/pbls/docs/02-develop/;本 work-log 按 module-development-spec 补齐 git status --short 中 7 条 D .m11b2c_tmp/*
#5 test_t4c_probe_declares_environment_limit_honestly 是 open().read() 字符串包含式 grep 伪测试(T4/T4b 全崩时它仍 PASS) 重写为 test_t4c_probe_runs_and_discloses_environment_limit:真实调用 p99_probe.run(30),断言 rc in (0,1)(rc=2 判为探针失效)、rw['n']>=30、rr['n']>=30、六项百分位元数据非 NaN、P99<=200ms、capsys 捕获输出中确有 P99= 数值行与 P99 结论: 行、entity_id 一致性校验 PASS;「环境受限诚实声明」降级为对模块 docstring 的附加校验而非唯一断言 tests/test_m11b2c_runtime_ext.py::test_t4c_probe_runs_and_discloses_environment_limit PASSED

3. 关键技术决策与陷阱

  1. 不放宽断言,改修根因:QC #1 给了 xfail 挂单与真修两条路。因 PBL-RTX-0004 属本模块 _apply_state UPDATE 分支的实现缺陷(非外部业务缺陷),且修复已落地,选真修路线——留证必须是「全绿 + RC=0」的真实执行,不接受用 xfail 掩盖可修缺陷。
  2. 失败证据不删除,只归档:QC #2 的实质是「声称与实测矛盾」,处置方式是补出成功证据,同时把失败证据改名为 *-history-<timestamp>-failed.log 保留,形成缺陷→修复→复验的完整链条。
  3. P99 采样的分支覆盖:探针 S 段(唯一 entity_id → 状态行首建 INSERT 分支)与 U 段(固定 entity_id 反复覆写 → UPDATE 分支,正是 PBL-RTX-0004 触发点)分别计时,避免修复后 UPDATE 分支重新劣化无人察觉。U 段 P99=0.42ms 与 S 段同量级,说明修复未引入性能回退。
  4. 诚实声明(环境受限):内存事务引擎 FakeEngine 驱动的 P99 覆盖「幂等键计算 → 事件 INSERT → 状态 UPSERT(乐观锁) → 快照 INSERT → commit → 提交后广播」完整代码路径,但不含网络 RTT 与真实 InnoDB 提交开销,不冒充真实库数字。真实库复测路径:pbls 应用环境执行 python3 scripts/m11b_selftest.py --live。
  5. 陷阱:read_states 按 (tenant_id, session_id) 过滤,entity_ids 入参在内存替身实现中不下推 IN 条件——任何按 entity_id 断言行数的写法都必须自己二次过滤,否则断言恒假(本轮 QC #3 根因)。

4. 环境受限项 / 遗留缺陷(上报 PM)

  • C 层真实库端到端未验证:本工作空间无 ahserver/apppublic/sqlor 运行时(ModuleNotFoundError),selftest C 段自身即 SKIP 并如实声明。
  • bash tests/run_m11b1a_localdb.sh 失败(新发现,非本轮引入):一次性本地 MariaDB 能正常拉起(mariadbd ready (2s)),但 scripts/pbl_runtime_event_ddl.py:full_script() 渲染的 C 段存储过程 pbl_assert_append_only 中 IF ... THEN RETURN; END IF; 未被 DELIMITER 正确包裹,mariadb CLI 在 RETURN 后的分号提前切分语句 → ERROR 1064 (42000) at line 65 → 后续 CALL pbl_runtime_event_ensure_partitions(9) 报 1305 PROCEDURE pbls.pbl_runtime_event_ensure_partitions does not exist → runner rc=1。
    • 建议登记为 PBL-RTX-0005(DDL 生成器存储过程 DELIMITER 兼容性缺陷,影响 append-only 守卫与分区维护过程实库装载)。
    • 本任务边界禁止修改 scripts/pbl_runtime_event_ddl.py 与 models/*.json,故未在此修复;原样输出与根因已写入 m11b2c-selftest-run.log 第 [3/3] 段。
    • 等价覆盖已按任务规则补记:A 层离线核验 18 项 → pytest T1/T1b;B 层端到端 110 项 → pytest T3(同一份 tx_write 主链路代码)。
  • develop 侧无 report_bug 工具:本轮按角色工具集(classify/start_fix/fix_bug/list_bugs)无立单能力,PBL-RTX-0005 以 work-log + 交付摘要 + log 三处留痕方式上报 PM,请 PM 派生修复任务。

5. 分支与提交状态

  • 分支:main(本地仓库,无远程;部署前需 git remote add origin 才能被 deploy 角色 pull)
  • 本轮工作区变更(本 log 落笔时 git status --short):
    • D .m11b2c_tmp/pytest_run1.txt、D .m11b2c_tmp/selftest.err、D .m11b2c_tmp/selftest.out、D .m11b2c_tmp/selftest2.err、D .m11b2c_tmp/selftest2.out、D .m11b2c_tmp/selftest_run1.txt、D .m11b2c_tmp/tb3.err(索引内删除,收口时生效)
    • M tests/test_m11b2c_runtime_ext.py(T4c 重写为行为断言 + T3b read 行按 entity_id 过滤)
    • ?? docs/work-log-2026-09-22.md(本文件)
  • 按任务边界,git commit 由 PM 审核通过后系统统一收口(引擎代为执行),本角色不自称已 commit/push。