# Probe执行后的APE原生模型与历史

## 结果

150/150已确认Probe都存在1个`PROBE_INPUT_COMPLETED`、1个同transition_id的`NATIVE_TRANSITION`、1个原生transition回执，全部input_confirmed=true，全部带native_edge_id与native_history_position。逐项证据见[probe-native-lifecycle.csv](probe-native-lifecycle.csv)。这个检查独立于Ledger的EXECUTED，未把两者混同。

## 数据链与源码

|环节|冻结源码|具体行为|
|---|---|---|
|Bound/Selected|[JevRuntime.java:405–449](code-frozen/com/android/commands/monkey/ape/jev/JevRuntime.java)|将Probe具体节点绑定为原有ModelAction的resolved GUITreeAction，继续普通动作输出|
|APE action history|[MonkeySourceApe.java:550–562](../../native/src/com/android/commands/monkey/MonkeySourceApe.java)、[StatefulAgent.java:909–915](code-frozen/com/android/commands/monkey/ape/agent/StatefulAgent.java)、[Model.java:125–142](code-frozen/com/android/commands/monkey/ape/model/Model.java)|所有动作都appendToActionHistory；ModelAction保存其已绑定guiAction；不是仅写Probe Ledger|
|动作访问计数|[StatefulAgent.java:549–571](code-frozen/com/android/commands/monkey/ape/agent/StatefulAgent.java)、[Graph.java:508–526](code-frozen/com/android/commands/monkey/ape/model/Graph.java)|选择ModelAction后markVisited，与普通动作同路径。此计数发生在选择阶段，不能等同于注入成功次数|
|Input Generated/Completed|[JevRuntime.java:734–789](code-frozen/com/android/commands/monkey/ape/jev/JevRuntime.java)|确认低层注入后把同一GUITreeAction放进confirmedInputs；普通动作与Probe共用集合；Probe另发完成事件|
|UTG/Edge/treeHistory|[StatefulAgent.java:667–683](code-frozen/com/android/commands/monkey/ape/agent/StatefulAgent.java)、[Graph.java:373–393](code-frozen/com/android/commands/monkey/ape/model/Graph.java)|下一GUI到达时model.addTransition，把GUITreeTransition加入原生history并挂到原生edge，再jev.sync|
|Jev索引|[JevRuntime.java:216–293](code-frozen/com/android/commands/monkey/ape/jev/JevRuntime.java)|从原生treeHistory读出action/source/target，确认input后registry.executed；真正原生Transition+confirmed才能发PROBE_EXECUTED|
|Concrete已执行|[JevRegistry.java:315–355](code-frozen/com/android/commands/monkey/ape/jev/JevRegistry.java)|confirmedInputs按当前State/ModelAction对象分组；confirmedExact检查当前合法组里的sameConcrete；不是一个跨App“功能已执行”位|
|Ledger执行完成|[JevSemanticReview.java:142–151](code-frozen/com/android/commands/monkey/ape/jev/JevSemanticReview.java)、[JevReviewLedger.java:269–282](code-frozen/com/android/commands/monkey/ape/jev/JevReviewLedger.java)|按contract、当前State对象和Concrete identity标EXECUTED；不会自动把所有别的State的同名控件都标完成|
|Refinement|[Model.java:220–254](code-frozen/com/android/commands/monkey/ape/model/Model.java)、[StatefulAgent.java:145–177](code-frozen/com/android/commands/monkey/ape/agent/StatefulAgent.java)、[JevRuntime.java:216–230](code-frozen/com/android/commands/monkey/ape/jev/JevRuntime.java)|原tree/action引用原地重建、动作历史更新；Jev版本变化重置派生索引，重新索引原treeHistory，不清confirmedInputs|

确认输入不等于完整业务流程成功；打开Lock密码窗口不等于成功加密笔记，打开Statistics不等于执行所有统计交互。

## Statistics的独立原生证据

ActivityDiary Jev `run_2b38f68437b6480c8f26d01cec61b440`，step475选择Statistics，input-2601，完成注入后step476确认`g20e396:471`、native_edge_id=g20e396、native_history_position=470，source GUI560、target GUI564，目标`StatisticsActivity`。原事件行1304/1305/1308/1309/1310/1311分别可查Bound、Selected、Generated、Completed、Native Transition、Executed；精确原始ZIP路径在生命周期CSV及[case traces JSON](evidence/history-case-traces.json)。

它还在semantic-11 step522（version21）、semantic-13 step550（version22）、semantic-17 step575（version23）等审核中以h5、confirmed=true进入g11s38/g11a627池。**不仅写进APE，GUITaboo也确实读过。**后续semantic-15 step564审核的是g13s49/g13a696，其池只含131、142，不是Witness排序把475排到第四，也不是模型看见Statistics仍说DIFFERENT。

Omni的step246（input-1383）本身也是Probe；662审核h5包含它，1331审核h5/h15同时包含246和664两个Probe，说明Probe→历史池链也能贯穿同State多次执行。不能把246误写成普通动作。

## 五类问题在本次案例中的区分

1. APE没有记录：150条确认Probe未发现；原生transition均存在。
2. APE记录但GUITaboo不读取：Statistics475与Omni246/664均有后续合法池直接证据，排除这些案例中的全面读取遗漏；不能据此证明所有排除项永无bug。
3. 读取但作用域不匹配：Statistics564有同版本相邻请求映射证据；Map1284与1252也有同版本32不同State的执行证据。其他跨度大的案例保留映射未知部分。
4. 作用域匹配但Witness未选中：Omni Lock246/664位于合法池h5/h15但不在wire；见排序专项。
5. Witness已选中而结果可疑：Scarlet130、Wikipedia1492属于该层，应按模型当时可见GUI讨论语义，不归给回写漏洞。

归档没有逐review完整排除项mapping快照（historyAudit未开），没有内存ActionHistory dump或逐action visitedCount历史。对不能重建的具体对象映射保留UNKNOWN；不建议用跨App全局功能索引来掩盖证据缺口。
