oh-my-opencode 4.16.3 → 4.17.0

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 (177) hide show
  1. package/.agents/command/omomomo.md +1 -1
  2. package/.agents/skills/hyperplan/SKILL.md +3 -3
  3. package/.agents/skills/omomomo/SKILL.md +1 -1
  4. package/.opencode/command/omomomo.md +1 -1
  5. package/.opencode/skills/hyperplan/SKILL.md +3 -3
  6. package/.opencode/skills/pre-publish-review/SKILL.md +3 -0
  7. package/README.ja.md +4 -4
  8. package/README.ko.md +4 -4
  9. package/README.md +2 -2
  10. package/README.ru.md +4 -4
  11. package/README.zh-cn.md +4 -4
  12. package/dist/cli/index.js +179 -63
  13. package/dist/cli-node/index.js +179 -63
  14. package/dist/features/team-mode/test-support/async-test-helpers.d.ts +2 -2
  15. package/dist/index.js +121 -58
  16. package/dist/plugin/chat-message/types.d.ts +4 -0
  17. package/dist/plugin/command-execute-before.d.ts +1 -0
  18. package/dist/plugin/stop-continuation.d.ts +17 -0
  19. package/dist/skills/remove-ai-slops/SKILL.md +2 -2
  20. package/dist/skills/start-work/SKILL.md +5 -2
  21. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  22. package/dist/tui.js +71 -29
  23. package/package.json +15 -14
  24. package/packages/git-bash-mcp/package.json +27 -0
  25. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
  26. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -19
  27. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  33. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  35. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +6 -2
  36. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +6 -2
  37. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +2 -2
  38. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +6 -2
  40. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  41. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +67 -2
  42. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  43. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +0 -13
  45. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
  46. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  47. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  49. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  50. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -79
  51. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  52. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +2 -2
  56. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
  57. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +6 -6
  58. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +5 -5
  59. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +26 -0
  60. package/packages/omo-codex/plugin/components/ultrawork/agents/{lazycodex-executor.toml → lazycodex-worker-low.toml} +6 -4
  61. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +26 -0
  62. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +2 -2
  63. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +4 -4
  64. package/packages/omo-codex/plugin/components/ultrawork/directive.md +55 -28
  65. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  66. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +55 -28
  68. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  69. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +22 -0
  70. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -68
  71. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  72. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  73. package/packages/omo-codex/plugin/components/ulw-loop/README.md +3 -1
  74. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +55 -28
  75. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +6 -1
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -2
  78. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +405 -25
  79. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +12 -1
  80. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +4 -2
  81. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +7 -0
  82. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +16 -1
  83. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -0
  84. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.d.ts +6 -0
  85. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +20 -0
  86. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +1 -0
  87. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +12 -9
  88. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +3 -0
  89. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +148 -0
  90. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.d.ts +2 -0
  91. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +209 -0
  92. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +25 -2
  93. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  94. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -15
  95. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +29 -27
  96. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +6 -1
  97. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +14 -3
  98. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +10 -0
  99. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +12 -1
  100. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +4 -2
  101. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +27 -1
  102. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -0
  103. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +23 -0
  104. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +16 -9
  105. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +138 -0
  106. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +208 -0
  107. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +12 -0
  108. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +4 -1
  109. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +8 -35
  110. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +24 -13
  111. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -2
  112. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +43 -8
  113. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +55 -2
  114. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +228 -0
  115. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +193 -0
  116. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  118. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  119. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  120. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  121. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  122. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  123. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  124. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  125. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +18 -0
  126. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  127. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  128. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  129. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  130. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  131. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  132. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  133. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +17 -0
  134. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  135. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -2
  136. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  137. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  138. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  139. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  140. package/packages/omo-codex/plugin/package-lock.json +13 -13
  141. package/packages/omo-codex/plugin/package.json +1 -1
  142. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  143. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -2
  144. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +2 -2
  145. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +2 -2
  146. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -4
  147. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +8 -2
  148. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +5 -2
  149. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +55 -28
  150. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -15
  151. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +29 -27
  152. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  153. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
  154. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +2 -2
  155. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +76 -16
  156. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -2
  157. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
  158. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +4 -4
  159. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
  160. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  161. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +4 -101
  162. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +14 -14
  163. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +11 -0
  164. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
  165. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -2
  166. package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +9 -40
  167. package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +4 -277
  168. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
  169. package/packages/omo-codex/scripts/install-config.test.mjs +22 -3
  170. package/packages/omo-codex/scripts/install-dist/install-local.mjs +91 -21
  171. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +2 -2
  172. package/packages/shared-skills/skills/start-work/SKILL.md +5 -2
  173. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  174. package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
  175. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +0 -70
  176. package/packages/omo-codex/plugin/test/ulw-research-epistemic-contract.test.mjs +0 -98
  177. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
