DEV Community

gracefullight
gracefullight

Posted on

oma 20.10: stop gates now verify the code they checked

An agent runs your test command, it passes, the stop gate opens. Meanwhile the agent edited a file while that command was running. The gate approved code it never checked. That was the bug behind the week's most important fix, and it set the tone for the rest of the release train.

This week: 97 commits, 18 CLI releases (20.1.0 to 20.10.3), and 3 web releases (11.0.2 to 11.2.1).

What's new

  • Fresh stop gates: a successful stop gate is now rejected if code changed during the command. The gate records the checked commit and tree, and oma goal status --check-fresh exposes the result.
  • Diagnostic feedback after native edits: the hooks compare pre-edit and post-edit Serena diagnostics through existing project daemons, then report what the edit changed. Checks and output are bounded, provider defaults and opt-outs are preserved, and supported native edit hooks are registered.
  • Native tool traces and spawn usage: Claude and Codex observations bind to fresh native sessions, bounded tool evidence is preserved, and spawn cost estimates are reconciled with native usage.
  • Harness² external benchmark track: external runs stay out of the generated main scoreboard. The Linux-guarded runner has plan, dry-run, spend, and network guards, and records OMA and Harness² commits, models, k/mode/seed, and network policy.
  • Serena 2.0 support: the exact 1.7.0 allowlist is now >=1.7.0 <3.0.0, after verifying the patched upstream APIs are unchanged in 2.0.0.
  • Artifact layout migration: install and update now migrate legacy artifact paths, with oma docs migrate for preview and manual runs. Reference updates are conflict-safe.
  • DSH first-run setup: the DSH integration installs the OMA CLI as a plugin dependency and prepares project-local skills and config before the first model turn.
  • Frontend stack manifests: oma verify frontend runs the syntax and test commands from the stack.yaml written by /stack-set, and keeps the built-in checks otherwise.

What's fixed

  • Slash-command workflows now persist. /ultrawork, /orchestrate, /work and /ralph never wrote the persistent-mode state file, so the Stop hook had nothing to enforce and oma goal set failed. Namespaced forms such as /oma:ultrawork are covered too.
  • Read-only dispatch fails closed. Launch requires a built-in restriction or an explicit read_only_flag, and empty or conflicting flags are rejected across native, external, spawn, and free-provider paths.
  • oma uninstall in CI needs --yes or OMA_YES=1. CI is not consent for a destructive removal. Dry runs stay allowed.
  • Installs no longer ship maintainer defaults. The shared config template stops pinning timezone Asia/Seoul and an Aside browser selection, and the co-author guard no longer overrides core.hooksPath over existing git hooks.
  • CUE-only projects stay on one config file. Install, oma memory keys, oma model propose and oma update now write to the file that actually takes effect, instead of creating a second shared file whose values lose.
  • Abandoned empty Serena registry locks are reclaimed after the existing 60-second grace period.
  • recap --graph and state trajectory --open wait for the server to listen instead of a fixed 500 ms, and a failed bind prints a short error with exit code 1.
  • Qwen Code 0.25 alignment: HUD ANSI colors survive, the duplicate context indicator is hidden, and git co-author attribution defaults off so Qwen's fixed trailer no longer trips the commit-msg allowlist.

What's better

  • Four oversized modules were split into focused submodules with the public API unchanged: Serena binary and language helpers, the daemon registry, link vendor settings, and the Claude/Codex trajectory parsers (now shared under cli/io/native-transcript/).
  • The artifact layout migration moved into platform, which fixes a cross-slice boundary violation between commands/docs and migration 032.
  • Husky is gone. hk.pkl now handles pre-commit, commit-msg, and pre-push checks, wired through mise workspace tasks, and every CI workflow uses jdx/mise-action@v5.
  • docs:check fails on generated docs drift, and CI runs it on every push.
  • The bootstrap scripts install oma globally (falling back to bunx if that fails), because hooks, workflows, and self-update all call a global oma.
  • Docs got a prose pass: 481 English and translated pages simplified, and the 13 READMEs now share a 6+1 architecture figure.

Installation

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
Enter fullscreen mode Exit fullscreen mode
# Windows (PowerShell)
irm https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.ps1 | iex
Enter fullscreen mode Exit fullscreen mode

Links

oh-my-agent is built for teams who orchestrate more than they prompt. Next up: extending the freshness check beyond stop gates so every verification claim is bound to the exact tree it ran against.

https://github.com/first-fluke/oh-my-agent

Top comments (0)