Files
oh-my-opencode/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md
T
YeonGyu-Kim 73e8988f31 feat(omo-codex): enumerate 4 manual-QA channels + forbid tests-alone verification in ultrawork/ultragoal
Promote the four real-usage QA channels (HTTP call, tmux, Browser use, Computer use) into a dedicated top-level `# Manual-QA channels` section in both the Codex ultrawork directive and the ultragoal skill. Each channel ships with the concrete invocation (`curl -i`, `tmux new-session` + `send-keys` + `capture-pane`, Playwright / puppeteer / Chromium, OS-level GUI automation) and the artifact to capture. The Goal section now declares `TESTS ALONE NEVER PROVE DONE` and requires every criterion to build a fresh real-usage scenario and run it through one of the four channels every time. Auxiliary surfaces (CLI stdout / DB diff / parsed config dump) are explicitly demoted: they only satisfy genuinely CLI- or data-shaped criteria, never user-facing behavior.

Bootstrap criterion item 2 and execution step 4 used to repeat the same surface enumeration; they now collapse onto the new channel table (single source of truth, less drift). EXECUTE-AS-SCENARIO in the ultragoal skill follows the same compression. The previous CLEANUP (paired teardown + receipt) + leftover-state stop rule from the prior commit are preserved.

Regression tests in `components/ultrawork/hooks/ultrawork-hooks.test.mjs` pin: the `# Manual-QA channels` heading, all four channel labels (`HTTP call`, `tmux`, `Browser use`, `Computer use`), `TESTS ALONE NEVER PROVE DONE`, `every criterion needs its own real-usage scenario`, and `every time`. README + CHANGELOGs document the restructure and the new size (11,005 chars / 232 lines). All 11 ultrawork hook tests + 7 aggregate tests pass. Installed locally via `runCodexInstaller` into `~/.codex/plugins/cache/code-yeongyu-codex-plugins/omo/0.1.0/`; cache hooks emit the new directive end-to-end and the identifier-like `ulw_helper.ts` keyword-boundary check still suppresses.
2026-05-28 13:58:12 +09:00

2.7 KiB

Changelog

Unreleased

  • New top-level # Manual-QA channels section explicitly enumerates the four real-usage channels the agent MUST verify through: (1) HTTP call, (2) tmux, (3) Browser use, (4) Computer use — each with concrete commands and the artifact to capture. Auxiliary surfaces (CLI stdout / DB diff / parsed config dump) only count for genuinely CLI- or data-shaped criteria.
  • Goal section now shouts TESTS ALONE NEVER PROVE DONE: a green test suite is supporting evidence, never completion proof. Every criterion needs its own real-usage scenario, built fresh and run through one of the four channels, every time.
  • Bootstrap criterion item 2 and execution step 4 collapse onto the new channel table to remove triple-enumeration of the same surfaces (single source of truth, less drift).
  • Execution loop step 4 (SURFACE-AS-SCENARIO) runs the chosen channel scenario; step 5 (CLEANUP, PAIRED) tears down server PIDs, tmux sessions, browser / Playwright contexts, containers, bound ports, temp files / dirs, QA-only env vars and records a one-line receipt. Missing receipt → criterion stays in_progress. Leftover state from QA = NOT done (Stop rule).
  • Regression tests in hooks/ultrawork-hooks.test.mjs now pin: the four channel labels (HTTP call, tmux, Browser use, Computer use), TESTS ALONE NEVER PROVE DONE, every criterion needs its own real-usage scenario, the # Manual-QA channels heading, plus SURFACE-AS-SCENARIO + CLEANUP + leftover-state stop rule.
  • Directive size: 11,005 chars across 232 lines.

Pre-cleanup unreleased entries (folded above)

  • Execution loop mandated SURFACE-AS-SCENARIO manual QA — the agent must actually invoke the real surface (HTTP via curl -i, terminal / TUI via tmux new-session + send-keys + capture-pane, GUI via computer-use / Playwright, CLI stdout, DB diff). --dry-run and "looks correct" no longer count.
  • Paired CLEANUP step requires teardown of every QA-spawned runtime artifact with a one-line cleanup receipt recorded in the notepad. Missing receipt → criterion stays in_progress.
  • Stop rule: leftover state from QA (live process, tmux session, browser context, bound port, temp dir) means NOT done.

0.1.0 — 2026-05-23

Initial release.

  • Codex UserPromptSubmit hook (hooks/ultrawork-detector.py) that detects ultrawork / ulw (word-bounded, case-insensitive) in the user prompt and injects the ultrawork orchestration directive.
  • Directive enforces: goal + binding success criteria with manual-QA scenarios + evidence, durable /tmp notepad lifecycle, obsessive atomic todos, scenario-driven execution loop, and a GPT-5.2 xhigh verification gate with no "false positive" escape hatch.
  • Directive size: 5,775 chars across 143 lines.