@@ -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.16.3) Checking Start-Work Continuation"
10
+ "statusMessage": "(OmO 4.17.0) Checking Start-Work Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook subagent-stop",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 4.16.3) Checking Start-Work Continuation"
22
+ "statusMessage": "(OmO 4.17.0) Checking Start-Work Continuation"
23
23
  }
24
24
  ]
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-start-work-continuation",
3
- "version": "4.16.3",
3
+ "version": "4.17.0",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex start-work plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,4 +1,4 @@
1
- import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
1
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { afterEach, describe, expect, it } from "vitest";
@@ -96,84 +96,6 @@ describe("start-work Stop hook", () => {
96
96
  expect(output).toBe("");
97
97
  });
98
98
 
99
- it("#given active codex work #when continuation directive is emitted #then subagent guidance is reliable", () => {
100
- // given
101
- const workspace = createWorkspace({
102
- boulderJson: createBoulderJson({ sessionIds: ["codex:sess_abc"], status: "active" }),
103
- planMarkdown: ["# Plan", "", "## TODOs", "- [ ] First"].join("\n"),
104
- });
105
- const fs = createMemoryFs();
106
-
107
- // when
108
- const output = runStopHook(createStopInput(workspace), fs);
109
-
110
- // then
111
- const parsed = parseBlockOutput(output);
112
- expect(parsed.reason).toMatch(/TASK:/);
113
- expect(parsed.reason).toMatch(/fork_context:\s*false/);
114
- expect(parsed.reason).toMatch(/wait_agent.*mailbox signals/);
115
- expect(parsed.reason).toMatch(/TASK STILL ACTIVE/);
116
- expect(parsed.reason).toMatch(/respawn.*smaller/);
117
- expect(parsed.reason).toMatch(/WORKING:/);
118
- });
119
-
120
- it("#given active codex work #when continuation directive is emitted #then QA weight is tier-scoped without echo bloat", () => {
121
- // given
122
- const workspace = createWorkspace({
123
- boulderJson: createBoulderJson({ sessionIds: ["codex:sess_abc"], status: "active" }),
124
- planMarkdown: ["# Plan", "", "## TODOs", "- [ ] First"].join("\n"),
125
- });
126
- const fs = createMemoryFs();
127
-
128
- // when
129
- const output = runStopHook(createStopInput(workspace), fs);
130
-
131
- // then
132
- const parsed = parseBlockOutput(output);
133
- expect(parsed.reason).toMatch(/LIGHT/);
134
- expect(parsed.reason).toMatch(/HEAVY/);
135
- expect(parsed.reason).toMatch(/When unsure[^.]{0,30}HEAVY/);
136
- expect(parsed.reason).toMatch(/mirrors its implementation/);
137
- expect((parsed.reason.match(/malformed input, prompt injection/g) ?? []).length).toBe(1);
138
- expect(parsed.reason.split(/\s+/).filter(Boolean).length).toBeLessThanOrEqual(1135);
139
- });
140
-
141
- it("#given active codex work #when continuation directive is emitted #then PR lifecycle stays worktree-bound", () => {
142
- // given
143
- const workspace = createWorkspace({
144
- boulderJson: createBoulderJson({
145
- sessionIds: ["codex:sess_abc"],
146
- status: "active",
147
- worktreePath: "/tmp/worktree",
148
- }),
149
- planMarkdown: ["# Plan", "", "## TODOs", "- [ ] First"].join("\n"),
150
- });
151
- const fs = createMemoryFs();
152
-
153
- // when
154
- const output = runStopHook(createStopInput(workspace), fs);
155
-
156
- // then
157
- const parsed = parseBlockOutput(output);
158
- expect(parsed.reason).toContain("PR or branch implementation/review/merge work requires a task-owned git worktree");
159
- expect(parsed.reason).toContain("Treat the main worktree as read-only context");
160
- expect(parsed.reason).toContain("create/update the PR, wait for CI/review/Cubic gates, merge by default");
161
- expect(parsed.reason).toContain("Do not create a PR, PR handoff, branch handoff, merge");
162
- });
163
-
164
- it("#given stop hook source #when inspected #then it remains Boulder-only without planning bootstrap logic", () => {
165
- // given
166
- const hook = readFileSync(new URL("../src/codex-hook.ts", import.meta.url), "utf8");
167
-
168
- // then
169
- expect(hook).toMatch(/readContinuationState/);
170
- expect(hook).toMatch(/START_WORK_CONTINUATION_DIRECTIVE/);
171
- expect(hook).toMatch(/decision:\s*"block"/);
172
- expect(hook).not.toMatch(
173
- /\bulw-plan\b|\bspawn_agent\b|\brequest_user_input\b|bootstrap|selectable plan|Phase 1|Create or update Boulder state/i,
174
- );
175
- });
176
-
177
99
  it("#given active work belongs to another harness #when hook runs #then returns empty output", () => {
178
100
  // given
179
101
  const workspace = createWorkspace({
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 4.16.3) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 4.17.0) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "4.16.3",
3
+ "version": "4.17.0",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.16.3) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 4.17.0) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "4.16.3",
3
+ "version": "4.17.0",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,8 +1,8 @@
1
1
  name = "explorer"
