24 KiB
24 KiB
迭代 52 验收审计报告(2026-11-05)
审计对象:分支 iter52 相对 master(53d2a8a2)的全部改动(53 文件;四卡①minesweeper_rules 公开面还债批/②孤儿函数清退批/③架构审查 presentation 层封装修复批/④封印印记法阵化批,四卡验收档均为中)。审计人=未参与实现的独立会话(test-conventions §8.7)。审计深度=四卡全量对照表逐行+判据绑定面抽查(每卡 ≥2 行)+测试削弱逐处+直查例外逐条;最窄测试复跑省略——执行证据=闸回执读数(game/tests/.gates/receipt.json,commit fbf126d1,八闸全 0),合回后远端 CI 现查为终局执行证据。全部零命中断言与计数均由审计人自跑 grep 取数,不采信报告转述。
总判定:通过
- 四卡对照表逐行核对全部通过(卡① 3 行/卡② 7 行/卡③ 7 行/卡④ 7 行,共 24 行;无缺漏行)。
- 测试削弱检查逐处核毕:测试/探针面被删改既有断言共 5 类 35 行,全部落在申报集内(逐处清单见第三节);无申报外删改。
- 直查受控例外逐条核毕(2 条,见第四节)。
- 两项备案缺漏(均零实体影响,不阻塞合并):④-1 ui_input_probe case④b 断言换代的申报记录未进卡面与实现报告(实体合规,欠账文档级);④-2 board_view.gd:77 悬空注释仍引已删成员
_palette.seal_tex。见第五节。
一、逐卡审计结论
卡① minesweeper_rules 公开面还债批(验收档:中)——通过
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| 1 | 公开面收敛 21→20(S13 归绿) | diff 实核:minesweeper_rules.gd:101 定义改名+:110 内部调用点同步,函数体逐字未动(diff 仅两行签改)。审计自数:该文件非下划线 ^func [a-zA-Z] = 20。tools/gdstyle_baseline.txt 零 minesweeper_rules 键(grep 零命中);审计自跑 python tools/gdstyle_gate.py:7 命中全在基线、基线外新违规 0、恶化 0 |
通过 |
| 2 | 行为零变化回归锚 | minesweeper_rules_test.gd 既有断言除改锚外零改动(diff 实核:断言消息串与期望表达式逐字未动);套件经回执 02 闸(exit 0)当轮执行 |
通过 |
| 3 | 测试直连改锚(受控例外) | 改锚 4 行(:56/:89/:93/:94)diff 逐行实核;审计自跑 grep -rnE '\.safe_remaining\(' game/(.gd+.tscn)=零命中;_safe_remaining 全仓恰 6 处(:101 定义+:110+测试 4 行)。卡面 §3.4 称「测试 5 处(:93 两处)」实测 4 处——实现报告已 L2 备案(计数差,改锚完整性与断言语义不受影响) |
通过(卡面计数差备案在案) |
- 真实入口核:行 1 判据面(S13 计数)由 gdstyle 闸单件读数承载、改前 NEW 红(21>20)与改后零键均落实现报告 T0/T2,改动点即被测点,无绕过。行 2/3 经
tests/run_all.gd单元套件真实跑(回执 02 exit 0),改锚断言(:56 精确余量等式/:89-94 fx_reveal 递减)在套件内当轮执行。 - 尾缀:本卡零新增测试件,无尾缀义务;既有断言尾缀(〔wr4〕等)零触碰。
卡② 孤儿函数清退批(验收档:中)——通过
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| 1 | has_effect_on 退役 | diff 实核 effect_engine.gd 删 :203-212(## 订阅查询面 注释+函数);审计自跑六件名词边界 grep(game/ 全 .gd+.tscn)=六名全零命中 |
通过 |
| 2 | _bp_read_int 退役 | breakpoint_store.gd :211-219 删(注释+函数),diff 实核;grep 零残留 | 通过 |
| 3 | _find_token 退役(死包装) | adventure_runner.gd :250-252 删;grep 零残留;真件 curio_deck.find_token 在役(curio_stop.gd:107/:229 实查) |
通过 |
| 4 | has_open 退役 | modal_stack.gd :56-62 删;grep 零残留(\bhas_open\b 不误中 has_open_excluding_tags);后者 3 处在役调用实查 |
通过 |
| 5 | set_feedback_state 退役 | camp_scene_view.gd :88-92 删(无专属注释块,与卡面一致);grep 零残留 | 通过 |
| 6 | stop_resolved 退役 | curio_stop.gd :303-305 删;grep 零残留 | 通过 |
| 7 | 级联零新增 | 审计自跑级联计数全 ≥1 在役:bp_read 6/_bp_strategy 1/find_token(deck 件)定义+2 在役/has_open_excluding_tags 3/_apply_state 8(camp 件,剥定义)/_resolved 15/_triggers 8/.dispatch( 80;与实现报告计数一致。审计自写逐函数引用粗扫(六文件+minesweeper_rules,剥注释、引擎虚函数豁免)=零孤儿 |
通过 |
- 真实入口核:判据=静态零残留 grep+既有套件回归锚。六件名全仓零调用(含测试面零命中)=无测试直连可绕;回归面经回执 00/01/02/09 四闸(全 exit 0)真实执行。判据绑定面=「定义行消失+全仓零残留」为本批特有提交面(死函数无运行期可观测面——卡面已申报观测面局限)。
- 随删 3 处悬空注释修(modal_stack.gd:12/:67、camp_scene_view.gd:5):diff 实核=纯注释行,零断言零行为触面;实现报告「实现决定记录」已备案(超白名单呈报)。通过(备案在案)。
卡③ 架构审查 presentation 层封装修复批(验收档:中)——通过
对照表七行(R1–R7)逐行核对:
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| R1 | A1·战末弹层 | presentation_encapsulation_sweep_test.gd V1 组在盘:battle_end_overlay 非空前置+class _EndOverlayState 正锚+st\._ 零命中+14 公开字段逐个正锚+类名文件外零消费者(全 game/ 递归扫描,排除宿主与自件)。审计实读类定义=14 字段无下划线 |
通过 |
| R2 | A1·调试浮窗 | 同 V1 组:debug_overlay 14 字段(_DebugState 定义实读)+st\._ 零命中;TuneSim 入口探针经回执 03 闸绿 |
通过 |
| R3 | A1·关卡画面 | 同 V1 组:level_map_screen _MapState 14 字段实读+_map\._ 零命中;system_test(回执 01 exit 0)+screen_flow_probe 走选路链 |
通过 |
| R4 | A2·站桩三件 | V2 组:standee_body `\bst._ | \bmo._ 零命中(审计自跑)+configure_identity/play_hp_flash/show_intent |
| R5 | A2·悬停子件 | V2 组:board_view _hover_comp\._ 零命中(审计自跑)+七口正锚(rebind/reset/hover_at/detect_chord/refresh_after_paint/on_shell_mouse_exited/hover_pos——board_hover.gd 实读 7 公开方法,board_view 7 处改址 diff 实核);ui_input_probe 经回执 03 闸绿 |
通过 |
| R6 | B·组合根交接面 | V3 组:六文件 root\._[a-zA-Z] 与 `Main(Overlay |
Adventure |
| R7 | C·杂项公开面 | V4 组:UiKit\._[a-zA-Z] 全库 .gd 零命中(审计自跑,排除 ui_kit.gd 自身——其内亦零命中);cell_mark _owner\._ 零命中+_mask_set.is_valid() 正锚;三工厂公开正锚(ui_kit.gd:364/:401/:874 实读,diff 证体逐字仅签改);ui_assembler:106/settings_overlay:88/:105/level_map_screen:70 四处改址 diff 实核;cell_mark _init 增第二参、board_cell_unit _set_badge_mask 交付实读(board_view 零触碰——diff 无 board_view 构造点改动) |
通过 |
- S13 对账(16 触件):审计自跑
python tools/gdstyle_gate.py全绿(7 键全在册、基线外 0、恶化 0);基线键 7 条与实现报告对账表一致——main.gd=32(卡 §14 申报区间 28–32 内)、ui_kit=23(追补提交 00dbd4a7,卡 §3.2 误测 L2 备案+反哺点在案)、board_view 27/31 持平(贴顶零净增——diff 实证 board_view 仅 8 处改址零增面)。 - 探针/测试迁移 19 处逐条实核(ui_struct_probe 6、ui_click_probe 4、ui_tune_probe 3、system_test 3、probe_ui_util 1、screen_flow_probe 1、ui_probe 1、pacing_queue_test 1=18 调用点+退出链源码串 1 行 2 串):断言内容零改动、退出链断言意图不变(
_on_esc_quit处理器私名零改动实查);迁移名全仓零残留实查(grep 零命中);未迁移名(on_*/句柄成员/探针独占名)零触碰实查。 - 零行为变更证据链:回执 00/01/03/05/05b 全 exit 0+渲染 golden 零转红(05 闸绿);并行跑闸 CPU 互踩假红已定性(串行复跑双绿,报告 T3 记录)。
- 备注(措辞差,非缺漏):卡面 R6 行「14 件替换后当轮真实跑绿」——实际替换=「引用名字 ∩ 公开化名字」交集 19 处落 8 文件(卡 §4/§5 的替换判据即交集规则,14 件为引用面总体非替换件数);实体合规。
卡④ 封印印记法阵化批(验收档:中)——通过(两项备案缺漏见第五节)
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| R1 | 环径 82% 格边随格边连续 | seal_mark_params_test.gd:_test_param_values 在盘(SEAL_RING_FRAC=0.82 断言〔seal批 V1〕);ui_kit.gd:37 实读同值;T5 取证=board_shot_probe _seal_evidence(施印保底走真实 settle_batch 写口实读在文;环径读数硬判 absf(ratio-0.82) <= 1.0/edge 越带即红)——探针闸绿(回执 03)为执行证据;报告三关读数 38/46=0.8261 在带 |
通过 |
| R2 | 壁厚 11%/臂宽 15.6% 环径 | _test_param_values 两常量断言在盘〔seal批 V2〕;shader 实读 wall = wall_frac * 2.0 * ring_r、arm = arm_frac * 2.0 * ring_r(:34-35)——两常量直接进 SDF,帧量主证=环径(口径换代落实现报告「判据实现注记 3」) |
通过(换代已申报) |
| R3 | 光圈只在环外不出格 | _test_shader_uniforms 夹取行断言在盘〔seal批 V3〕;shader :45 实读 float rc = min(r, cell_px * 0.5);;层件 seal_mark_layer.gd 1:1 全幅 draw_rect(越格构造上不可能——:42 实读);隔离验证截图三件在 artwork/(seal_iso_28/32/46.png 实存,在途不入 git 合卡面 T2);框差读数留档不作硬判(换代理由=邻格砖纹噪声实证 L3 0.008 vs 0.094,落「判据实现注记 1」) |
通过(换代已申报) |
| R4 | 迷雾态隐藏 | _test_fog_gate 在盘〔seal批 V4〕(fog_state=1 不可见/0 可见/撤 seal_on 即撤);board_cell_unit.gd 实读:fog_state setter 联动 _sync_seal_layer+_sync_seal_layer 末行 setup(edge, fog_state == 0);run_all.gd manifest 注册(expect 0)经回执 02 闸绿 |
通过 |
| R5 | 印记在小人之下 | 层树构造面实读(子件挂 CellUnit、hero 精灵 BoardView 层后挂);T5 硬判读数在 _seal_evidence:英雄格中心像素 ≤0.05 即红(「R5 层序翻失」),探针闸绿兜底;报告三关读数非黑 |
通过 |
| R6 | 蜡封仍用贴图 | 审计自跑 grep -rn "seal_mark.png" game/ --include='*.gd'=恰 1 处(battle_end_overlay.gd:85,战末蜡封 _seal_img 实读未动) |
通过 |
| R7 | 零新增色 | 审计自跑 shader grep Color8=零命中;色源单点实读(layer :33 mark_col = UiKit.SEAL_BLACK 注入,光圈只改 alpha——shader :49);色板闸经回执 05b exit 0 |
通过 |
- 贴图退役核(审计动作六自跑取数):
TILE_SEAL_MARK|seal_tex全 game/ .gd = 3 处——battle_end_overlay.gd:85-87(局部变量,合法在役)+board_view.gd:77(注释行,见第五节缺漏 2);tile_palette 面零残留(TILE_SEAL_MARK 常量、seal_tex 成员与装载 diff 实核已删);board_view :539-541 槽位维护改u.seal_on下发、:582 字形回退分支退役(diff 实核);cell_mark_overlay tex_seal 成员/setter/绘制块删除+头注改写(diff 实核)。 - 真实入口核:R1-R3/R7 真实入口=
BoardCellUnit.edge → SealMarkLayer.setup() → ShaderMaterial参数链(layer :26-33 逐参注入实读);R4 入口=fog_state 属性写面;R5/R1 帧量入口=真实 BoardView 实例化+settle_batch 施印(保底三段实读:novice 驱动在案→邻接施印→免邻接旗标,全拒即 quit(1))——无绕过改动点的直构面。R2/R3 的帧量判据换代与 R7 色数闸均在实现报告申报。 - 能力行核对:game/tests/README.md:122「棋盘封印印记呈现」代表用例
seal_mark_params_test.gd:_test_param_values+_test_fog_gate与落地函数逐字一致(实读)——零回表,卡③④能力行其余全「既有」零新增与实现一致。 - 超清单事项合规核:SEAL_HALO_FRAC 第六常量新立=卡 §7-T1/T3 内部矛盾(五常量 vs 七参数注入)的补源,值=§8.2 条款值逐字非改值;代拍板记录「超清单事项呈报」第 1 条+反哺点第 4 条呈报用户裁决——呈报路径在案,合规。
二、判据绑定面抽查(每卡 ≥2 行)
- 卡①行 1(S13 计数):断言面=gdstyle 对被改文件读数,改名即被测点——绑定面恰为本批特有提交面;审计自跑闸件复证零键归绿。
- 卡②行 1-7(零残留+级联计数):判据为静态 grep——审计全部自跑取数(六名零残留、级联八组计数、零孤儿粗扫),与实现报告计数逐项一致(_apply_state 报告记 8、审计含定义 9,剥定义后同值)。
- 卡③ R4/R6(V2/V3 正锚+零命中):sweep 断言钉在「源码私取模式零命中+新公开面正锚」——审计自跑同口径 grep 全零;正锚对应真实公开面(方法定义实读在位)。当轮执行证据=回执 02(sweep 件在 manifest 注册实读)。
- 卡④ R1/R5(环径读数+英雄格中心非黑):两判据均硬判落
_seal_evidence(越带/读黑即_problems.append→探针退出红),绑定面=封印记数像素与层序像素——本批特有可观测提交面;当轮执行证据=回执 03。
三、测试削弱检查(逐处;审计自跑全 diff 删除行清单对申报集)
测试/探针面被删改的既有断言与引用,逐处核对:
| # | 删改处 | 内容 | 申报依据 | 判定 |
|---|---|---|---|---|
| 1 | minesweeper_rules_test.gd :56/:89/:93/:94 | 4 行调用表达式改锚 _safe_remaining,断言消息与期望值逐字未动(diff 实核) |
卡① §8 对照表行 3+测试削弱申报节 | 申报内,通过 |
| 2 | 探针/测试 8 件 17 处 main._x 引用(open_save_select 7/seed_value 3/open_settings 2/begin_session 2/status_data 1/start_debug_levels 1/gp_summary_text 1) |
引用形态迁移,断言内容零改动(逐文件 diff 实核) | 卡③ §8 削弱申报第 1 条+实现报告 T1 精确清单 | 申报内,通过 |
| 3 | ui_struct_probe.gd :144-146 退出链源码串 2 串("MainEscFlow.on_quit(self)"/"root.quit_game()") | 源码串随公开化换代;同函数 _on_esc_quit 私名断言零改动(diff 实核) |
卡③ §8 削弱申报补充(v1.1)第 2 条 | 申报内,通过 |
| 4 | ui_struct_probe.gd :366-370 ls._map._runner 3 处 |
A1 字段公开化交集改址,断言内容零改动 | 卡③ T2 底账(实现报告)+交集判据 | 申报内,通过 |
| 5 | stage_background_test.gd :164-165/theme_projection_test.gd :626/:651 | _beams_rect/_gradient_base 旧私名引用随三工厂公开化换代(stage 为源码 contains 断言随名换代,意图不变) |
提交 a8b0b1b2(里程碑闸 02 域抓出,L2 备案「T1 底账漏 enumeration」)+审计任务书申报集 | 申报内(记录载体=提交信息),通过 |
| 6 | ui_input_probe.gd case④b(:264-268 删旧纹理槽双分支断言+注释,换 seal_on 落位单断言) | 旧断言只验证已退役的 tex_seal 机制——test-conventions §5.5 换代批旧验证约束同生死(强制摘除,留即假绿源);新断言同入口(case④b 封印落位)同强度(核心落位硬判) | test-conventions §5.5(法条强制)+提交 13d6bfbb;卡④ §8 削弱申报文本与实现报告未列(欠账,见第五节缺漏 1) | 实体合规;申报记录缺口列缺漏 |
| 7 | board_view.gd :582 字形回退分支、:539-541 槽位维护、tile_palette 两槽、cell_mark 绘制块 | 生产行为退役(回退对象消失),非删断言 | 卡④ §8 削弱申报(明示「行为退役不属删断言」)+§7-T4 | 申报内,通过 |
| 8 | settlement_wiring_snapshot_test.gd | LF 归位处置——审计实核该文件不在 master...HEAD diff(`git diff --name-only | grep settlement` 零命中)=零内容差异,EOL 往返态未进分支;断言零触碰 | 实现报告「环境红定性 1」 |
- 申报外删改清点:全 diff 测试/探针面删除行清单(35 行)已逐行对号(上表 1-8),无第 9 类;run_all.gd 仅增 2 行 manifest 注册(sweep+params 两新件),零删改;.tscn/.tres/data 零改动;新增行零
randomize()/自建 RNG(红线实核)。 - 削弱判定总:无断言删除性削弱、无阈值放宽换绿(两处换代的旧判据各有等强度新判据或三面承载,且均系法条/机制强制)、无扫描面缩小(sweep 四组全带非空前置)、无换下层直调(改锚一处为卡①申报的受控例外)。
四、内部字段直查受控例外核对(逐条)
| 例外 | 直查行 | 理由注记核对 | 判定 |
|---|---|---|---|
| 卡①对照表行 3(测试改锚精确余量) | minesweeper_rules_test.gd :56/:89/:93-94 _rules._safe_remaining() |
对照表行 3 原文含「受控例外注记:精确余量无公开可观测面可钉(clear_map_cleared 仅 bool),理由随本表申报」——注记在对照表行内 |
通过 |
卡④ _test_fog_gate 直查 _seal_layer.visible |
seal_mark_params_test.gd :45/:47/:49/:51(u._seal_layer 可见性与空判) |
卡面 §8 R4 判据列自身 prescribe「封印子件 visible == false」(fog_state/seal_on 均公开属性,唯一内部面=子件 visible);理由注记落测试件 :40-41 头注(「子件可见性无公开可观测面,卡面 R4 断言即 prescribe」) |
通过(注记位置备注:对照表行本体未带「受控例外」标签,卡面判据列即 prescribe+测试件注记承载) |
五、备案缺漏(零实体影响,不阻塞合并;处置建议随条)
- 卡④ ui_input_probe case④b 断言换代的申报记录缺口——旧纹理槽双分支断言(有盘纹理在槽/缺盘字形回退)随 tex_seal 机制退役被替换为 seal_on 落位断言。实体面合规:test-conventions §5.5 强制同生死摘除(留即假绿源)、新断言同入口同强度、执行绿(回执 03)。缺口在记录面:卡④ §8 削弱申报文本仍写「本批不删改任何既有断言」,与该换代字面冲突(§3 现状既列贴图退役,该换代为必然后果——卡面文本自身欠严密);实现报告亦未列此换代,申报记录只在提交信息 13d6bfbb。处置建议:本报告进实现报告收尾节(卡④ §13 义务)即为补记;后续同类批卡面削弱申报节应把「换代批旧验证约束同生死」列为预设条款。
- board_view.gd:77 悬空注释——注释仍写「探针直读面零改动:读
_palette.seal_tex…」,所指成员已在本批删除,探针引用面亦已随批迁移,注释陈述已失实。卡②同族悬空注释修了 3 处并备案,卡④面这处未清未申报。零行为零断言影响(判据面=资产引用/常量别名/死槽,注释不在其列);grep 级判据不受污染(TILE_SEAL_MARK|seal_tex命中仅此注释+battle_end_overlay 合法局部变量)。处置建议:并入下批最小工程改动或修复批顺手剥(一行注释)。 - (观察,非缺漏)camp_esc_overlay.gd:8 注释提及
MainEscFlow._on_return_to_menu旧私名——T1 底账已定性「历史名提及非私取面」,与缺漏 2 同族但已在案申报,不再列。
六、grep 取数附录(审计自跑取数,命令+结果)
以下均在 D:\code\g-plan2-iter52 执行(grep 含 .gd;另注处含 .tscn):
- 六孤儿名零残留(.gd+.tscn,
\b名\b词边界):has_effect_on/_bp_read_int/_find_token/has_open/set_feedback_state/stop_resolved→ 全部零命中。 - 级联计数:
bp_read(剥定义=6;_bp_strategy剥定义=1;find_token=curio_deck.gd:51 定义+curio_stop.gd:107/:229;has_open_excluding_tags(剥定义=3;camp_scene_view_apply_state(=9 行(含定义);curio_stop_resolved=15;effect_engine_triggers=8;.dispatch(=80;curio_stop_pending=42 行。六文件+minesweeper_rules 逐函数引用粗扫(剥注释、引擎虚函数豁免)=零孤儿。 - safe_remaining:
\.safe_remaining\((.gd+.tscn)=0;_safe_remaining全仓=6(:101/:110/:56/:89/:93/:94)。 - 卡③封装主张:六 B 文件
root\._[a-zA-Z]=0;standee_body\bst\._|\bmo\._=0;board_view_hover_comp\._=0;UiKit\._[a-zA-Z](game/ 全 .gd,排除 ui_kit.gd)=0(ui_kit.gd 内亦 0);A1 三文件_map\._[a-zA-Z]/\bst\._[a-zA-Z]=0;game/presentation 全目录\._[a-zA-Z](剔 self._ 与注释行)=0 行。 - main.gd 计数:
^func [a-zA-Z]=31+static func build_adventure_params=1,合计 32=基线键 32;ui_kit^(static )?func [a-zA-Z]=23=基线键 23。 - 卡④贴图退役:
seal_mark.png(game/ .gd)=恰 1(battle_end_overlay.gd:85);TILE_SEAL_MARK|seal_tex=3(battle_end_overlay.gd:85-87 局部变量合法在役+board_view.gd:77 注释);shaderColor8=0;seal_mark 命中文件=7(cell_unit/board_view/seal_mark_layer/battle_end_overlay/cell_mark_overlay/run_all/params_test——前五为改名件与新件本体,后二为测试注册与守门件)。 - 基线:
grep minesweeper_rules tools/gdstyle_baseline.txt=0;基线 diff 仅 +2 键(main.gd=32、ui_kit=23);python tools/gdstyle_gate.py=「命中 7 条,基线内 7 条,基线外新违规 0 条,较登记值恶化 0 条/ok」。 - diff 面:
git diff master...HEAD --name-only中 .tscn/.tres/data/ 与 settlement 测试件=零命中;53 文件合计;新增行randomize(|RandomNumberGenerator.new=零命中。
七、闸回执核对(执行证据)
- 回执:game/tests/.gates/receipt.json——commit=fbf126d1(=分支最后一笔代码+产出物提交)、domain=code、scope=full、dirty_game=false、八闸(冒烟/系统/单元与集成/场景探针/渲染/色板/静态扫描/熵增)exit 全 0、all_green=true、changed_vs_baseline=[]、inherited_red=[]。
- 回执 commit 与分支尖(b4b1ee09=并入 master 的合并提交)差一笔;其间差异经逐文件实核全部为 master 侧内容(AGENTS.md/design 文档/闸名去编号批的 baseline.json 键名与 run_all.gd、system_test.gd、smoke_boot.gd 注释行/tools 脚本措辞)——零断言面、零生产行为面差异,回执绿态覆盖分支尖游戏码状态。回执内闸名沿用旧编号命名、合并带来的 baseline.json 已换代无编号键名——命名差属 master 侧闸名批时序,非回执内容问题。
- 中档不复跑最窄测试:本报告执行读数全部引回执;合回后远端 CI 现查为终局执行证据(tools/ci_check.sh 现查合回提交,判据=run 落定后的绿终局且跑闸步真跑过;零触发批不作绿证)。