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

59 lines
8.0 KiB
Markdown
Raw Permalink 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.

# 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。