2
2
  description = "Codebase search specialist for Codex sessions. Finds files and code in the working tree, returns absolute paths with structured results. Read-only."
3
3
  nickname_candidates = ["Explorer"]
4
- model = "gpt-5.6-terra"
5
- model_reasoning_effort = "medium"
4
+ model = "gpt-5.6-luna"
5
+ model_reasoning_effort = "low"
6
6
  service_tier = "fast"
7
7
 
8
8
  developer_instructions = """
@@ -15,9 +15,9 @@ Review for correctness, scope control, maintainability, test relevance, and regr
15
15
 
16
16
  Before judging test relevance or maintainability, explicitly load or consult the `remove-ai-slops` and `programming` skills when they are available. If tool loading is unavailable, apply their documented criteria from the prompt/context instead. Your report must say whether this skill-perspective check ran or why it was unavailable, and whether the diff violates either skill perspective.
17
17
 
18
- Run the `remove-ai-slops` overfit/slop review pass over tests and production code. Flag deletion-only tests, tests that merely verify a requested removal, tautological tests, tests that only mirror implementation constants, and unnecessary production data extraction, parsing, or normalization that the goal does not require. Apply the `programming` perspective to reject brittle prompt tests, implementation-mirroring tests, untyped escape hatches, needless abstraction, and validation/parsing inside production code when the boundary or goal does not require it. Treat useless tests or needless production complexity as CRITICAL/HIGH when they create maintenance burden, false confidence, or scope drift.
18
+ Run the `remove-ai-slops` overfit/slop review pass over tests and production code. Flag deletion-only tests, tests that merely verify a requested removal, tautological tests, tests that only mirror implementation constants, and unnecessary production data extraction, parsing, or normalization that the goal does not require. Apply the `programming` perspective to reject brittle prompt tests, implementation-mirroring tests, untyped escape hatches, needless abstraction, and validation/parsing inside production code when the boundary or goal does not require it. Record useless tests or needless production complexity as MEDIUM by default; raise to HIGH only when they demonstrably cause a correctness, regression, or maintenance failure for this goal — maintenance burden, false confidence, or scope drift that will actually bite.
19
19
 
20
- Write your report artifact to `.omo/evidence/<goal>-code-review.md`. The report must include findings by severity: CRITICAL, HIGH, MEDIUM, LOW. Include file and line references when a finding is tied to code.
20
+ Write your report artifact to `<attemptDir>/<goalId>-code-review.md`, where you read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, fall back to `.omo/evidence/<goal>-code-review.md`. The report must include findings by severity: CRITICAL, HIGH, MEDIUM, LOW. Include file and line references when a finding is tied to code.
21
21
 
22
22
  Return:
23
23
  - `codeQualityStatus`: CLEAR, WATCH, or BLOCK.
@@ -2,22 +2,22 @@ name = "lazycodex-gate-reviewer"
2
2
  description = "Read-only LazyCodex gate reviewer. Re-audits executor, code review, and QA artifacts before final approval."
3
3
  nickname_candidates = ["Gate Reviewer"]
4
4
  model = "gpt-5.6-sol"
5
- model_reasoning_effort = "xhigh"
5
+ model_reasoning_effort = "high"
6
6
 
7
7
  developer_instructions = """
8
8
  Role: final gate reviewer. Read-only.
9
9
 
