omo-senpi 适配器 Live 驱动验证:DAG 依赖前沿(dependency-frontier)调度变更的隔离沙箱端到端证据
omo-senpi 适配器 Live 驱动验证DAG 依赖前沿dependency-frontier调度变更的隔离沙箱端到端证据【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent本文讲解 omo-senpi 适配器packages/omo-senpi与packages/senpi-task在调度器语义变更时的 Live 验证方法论如何用drive.mjs驱动真实 senpi 进程在严格隔离的沙箱中加载重新生成的omo-task.js扩展包并通过resolve-evidence-dir.mjs把证据写入仓库唯一的规范目录。文章以20260825-dag-dep-frontier变更DAG 调度器以依赖前沿准入取代严格 wave 屏障为完整案例读者可借此掌握 senpi 适配器的隔离 QA 流程、结果 JSON 解读与覆盖边界判断。一、场景起点一次 DAG 调度变更为何需要 Live 验证2026-08-25 的 incidentdag_530ad299sisyphuslabs omo startup fixes PR wave暴露了 DAG 调度器的一个真实缺陷严格 wave 屏障strict barrier让 wave N1 只能等待 wave N 最慢的节点全部结束即使某个节点的依赖早已就绪也会被无关的兄弟节点阻塞。修复分支fix/dag-dep-frontier将准入语义改为依赖前沿dependency-frontier节点准入只看每个dependsOn节点是否completed 是否有空闲 resident 槽位不再等待整波静止详见变更证据 .omo/evidence/20260825-dag-dep-frontier/README.md。关键点在于调度器变更会被打进packages/omo-senpi/plugin/extensions/omo-task.jsminified 重写 build marker——重新生成的 bundle 才是调度器变更真正对外发布的表面。因此仅靠引擎级单元测试还不够必须验证真实 senpi 进程能否加载这个重新生成的 bundle且适配器在 live harness 上仍然工作。这正是本文主角——Live Senpi 驱动验证——的职责驱动脚本packages/omo-senpi/scripts/qa/drive.mjs含--self-test验证对象分支 worktree 上重新生成的omo-task.js扩展包运行方式一个真实senpi会话加载插件跑在 driver 自建的隔离沙箱中证据落盘.omo/evidence/omo-senpi-adapter/20260825-dag-dep-frontier/二、证据目录契约resolve-evidence-dir.mjs 唯一路径Live Senpi QA 的证据只能放在.omo/evidence/omo-senpi-adapter/slug/这是仓库级约定根目录AGENTS.md与 senpi-qa 技能共同指向的规范位置。手工输入的替代路径local-ignore/qa-evidence/...、临时目录、路径穿越会静默地把证据丢弃在 PR 无法引用的地方因此解析路径必须走脚本而不是约定。resolve-evidence-dir.mjs.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs只做计算 校验不创建目录ev$(node .agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs \ --repo-root $(git rev-parse --show-toplevel) --slug 20260825-dag-dep-frontier) mkdir -p $ev校验规则源码见resolveEvidenceDir与SAFE_SLUG正则/^[a-z0-9](?:-[a-z0-9])*$/约束说明repoRoot 必须是 git worktree根目录下必须存在.git否则以非零退出码拒绝slug 必须是单个相对段小写字母、数字、单连字符/、.、..、路径穿越、绝对路径全部被正则拒绝只解析不创建目录是否出现由调用方决定被拒绝的 slug 不会留下游离目录输出为绝对路径stdout 打印退出码 0 表示通过三、drive.mjs 隔离沙箱让真实 senpi 运行在受控环境3.1 沙箱结构与种子文件createSandbox()在系统临时目录mkdtempSync(join(tmpdir(), omo-senpi-qa-))下创建一整套隔离目录并用realpathSync.native解析出规范路径防止符号链接逃逸drive.mjs 中createSandbox/seedSandbox沙箱成员用途root任务专属沙箱根如.../omo-senpi-qa-GAEztsproject沙箱工作目录cwdagent隔离的 SENPI/OMO/PI coding agent 目录xdg/xdg-data/xdg-cache隔离的 XDG 三目录home隔离的 HOMEseedSandbox在 agent 目录写入两个关键文件settings.json{defaultProjectTrust: ask, packages: [pluginRoot]}——只加载被测插件包packages/omo-senpi/plugin不继承开发者的真实配置trust.json{ canonicalCwd: true }——只信任沙箱项目目录。注释源码原文特别指出omo 配置加载器从XDG_CONFIG_HOME读取用户作用域如果不隔离每条 lane 都会继承开发者真实的~/.config/omoagents 与 categories结果就不可复现。3.2 环境变量隔离与调用者目录被忽略runSenpi派生子进程时强制覆写环境变量drive.mjsOMO_CODING_AGENT_DIR / SENPI_CODING_AGENT_DIR / PI_CODING_AGENT_DIR → 沙箱 agent 目录 HOME / USERPROFILE → 沙箱 home XDG_CONFIG_HOME / XDG_DATA_HOME / XDG_CACHE_HOME → 沙箱 xdg 三目录 PI_OFFLINE1, OMO_SENPI_QA1其中最关键的行为driver 会忽略调用者通过环境变量传入的SENPI_CODING_AGENT_DIR。证据 JSON 中providedSenpiCodingAgentDir: IGNORED即表示调用者提供的目录被设计性地无视——driver 永远使用自己新建的沙箱 agent 目录因此真实的~/.senpi/agent永远不会被写入对应 SKILL.md 的黄金规则The real agent dir stays untouched。runSelfTest也会显式断言沙箱目录不等于process.env.SENPI_CODING_AGENT_DIR和process.env.XDG_CONFIG_HOME。3.3 认证根目录certification roots为了证明隔离真实有效driver 会在沙箱内预置认证根目录并做前后快照对比seedCertificationRoots/snapshotCertificationRoots沙箱 home 下的~/.senpi/agent、~/.omo/agent预置PROTECTED_STATE_FILES各文件与persistent-state.json三个 xdg 目录各写入.qa-sentinel哨兵文件。同时用snapshotProtectedState/snapshotRealObserved对真实的~/.senpi/agent与~/.omo/agent做前后快照。最终realSenpiUntouched: true只有在目录身份可用directoryIdentityAvailable()且 senpi 判定为 untouched 时才为真——注意 SKILL.md 的提醒整目录 digest 是佐证而非证明本身结论要看 changed-path / untouched 字段。四、验证流程--self-test 与 live run 的判定逻辑drive.mjs的入口分支import.meta.url判定带--self-test走runSelfTest()否则走main()。4.1--self-test先证明 harness 本身可靠runSelfTest()创建沙箱、种子化、然后断言trust.json包含规范 cwd沙箱 agent 目录不等于调用者传入的SENPI_CODING_AGENT_DIR未被复用沙箱 xdg config home 不等于调用者的XDG_CONFIG_HOME沙箱 xdg config home 确实存在不存在的目录 digest 应为absent。全部通过输出SELF-TEST OK即证据文件 drive-self-test.txt 的内容。4.2 Live run两个真实 senpi 会话main()的流程scheduler 变更验证时实际执行前置快照对真实~/.senpi/agent、~/.omo/agent做保护态与观测态快照二进制解析SENPI_BIN环境变量指定 senpi 路径若含/但文件不存在或 PATH 上找不到则结果为SKIPreason:senpi-binary-unavailable——无二进制时报 SKIP/FAIL 而不是静默降级到真实 home黄金规则会话一ultrawork 注入以senpi -e environment-receipt-entry -e mock-provider-entry -p --provider omo-mock --model mock-1 ulw please respond启动mock 脚本为steps: [{type:text, text:ultrawork scenario complete}]。判定ultraworkInjected子进程退出码为 0且沙箱 agent 目录内收集到的.json/.jsonl/.log/.md文本包含ultrawork-mode标记会话二comment-checker以write qa slop提示词驱动 mock 的write工具调用写出qa-slop.ts并通过OMO_COMMENT_CHECKER_BIN注入 comment-checker CLIresolveCommentCheckerBin用createRequire从仓库解析code-yeongyu/comment-checker/cli.js。判定commentChecker退出码 0 且沙箱文本包含comment-checker found issues in头则PASS否则FAIL找不到二进制则为SKIPPED-no-binary汇总判定result ultraworkInjected (commentChecker PASS || commentChecker SKIPPED-no-binary) ? PASS : FAIL收尾finally中rmSync(sandbox.root)删除任务专属沙箱omo-senpi-qa-*目录在运行后被清理driver 已退出不留 QA 子进程。五、结果解读drive-live.txt 逐字段本次运行的证据 JSON 见 drive-live.txt{result:PASS,ultraworkInjected:true,commentChecker:PASS,realSenpiUntouched:true,providedSenpiCodingAgentDir:IGNORED,sandboxAgentDir:.../omo-senpi-qa-GAEzts/agent,sandboxCwd:.../omo-senpi-qa-GAEzts/project}字段值含义resultPASSultrawork 注入成功且 comment-checker 通过或按设计跳过ultraworkInjectedtrue真实 senpi 会话加载插件后注入了ultrawork-modecommentCheckerPASScomment-checker 在隔离会话中工作并识别出问题realSenpiUntouchedtrue真实的~/.senpi/agent未被写入providedSenpiCodingAgentDirIGNORED调用者传入的 agent 目录被设计性忽略符合预期sandboxAgentDir.../omo-senpi-qa-GAEzts/agent沙箱内隔离的 agent 目录sandboxCwd.../omo-senpi-qa-GAEzts/project沙箱工作目录printResult完整输出还包含isolationCertified、realHomeIsolationCertified、certificationLane、realSenpiChangedPaths、observationLimits、protectedStateFiles、realHomesChecked等字段见 drive.mjs 中printResult的 payload 构造供证据 README 引用 changed-path / isolation 字段。清理观察任务专属沙箱omo-senpi-qa-GAEzts在运行后被删除driver 已退出因此本次 QA 不残留子 PID。主机上长期存在的 senpi 进程属于用户全局 omo-ai 安装~/.bun/install/global/...与本 QA 无关。六、为什么这就够了覆盖边界与省略项关联证据文档明确论证了为什么 Live 驱动证明已足够bundle 即发布表面重新生成的omo-task.js是调度器变更的对外载体真实 senpi 进程端到端加载它证明 bundle 可加载、适配器在 live harness 上仍然工作准入语义由引擎级测试证明admission 语义本身是 engine-level 的由20260825-dag-dep-frontier目录中的 failing-first 回归证明senpi-qa 路由表将 DAG state machine / runners 映射到bun test packages/senpi-task不存在专门的 live DAG-admission driverdag-gate-proof.ts只是 manager 级 start 校验——这与兄弟 PR #7320 的作用域决策一致。明确的省略项原文记录task-e2e.mjs/team-e2e.mjs未运行它们演练 task/team 引擎而本 PR 不修改该引擎DAG 通过不变的startOwned契约驱动它由bun test packages/senpi-task与消费方 gate 覆盖捕获的 JSON 中不包含任何 secrets、token 或凭据。七、配套门禁回归 RED/GREEN 与引擎级 gateLive 驱动只是证据链的一环DAG 变更本身由完整门禁矩阵支撑见 .omo/evidence/20260825-dag-dep-frontier/README.md门禁结果bun test packages/senpi-task/src/dag/scheduler-frontier.test.tspristineorigin/devRED适配后的 R2 回归在 barrier 上失败red-origin-dev.txt同一测试本分支GREENgreen-branch.txtbun test packages/senpi-task×21749 pass / 1 skip / 0 failrebased 后 1753 pass / 1 skip / 0 faildag suite 250 pass / 0 failtsgo --noEmit -p packages/senpi-task/tsconfig.json通过exit 0bun test packages/omo-senpi/src/components/task483 pass / 0 fail消费方 wiringdag tool runtimebun test packages/omo-senpi/src/bundle-size.test.ts1 pass / 0 fail重新生成的 bundle 体积node packages/omo-senpi/scripts/qa/drive.mjs--self-test{result:PASS,...,realSenpiUntouched:true}回归测试精确钉住生产症状就绪的依赖节点被无关的 running 兄弟节点饿死且是事件驱动、journal-backedwhenStarted/状态订阅无 sleep不会靠时序运气通过。值得注意的连带变化SCHEDULER_FINGERPRINT_INPUT.waveAdmission从strict-barrier迁移到dependency-frontiermanager 层、fingerprint.ts中定型——准入语义变化时指纹输入必须变化否则旧指纹下的运行不会被复用同一 key 重新提交同一定义会报definition_conflict直到 7 天保留期清理该 key。八、写在最后Live 驱动的适用边界从 .agents/skills/senpi-qa/SKILL.md 的路由表可以总结出适用范围Live driver 是 harness 证明单元测试不算 Live QA。修改适配器 wiring 时用drive.mjs快速前置条件先跑--self-test改 DAG 状态机/runner 时跑bun test packages/senpi-task单元 chaos 不变量两者各司其职。每条证据 README 都必须包含仓库统一的四段式tested / observed / why it is enough / omitted并记录 driver 的 changed-path / isolation 字段与沙箱 agent 目录路径若 driver 未自删沙箱调用方必须在写入清理回执前删除任务专属沙箱并确认子 PID 已终止。一句话总结这套方法论的核心用真实进程、隔离沙箱、可复现路径把bundle 可加载、适配器仍工作、真实 home 未被碰变成一份 reviewer 无需重跑即可审计的 JSON 证据。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

