v2.14.0
Release notes for orun v2.14.0.
This release lands the catalog-state work: a single content-addressed catalog
that powers change detection, a new orun catalog command group, and a live,
change-aware cockpit.
Highlights
- One change-detection engine.
orun plan/run --changed, the neworun catalog affected, and the cockpit now all compute changed/affected components from the same engine over the object-model catalog — classified against the catalog's ownership map and dependency graph, with an over-report (never under-report) guarantee on ambiguity. The legacy file-walking selector has been retired. orun catalogcommand group. Resolve, persist, and inspect the component catalog directly — includingorun catalog affectedto see exactly which components a change touches (directly-changed, dependents, blast radius, and the plan/run selection) with a confidence signal.- Live, change-aware cockpit. The component list refreshes without a keystroke, badges directly-changed vs affected components (with a show-only-changed filter), drills down catalog → component → job → logs, and can launch a component-scoped run in a selected environment.
The catalog
orun maintains a content-addressed object-model catalog under
.orun/objectmodel/ — the resolved component set, its dependency graphs, and an
impact/ index (ownership map + per-component fingerprints), with
catalogs/current pointing at the latest snapshot. It is the read model for
change detection and the cockpit.
The catalog stays fresh on its own: orun plan and a universal pre-run refresh
hook keep catalogs/current current transparently (a clean re-resolve is a cheap
ref move, not a rewrite). You can also manage it explicitly:
orun catalog refresh # resolve + persist a snapshot (and the impact index)
orun catalog list # components in the current catalog
orun catalog tree # the relationship graphs
orun catalog diff <a> <b> # compare two snapshots
Inspecting change detection
orun catalog affected exposes the engine that --changed uses:
orun catalog affected --base main --head HEAD
orun catalog affected --files apps/api/main.go --json
| Field | Meaning |
|---|---|
directlyChanged | components whose own inputs changed |
dependents | components that transitively depend on a changed one |
affected | the cockpit blast radius (directlyChanged + dependents) |
selection | the plan/run job set (directlyChanged + include:always deps) |
The --json envelope adds confidence, needsFullResolve, intentMode, and
catalogId — the provenance to explain a selection in CI. A component.yaml edit
is treated as structural (lower confidence, needsFullResolve).
--intent-impact (watch/all/none) controls how a global intent.yaml
change scopes components, honoring per-component
spec.change.watches — unchanged from prior
behavior, now implemented by the shared engine.
Cockpit: the component catalog view
The cockpit's Browse surface now reads the catalog and stays live:
- Keystroke-free refresh — edits on disk, or a catalog written by an external
orun plan/run, appear within a few seconds.ctrl+rstill forces a refresh. - Changed / affected overlay — a filled dot marks a directly-changed
component, a hollow dot one affected via a dependency;
cfilters to just those rows. - Drill-down —
⏎opens a Component page (resolved detail + the runs that touched it); drill into an execution for run → job → logs. - Environment selector + run — cycle the selected environment with
e; from a component page,rlaunches a component-scoped run for that environment (when the component is active in it) through the same path asorun run.
--explain note
--explain on plan/run reports ref resolution (which base/head were
used). The per-component classification — including intent-watch matching — now
lives in orun catalog affected (use --json for the full provenance), rather
than being printed inline by --changed --explain.
Compatibility
- The object-model catalog is additive; it is written transparently and absorbed by content-addressing (the first resolve after upgrading re-derives the catalog id once, then stabilizes). No migration is required, and older catalogs remain readable.
--changedflags, CI auto-detection, trigger-driven scoping, and--intent-impactbehavior are unchanged.- On-disk run state and log layout are unchanged.
References
orun catalog— the catalog command group.- Change detection —
--changedworkflows. - State model — where the catalog lives on disk.
- Cockpit overview — the live component view.