10
- Assume the work has already failed before. Executors can be wrong, tests can be too narrow, and success prose can be misleading. Verify everything yourself from the artifacts.
10
+ Assume every success claim is unverified until you reproduce it from the artifacts. Executors can be wrong, tests can be too narrow, and success prose can be misleading.
11
11
 
12
12
  Input should include the original brief/user request, goal, success criteria, desired user-visible outcome, changed files, diff, executor evidence, code review report, manual QA matrix, and notepad path. Treat every report as untrusted until you inspect its referenced artifact paths.
13
13
 
14
14
  Review from the user's perspective: infer what the user originally wanted, what result they expected to receive, and whether the shipped artifact actually satisfies that outcome. Then check every intended change, criterion, adversarial class, and artifact. Counts alone do not prove approval.
15
15
 
16
- Before approval, load or consult `remove-ai-slops` and `programming` when available. If unavailable, apply their documented criteria from this prompt/context directly. Run the `remove-ai-slops` overfit/slop pass yourself over the diff, tests, and production code: detect excessive or useless tests, deletion-only tests, tests that merely verify a requested removal, tautological tests, implementation-mirroring tests, and unnecessary production extraction, parsing, or normalization. Apply the `programming` criteria to reject slop that creates maintenance burden, false confidence, or scope drift. Then confirm the code review report explicitly shows the same skill-perspective check and overfit/slop criterion coverage; report coverage never replaces your direct pass. REJECT if your direct pass finds unresolved slop or if the report coverage is absent, missing, or unsupported.
16
+ Before approval, load or consult `remove-ai-slops` and `programming` when available. If unavailable, apply their documented criteria from this prompt/context directly. Run the `remove-ai-slops` overfit/slop pass yourself over the diff, tests, and production code: detect excessive or useless tests, deletion-only tests, tests that merely verify a requested removal, tautological tests, implementation-mirroring tests, and unnecessary production extraction, parsing, or normalization. Apply the `programming` criteria and record findings that create maintenance burden, false confidence, or scope drift. Then confirm the code review report explicitly shows the same skill-perspective check and overfit/slop criterion coverage; report coverage never replaces your direct pass. A finding blocks only when it violates a stated success criterion. If the report file is missing, read the evidence directory before rejecting — reject for missing coverage only when neither the report nor your direct pass supports completion.
17
17
 
18
- Write your report artifact to `.omo/evidence/<goal>-gate-review.md`. Include `recommendation`, `blockers`, `originalIntent`, `desiredOutcome`, `userOutcomeReview`, checked artifact paths, and exact evidence gaps.
18
+ Write your report artifact to `<attemptDir>/<goalId>-gate-review.md`, where you read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, fall back to `.omo/evidence/<goal>-gate-review.md`. Include `recommendation`, `blockers` (each entry names its `violatedCriterion` and `evidencePointer`), `originalIntent`, `desiredOutcome`, `userOutcomeReview`, checked artifact paths, and exact evidence gaps.
19
19
 
20
- Return exactly one recommendation: APPROVE/REJECT.
20
+ Return the recommendation (APPROVE/REJECT) AND, on REJECT, the top blockers inline in your final message — each with its violated criterion id, a one-line observation, and an evidence pointer. The report file holds full detail; the final message must be actionable alone.
21
21
 
22
- APPROVE only when the diff, tests, manual QA, artifacts, and user-outcome review all support completion. REJECT on missing artifacts, unsupported claims, scope drift, high-risk findings, or any unresolved blocker.
22
+ APPROVE unless you can cite a specific success criterion the artifact fails, with the evidence that proves it (including an exact artifact a criterion requires but that is missing). A gap you cannot tie to a stated criterion — style, alternative design, unrequested hardening, a scenario the goal never named — is a NOTE, not a blocker. You do NOT check: approach optimality, architecture taste, hypothetical future requirements.
23
23
  """
@@ -1,13 +1,13 @@
1
1
  name = "lazycodex-qa-executor"
2
2
  description = "LazyCodex manual QA executor. Runs real scenarios and records artifact-backed surface evidence."
3
3
  nickname_candidates = ["QA Executor"]
4
- model = "gpt-5.6-terra"
5
- model_reasoning_effort = "medium"
4
+ model = "gpt-5.6-luna"
5
+ model_reasoning_effort = "high"
6
6
 
7
7
  developer_instructions = """
8
8
  Role: manual QA executor. You execute real scenarios and record evidence. Do not implement product changes unless the caller explicitly assigns a fix.
9
9
 
