Skip to content

feat: (ctl-api) surface composite error when a component build has failed#1689

Draft
onprem wants to merge 1 commit into
mainfrom
ps/component-build-unavailable-err
Draft

feat: (ctl-api) surface composite error when a component build has failed#1689
onprem wants to merge 1 commit into
mainfrom
ps/component-build-unavailable-err

Conversation

@onprem

@onprem onprem commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

When a component deploy targets a build in a terminal failure state (error / policy_failed), freeze a typed ComponentBuildUnavailableError onto the InstallDeploy so the dashboard guides the user to rebuild the component, instead of showing a raw status string or hanging on polling.

  • Add ComponentBuildUnavailableError composite error type (reason "failed"; "missing" reserved for a follow-up)
  • Add RecordDeployBuildUnavailableCompositeError activity to record it onto InstallDeploy.composite_error (best-effort)
  • componentdeploysyncandplan signal:
    • record the composite error when build polling fails on a terminal build state
    • treat policy_failed as terminal so the deploy fails fast instead of polling for up to an hour
    • prefer the latest active build over latest-any when resolving an empty BuildID, so a newer errored build can't mask an older deployable one
    • set the workflow step's deploy target before polling so the error is visible in the dashboard even when the build never becomes deployable

No frontend changes: the existing CompositeError renderer surfaces it on the deploy page. Follow-up will cover truly-missing builds via a WorkflowStep-level composite error.

Screenshot 2026-06-16 at 10 43 52 PM

…iled

When a component deploy targets a build in a terminal failure state
(error / policy_failed), freeze a typed ComponentBuildUnavailableError
onto the InstallDeploy so the dashboard guides the user to rebuild the
component, instead of showing a raw status string or hanging on polling.

- Add ComponentBuildUnavailableError composite error type (reason
  "failed"; "missing" reserved for a follow-up)
- Add RecordDeployBuildUnavailableCompositeError activity to record it
  onto InstallDeploy.composite_error (best-effort, mirrors the AWS
  permission flow)
- componentdeploysyncandplan signal:
  - record the composite error when build polling fails on a terminal
    build state
  - treat policy_failed as terminal so the deploy fails fast instead of
    polling for up to an hour
  - prefer the latest active build over latest-any when resolving an
    empty BuildID, so a newer errored build can't mask an older
    deployable one
  - set the workflow step's deploy target before polling so the error is
    visible in the dashboard even when the build never becomes deployable

No frontend changes: the existing CompositeError renderer surfaces it on
the deploy page. Follow-up will cover truly-missing builds via a
WorkflowStep-level composite error.

@jonmorehouse jonmorehouse left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks solid to me!

@github-actions

Copy link
Copy Markdown

This PR was marked as stale, and will be closed after 3 more days. Add the #keep-open label to prevent this from being closed.

@github-actions github-actions Bot added the stale label Jun 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants