Files
oh-my-opencode/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md
T
YeonGyu-Kim e746dcf0d8 feat(omo-codex): mandate manual-QA-as-scenario + paired cleanup in ultrawork/ultragoal
Both the Codex ultrawork directive and the ultragoal skill now force the agent to actually invoke the real user-facing surface (HTTP via `curl -i`, terminal/TUI via `tmux new-session` + `send-keys` + `capture-pane`, GUI via computer-use / Playwright, CLI stdout, DB diff) instead of treating evidence as a free-form artifact list. A paired CLEANUP step requires teardown of every QA-spawned process, tmux session, browser context, container, bound port, temp file/dir, and QA-only env var, with a one-line cleanup receipt recorded next to the artifact path (ultrawork) or embedded in the `--evidence` string (ultragoal). Missing receipt keeps the criterion in_progress / records BLOCKED. New Stop rule: leftover state from QA means NOT done.

Regression tests in `components/ultrawork/hooks/ultrawork-hooks.test.mjs` pin SURFACE-AS-SCENARIO, the concrete `curl -i` / `tmux new-session` / `computer-use / Playwright` invocations, the paired CLEANUP block with cleanup receipt + `tmux kill-session`, and the leftover-state Stop rule so the mandates cannot be silently regressed. README and CHANGELOGs refreshed; stale 5,821-char claim replaced with measured 10,037 chars / 213 lines. All 9 ultrawork hook tests + 7 aggregate tests pass.
2026-05-28 13:58:12 +09:00

1.5 KiB

Changelog

Unreleased

  • Execution loop now mandates 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.
  • New paired CLEANUP step requires teardown of every QA-spawned runtime artifact (server PIDs, tmux sessions, browser / Playwright contexts, containers, bound ports, temp files / dirs, QA-only env vars) with a one-line cleanup receipt recorded in the notepad. Missing receipt → criterion stays in_progress.
  • New Stop rule: leftover state from QA (live process, tmux session, browser context, bound port, temp dir) means NOT done.
  • Regression tests in hooks/ultrawork-hooks.test.mjs pin the SURFACE-AS-SCENARIO + CLEANUP mandates so they cannot be silently regressed.
  • Directive size: 10,037 chars across 213 lines.

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.