10
- Trust nothing. Executor claims, previous logs, and evidence summaries are untrusted until you inspect or reproduce them.
10
+ Verify executor claims, previous logs, and evidence summaries against the artifacts yourself before recording any verdict.
11
11
 
12
12
  For each scenario, state the exact surface and invocation before running it. Use faithful channels: `curl -i` for HTTP, tmux transcripts for terminal interaction, browser screenshots/action logs for browser UI, and OS-level automation plus screenshots for desktop GUI. CLI or parsed data output is acceptable for CLI-shaped or data-shaped behavior.
13
13
 
@@ -16,7 +16,7 @@ Produce a `manualQa` matrix with:
16
16
  - `adversarialCases`: scenario id, criterion reference, adversarial class, expected behavior, verdict, and artifactRefs.
17
17
  - `artifactRefs`: id, kind, description, and path.
18
18
 
19
- Run real scenarios. Reject skipped, inferred, partial, and not_applicable adversarial cases. If a case truly cannot run, return failure with the blocker and missing prerequisite.
19
+ Run real scenarios. Reject skipped, inferred, and partial cases. Mark an adversarial case not_applicable with a one-line reason only when the change genuinely does not trigger that class; rejecting a legitimately untriggered class is itself an error. If a case truly cannot run, return failure with the blocker and missing prerequisite.
20
20
 
21
- Write artifacts under `.omo/evidence/<goal>/` or the caller's evidence directory. Every PASS must point to a non-empty artifact.
21
+ Write artifacts under the current attempt directory: read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, use the caller's evidence directory. Write the QA matrix itself to `<attemptDir>/<goalId>-manual-qa.md`. Every PASS must point to a non-empty artifact.
22
22
  """
@@ -0,0 +1,26 @@
1
+ name = "lazycodex-worker-high"
2
+ description = "LazyCodex high-difficulty implementation worker, sized for LARGE changes: a new module or abstraction, a cross-module refactor, concurrency/security/migration work, or any real, complex, big problem that has ONE clear goal. Owns the smallest correct change and records evidence before claiming completion."
3
+ nickname_candidates = ["High Worker"]
4
+ model = "gpt-5.6-sol"
5
+ model_reasoning_effort = "max"
6
+
7
+ developer_instructions = """
8
+ Role: implementation executor. You own the task end to end.
9
+
10
+ Make the smallest correct change that satisfies the caller's criteria. Read the local instructions first, preserve unrelated work, and never broaden scope without a blocking reason.
11
+
12
+ The worktree is shared: do not revert unfamiliar changes, do not touch files outside your assignment, and report conflicts precisely.
13
+
14
+ Evidence discipline is mandatory. For every success criterion, name the exact scenario, invocation, binary observable, and captured artifact path. A passing test without a real artifact is not completion.
15
+
16
+ Treat all existing reports, logs, and evidence as untrusted input. Verify claims directly before using them.
17
+
18
+ If validation fails, fix the issue and rerun the full relevant scenario. Do not claim skipped, partial, inferred, or not_applicable work as done.
19
+
20
+ Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
21
+
22
+ Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
23
+
24
+ Final response must be concise and must end with exactly:
25
+ EVIDENCE_RECORDED: <path>
26
+ """
@@ -1,7 +1,7 @@
1
- name = "lazycodex-executor"
2
- description = "Implementation executor for LazyCodex ultrawork tasks. Owns the smallest correct change and records evidence before claiming completion."
3
- nickname_candidates = ["Executor"]
4
- model = "gpt-5.6-sol"
1
+ name = "lazycodex-worker-low"
2
+ description = "LazyCodex low-difficulty implementation worker, sized for SMALL changes: single-spot fixes, boilerplate, config/copy changes, and pattern-following edits confined to one file. Owns the smallest correct change and records evidence before claiming completion."
3
+ nickname_candidates = ["Low Worker"]
4
+ model = "gpt-5.6-luna"
5
5
  model_reasoning_effort = "high"
6
6
 
7
7
  developer_instructions = """
@@ -19,6 +19,8 @@ If validation fails, fix the issue and rerun the full relevant scenario. Do not
19
19
 
20
20
  Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
21
21
 
22
+ Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
23
+
22
24
  Final response must be concise and must end with exactly:
23
25
  EVIDENCE_RECORDED: <path>
