[RFC] Pipeline Next:引入编译期 IR、结构化终态与证据代际 #1444
Windsland52
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
背景
我对 MaaFramework Pipeline 协议、当前实现、文档/Schema、公开 Issue,以及 M9A、MaaEnd、MFABD2、
MAA_SnowBreak 等实际项目做了一轮系统性梳理。结论是:Pipeline 的 happy path 已经很好用,下一阶段最值得投入的
不是继续增加孤立字段,而是补齐编译、运行身份、结构化终态、证据帧、Controller capability 和资源代际等公共契约。
这份研究不是把所有项目故障都归因 MaaFramework。报告单独区分了:
完整报告与 46 轮证据档案:
MaaFramework Pipeline 协议研究总报告与 Pipeline Next RFC 草案
证据边界
主要源码基线为 MaaFramework
1a9f032c491ea515b74bf0956c02f1aa957a6e3c、MaaUtils323297f1b76661d4d8d120ded27a798e9ff03eda、M9A6fa9a0f6ba014a427fad9f5bd3b5fc8f3de6107a和MaaEnd
54d7c829dac4d8a5564be89a83292d76559d1955。没有 Sentry 访问,也没有完成全部真实 Controller/模型/宿主的动态 conformance;报告把这些保留为测试计划,不用静态分析冒充动态复现,也不以公开 Issue 数量冒充故障发生率。
几个当前可直接确认的切入点
PipelineDumper 的 And/Or inline sub-recognition 与空 ColorMatch 无法由当前 Parser 重新加载,说明 Parser、Dumper、
Schema 还没有共同的 canonical representation。
Context.run_task运行真实子任务并写 RuntimeCache,但不产生Tasker.Task lifecycle event,父子运行关系无法从回调重建。
ActionResult,丢失action id/name/type;Action.Starting 后的 stop 路径还可能没有配对 terminal。
问题的一部分。
此外,固定基线还能看到 callback self-remove/unregister 生命周期、共享 Resource/Controller 的 stop scope、截图 job 只读
全局 cache、Record/Replay capability/参数不一致、MultiSwipe/Scroll/LongPress 等确定性问题。它们适合分别修复和建回归,
不建议等待一个“大版本重写”。
建议的 Pipeline Next 骨架
1. Pipeline compiler + canonical typed IR
V1/V2/vNext 都先编译到同一个 IR,Schema 负责 authoring shape,compiler 负责引用、类型、能力、预算、Profile/override、
路径和控制流语义。必须满足:
2. RunGraph + typed Outcome
Task、Context child task、Node、Reco、Action、Agent 和 Controller operation 使用共同的:
Starting 后 terminal 恰好一次;Succeeded、Failed、Cancelled、TimedOut、Unsupported、Invalid、DependencyFailed 可区分,
并保留 phase/cause/partial effect。
3. FrameSnapshot + BindingSnapshot + Capability
unsupported/degraded不再静默冒充 success。4. 在公共骨架上增量提供领域 profile
兼容原则
不建议 flag-day V6。旧字段通过 legacy adapter 保留原语义,例如 OCR
expected的 regex-search、repeat的 last-wins、StartApp/StopApp 的 dispatch-only 和 Scroll 的 legacy native unit;新资源则可以声明 minimum protocol/required capability,
旧 runtime 不支持时 fail closed,不能静默忽略。
建议实施顺序
完整报告里附有 10 个可拆 P0 PR、P1/P2 切片、compiler diagnostics 和跨平台 conformance matrix。本 Discussion 的目的
不是请求一次性实现全部内容,而是先确认以下方向是否值得形成正式 RFC:
欢迎指出已经存在但本报告遗漏的能力、与现有架构冲突的假设,以及更适合拆出的独立 Issue。
All reactions