pbl_runtime_ext/tests/evidence/rtx0005_gate_regression_20260922.txt
agent.develop f91aa2e7c6 test(PBL-RTX-0005): 核验性门禁回归取证入库(响应 QC #10)
- tests/evidence/rtx0005_gate_regression_20260922.txt(16767B): 本任务内重跑并原样落盘
  [1] pbl_runtime_event_ddl.py --verify rc=0(DELIMITER 配对/过程体无非法 RETURN/门禁自检坏样本可检出)
  [2] pytest tests/ rc=0 9 passed  [3] m11b_selftest.py rc=0 110 PASS 0 FAIL
- docs/work-log-2026-09-22-rtx0005.md: 追加 §7 第2轮收口——如实写明修复代码本体源自
  前序提交 dfffebb(引擎代为收口),本轮为取证/门禁/文档收口,未重写修复代码;
  并记录 QC #9 sd_bugs 状态机实测不过(start_fix/fix_bug 均 FAIL: Bug 不存在)未伪造
- 选择性 git add 2 项,未使用 git add -A
2026-09-22 15:24:50 +08:00

169 lines
16 KiB
Plaintext
Raw 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.

=== PBL-RTX-0005 核验性门禁回归取证(响应 QC #10)===
时间: 2026-09-22 15:22:32 +0800
git HEAD: c3726dd branch: main
说明: 修复代码本体源自前序提交 dfffebb;本文件为本任务内的显式核验性提交——重跑 verify() 静态门禁 + 全套回归,证明 DELIMITER/RETURN 缺陷已闭环且未复发。
--- [1] python scripts/pbl_runtime_event_ddl.py --verify ---
PASS 任务书字段齐备: id,tenant_id,event_uid,event_code,idem_key,world_id,scene_id,session_id,entity_id,actor_id,event_type,payload,payload_json,causation_id,seq,seq_no,source,state,state_version,tx_group,broadcast,created_by,created_at,updated_at,occurred_at
PASS 物理主键=id,created_at(逻辑主键 id + 分区键)
PASS 唯一键均含分区键: uk_event_uid,uk_tenant_idem
PASS 存在 (scene_id, created_at) 复合索引 ix_scene_created
PASS 存在 event_uid 唯一索引 uk_event_uid
PASS 预建 6 个月分区: p202609,p202610,p202611,p202612,p202701,p202702 + pmax(MAXVALUE)
PASS 分区键类型 DATETIME(非 TIMESTAMP)
PASS append-only: BEFORE UPDATE + BEFORE DELETE + pbl_assert_append_only()
PASS 覆盖 M11a/M11b 写路径全部列名(23 个)
PASS 幂等:IF NOT EXISTS + DROP ... IF EXISTS + 分区存在性判断
PASS DELIMITER 语句完整性: 4 个产物 DELIMITER 配对正确、27 个 $$ 段首关键字完整、无裸 CREATE$$/DROP$$ 残缺行
PASS 幂等关键字逐文件覆盖: 01 建表分区 / 02 过程+双触发器 / 03 双过程+EVENT
PASS 过程体无非法 RETURN(PBL-RTX-0005 门禁): 4 个产物的过程/触发器体均为等价正向条件单语句 SIGNAL,append-only 守卫完整保留
PASS 非法 RETURN 门禁自检:坏样本(含 RETURN;)被检出 1 条、好样本(修复后守卫)零误报
VERIFY PASS
RC_VERIFY=0
--- [2] .venv/bin/python -m pytest tests/ -v --tb=short ---
============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-9.1.1, pluggy-1.6.0 -- /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/.venv/bin/python
cachedir: .pytest_cache
rootdir: /d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext
configfile: pyproject.toml
collecting ... collected 9 items
tests/test_m11b2c_runtime_ext.py::test_t1_ddl_offline_harness_all_pass PASSED [ 11%]
tests/test_m11b2c_runtime_ext.py::test_t1b_ddl_baseline_sha256_matches PASSED [ 22%]
tests/test_m11b2c_runtime_ext.py::test_t2_selftest_offline_all_pass PASSED [ 33%]
tests/test_m11b2c_runtime_ext.py::test_t2b_three_place_sync_for_m11b_contracts PASSED [ 44%]
tests/test_m11b2c_runtime_ext.py::test_t3_selftest_memory_engine_end_to_end PASSED [ 55%]
tests/test_m11b2c_runtime_ext.py::test_t3b_state_conflict_rolls_back_cleanly PASSED [ 66%]
tests/test_m11b2c_runtime_ext.py::test_t4_p99_write_event_with_state_within_sla PASSED [ 77%]
tests/test_m11b2c_runtime_ext.py::test_t4b_p99_read_entity_state_within_sla PASSED [ 88%]
tests/test_m11b2c_runtime_ext.py::test_t4c_probe_runs_and_discloses_environment_limit PASSED [100%]
============================== 9 passed in 0.47s ===============================
RC_PYTEST=0
--- [3] .venv/bin/python scripts/m11b_selftest.py ---
--- A. 离线单元 ---
partitions | partitions PASS:跨年命名 ['p202611', 'p202612', PASS partitions PASS:跨年命名 ['p202611', 'p202612', 'p202701', 'p202702']
partitions | partitions PASS:下月边界 2027-01-01 PASS partitions PASS:下月边界 2027-01-01
partitions | partitions PASS:已存在分区 skip、缺失分区 add PASS partitions PASS:已存在分区 skip、缺失分区 add
partitions | partitions PASS:DDL ALTER TABLE pbl_runtime PASS partitions PASS:DDL ALTER TABLE pbl_runtime_event ADD PARTITION (PARTITION p202602 VALUES LESS THAN (DATE'2026-03-01'))
partitions | partitions.self_check PASS PASS partitions.self_check PASS
partitions.self_check 整体 PASS
broadcast | broadcast PASS:after_cursor=4 只回 1 条 PASS broadcast PASS:after_cursor=4 只回 1 条
broadcast | broadcast PASS:环形缓冲溢出报 truncated=True PASS broadcast PASS:环形缓冲溢出报 truncated=True
broadcast | broadcast PASS:通道按 tenant.world 隔离 PASS broadcast PASS:通道按 tenant.world 隔离
broadcast | broadcast PASS:订阅者扇出成功 PASS broadcast PASS:订阅者扇出成功
broadcast | broadcast PASS:stats published=6 p95=0.018ms PASS broadcast PASS:stats published=6 p95=0.018ms 越界=0
broadcast | broadcast PASS:通道命名 pbl.world.7.1 PASS broadcast PASS:通道命名 pbl.world.7.1
broadcast | broadcast.self_check PASS PASS broadcast.self_check PASS
broadcast.self_check 整体 PASS
latency | latency PASS:裁决 120ms ≤ 200ms 未越界 PASS latency PASS:裁决 120ms ≤ 200ms 未越界
latency | latency PASS:裁决 450ms > 200ms 记越界 PASS latency PASS:裁决 450ms > 200ms 记越界
latency | latency PASS:summary avg=285.0 p95=450.0 breac PASS latency PASS:summary avg=285.0 p95=450.0 breaches=1
latency | latency PASS:轮询兜底 3000ms 已配置 PASS latency PASS:轮询兜底 3000ms 已配置
latency | latency PASS:p95=10 PASS latency PASS:p95=10
latency | latency PASS:Timer 实测 5.1ms PASS latency PASS:Timer 实测 5.1ms
latency | latency.self_check PASS PASS latency.self_check PASS
latency.self_check 整体 PASS
tx_write | tx_write PASS:幂等键同参同键、异参异键、≤32 字符(bebdba41666 PASS tx_write PASS:幂等键同参同键、异参异键、≤32 字符(bebdba416666…)
tx_write | tx_write PASS:client_event_id 原样透传(重放同键) PASS tx_write PASS:client_event_id 原样透传(重放同键)
tx_write | tx_write PASS:pbl_runtime_event 禁 UPDATE/DELE PASS tx_write PASS:pbl_runtime_event 禁 UPDATE/DELETE/TRUNCATE
tx_write | tx_write PASS:基表写保护生效(world 等 6 张) PASS tx_write PASS:基表写保护生效(world 等 6 张)
tx_write | tx_write PASS:pbl_runtime_event 用到的 13 列与 mod PASS tx_write PASS:pbl_runtime_event 用到的 13 列与 models 定义一致
tx_write | tx_write PASS:pbl_entity_state 用到的 9 列与 model PASS tx_write PASS:pbl_entity_state 用到的 9 列与 models 定义一致
tx_write | tx_write PASS:pbl_world_state_snapshot 用到的 9 PASS tx_write PASS:pbl_world_state_snapshot 用到的 9 列与 models 定义一致
tx_write | tx_write PASS:UPDATE SET 语义不误报缺 NOT NULL 列(PB PASS tx_write PASS:UPDATE SET 语义不误报缺 NOT NULL 列(PBL-RTX-0004 误报侧已闭环)
tx_write | tx_write PASS:INSERT 真缺列仍被 PBL-RTX-0004 拦下(fa PASS tx_write PASS:INSERT 真缺列仍被 PBL-RTX-0004 拦下(fail-closed 未弱化)
tx_write | tx_write PASS:pbl_runtime_event 必填列 2 个(已排除自增 PASS tx_write PASS:pbl_runtime_event 必填列 2 个(已排除自增/DEFAULT 列):event_uid,event_type
tx_write | tx_write PASS:pbl_entity_state 必填列 8 个(已排除自增/ PASS tx_write PASS:pbl_entity_state 必填列 8 个(已排除自增/DEFAULT 列):tenant_id,session_id,entity_id,state_version,checksum,updated_by,created_at,updated_at
tx_write | tx_write PASS:pbl_world_state_snapshot 必填列 8 PASS tx_write PASS:pbl_world_state_snapshot 必填列 8 个(已排除自增/DEFAULT 列):tenant_id,session_id,snapshot_uid,state_fingerprint,events_through_seq,reason,created_at,updated_at
tx_write | tx_write PASS:pbl_runtime_event 部分必填列被 PBL-RT PASS tx_write PASS:pbl_runtime_event 部分必填列被 PBL-RTX-0004 拦下
tx_write | tx_write PASS:pbl_entity_state 部分必填列被 PBL-RTX PASS tx_write PASS:pbl_entity_state 部分必填列被 PBL-RTX-0004 拦下
tx_write | tx_write PASS:事件表/快照表 INSERT 写路径列集合通过校验(无回归) PASS tx_write PASS:事件表/快照表 INSERT 写路径列集合通过校验(无回归)
tx_write | tx_write PASS:UPDATE 禁止 SET 不可变列(PBL-RTX-0006 PASS tx_write PASS:UPDATE 禁止 SET 不可变列(PBL-RTX-0006)
tx_write | tx_write PASS:3 协程契约 + 1 同步守卫签名正确 PASS tx_write PASS:3 协程契约 + 1 同步守卫签名正确
tx_write | probe| PASS P1 正常写入(事件+2状态+快照)单事务提交:stmt=8 事件 PASS probe| PASS P1 正常写入(事件+2状态+快照)单事务提交:stmt=8 事件行=1 状态行=2 快照行=1 广播在commit后=True 占位符违规=0
tx_write | probe| PASS P2 幂等重放:dedup=True 事件行数=1 广播次数=0( PASS probe| PASS P2 幂等重放:dedup=True 事件行数=1 广播次数=0(重放不重复写、不重复广播)
tx_write | probe| PASS P3 乐观锁冲突回滚:错误码=PBL-STATE-CONFLICT PASS probe| PASS P3 乐观锁冲突回滚:错误码=PBL-STATE-CONFLICT commit=-1 rollback=5 事件行残留=0 广播=0
tx_write | probe| PASS P4 中途故障原子性:抛出=RuntimeError rollba PASS probe| PASS P4 中途故障原子性:抛出=RuntimeError rollback=5 已提交事件行=0 已提交状态行=0 广播=0
tx_write | probe| PASS P5 append-only:UPDATE/DELETE/TRUN PASS probe| PASS P5 append-only:UPDATE/DELETE/TRUNCATE 被代码守卫拦截=True 引擎兜底拦截=True
tx_write | probe| PASS P6 占位符/参数数门禁生效:'SELECT 1'+2参数 被拒( PASS probe| PASS P6 占位符/参数数门禁生效:'SELECT 1'+2参数 被拒(错误码=PBL-RTX-0005)
tx_write | probe| PASS P7 契约三处同步:6/6 对齐 PASS probe| PASS P7 契约三处同步:6/6 对齐
tx_write | probe| m11b_probe PASS:7 项探针(state_updates 非空 PASS probe| m11b_probe PASS:7 项探针(state_updates 非空端到端 P1~P4 + 守卫 P5 + 门禁有效性 P6 + 三处同步 P7)
tx_write | tx_write.self_check PASS PASS tx_write.self_check PASS
tx_write.self_check 整体 PASS
m11b_api | m11b_api PASS:5 个协程契约齐备 PASS m11b_api PASS:5 个协程契约齐备
m11b_api | m11b_api PASS:assert_append_only 同步守卫可调用 PASS m11b_api PASS:assert_append_only 同步守卫可调用
m11b_api | m11b_api PASS:contracts 清单 8 项与注册表一致 PASS m11b_api PASS:contracts 清单 8 项与注册表一致
m11b_api | m11b_api.self_check PASS PASS m11b_api.self_check PASS
m11b_api.self_check 整体 PASS
rtx_db | rtx_db PASS:仅用 sor.C/U/R/sqlExe + sqlorContext PASS rtx_db PASS:仅用 sor.C/U/R/sqlExe + sqlorContext(无模块级猜测签名)
rtx_db | rtx_db PASS:事务原语探测 sor/conn/sql 三级 PASS rtx_db PASS:事务原语探测 sor/conn/sql 三级
rtx_db | rtx_db PASS:无 begin/commit/rollback → 探测返回 Non PASS rtx_db PASS:无 begin/commit/rollback → 探测返回 None(上层抛 PBL-RTX-0002)
rtx_db | rtx_db PASS:库名不可得即抛 PBL-RTX-0001(不猜默认库) PASS rtx_db PASS:库名不可得即抛 PBL-RTX-0001(不猜默认库)
rtx_db.self_check 整体 PASS
A[三处同步] apply_runtime_event PASS impl=True export=True register=True
A[三处同步] poll_events PASS impl=True export=True register=True
A[三处同步] read_states PASS impl=True export=True register=True
A[三处同步] assert_append_only PASS impl=True export=True register=True
A[三处同步] pbl_runtime_broadcast_pull PASS impl=True export=True register=True
A[三处同步] pbl_runtime_broadcast_stats PASS impl=True export=True register=True
A[包出口可导入] pbl_runtime_broadcast_pull PASS
A[包出口可导入] pbl_runtime_broadcast_stats PASS
A[包出口可导入] apply_runtime_event PASS
A[包出口可导入] poll_events PASS
A[包出口可导入] read_states PASS
A[包出口可导入] assert_append_only PASS
A[M11b 注册清单完整(fail-closed 门禁)] PASS missing=[] total=12
A[M11a 注册清单完整] PASS total=6
--- B. 内存事务引擎端到端(真实 apply_runtime_event 主链路)---
B1[正常写入] ok 且非幂等命中 PASS seq_no=1 event_id=1
B1[正常写入] 事件表 1 行 PASS
B1[正常写入] 状态表 1 行 v1 PASS
B1[正常写入] 快照表 1 行 PASS
B1[正常写入] 单事务多语句 PASS stmt_count=3
B1[正常写入] 提交后广播进缓冲 PASS cursor=1
B2[无幽灵更新] 事务日志 begin→commit PASS log=['begin', 'commit']
B2[无幽灵更新] commit 时 hub 游标=0,广播后=1 PASS commit_cursor=0 now=1
B3[幂等重放] dedup=True PASS event_id=1
B3[幂等重放] 事件仍 1 行 PASS
B3[幂等重放] 未重复广播 PASS cursor 1→1
B4[乐观锁冲突] PBL-STATE-CONFLICT PASS entity_id=pos 乐观锁冲突:base_version=99 当前 state_version=1(整
B4[乐观锁冲突] 事件行数未增加(无脏数据) PASS 1→1
B4[乐观锁冲突] 冲突键未落库 PASS
B4[乐观锁冲突] 状态版本未污染(仍 v1) PASS
B4[乐观锁冲突] 未广播 PASS
B5[DML失败] 异常上抛(不静默) PASS 注入故障:pbl_entity_state INSERT 失败
B5[DML失败] 事件行不存在(回滚证据,非标记 rolled_back) PASS events=1
B5[DML失败] 无状态脏行 PASS
B5[DML失败] 未广播(无幽灵更新) PASS
B6[回滚证据] 日志含 rollback PASS log=['begin', 'commit', 'begin', 'commit', 'begin', 'rollback', 'begin', 'rollback']
B7[顺序与版本] seq 单调 1→2 PASS [1, 2]
B7[顺序与版本] state_version 递增到 2 PASS
B8[poll命中hub] source=hub PASS events=2
B9[poll退回查库] source=db PASS events=2
B9[poll退回查库] 取回 2 条已提交事件 PASS [1, 2]
B9[poll退回查库] payload 已反序列化为对象 PASS
B10[缺口退查库] source=db PASS truncated=True
B11[read_states] 返回状态且 state_value 为对象 PASS keys=[None]
B12[缺租户] PBL-TENANT-0001 PASS
B13[broadcast_pull] ok PASS source=db count=2
B13[broadcast_stats] 含 sla/contracts PASS published=12
B13[broadcast_pull] 无租户段拒绝跨租户拉取 PASS channel 必须以 pbl.world. 开头
B14[SLA打点] 三阶段均有样本 PASS adj=0.347 bcast=0.004 e2e=0.56
B14[SLA打点] 广播实测 ≤300ms PASS max=0.006ms
B15[分区] 失败时如实降级(不谎报已建) PASS ok=False degraded=True err=PBL-RTX-0003: apppublic.DBPools 不可导入:Mod
--- C. 真实库端到端(原子性/回滚/广播时序的权威证据)---
SKIP C:环境受限未验证 —— 本工作空间无 ahserver/apppublic 运行时('ModuleNotFoundError')
B 层用可回滚内存事务引擎跑通同一份 tx_write 主链路代码替代;
连库跑法:在 pbls 应用环境执行 `python3 scripts/m11b_selftest.py --live`
================ 汇总 ================
总计 110 项,PASS 110,FAIL 0
RESULT: PASS
RC_SELFTEST=0