Skip to content

Scope form fields per resource, and stop retrying requests that cannot succeed - #193

Merged
joetannenbaum merged 1 commit into
mainfrom
ship-bug-fix
Aug 17, 2026
Merged

Scope form fields per resource, and stop retrying requests that cannot succeed#193
joetannenbaum merged 1 commit into
mainfrom
ship-bug-fix

Conversation

@joetannenbaum

Copy link
Copy Markdown
Collaborator

Adds scoping to Form. Fields defined inside withScope() are namespaced, and ship now creates each nested resource (database cluster, schema, websocket cluster, websocket app) in its own scope. The resolver keeps the unscoped field name so API errors still map back to the right prompt, and scoped fields no longer read the command's own options. Unscoped fields are unchanged, so the other 20 commands behave exactly as before.

loopUntilValid also gives up now when the same failure repeats and no error field has a prompt behind it, printing "Fix the error above, then run again." An error the API does not tie to a field, like "The selected type is not available on your plan", used to replay the same request 20 times before dying on "Maximum attempts reached". Loops that wait out a transient error opt out through a new shouldRetry argument: ship's environment update and both database-cluster:delete loops. Errors are cleared after a successful attempt too, so a failure early in a run no longer leaks into the next loop.

@joetannenbaum
joetannenbaum merged commit e06d924 into main Aug 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant