What happens
On the Application detail page, every non-terminal version pill renders a Promote affordance (.ob-detail-header__pill-promote). Clicking it does nothing at all.
Why
ApplicationDetailHeader.onPromoteClick() looks for window.openbuild.openPromoteDialog:
const opener = (typeof window !== 'undefined' && window.openbuild && typeof window.openbuild.openPromoteDialog === 'function')
? window.openbuild.openPromoteDialog
: null
That global is defined nowhere in src/. It then falls back to emitting a promote event that no parent handles, and logs console.debug('openbuild: promote dialog not registered — deferred').
src/dialogs/PromoteVersionDialog.vue is fully built and unit-tested (tests/dialogs/PromoteVersionDialog.spec.js) but is imported by nothing. The missing piece is the call site, exactly as tests/e2e/promoteDestructive.spec.ts predicted.
Verified against
A real development → staging → production chain (tests/e2e/support/versionChain.ts). The pills render correctly as development, staging, * production, with promote affordances on exactly the two non-terminal pills — so REQ-OBADO-012 is satisfied; only the action is missing.
Blocks
tests/e2e/promoteDestructive.spec.ts (3 scenarios) stays quarantined until the call site exists.
⚠️ For whoever wires it: those scenarios end by clicking Confirm, which performs a real promotion (empty-start wipes the target register). Against a fixture chain that makes the suite non-idempotent — the gating assertions are the valuable part and should stop at Cancel.
What happens
On the Application detail page, every non-terminal version pill renders a Promote affordance (
.ob-detail-header__pill-promote). Clicking it does nothing at all.Why
ApplicationDetailHeader.onPromoteClick()looks forwindow.openbuild.openPromoteDialog:That global is defined nowhere in
src/. It then falls back to emitting apromoteevent that no parent handles, and logsconsole.debug('openbuild: promote dialog not registered — deferred').src/dialogs/PromoteVersionDialog.vueis fully built and unit-tested (tests/dialogs/PromoteVersionDialog.spec.js) but is imported by nothing. The missing piece is the call site, exactly astests/e2e/promoteDestructive.spec.tspredicted.Verified against
A real
development → staging → productionchain (tests/e2e/support/versionChain.ts). The pills render correctly asdevelopment,staging,* production, with promote affordances on exactly the two non-terminal pills — so REQ-OBADO-012 is satisfied; only the action is missing.Blocks
tests/e2e/promoteDestructive.spec.ts(3 scenarios) stays quarantined until the call site exists.