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.xon Hex. There is no API freeze yet — public surfaces may change before1.0. The internalv1.xplanning milestone numbers (v1.5, v1.6, etc.) track shipped tranches of work and do not map to published Hex versions. Adopt~> 0.5and expect occasional breaking changes until1.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 postgresdef deps do
[
{:oban_powertools, "~> 0.5"},
{:oban_web, "~> 2.10", optional: true}
]
endRun 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.ObanPowertoolsDisplayPolicyThe 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.servermix 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
supported: the native/ops/jobsshell is the supported operator surface, and native Powertools pages are the supported mutation surface.supported:Powertools-nativesurfaces own diagnosis-first wording, legal next action, venue, and durable audit evidence.supported: the canonical forensics handoff path is/ops/jobs->/ops/jobs/forensics-> ownership-labeled next path ->/ops/jobs/audit.supported: the optional/ops/jobs/obanbridge is supported only as a narrower read-only inspection annex and stays explicitlyInspection only.supported: forensics labels are explicit support-truth boundaries;partial evidence,history unavailable, andunknownmean operators should treat certainty as bounded.host-owned: downstream escalation and provider delivery outcomes remain host-owned follow-up.supported: one singular upgrade lane is supported for hosts that already have Postgres/Ecto,repo,auth_module,/ops/jobs, and Powertools migrations in place and still need to adddisplay_policy.tested: the repo proves the fresh-host install lane, the native-first fixture lane, the first-session lane, the optional bridge render lane, the docs-contract lane, and the supported upgrade lane. Broader legacy workflow compatibility for waiting, retrying, cancelling, and recovery evidence is repo-localtestedproof, not an expansion of the supported host lane.best-effort: best-effort outside tested lanes applies to semver-allowed combinations, bridge-enabled or diverged source hosts, bespoke shells, and unusual proxy or session setups.host-owned: the host owns router scope, browser pipeline, auth, actor/session lookup, display policy, runtime config, reverse-proxy and WebSocket behavior, seeded operator data, and whether the bridge is exposed in production.intentionally unsupported: using the bridge as a mutation surface, hidden fallback behavior when required config is missing, non-Postgres support, and broader compatibility claims outside verified lanes.
Guides
- Installation covers the exact host-owned setup path, including
ObanPowertoolsAuth,ObanPowertoolsDisplayPolicy, and the compile/migrate/boot threshold. - First Operator Session walks from install to the canonical
ops-demo->pause_cron_entryonnightly_syncproof, forensic confirmation, audit follow-up, and the read-only bridge. - Forensics And Runbook Handoffs is the canonical
v1.4 journey and ownership contract for
/ops/jobs/forensicsand/ops/jobs/audit. - Example App Walkthrough points to the canonical fixture at
examples/phoenix_host. - Workers And Idempotency shows how to build typed workers
and what
enqueue/2guarantees. - Limits And Explain covers limiter declarations, blocked outcomes, and blocker inspection.
- Workflows explains the durable DAG builder, dependency release, and current runtime semantics.
- Lifeline And Repairs covers heartbeat projection, incident diagnosis, repair preview, and audited execution.
- Policy Integration Patterns shows how the host auth and display seams should be shaped in a real Phoenix app.
- Optional Oban Web Bridge defines the bounded
/ops/jobs/obanread-only annex for generic inspection only. - Support Truth And Ownership Boundaries expands the shared supported/tested/best-effort/host-owned/intentionally unsupported vocabulary.
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.