N_m3u8DL-RE 流媒体下载器:3 大场景,从加密视频到直播录制

N_m3u8DL-RE 流媒体下载器:3 大场景,从加密视频到直播录制

N_m3u8DL-RE 流媒体下载器:3 大场景,从加密视频到直播录制 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3…

2026/9/21 16:41:14 阅读更多 →
计算机视觉与模式识别学术速递:视觉语言模型、合成图像检测与大模型部署

计算机视觉与模式识别学术速递:视觉语言模型、合成图像检测与大模型部署

1. 从"学术速递"这个栏目说起:为什么值得单独做一期拆解做计算机视觉和模式识别方向的人,大概都有过这样的体验:每天刷 arXiv 的 cs.CV 和 cs.LG 分区,几十上百篇新论文涌出来,标题扫一遍,摘要点…

2026/9/22 1:49:32 阅读更多 →
PyPTO-Pro 向量算子优化:用 `vf.mul_dst_add` 融合乘加消除冗余 VEC 指令

PyPTO-Pro 向量算子优化:用 `vf.mul_dst_add` 融合乘加消除冗余 VEC 指令

PyPTO-Pro 向量算子优化:用 vf.mul_dst_add 融合乘加消除冗余 VEC 指令 【免费下载链接】pypto-gym PyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库 项目地址: https://gitcode.com/cann/pypto-gym 导读 本文讲解 CANN pypto-gym 仓库中性能调优…

