ObanPowertools

Oban Powertools is a host-owned operations layer for Oban-backed Phoenix applications. The library owns internal runtime helpers, native pages, and bridge adapters. The host app owns router scope, browser pipeline, auth, display policy, runtime config, and seeded operator data.

Oban Powertools ships a unified native /ops/jobs control plane at /ops/jobs. oban_web is optional; when installed, Powertools mounts a nested read-only Oban Web bridge at /ops/jobs/oban for additional inspection. The native pages are Powertools-native surfaces for Audited action, while the bridge remains Inspection only. The diagnosis-first overview, cross-surface audit follow-up, and bounded native actions all belong to that same native control plane story.

0.x stability window: This library is published at 0.x on Hex. There is no API freeze yet — public surfaces may change before 1.0. The internal v1.x planning milestone numbers (v1.5, v1.6, etc.) track shipped tranches of work and do not map to published Hex versions. Adopt ~> 0.5 and expect occasional breaking changes until 1.0.

60-Second Install

Start from a fresh Phoenix host, then add Oban Powertools. The default paved road is the native shell at /ops/jobs, and oban_web stays optional for the nested read-only bridge at /ops/jobs/oban.

mix phx.new my_app --database postgres
def deps do
  [
    {:oban_powertools, "~> 0.5"},
    {:oban_web, "~> 2.10", optional: true}
  ]
end

Run the installer after adding the dependency:

mix oban_powertools.install

The installer generates migrations, a host auth seam, and a host display-policy seam: MyAppWeb.ObanPowertoolsAuth and MyAppWeb.ObanPowertoolsDisplayPolicy.

config :oban_powertools,
  repo: MyApp.Repo,
  auth_module: MyAppWeb.ObanPowertoolsAuth,
  display_policy: MyAppWeb.ObanPowertoolsDisplayPolicy

The host owns those modules. They are starter seams, not production-ready policy implementations.

Run the generated migrations, then mount the Powertools route tree inside a host-owned browser scope:

scope "/ops/jobs" do
  pipe_through(:browser)

  require ObanPowertools.Web.Router
  ObanPowertools.Web.Router.oban_powertools_routes("/oban")
end

Native Powertools pages then mount at /ops/jobs, and the optional oban_web bridge mounts at /ops/jobs/oban when oban_web is installed.

Before calling day-0 setup complete, make the generated host pass the bounded proof threshold:

mix compile
mix ecto.migrate
mix phx.server

mix ecto.reset is the equivalent reset path when you want a clean local proof run. The first successful operator session starts only after that compile, migrate or reset, and boot check has passed and a real native mutation succeeds.

Support Truth

Guides

Canonical Example Host

The canonical curated host fixture lives at examples/phoenix_host. It is the public reference path for mix phx.new plus mix oban_powertools.install, not a fully generated demo app. The tracked source tree is the config, lib, migrations, seeds, static assets, and focused tests that keep the documented host contract reviewable. Local build artifacts and vendored dependencies are not part of that public contract. examples/phoenix_host_upgrade_source exists separately only as the frozen source fixture for the supported upgrade lane.