oh-my-opencode 4.18.0 → 4.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.agents/skills/codex-qa/scripts/lsp-e2e.sh +3677 -0
  2. package/.agents/skills/opencode-qa/scripts/lsp-e2e.sh +3154 -0
  3. package/.agents/skills/work-with-pr/SKILL.md +16 -37
  4. package/.agents/skills/work-with-pr-workspace/evals/evals.json +3 -3
  5. package/.opencode/skills/work-with-pr/SKILL.md +16 -37
  6. package/.opencode/skills/work-with-pr-workspace/evals/evals.json +3 -3
  7. package/bin/AGENTS.md +33 -0
  8. package/dist/cli/index.js +500 -158
  9. package/dist/cli-node/index.js +500 -158
  10. package/dist/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.d.ts +6 -0
  11. package/dist/hooks/category-skill-reminder/hook.d.ts +9 -1
  12. package/dist/hooks/comment-checker/hook.d.ts +8 -1
  13. package/dist/hooks/todo-continuation-enforcer/types.d.ts +3 -0
  14. package/dist/index.js +956 -702
  15. package/dist/plugin/messages-transform.d.ts +1 -0
  16. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +2 -0
  17. package/dist/tui.js +43 -4
  18. package/package.json +16 -16
  19. package/packages/git-bash-mcp/dist/cli.js +81 -19
  20. package/packages/lsp-core/package.json +4 -0
  21. package/packages/lsp-core/src/index.ts +1 -0
  22. package/packages/lsp-core/src/lsp/cleanup-errors.test.ts +18 -0
  23. package/packages/lsp-core/src/lsp/cleanup-errors.ts +12 -3
  24. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +261 -0
  25. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +63 -0
  26. package/packages/lsp-core/src/lsp/client-wrapper.ts +35 -5
  27. package/packages/lsp-core/src/lsp/client.ts +262 -80
  28. package/packages/lsp-core/src/lsp/config-loader.ts +5 -17
  29. package/packages/lsp-core/src/lsp/connection.ts +12 -6
  30. package/packages/lsp-core/src/lsp/directory-diagnostics.test.ts +221 -0
  31. package/packages/lsp-core/src/lsp/directory-diagnostics.ts +61 -28
  32. package/packages/lsp-core/src/lsp/errors.ts +11 -0
  33. package/packages/lsp-core/src/lsp/fixtures/diagnostics-freshness-contract-probe.ts +283 -0
  34. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-contract-probe.ts +196 -0
  35. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +215 -0
  36. package/packages/lsp-core/src/lsp/formatters.ts +3 -0
  37. package/packages/lsp-core/src/lsp/json-rpc-connection-cancellation.test.ts +97 -0
  38. package/packages/lsp-core/src/lsp/json-rpc-connection.ts +73 -5
  39. package/packages/lsp-core/src/lsp/server-install-state.ts +3 -6
  40. package/packages/lsp-core/src/lsp/transport-protocol.ts +52 -0
  41. package/packages/lsp-core/src/lsp/transport.ts +96 -70
  42. package/packages/lsp-core/src/lsp/workspace-apply-edit-failure.ts +19 -0
  43. package/packages/lsp-core/src/lsp/workspace-apply-edit-lease.integration.test.ts +214 -0
  44. package/packages/lsp-core/src/lsp/workspace-apply-edit-sync.integration.test.ts +113 -0
  45. package/packages/lsp-core/src/lsp/workspace-apply-edit-test-support.ts +163 -0
  46. package/packages/lsp-core/src/lsp/workspace-apply-edit.integration.test.ts +163 -0
  47. package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +67 -0
  48. package/packages/lsp-core/src/lsp/workspace-document-state.ts +368 -0
  49. package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +113 -0
  50. package/packages/lsp-core/src/lsp/workspace-edit-commit.test.ts +140 -0
  51. package/packages/lsp-core/src/lsp/workspace-edit-commit.ts +220 -0
  52. package/packages/lsp-core/src/lsp/workspace-edit-contract-evidence.test.ts +56 -0
  53. package/packages/lsp-core/src/lsp/workspace-edit-contract-evidence.ts +30 -0
  54. package/packages/lsp-core/src/lsp/workspace-edit-fingerprint.ts +44 -0
  55. package/packages/lsp-core/src/lsp/workspace-edit-options.test.ts +147 -0
  56. package/packages/lsp-core/src/lsp/workspace-edit-parse-helpers.ts +59 -0
  57. package/packages/lsp-core/src/lsp/workspace-edit-parser.ts +130 -0
  58. package/packages/lsp-core/src/lsp/workspace-edit-path.ts +98 -0
  59. package/packages/lsp-core/src/lsp/workspace-edit-plan-types.ts +60 -0
  60. package/packages/lsp-core/src/lsp/workspace-edit-plan.ts +73 -0
  61. package/packages/lsp-core/src/lsp/workspace-edit-prevalidation.test.ts +174 -0
  62. package/packages/lsp-core/src/lsp/workspace-edit-resource-parser.ts +89 -0
  63. package/packages/lsp-core/src/lsp/workspace-edit-simulation.ts +183 -0
  64. package/packages/lsp-core/src/lsp/workspace-edit-snapshot.ts +53 -0
  65. package/packages/lsp-core/src/lsp/workspace-edit-text.ts +125 -0
  66. package/packages/lsp-core/src/lsp/workspace-edit-types.ts +121 -0
  67. package/packages/lsp-core/src/lsp/workspace-edit.characterization.test.ts +95 -0
  68. package/packages/lsp-core/src/lsp/workspace-edit.ts +49 -200
  69. package/packages/lsp-core/src/lsp/workspace-mutation-controller.ts +182 -0
  70. package/packages/lsp-core/src/mcp.ts +18 -7
  71. package/packages/lsp-core/src/missing-dependency-result.test.ts +105 -0
  72. package/packages/lsp-core/src/missing-dependency-result.ts +57 -0
  73. package/packages/lsp-core/src/post-edit/index.ts +1 -0
  74. package/packages/lsp-core/src/post-edit/orchestration.test.ts +157 -0
  75. package/packages/lsp-core/src/post-edit/orchestration.ts +178 -0
  76. package/packages/lsp-core/src/request-context.test.ts +171 -0
  77. package/packages/lsp-core/src/request-context.ts +222 -9
  78. package/packages/lsp-core/src/tool-surface.test.ts +4 -1
  79. package/packages/lsp-core/src/tools/diagnostics.ts +32 -13
  80. package/packages/lsp-core/src/tools/navigation.ts +12 -12
  81. package/packages/lsp-core/src/tools/rename.ts +10 -15
  82. package/packages/lsp-core/src/tools/symbols.ts +11 -11
  83. package/packages/lsp-core/src/tools/types.ts +2 -1
  84. package/packages/lsp-daemon/dist/cli.js +3330 -764
  85. package/packages/lsp-daemon/dist/client.d.ts +105 -0
  86. package/packages/lsp-daemon/dist/client.js +5995 -0
  87. package/packages/lsp-daemon/dist/daemon-client.d.ts +12 -7
  88. package/packages/lsp-daemon/dist/daemon-client.js +139 -32
  89. package/packages/lsp-daemon/dist/daemon-server.d.ts +1 -0
  90. package/packages/lsp-daemon/dist/daemon-server.js +40 -15
  91. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +10 -8
  92. package/packages/lsp-daemon/dist/ensure-daemon.js +135 -51
  93. package/packages/lsp-daemon/dist/index.d.ts +2 -2
  94. package/packages/lsp-daemon/dist/index.js +3093 -786
  95. package/packages/lsp-daemon/dist/ipc-protocol.d.ts +46 -0
  96. package/packages/lsp-daemon/dist/ipc-protocol.js +187 -0
  97. package/packages/lsp-daemon/dist/lock.js +14 -4
  98. package/packages/lsp-daemon/dist/ownership.d.ts +49 -0
  99. package/packages/lsp-daemon/dist/ownership.js +168 -0
  100. package/packages/lsp-daemon/dist/paths.d.ts +33 -9
  101. package/packages/lsp-daemon/dist/paths.js +72 -33
  102. package/packages/lsp-daemon/dist/proxy.d.ts +5 -0
  103. package/packages/lsp-daemon/dist/proxy.js +123 -16
  104. package/packages/lsp-daemon/dist/request-routing.d.ts +7 -2
  105. package/packages/lsp-daemon/dist/request-routing.js +71 -22
  106. package/packages/lsp-daemon/dist/run-daemon.js +9 -2
  107. package/packages/lsp-daemon/dist/runtime-contract.d.ts +21 -0
  108. package/packages/lsp-daemon/dist/runtime-contract.js +58 -0
  109. package/packages/lsp-daemon/dist/socket-jsonrpc.js +6 -1
  110. package/packages/lsp-daemon/package.json +12 -3
  111. package/packages/lsp-tools-mcp/dist/cli.js +2189 -454
  112. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1741 -148
  113. package/packages/lsp-tools-mcp/dist/mcp.js +2206 -471
  114. package/packages/lsp-tools-mcp/dist/request-context.js +176 -6
  115. package/packages/lsp-tools-mcp/dist/tools.js +2119 -447
  116. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  117. package/packages/omo-codex/plugin/.mcp.json +2 -1
  118. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  119. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  120. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +100 -28
  121. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +100 -28
  122. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  123. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +21 -9
  124. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +35 -0
  125. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +69 -0
  126. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +57 -1
  127. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  128. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  129. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  130. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  131. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  132. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  133. package/packages/omo-codex/plugin/components/lsp/.mcp.json +2 -1
  134. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +55 -0
  135. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +3033 -936
  136. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook-cli.js +0 -4
  137. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.d.ts +5 -2
  138. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +41 -62
  139. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.d.ts +1 -1
  140. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +24 -15
  141. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.d.ts +3 -7
  142. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.js +23 -49
  143. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  144. package/packages/omo-codex/plugin/components/lsp/package.json +3 -2
  145. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-daemon.mjs +31 -1
  146. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-daemon.test.mjs +76 -0
  147. package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.mjs +201 -0
  148. package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.test.mjs +55 -0
  149. package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +0 -4
  150. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +49 -71
  151. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +26 -15
  152. package/packages/omo-codex/plugin/components/lsp/src/lsp-session-state.ts +26 -64
  153. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +16 -17
  154. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +30 -4
  155. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +20 -5
  156. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  157. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -3
  158. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  159. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  160. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +2 -2
  161. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +3 -3
  162. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +2 -2
  163. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  164. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  165. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +1 -1
  166. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +1 -1
  167. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +15 -1
  168. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +20 -0
  169. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  170. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  171. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  172. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  173. package/packages/omo-codex/plugin/components/ultrawork/directive.md +50 -33
  174. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  175. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +50 -33
  177. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +50 -33
  178. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +3 -3
  179. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +5 -6
  180. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  181. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  182. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +6 -5
  184. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +5 -6
  185. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +2 -2
  186. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  187. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  188. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  189. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  190. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  191. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  192. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  193. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  194. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  195. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  196. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  197. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  198. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  199. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  200. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  201. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  202. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  203. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  204. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  205. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  206. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  207. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  208. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  209. package/packages/omo-codex/plugin/package-lock.json +26 -14
  210. package/packages/omo-codex/plugin/package.json +1 -1
  211. package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +2 -3
  212. package/packages/omo-codex/plugin/scripts/build-components.mjs +13 -1
  213. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +9 -1
  214. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -0
  215. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +2 -1
  216. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +50 -33
  217. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  218. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +6 -5
  219. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +8 -0
  220. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +128 -15
  221. package/packages/omo-codex/plugin/test/install-time-build-runtime.test.mjs +10 -0
  222. package/packages/omo-codex/plugin/test/lsp-prebuild-layouts.test.mjs +2 -0
  223. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -0
  224. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +7 -0
  225. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +34 -3
  226. package/packages/omo-codex/scripts/install-dist/install-local.mjs +328 -63
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 4.18.2) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Resetting Project Rule Cache",
10
+ "statusMessage": "(OmO 4.18.2) Resetting Project Rule Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Checking CodeGraph Init Guidance",
10
+ "statusMessage": "(OmO 4.18.2) Checking CodeGraph Init Guidance",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 30,
10
- "statusMessage": "(OmO 4.18.0) Checking Comments",
10
+ "statusMessage": "(OmO 4.18.2) Checking Comments",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 60,
10
- "statusMessage": "(OmO 4.18.0) Checking LSP Diagnostics",
10
+ "statusMessage": "(OmO 4.18.2) Checking LSP Diagnostics",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/teammode/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 4.18.0) Checking Thread Title Hygiene",
11
+ "statusMessage": "(OmO 4.18.2) Checking Thread Title Hygiene",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\teammode\\dist\\cli.js\" hook post-tool-use"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Matching Project Rules",
10
+ "statusMessage": "(OmO 4.18.2) Matching Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Enforcing Unlimited Goal Budget",
10
+ "statusMessage": "(OmO 4.18.2) Enforcing Unlimited Goal Budget",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use-spawn",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 4.18.0) Guarding Ulw-Loop Spawns",
11
+ "statusMessage": "(OmO 4.18.2) Guarding Ulw-Loop Spawns",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use-spawn"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Recommending Git Bash MCP",
10
+ "statusMessage": "(OmO 4.18.2) Recommending Git Bash MCP",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/scripts/auto-update.mjs\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Checking Auto Update",
10
+ "statusMessage": "(OmO 4.18.2) Checking Auto Update",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\scripts\\auto-update.mjs\" hook session-start"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 4.18.0) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 4.18.2) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Checking CodeGraph Bootstrap",
10
+ "statusMessage": "(OmO 4.18.2) Checking CodeGraph Bootstrap",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Loading Project Rules",
10
+ "statusMessage": "(OmO 4.18.2) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/telemetry/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Recording Session Telemetry",
10
+ "statusMessage": "(OmO 4.18.2) Recording Session Telemetry",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\telemetry\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Checking Start-Work Continuation",
10
+ "statusMessage": "(OmO 4.18.2) Checking Start-Work Continuation",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\start-work-continuation\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Checking Ulw-Loop Resume",
10
+ "statusMessage": "(OmO 4.18.2) Checking Ulw-Loop Resume",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook subagent-stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Checking Start-Work Continuation",
10
+ "statusMessage": "(OmO 4.18.2) Checking Start-Work Continuation",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\start-work-continuation\\dist\\cli.js\" hook subagent-stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Verifying LazyCodex Executor Evidence",
10
+ "statusMessage": "(OmO 4.18.2) Verifying LazyCodex Executor Evidence",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lazycodex-executor-verify\\dist\\cli.js\" hook subagent-stop"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ultrawork/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.0) Checking Ultrawork Trigger",
10
+ "statusMessage": "(OmO 4.18.2) Checking Ultrawork Trigger",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ultrawork\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Checking Ulw-Loop Steering",
10
+ "statusMessage": "(OmO 4.18.2) Checking Ulw-Loop Steering",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.0) Loading Project Rules",
10
+ "statusMessage": "(OmO 4.18.2) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.18.0",
3
+ "version": "4.18.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "4.18.0",
9
+ "version": "4.18.2",
10
10
  "workspaces": [
11
11
  "components/codegraph",
12
12
  "components/comment-checker",
@@ -32,6 +32,13 @@
32
32
  "@oh-my-opencode/utils": "workspace:*"
33
33
  }