2026/9/21 23:57:09 阅读更多 →

最新新闻

mong底层原理揭秘:搞定3道高频面试题

mong底层原理揭秘:搞定3道高频面试题

mong底层原理揭秘:搞定3道高频面试题 复制来的mong代码跑不通?报错信息看都看不懂,不知道哪里断了,这种“黑盒”操作最让人头大。很多开发者在面试中被问到mong的内存管理或数据一致性时,往往只能背八股文,稍深一层就卡壳。…

2026/9/22 6:06:59 阅读更多 →
5个后端实战技巧让16668.com网站提速新手避坑指南

5个后端实战技巧让16668.com网站提速新手避坑指南

5个后端实战技巧让16668.com网站提速新手避坑指南 看了一堆教程还是不会写项目?别慌,这是90%新手的通病。理论背得滚瓜烂熟,真到16668.com这种实际业务场景里,代码一跑就卡壳。今天这篇 新手避坑…

2026/9/22 6:06:59 阅读更多 →
2026最新打卡签到面试真题拆解

2026最新打卡签到面试真题拆解

2026最新打卡签到面试真题拆解 官方文档动辄几百页,翻来覆去全是术语,面试时根本抓不住重点。很多候选人背了一堆八股文,结果面试官问一句“怎么防止用户刷分”,脑子瞬间空白。…

