octopus-rpa-app-runner B-02 修复记录

原始文件:wecom_7ea3083a_octopus-rpa-app-runner_B02修复记录.md

octopus-rpa-app-runner B-02 修复记录

1. 根因

此前 OctopusRpaAppRunner.Orchestration.ps1 虽被 impl 加载,但仅由测试直接调用。公开 CLI 仍由 Invoke-DirectParameterRunInvoke-CloseRunWindowActionInvoke-RunParameterDialogIfPresent 各自执行内联编排,因此测试覆盖的是平行状态机,而不是公开生产调用链。

2. 修复

  1. 保留公开 launcher、参数、输出和退出码契约,不改变 OctopusRpaAppRunner.ps1 -> OctopusRpaAppRunner.impl.ps1 入口。
  2. Invoke-DirectParameterRun 仅负责生产确认、adapter 构造和结果映射;确认后的快照复核与单次点击顺序委托给 Invoke-OctopusDirectOrchestration
  3. Invoke-CloseRunWindowAction 仅负责生产确认、UI 原语 adapter 和结果映射;stop -> 重新枚举 -> close -> Studio/run-list 验证顺序委托给 Invoke-OctopusCloseOrchestration
  4. Invoke-RunParameterDialogIfPresent 保留目录确认/创建这一生产前置策略,leave/direct/auto 的写入、回读、TOCTOU 和 submit 顺序委托给 Invoke-OctopusParameterOrchestration
  5. Orchestration 返回补齐生产结果映射所需的 FoundStopClickedWindowClosedStudioRestoredRunListState 和错误消息;不包含 UIAutomation 依赖。
  6. 原 direct/close/parameter 内联平行状态机已删除,未保留仅测试用编排副本。
  7. impl 测试门仅在 OCTOPUS_RUNNER_TEST_MODE=1 时调用注入入口;正常生产调用不受影响。

3. 生产路径证据

当前 impl 中存在且仅由生产 wrapper 调用的委托点:

行为 harness 不再单独 dot-source 编排文件,而是加载 OctopusRpaAppRunner.impl.ps1,通过 impl 的测试 dispatch 执行。它验证:

4. 行为测试

PowerShell 行为测试 16/16 通过:

  1. impl 已加载生产 Orchestration 函数身份;
  2. direct wrapper 委托共享核心;
  3. close wrapper 委托共享核心;
  4. parameter wrapper 委托共享核心;
  5. direct 缺授权零副作用;
  6. direct 确认后窗口替换零点击;
  7. direct 复核后仅点击一次;
  8. close 缺授权零 stop/close;
  9. stop effect unknown 不 close;
  10. stop 后旧 handle 消失不 close;
  11. stop 后替换窗口不 close;
  12. stop -> close 严格有序,active 不 verified;
  13. parameter leave 零副作用;
  14. integrated direct 只 submit、不 write;
  15. auto 回读失败不 submit;
  16. auto 写后 TOCTOU 不 submit。

5. 验证结果

检查结果
全量 Python unittest(含 PS harness 聚合)73/73 通过
PowerShell 生产调用链行为测试16/16 通过
tests_static.pySTATIC_TESTS_PASSED
Python 编译(排除 .venv13/13 通过
PowerShell AST4/4 通过
launcher 安全黑盒4/4 通过
config 不落盘根目录与 scripts/ 均不存在 config.json
真实 RPA/UI未执行

launcher 黑盒明细:

场景exitERROR_CODE单一 JSONchanged
未知参数3ARG_CONFLICTfalse
-RunExactName3ARG_REQUIREDfalse
-ListOnly + -CheckRunList3ARG_CONFLICTfalse
-ProcessSnapshot3UNSUPPORTED_IN_FALLBACKfalse

6. 修改文件

7. 判定

B-02 的原阻断事实已消除:生产与测试不再各自维护一套编排状态机。测试加载 impl 并验证生产 wrapper 委托关系,行为断言执行的是公开生产路径调用的同一 Orchestration 核心。CLI、结构化输出、确认边界、fail-closed 语义和 config 不落盘保持兼容。