A Homebrew bottle records `brew` in its dist-info `INSTALLER` and ships no
`direct_url.json`, so it reaches the registry branch of
`_build_upgrade_suggestion` with an installer name nothing matched. It fell
through to the unknown-installer prose fallback and `omni upgrade` dead-ended:
Error: No automatic upgrade command is known for this install.
reinstall omnigent from your original source.
That left brew users — the audience the tap exists for — with no supported way
forward, even though `brew install` itself now works and the tap tracks
releases.
Map `brew` to `brew upgrade omnigent-ai/tap/omnigent`. Since the formula builds
a virtualenv from pinned resources under the Cellar, pip-ing into that keg would
be undone by the next bump, so the tap is the only correct upgrade source.
`brew upgrade` accepts neither a version pin nor extras, so `--target-version`
and `--extra` return a non-runnable explanation instead of a command that would
quietly ignore them. `--pre` is a no-op: the tap carries only final releases.
Co-authored-by: Isaac
Related issue
Closes #2558
Summary
brew install omnigent-ai/tap/omnigentworks today and the tap now tracks releases, but the follow-up ask on #2558 — upgrading a brewed install — still dead-ends:A Homebrew bottle records
brewin its dist-infoINSTALLERand ships nodirect_url.json, so it reaches the registry branch of_build_upgrade_suggestionwith an installer name that nothing matched, falling through to the non-runnable prose fallback. Brew users — the audience the tap exists for — had no supported upgrade path.brew→brew upgrade omnigent-ai/tap/omnigent(runnable). The formula builds a virtualenv from pinned resources under the Cellar, so pip-ing into that keg would be undone by the next bump; the tap is the only correct source.brew upgradeaccepts neither a version pin nor extras, so--target-versionand--extrareturn a non-runnable explanation rather than a command that would quietly ignore them.--preis a no-op: the tap carries only final releases.Scoped to the upgrade path. The other two asks on #2558 (
--HEAD, native/optpackaging) are untouched — see the note below.Test Plan
Verified against a real Homebrew install on macOS 26.5.2 / arm64, not just unit tests:
brew tap omnigent-ai/tap brew install omnigent-ai/tap/omnigent # → 0.8.2, from the arm64_tahoe bottleConfirmed the real install's metadata is the shape this branch keys on:
Feeding that exact metadata through the patched function:
And the generated command is valid Homebrew:
The test install was uninstalled and the tap untapped afterwards.
Demo
N/A — CLI behaviour, no visual change. Output quoted in the Test Plan.
Type of change
Test coverage
Coverage notes
Five unit tests: a
brewrow in the shared_build_upgrade_suggestionmatrix (assertingrunnable=True, since a prose fallback flipping to runnable wouldsubprocess.runa literal sentence), plus dedicated tests for the--preno-op and the two refusal paths.Manual verification covers what unit tests can't: that a real bottle actually reports
installer="brew"with nodirect_url.json, and thatbrew upgrade <tap formula>is a command Homebrew accepts. Both were run on a live install as quoted above. The one step not exercised end-to-end isomni upgradeexecuting the upgrade — that needs a brewed copy genuinely behind a newer tap version, which doesn't exist while the tap is current; the command itself was validated with--dry-run.Note for reviewers
#2558 also asks for a working
--HEADformula and native/opt-respecting packaging. Both are out of scope here, and worth knowing where they'd live: the tap'sFormula/omnigent.rbis generated from.github/scripts/homebrew/omnigent.rb.templatein this repo (I diffed them — theinstall/testblocks are byte-identical), so aheadstanza committed to the tap would be overwritten on the next release bump. It has to go in the template.--HEADis also more than a stanza: the template'sinstallpip-installs release-pinned resources, which don't describe a build of a movingmain. Since the closing keyword above resolves the whole issue, it may be worth opening a narrower follow-up for those two.Changelog
omni upgradenow upgrades Homebrew installs viabrew upgradeinstead of reporting that no upgrade command is known.This pull request and its description were written by Isaac.