2026/9/22 6:06:59 阅读更多 →
mac安装mysql踩坑实录:3个实战项目教会你版本迁移真相

mac安装mysql踩坑实录:3个实战项目教会你版本迁移真相

mac安装mysql踩坑实录:3个实战项目教会你版本迁移真相 刚把 Mac 上的 MySQL 从 5.7 升到 8.0,打开 IDE 连不上?报错 Public Key Retrieval is not allowed…

2026/9/22 6:06:59 阅读更多 →
风云动漫避坑指南:3个致命细节,附完整示例代码

风云动漫避坑指南:3个致命细节,附完整示例代码

风云动漫避坑指南:3个致命细节,附完整示例代码 面试被问“动画状态同步原理”时,你只答得出“用定时器刷新”,面试官皱眉。这不是你的错,是教程都只教你跑通…

2026/9/22 6:06:59 阅读更多 →
建筑cad实战避坑指南3步搞定面试原理难题

建筑cad实战避坑指南3步搞定面试原理难题

建筑cad实战避坑指南3步搞定面试原理难题 面试官问“CAD底层图形存储原理”,你卡壳了?别慌。 这行干了十年,见过太多人死在细节上。 这份避坑指南,专治各种面试嘴瓢和实操翻车。 项目目标…

2026/9/22 6:05:59 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →