离线再生成与未来自动化接入

已交付的入口及范围

在项目根目录运行。Python使用现有环境中的matplotlib、Pillow;可选Native保存wire回放需要javac/java及本地native/ape-java.jar、tests/lib/android-json-0.0.20131108.vaadin1.jar,不联网安装依赖。脚本不import runner/controller/Provider,不调用ADB或模型。

核心入口:tools/guitaboo_analyze.py。计数继续复用tools/jev_metrics.py,补足完整方法签名、窗口、显式Probe导航、身份门禁和冻结Provider漏斗;没有另建一套相异的覆盖评价。版本guitaboo-offline-1.3,源和脚本SHA见analysis-manifest.json、enrichment-manifest.json、native-wire-replay-provenance.json和validation/final-validation.json。

完整再生成至新目录:

python tools/guitaboo_analyze.py \
  --input experiments/guitaboo-5app-1rep-baseline-comparison-20261107/manifest.json \
  --reference experiments/guitaboo_fixab_omni_rep2_20261105T2218/formal-runs/platform-managed/run_6fbac6f1f5c740a38f6336c65e9fb5aa/attempt_e1ae2d0788964ba388c1bbf9ff388966/raw \
  --reference-strict-seconds 3600 \
  --output reports/guitaboo-deep-analysis-regenerated \
  --annotations reports/guitaboo-deep-analysis-20261107-delivery/reviewed-probe-notes.json \
  --case-specs reports/guitaboo-deep-analysis-20261107-delivery/case-specifications.json \
  --native-wire-replay

单Run用--input /path/to/evidence.zip或raw目录;同App多条件可重复--input。未提供人工注释时,自动可见差异分类仅为初筛,不能自动获得这次人工查图、读原始执行片段才确认的研究解释。默认按各Run增长峰值选普通案例原图;--case-specs可固定重现具体125案例。

已有输出仅--resume且源内容SHA、分析器SHA和版本均一致才复用;源、核心版本不同会拒绝,使用新目录。修改研究注释只重生成报告层,不回写语义训练标签或原始归档。

本次专项附加表也可重复生成:

python reports/guitaboo-deep-analysis-20261107-delivery/build-research-evidence.py \
  --output reports/guitaboo-deep-analysis-regenerated
python reports/guitaboo-deep-analysis-20261107-delivery/build-research-tables.py \
  --output reports/guitaboo-deep-analysis-regenerated

第二条只适用于这组固定15 Run并有150确认的复现,主动校验数量,避免把本次研究结论套到新数据。report.md、功能解释、Omni/Provider专项文字是研究者核查后的报告,不能靠脚本为新实验自动猜出因果解释。通用入口自动输出所有统计、链路、图、方法差和供查图的峰值案例;未来需要同样深度的功能结论时仍需对新增案例进行证据审查。

平台最小接入:只读外部归档后处理

现有lab_platform/worker.py约247–298流程为collect→validate→result.json→ZIP→upload→completed;没有后处理hook。lab_platform/api.py298起先验证配置/valid类型,再以os.replace原子保存data/runs/<run>/<attempt>/evidence-<sha>.zip;Controller约531起还可能对Provider身份漂移作最终无效覆盖。因此不在worker内耦合统计,不让分析失败影响调度。

交付的tools/guitaboo_archive_postprocess.py支持两种模式:

  1. --archive-root指向平铺的已经完成最终验收的归档镜像,按ZIP中的final result、CRC、稳定大小/mtime和源内容SHA处理。仅此模式无法知道平台归档后又发生的最终状态覆盖,故生产平台推荐第2种。
  2. 加--platform-db时,SQLite用mode=ro打开,不import会初始化数据库的平台注册模块。仅读取终态Run与已登记归档,检查根目录边界、run ID、DB证据SHA及ZIP CRC;有效比较还要求Controller state=completed、Controller result.valid=True且ZIP valid=True。invalid/interrupted等仅诊断,原始result保持。未完成/未上传自动等待下次扫描。

只处理本轮白名单、执行一次的验收命令:

python tools/guitaboo_archive_postprocess.py \
  --archive-root [HOME]/darwin-deploy/experiment_platform/data/runs \
  --platform-db [HOME]/darwin-deploy/experiment_platform/data/controller.sqlite3 \
  --manifest experiments/guitaboo-5app-1rep-baseline-comparison-20261107/manifest.json \
  --output reports/guitaboo-archive-postprocess-check \
  --once

未来将相同命令交给已有持久服务管理器,去掉--once、加--poll-seconds 60,并指定该轮manifest和独立报告目录。监听每轮重读manifest及最终run-status白名单,支持后续完成的串行/重试最终Run身份;没有让聊天窗口承担后台服务。本次没有安装或启动长期监听服务,也没有改变平台执行/调度代码。 交付的是可直接运行且已验证的最小外部接入入口。

每条Run归档后立即生成逐Run分析、Probe图文、Provider漏斗和图。只在同App+Rep三条件都最终有效,且APK/JAR/设备/seed/预算/评价协议/方法分母一致后,生成有效跨条件比较。无效结果不凑组;不一致先在状态文件说明,不重跑。每报告目录的文件锁只防两个后处理器写同一报告,与模拟器锁和Provider并发无关。

若分析失败,错误写archive-postprocess-status.json,不会修改、重试或启动实验。相同源与代码重复扫描复用结果;若最终状态变为无效,比较重新生成,防止旧有效表继续冒充当前结果。

输出组织

每Run:run-summary.md、action-strategy.csv、action-native-branch.csv、navigation.csv、probe-events.csv、probe-method-gains.csv、probe-method-gain-methods.csv、method-first-seen.csv、coverage-timeline.csv、provider-review-funnel.csv、state-statistics.json、state-discovery-by-version.csv、完整Probe JSON/前后图、覆盖和Probe分布PNG。

跨Run:cross-run-comparison.md、method-set-differences.csv、method-set-differences-by-library.csv、functional-path-differences.md证据入口、anomaly-cases.md/automated-anomalies.md、动作/导航/State分档表、Provider配置/构造/HTTP分层表、全部Probe HTML、普通峰值原图及App覆盖对照图。研究报告不会被自动索引覆盖。

验证

python -m unittest discover -s tests -p test_guitaboo_postprocess.py
python -m py_compile tools/guitaboo_*.py
python reports/guitaboo-deep-analysis-20261107-delivery/validate-delivery.py --integration

9项回归涵盖构造函数签名、窗口半开与union、Fix A+B聚合、内容SHA、EARLY_STAGE分支、显式Probe导航、无效/预算身份门禁、manifest最终Run筛选、平台只读终态/路径门禁。另执行了真实归档两次处理幂等、合成缺失日志NA和平台最终无效覆盖集成测试;验证产物在validation/。合成数据是临时副本/临时SQLite,原始实验数据不改。

所有具体命令、依赖和脚本SHA随报告保留;主要证据逐项比对见最终验收。