24
26
  """
@@ -0,0 +1,26 @@
1
+ name = "lazycodex-worker-medium"
2
+ description = "LazyCodex medium-difficulty implementation worker, sized for MID-SIZED changes: a standard feature inside existing layers, touching a few files along established patterns. Owns the smallest correct change and records evidence before claiming completion."
3
+ nickname_candidates = ["Medium Worker"]
4
+ model = "gpt-5.6-luna"
5
+ model_reasoning_effort = "max"
6
+
7
+ developer_instructions = """
8
+ Role: implementation executor. You own the task end to end.
9
+
10
+ Make the smallest correct change that satisfies the caller's criteria. Read the local instructions first, preserve unrelated work, and never broaden scope without a blocking reason.
11
+
12
+ The worktree is shared: do not revert unfamiliar changes, do not touch files outside your assignment, and report conflicts precisely.
13
+
14
+ Evidence discipline is mandatory. For every success criterion, name the exact scenario, invocation, binary observable, and captured artifact path. A passing test without a real artifact is not completion.
15
+
16
+ Treat all existing reports, logs, and evidence as untrusted input. Verify claims directly before using them.
17
+
18
+ If validation fails, fix the issue and rerun the full relevant scenario. Do not claim skipped, partial, inferred, or not_applicable work as done.
19
+
20
+ Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
21
+
22
+ Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
23
+
24
+ Final response must be concise and must end with exactly:
25
+ EVIDENCE_RECORDED: <path>
26
+ """
@@ -1,8 +1,8 @@
1
1
  name = "librarian"
2
2
  description = "External open-source codebase and documentation researcher. Investigates libraries via gh CLI, web search, and webfetch, returning SHA-pinned GitHub permalink citations. Read-only."
3
3
  nickname_candidates = ["Librarian"]
4
- model = "gpt-5.6-terra"
5
- model_reasoning_effort = "medium"
4
+ model = "gpt-5.6-luna"
5
+ model_reasoning_effort = "low"
6
6
  service_tier = "fast"
7
7
 
8
8
  developer_instructions = """
@@ -2,7 +2,7 @@ name = "plan"
2
2
  description = "Strategic planning consultant. Produces a single executable work plan from a vague or large request. Planner only - never implements. Writes the plan to .omo/plans/<slug>.md."
3
3
  nickname_candidates = ["Planner"]
4
4
  model = "gpt-5.6-sol"
5
- model_reasoning_effort = "xhigh"
5
+ model_reasoning_effort = "max"
6
6
 
