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