34
34
  },
35
+ "../../lsp-core": {
36
+ "name": "@oh-my-opencode/lsp-core",
37
+ "version": "0.1.0",
38
+ "dependencies": {
39
+ "@oh-my-opencode/mcp-stdio-core": "workspace:*"
40
+ }
41
+ },
35
42
  "../../lsp-daemon": {
36
43
  "name": "@code-yeongyu/lsp-daemon",
37
44
  "version": "0.1.0",
@@ -93,7 +100,7 @@
93
100
  },
94
101
  "components/codegraph": {
95
102
  "name": "@sisyphuslabs/codex-codegraph",
96
- "version": "4.18.0",
103
+ "version": "4.18.2",
97
104
  "bin": {
98
105
  "omo-codegraph": "dist/cli.js"
99
106
  },
@@ -112,7 +119,7 @@
112
119
  },
113
120
  "components/comment-checker": {
114
121
  "name": "@code-yeongyu/codex-comment-checker",
115
- "version": "4.18.0",
122
+ "version": "4.18.2",
116
123
  "license": "MIT",
117
124
  "bin": {
118
125
  "omo-comment-checker": "dist/cli.js"
@@ -133,7 +140,7 @@
133
140
  },
134
141
  "components/git-bash": {
135
142
  "name": "@sisyphuslabs/codex-git-bash-hook",
136
- "version": "4.18.0",
143
+ "version": "4.18.2",
137
144
  "bin": {
138
145
  "omo-git-bash-hook": "dist/cli.js"
139
146
  },
@@ -148,7 +155,7 @@
148
155
  },
149
156
  "components/lazycodex-executor-verify": {
150
157
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
151
- "version": "4.18.0",
158
+ "version": "4.18.2",
152
159
  "license": "MIT",
153
160
  "bin": {
154
161
  "lazycodex-executor-verify": "dist/cli.js"
@@ -165,10 +172,11 @@
165
172
  },
166
173
  "components/lsp": {
167
174
  "name": "@code-yeongyu/codex-lsp",
168
- "version": "4.18.0",
175
+ "version": "4.18.2",
169
176
  "license": "MIT",
170
177
  "dependencies": {
171
- "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon"
178
+ "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon",
179
+ "@oh-my-opencode/lsp-core": "file:../../../../lsp-core"
172
180
  },
173
181
  "bin": {
174
182
  "omo-lsp": "dist/cli.js"
@@ -185,7 +193,7 @@
185
193
  },
186
194
  "components/rules": {
187
195
  "name": "@code-yeongyu/codex-rules",
188
- "version": "4.18.0",
196
+ "version": "4.18.2",
189
197
  "license": "MIT",
190
198
  "dependencies": {
191
199
  "picomatch": "^4.0.3"
@@ -207,7 +215,7 @@
207
215
  },
208
216
  "components/start-work-continuation": {
209
217
  "name": "@code-yeongyu/codex-start-work-continuation",
210
- "version": "4.18.0",
218
+ "version": "4.18.2",
211
219
  "license": "MIT",
212
220
  "bin": {
213
221
  "omo-start-work-continuation": "dist/cli.js"
@@ -224,7 +232,7 @@
224
232
  },
225
233
  "components/teammode": {
226
234
  "name": "@sisyphuslabs/codex-teammode",
227
- "version": "4.18.0",
235
+ "version": "4.18.2",
228
236
  "devDependencies": {
229
237
  "@types/node": "^25.9.3",
230
238
  "bun-types": "^1.3.1",
@@ -237,7 +245,7 @@
237
245
  },
238
246
  "components/telemetry": {
239
247
  "name": "@code-yeongyu/codex-telemetry",
240
- "version": "4.18.0",
248
+ "version": "4.18.2",
241
249
  "license": "MIT",
242
250
  "bin": {
243
251
  "omo-telemetry": "dist/cli.js"
@@ -255,7 +263,7 @@
255
263
  },
256
264
  "components/ultrawork": {
257
265
  "name": "@code-yeongyu/codex-ultrawork",
258
- "version": "4.18.0",
266
+ "version": "4.18.2",
259
267
  "license": "MIT",
260
268
  "bin": {
261
269
  "omo-ultrawork": "dist/cli.js"
@@ -273,7 +281,7 @@
273
281
  },
274
282
  "components/ulw-loop": {
275
283
  "name": "@code-yeongyu/codex-ulw-loop",
276
- "version": "4.18.0",
284
+ "version": "4.18.2",
277
285
  "license": "MIT",
278
286
  "bin": {
279
287
  "omo-ulw-loop": "dist/cli.js",
@@ -663,6 +671,10 @@
663
671
  "resolved": "../../comment-checker-core",
664
672
  "link": true
665
673
  },
674
+ "node_modules/@oh-my-opencode/lsp-core": {
675
+ "resolved": "../../lsp-core",
676
+ "link": true
677
+ },
666
678
  "node_modules/@oh-my-opencode/prompts-core": {
667
679
  "resolved": "../../prompts-core",
668
680
  "link": true
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.18.0",
3
+ "version": "4.18.2",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -16,8 +16,7 @@ const runtimes = [
16
16
  {
17
17
  label: "lsp-daemon",
18
18
  packageRoot: join(repoPackagesRoot, "lsp-daemon"),
19
- requiredOutputs: ["dist/cli.js", "dist/index.js", "dist/index.d.ts"],
20
- install: true,
19
+ requiredOutputs: ["dist/cli.js", "dist/client.js", "dist/client.d.ts", "dist/index.js", "dist/index.d.ts"],
21
20
  },
22
21
  {
23
22
  label: "git-bash-mcp",
@@ -42,7 +41,7 @@ function buildRuntime(runtime) {
42
41
  return;
43
42
  }
44
43
 
45
- if (runtime.install === true && !existsSync(join(runtime.packageRoot, "node_modules"))) {
44
+ if (existsSync(join(runtime.packageRoot, "package-lock.json")) && !existsSync(join(runtime.packageRoot, "node_modules"))) {
46
45
  const install = spawnSync("npm", ["ci"], {
47
46
  cwd: runtime.packageRoot,
48
47
  shell: process.platform === "win32",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn } from "node:child_process";
3
3
  import { availableParallelism } from "node:os";
4
- import { readdir, readFile, writeFile } from "node:fs/promises";
4
+ import { readdir, readFile, stat, writeFile } from "node:fs/promises";
5
5
  import { builtinModules } from "node:module";
6
6
  import { dirname, join } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
@@ -55,6 +55,7 @@ async function runTasksWithConcurrency(items, limit) {
55
55
 
56
56
  async function buildComponent(task) {
57
57
  await runCaptured(task.buildCommand, task.buildArgs, task.buildCwd, `Building ${task.componentPath}`);
58
+ if (await hasComponentOwnedBundle(task.componentPath)) return;
58
59
  await bundleCli(task.componentPath);
59
60
  }
60
61
 
@@ -84,6 +85,17 @@ async function bundleCli(workspace) {
84
85
  await normalizeBuiltinImports(output);
85
86
  }
86
87
 
88
+ async function hasComponentOwnedBundle(workspace) {
89
+ try {
90
+ const manifest = JSON.parse(await readFile(join(root, workspace, "dist", ".omo-runtime-manifest.json"), "utf8"));
91
+ const cli = await stat(join(root, workspace, "dist", "cli.js"));
92
+ return manifest?.schemaVersion === 1 && cli.isFile() && cli.size > 0;
93
+ } catch (error) {
94
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") return false;
95
+ throw error;
96
+ }
97
+ }
98
+
87
99
  // Buffers each child's stdout/stderr and flushes it as one contiguous block so
88
100
  // concurrent builds never interleave, keeping a failing component's output readable.
89
101
  function runCaptured(command, args, cwd, label) {
@@ -134,7 +134,8 @@ const startWorkCodexCompletion = `When all top-level checkboxes in \`## TODOs\`
134
134
  1. Run the plan's final verification commands.
135
135
  2. Complete the **Global Review and Debugging Gate** before any completion claim, PR creation, PR handoff, branch handoff, or merge:
136
136
  - Invoke the \`review-work\` skill with the final diff, changed files, user goal, constraints, run command, and verification evidence. All five review lanes must return PASS. A timeout, missing deliverable, ack-only child, \`BLOCKED:\`, or inconclusive lane is a gate failure, not approval.
137
- - Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append the ruled-out or confirmed result to \`.omo/start-work/ledger.jsonl\`.
137
+ - Each passing review lane binds to the exact full commit SHA it reviewed. Immediately append a durable record to \`.omo/start-work/ledger.jsonl\` with the lane name, full SHA, PASS verdict, and report artifact/source. Before same-SHA reuse after any continuation or compaction, re-read the ledger record and require the exact lane/SHA pair; memory, chat history, or an unstamped report is not coverage. New commits require fresh applicable lane coverage.
138
+ - Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append a separate durable record with the audit name, exact full SHA, verdict, and evidence artifact/source to \`.omo/start-work/ledger.jsonl\`. Reuse it only after re-reading an exact audit/SHA match.
138
139
  - If any review lane or debugging hypothesis fails, invoke the \`debugging\` skill, confirm root cause with runtime evidence, add the minimal failing test or reproduction, fix it, rerun the affected verification, then rerun the Global Review and Debugging Gate.
139
140
  - Evidence hygiene is mandatory: redact or mask secrets and sensitive user data before writing \`.omo/start-work/ledger.jsonl\`, a PR body, or a handoff. Never include raw tokens, credentials, auth headers, cookies, API keys, env dumps, private logs, or PII; use concise summaries, lengths, hashes, or short non-sensitive prefixes instead.
140
141
  - If the work includes creating, updating, or handing off a PR, refresh \`git status\` and the PR/branch state from the task-owned worktree after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
@@ -156,6 +157,13 @@ failed, investigate the underlying uncertainty with the \`debugging\` skill when
156
157
  runtime behavior may be wrong, fix with evidence, and rerun the affected lane
157
158
  before claiming completion, creating or handing off a PR, or merging.
158
159
 
160
+ After each lane reaches PASS, immediately append a durable task-evidence record
161
+ to the active ledger with the lane name, exact full commit SHA, PASS verdict,
162
+ and report artifact/source. Before reusing coverage after continuation or
163
+ compaction, re-read that record and require the exact lane/SHA pair. Memory,
164
+ chat history, or an unstamped report is not coverage; a new commit requires
165
+ fresh applicable lane records.
166
+
159
167
  A rejecting lane must name its blockers inline in its final message — each
160
168
  blocker cites the violated goal criterion or requirement plus an evidence
161
169
  pointer. A bare REJECT/FAIL token without findings is not a verdict; treat it
@@ -70,6 +70,13 @@ failed, investigate the underlying uncertainty with the `debugging` skill when
70
70
  runtime behavior may be wrong, fix with evidence, and rerun the affected lane
71
71
  before claiming completion, creating or handing off a PR, or merging.
72
72
 
73
+ After each lane reaches PASS, immediately append a durable task-evidence record
74
+ to the active ledger with the lane name, exact full commit SHA, PASS verdict,
75
+ and report artifact/source. Before reusing coverage after continuation or
76
+ compaction, re-read that record and require the exact lane/SHA pair. Memory,
77
+ chat history, or an unstamped report is not coverage; a new commit requires
78
+ fresh applicable lane records.
79
+
73
80
  A rejecting lane must name its blockers inline in its final message — each
74
81
  blocker cites the violated goal criterion or requirement plus an evidence
75
82
  pointer. A bare REJECT/FAIL token without findings is not a verdict; treat it
@@ -178,7 +178,8 @@ When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are
178
178
  1. Run the plan's final verification commands.
179
179
  2. Complete the **Global Review and Debugging Gate** before any completion claim, PR creation, PR handoff, branch handoff, or merge:
180
180
  - Invoke the `review-work` skill with the final diff, changed files, user goal, constraints, run command, and verification evidence. All five review lanes must return PASS. A timeout, missing deliverable, ack-only child, `BLOCKED:`, or inconclusive lane is a gate failure, not approval.
181
- - Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append the ruled-out or confirmed result to `.omo/start-work/ledger.jsonl`.
181
+ - Each passing review lane binds to the exact full commit SHA it reviewed. Immediately append a durable record to `.omo/start-work/ledger.jsonl` with the lane name, full SHA, PASS verdict, and report artifact/source. Before same-SHA reuse after any continuation or compaction, re-read the ledger record and require the exact lane/SHA pair; memory, chat history, or an unstamped report is not coverage. New commits require fresh applicable lane coverage.
182
+ - Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append a separate durable record with the audit name, exact full SHA, verdict, and evidence artifact/source to `.omo/start-work/ledger.jsonl`. Reuse it only after re-reading an exact audit/SHA match.
182
183
  - If any review lane or debugging hypothesis fails, invoke the `debugging` skill, confirm root cause with runtime evidence, add the minimal failing test or reproduction, fix it, rerun the affected verification, then rerun the Global Review and Debugging Gate.
183
184
  - Evidence hygiene is mandatory: redact or mask secrets and sensitive user data before writing `.omo/start-work/ledger.jsonl`, a PR body, or a handoff. Never include raw tokens, credentials, auth headers, cookies, API keys, env dumps, private logs, or PII; use concise summaries, lengths, hashes, or short non-sensitive prefixes instead.
184
185
  - If the work includes creating, updating, or handing off a PR, refresh `git status` and the PR/branch state from the task-owned worktree after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
@@ -112,9 +112,7 @@ notepad with a one-line reason each. Skipping a skill that fits the
112
112
  task is a defect. Open a skill's body only when THIS session will
113
113
  execute its workflow; skills a delegated session needs are named in
114
114
  its prompt and read there, not here.
115
- Next, fire the first discovery wave in ONE parallel action (Finding
116
- things below): direct lookups plus `explorer` / `librarian` children
117
- for unfamiliar layout or external contracts.
115
+ Next, fire the first discovery wave under Finding things below.
118
116
  Then run Tier triage (above) on the change set and record the tier —
119
117
  tier sizes evidence and review, never who plans. Size planning by
120
118
  what the wave left UNDECIDED, not by how many steps you can list:
@@ -214,25 +212,27 @@ GOOD pair (test-first, ordered):
214
212
  BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
215
213
  production code before its failing test → rewrite.
216
214
 
217
- # Finding things (lead with these, parallel-flood the first wave)
215
+ # Finding things (lead with these, code-mode the first wave)
218
216
  Never guess from memory — locate with the right tool, and re-read before
219
- you claim or change. Fire 3+ independent lookups in one action;
220
- serialize only when one output strictly feeds the next.
221
- - CodeGraph, when `codegraph_*` tools exist -> use `codegraph_explore`
222
- first for how/where/what/flow questions and before edits; if absent,
223
- inactive/uninitialized, or cold-start unavailable, keep moving with
224
- Read/Grep/Glob/LSP and the ast-grep skill.
225
- - Repo-wide inspection, CLI smoke tests, git/history, bounded command
226
- output use native shell commands directly: `rg`, `rg --files`,
227
- `cat`, and `git`. Narrow huge output before reading it.
228
- - Symbols definitions, references, rename impact, diagnostics →
229
- `lsp_goto_definition`, `lsp_find_references`, `lsp_symbols`,
230
- `lsp_diagnostics`. Use the LSP, not text search, for anything
231
- symbol-shaped.
232
- - Structural shapes call/function/class/import patterns, codemods →
233
- the `ast-grep` skill or `sg` CLI with `$VAR` / `$$$` metavars.
234
- - Text / strings / comments / logs → `rg`. File-name discovery →
235
- `glob` / `find`. Verbatim content `read`.
217
+ you claim or change. **USE CODE MODE AGGRESSIVELY FOR BOUNDED WAVES.**
218
+ When multiple independent tool calls produce results that can be materially
219
+ filtered, joined, deduplicated, or reduced, make ONE `exec` / eval JavaScript
220
+ program that calls eligible tools concurrently with `Promise.all` and emits only
221
+ decision-relevant evidence. For shell-native repo work without programmatic
222
+ tool access, use ONE Python script with `concurrent.futures`, `subprocess`,
223
+ and utility functions to batch commands and reduce output. Keep direct calls
224
+ when one result chooses the next action, outputs are already small, semantic
225
+ judgment is required between calls, approval or side effects are involved,
226
+ or native artifacts / citations must be preserved.
227
+ - Architecture / flow / blast radius → `codegraph_explore` first when
228
+ `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
229
+ - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
230
+ workspace symbols, and diagnostics use the available `lsp_*` tools, not
231
+ text search. Run diagnostics after edits and treat errors as blocking.
232
+ - Repo text / filenames / history / bounded shell output → `rg`,
233
+ `rg --files`, `git`, and native utilities; narrow output in-program.
234
+ - Structural call / function / class / import shapes and codemods → the
235
+ `ast-grep` skill or `sg` with `$VAR` / `$$$` metavariables.
236
236
  When discovery needs multiple angles or the module layout is
237
237
  unfamiliar, delegate to the `explorer` subagent (read-only codebase
238
238
  search, absolute-path results). For research that leaves the repo —
@@ -296,21 +296,39 @@ Until every success criterion PASSES with its evidence captured:
296
296
  vars. Append a one-line cleanup receipt to the notepad next to the
297
297
  artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
298
298
  rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
299
- 6. Verify: LSP diagnostics clean on changed files + full test suite
300
- green (no skipped, no xfail added this turn).
299
+ 6. Verify: LSP diagnostics clean on changed files + the test scope
300
+ this criterion touched green (no skipped, no xfail added this
301
+ turn). Re-run a validation command (suite, typecheck, build) only
302
+ when its inputs changed since its last green run; ONE full-suite
303
+ pass belongs immediately before the final message, not after
304
+ every increment.
301
305
  7. Mark completed. Append non-obvious findings / learnings.
302
- 8. After each increment, re-run every criterion's scenario. Record
303
- PASS/FAIL inline with the evidence paths AND the cleanup receipt.
304
- Loop until all PASS.
305
-
306
- Parallel-batch independent reads / searches / subagents within a step,
307
- but NEVER parallelise RED and GREEN of the same criterion.
306
+ 8. After each increment, re-run the scenarios that increment could
307
+ have affected; re-run the full set once, right before the final
308
+ message. Record PASS/FAIL inline with the evidence paths AND the
309
+ cleanup receipt. Loop until all PASS.
310
+
311
+ Within a step, follow Finding things; NEVER parallelise RED and GREEN of
312
+ the same criterion.
313
+
314
+ # Waiting discipline (a poll costs a full model round)
315
+ Every status check you issue as a tool call replays the entire
316
+ accumulated context through the model. When a command will run long
317
+ (installs, builds, test suites, containers, CI), run it to completion
318
+ in ONE call with a timeout sized to the expected duration, or send
319
+ output to a log file and read it once when a completion signal is
320
+ expected. Never re-poll the same surface with empty reads or
321
+ sub-minute waits — batch waiting into the fewest, longest blocking
322
+ calls the harness allows, and do independent root work while the
323
+ command runs. If two consecutive checks show no state change, double
324
+ the wait before the next check or switch to a completion signal.
308
325
 
309
326
  # Codex subagent reliability
310
327
  Every `multi_agent_v1.spawn_agent` message is self-contained and starts with
311
- `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`, and
312
- `VERIFY`. State that it is an executable assignment, not a context
313
- handoff. Use `fork_context: false` unless full history is truly
328
+ `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`,
329
+ `VERIFY`, and `STOP WHEN` the observable condition that ends the
330
+ child's run; a child without a stop condition wanders past its goal.
331
+ State that it is an executable assignment, not a context handoff. Use `fork_context: false` unless full history is truly
314
332
  required; paste only the context the child needs. Full-history forks can
315
333
  make the child continue old parent context instead of the delegated task.
316
334
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
@@ -420,7 +438,6 @@ message + present for approval.
420
438
  - Never suppress lints / errors / test failures. Never delete, skip,
421
439
  `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
422
440
  - Never claim done from inference — only from captured evidence.
423
- - Parallel tool calls for any independent work.
424
441
 
425
442
  # Output discipline
426
443
  - First line literally: `ULTRAWORK MODE ENABLED!`