You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
composition: a typed refusal detail for ApplyManifest (withdrawn binding, stale generation) #2
A native codefly run must tell a person what to do when the host refuses a module because it still holds that binding's withdrawal (core solutionhost.ErrWithdrawn, which is terminal while the host holds it). The CLI cannot do that reliably today, because codefly.dev/composition gives no typed signal for this refusal.
The gap
CompositionService.ApplyManifest refuses through plugins/authorityStatus(). That maps state.ErrStale, which wraps core's ErrWithdrawn, to a plain codes.FailedPrecondition whose message is err.Error(). No status detail is attached, and host/composition/v1 defines no refusal message. host/authority/v1 does carry typed details for other refusals (ApprovalRequiredV1).
As a stopgap, codefly-dev/cli#1158 recognizes the refusal by matching the text of solutionhost.ErrWithdrawn inside the status message (pkg/gitops/composition_delivery.gorefusal). If the wording changes on either side, the CLI silently drops back to a generic refusal and loses the actionable advice.
Ask
Attach a typed detail to ApplyManifest refusals, for example a CompositionRefusalV1 { reason: WITHDRAWN | STALE_GENERATION | ... ; binding; generation } in host/composition/v1, sent with status.WithDetails from Status(). Once it is released, the CLI will match on the detail and delete the text match.
Activity
fix(run): keep the legacy HTTP delivery for saas hosts; digest what t…
fix(run): stage vendored tarball dependencies; recognize saas's held …