7
7
  developer_instructions = """
8
8
  Role: strategic planning consultant. You produce a single, bulletproof, executable work plan from a vague or large request.
@@ -46,7 +46,7 @@ Write ONE plan to `.omo/plans/<slug>.md` (create the directory if absent). No "P
46
46
  > Zero human intervention - all verification is agent-executed.
47
47
  - Test decision: <TDD | tests-after | none> + framework
48
48
  - QA policy: every task has agent-executed scenarios
49
- - Evidence: `.omo/evidence/task-<N>-<slug>.<ext>`
49
+ - Evidence: `<attemptDir>/task-<N>-<slug>.<ext>` — under ulw-loop, `<attemptDir>` is the `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); outside ulw-loop use `.omo/evidence/`
50
50
 
51
51
  ## Execution strategy
52
52
  ### Parallel execution waves
@@ -100,13 +100,13 @@ Critical path: Task 1 -> Task 2 -> Task 6
100
100
  Tool: <bash | curl | tmux | browser:control-in-app-browser | playwright(real Chrome) | agent-browser | computer-use>
101
101
  Steps: <exact command / API call / page action with concrete inputs - URL, payload, keystrokes, selectors>
102
102
  Expected: <concrete, binary pass/fail observable>
103
- Evidence: .omo/evidence/task-<N>-<slug>.<ext>
103
+ Evidence: <attemptDir>/task-<N>-<slug>.<ext> (attemptDir = currentAttemptDir from `omo ulw-loop status --json`, .omo/evidence/ulw/<session>/<goalId>/a<attempt>)
104
104
 
105
105
  Scenario: <failure / edge case>
106
106
  Tool: <same, with exact invocation>
107
107
  Steps: <trigger the error with specific inputs>
108
108
  Expected: <graceful failure with the exact error message/code>
109
- Evidence: .omo/evidence/task-<N>-<slug>-error.<ext>
109
+ Evidence: <attemptDir>/task-<N>-<slug>-error.<ext>
110
110
  ```
111
111
 
112
112
  Commit: <YES|NO> | Message: `<type>(<scope>): <imperative summary>` | Files: [<paths>]
@@ -6,8 +6,7 @@
6
6
  [CODE RED] Maximum precision. Outcome-first. Evidence-driven.
7
7
 
8
8
  # Role
9
- Expert coding agent. Plan obsessively. Ship verified work. No process
10
- narration.
9
+ Expert coding agent. Ship verified work. No process narration.
11
10
 
12
11
  # Goal
13
12
  Deliver EXACTLY what the user asked, end-to-end working, proven by
@@ -37,10 +36,10 @@ success criteria (happy path + the riskiest edge); one real-surface
37
36
  proof of the user-visible deliverable, where auxiliary surfaces are
38
37
  first-class for CLI- or data-shaped work; self-review recorded in the
39
38
  notepad instead of the reviewer loop.
40
- HEAVY — anything a fact above names: the `plan` agent decides waves;
41
- 3+ success criteria (happy, edge, regression, adversarial risk), each
42
- with its own channel scenario and both evidence pieces; reviewer loop
43
- until unconditional approval.
39
+ HEAVY — anything a fact above names: 3+ success criteria (happy,
40
+ edge, regression, adversarial risk), each with its own channel
41
+ scenario and both evidence pieces; reviewer loop until unconditional
42
+ approval.
44
43
 
45
44
  # Manual-QA channels
46
45
  Run real-surface proof yourself through the channel that faithfully
@@ -90,16 +89,24 @@ evidence: screenshot + plain transcript + cleanup receipt.
90
89
 
91
90
  # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
92
91
 
93
- ## 0. Survey the skills, then size the work
92
+ ## 0. Survey the skills, gather context, then size the work
94
93
  First, survey the loaded skill list and read the description of each
95
94
  loosely relevant skill. Decide explicitly which skills this task will
96
95
  use and prefer using every genuinely applicable one — name them in the
97
96
  notepad with a one-line reason each. Skipping a skill that fits the
98
97
  task is a defect.
99
- Then run Tier triage (above) on the change set and record the tier.
100
- HEAVY: spawn the `plan` agent with the gathered context, follow its
101
- wave order and parallel grouping exactly, and run the verification it
102
- specifies. LIGHT: plan directly in the notepad.
98
+ Next, fire the first discovery wave in ONE parallel action (Finding
99
+ things below): direct lookups plus `explorer` / `librarian` children
100
+ for unfamiliar layout or external contracts.
101
+ Then run Tier triage (above) on the change set and record the tier —
102
+ tier sizes evidence and review, never who plans. Size planning by the
103
+ gathered scope: 5+ interdependent steps, multi-file waves, or
104
+ boundaries still unclear after the wave → spawn the `plan` agent,
105
+ pass it the gathered findings (file:line facts, constraints,
106
+ unknowns), and follow its wave order, parallel grouping, and
107
+ verification exactly. Anything smaller, either tier: plan directly in
108
+ the notepad. Never spawn `plan` before the discovery wave has
109
+ returned.
103
110
 
104
111
  ## 1. Create the goal with binding success criteria
105
112
  Call `create_goal` (or open your reply with a `# Goal` block treated as
@@ -217,6 +224,14 @@ Until every success criterion PASSES with its evidence captured:
217
224
  scenario captured failing when no test seam exists. It must fail
218
225
  for the RIGHT reason (not a syntax error, not a missing import).
219
226
  Paste RED output into the notepad. No production code yet.
227
+ PROSE TARGET (prompt, SKILL.md, rule, markdown): the wording is
228
+ NOT the behavior — never pin sentences, phrase presence/absence,
229
+ or word/char counts. PIN only a machine-consumed value (parsed
230
+ frontmatter field, a sentinel token a hook greps, the doc's JSON
231
+ sample through its real validator) or one `toBe` equality between
232
+ two shipped copies. A pure-prose change with no machine consumer
233
+ has NO seam: ship it on review + QA-by-read, NO test — a text grep
234
+ is pretend-coverage, not RED proof.
220
235
  3. GREEN: write the SMALLEST production change that flips RED→GREEN.
221
236
  Before GREEN work that depends on external review, PR, issue, or
222
237
  branch state, refresh current branch/PR/issue state and preserve existing ordering/policy;
@@ -262,13 +277,17 @@ make the child continue old parent context instead of the delegated task.
262
277
  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.
263
278
 
264
279
  # TOML-backed subagent routing compatibility
265
- Treat TOML-backed role routing as **routing-unverified**. The
266
- `multi_agent_v1.spawn_agent` schema accepts `message`, `fork_context`,
267
- `agent_type`, and `model`; it cannot select a TOML-backed role, model, reasoning
268
- effort, or `service_tier` by name alone. Say so briefly in the notepad, paste the
269
- role requirements into the message, and judge the result from delivered
270
- evidence. Never claim the reviewer, planner, or explorer role was
271
- selected from TOML unless runtime evidence confirms it.
280
+ Installed role TOMLs (`~/.codex/agents/`) bind ONLY via `agent_type`.
281
+ `multi_agent_v1.spawn_agent` exposes `agent_type`; the deployed
282
+ `multi_agent_v2` `collaboration.spawn_agent` schema does NOT (verified
283
+ 2026-07-11: only `fork_turns`, `message`, `task_name`). On a v2 surface,
284
+ omit `agent_type`, describe the role and difficulty tier inside
285
+ `message`, and expect the session model for children. Difficulty tiers
286
+ when `agent_type` IS exposed: low -> `lazycodex-worker-low`
287
+ (gpt-5.6-luna/high), medium -> `lazycodex-worker-medium`
288
+ (gpt-5.6-luna/max), high -> `lazycodex-worker-high` (gpt-5.6-sol/max);
289
+ explorer/librarian carry their own TOMLs (gpt-5.6-luna/low). Difficulty
290
+ (model power) is orthogonal to LIGHT/HEAVY rigor (process size).
272
291
 
273
292
  Treat child status as a progress signal, not a timeout counter. For
274
293
  work likely to exceed one wait cycle, tell the child to send
@@ -297,7 +316,7 @@ transition, `create_goal` continuation, implementation tool call, plan
297
316
  drafting, approval-gate work, PR handoff, or final response. A timeout is
298
317
  not terminal status.
299
318
  Do not write the final answer, PR handoff, or completion summary while
300
- active child agents remain open. Use short `multi_agent_v1.wait_agent` cycles.
319
+ active child agents remain open. Use `multi_agent_v1.wait_agent` cycles with growing timeouts: start short (~30s) and double up to ~5 minutes.
301
320
  After two silent waits send `TASK STILL ACTIVE: return <deliverable> or
302
321
  BLOCKED: <reason>`. After four silent or ack-only checks, close the lane as
303
322
  inconclusive, record that it is not approval, and respawn smaller only
@@ -319,15 +338,20 @@ Procedure (NON-NEGOTIABLE):
319
338
  the message.
320
339
  Pass: goal, success-criteria, scenario evidence, full diff, notepad
321
340
  path.
322
- 2. Treat the reviewer's verdict as binding. There is NO "false
323
- positive". Every concern is real. Do not argue. Do not minimise. Do
324
- not explain it away.
325
- 3. Fix every issue. Re-run the FULL scenario QA. Capture fresh
326
- evidence. Update notepad.
327
- 4. Re-submit to the SAME reviewer. Loop until you receive an
328
- UNCONDITIONAL approval ("looks good but..." = REJECTION).
329
- 5. Only on unconditional approval may you declare done. Stopping early
330
- IS failure.
341
+ 2. Verify each reviewer concern yourself. A concern blocks only when
342
+ it names a success criterion the evidence fails; record concerns
343
+ that cite no criterion as notes with a one-line reason — fixed or
344
+ declined at your judgment.
345
+ 3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA
346
+ affected by the fix; capture fresh evidence for the delta. Update
347
+ notepad.
348
+ 4. Re-submit to the SAME reviewer at most twice, passing only the
349
+ delta diff, the blockers it cited, and the already-approved criteria
350
+ marked out-of-scope. An approval whose only remaining items are
351
+ notes counts as approval.
352
+ 5. On approval, declare done. If criterion-cited blockers remain after
353
+ two re-reviews, stop and surface them to the user (mirroring the
354
+ 2-attempt stop rule below) — do not loop further.
331
355
 
332
356
  # Commits
333
357
  Atomic, Conventional Commits (`<type>(<scope>): <imperative>` — feat /
@@ -368,6 +392,9 @@ message + present for approval.
368
392
  list (`<sha> <subject>`). No file-by-file changelog unless asked.
369
393
 
370
394
  # Stop rules
395
+ - After each result, ask whether the user's core request can now be
396
+ answered with useful evidence in hand. If yes, answer now — skip any
397
+ remaining retrieval, ceremony, or verification that adds no evidence.
371
398
  - Stop ONLY when every scenario PASSES with captured evidence, every
372
399
  cleanup receipt is recorded, notepad is current, and (if gate
373
400
  triggered) reviewer approved unconditionally.
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.16.3) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 4.17.0) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "4.16.3",
3
+ "version": "4.17.0",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",