Environment
OpenShell 0.1.1, macOS (local driver). Noted during review alongside #3051 (accepted structured-errors epic) — this is a CLI ergonomics case for it.
Reproduction
openshell service expose web 8080 web-http # <SANDBOX> <TARGET-PORT> [SERVICE]
openshell service delete web-http
# × delete service failed: sandbox not found
The actual signature is service delete <SANDBOX> [SERVICE], so web-http was interpreted as a sandbox name and the error reports the wrong noun ('sandbox not found' is literally accurate about the argument but misleading about the mistake).
Issues
- The error doesn't hint that the first positional is a sandbox name; users naturally try
service delete <service-name> because that's the resource being deleted.
- Sibling verbs have inconsistent positional order:
service expose <SANDBOX> <TARGET-PORT> [SERVICE] vs service delete <SANDBOX> [SERVICE] — the optional name moves from third to second position across the same noun group.
service expose prints the sandbox-qualified endpoint (web/web-http); a delete error for a name that exists as a service could disambiguate with something like: 'no sandbox named ; did you mean delete service on sandbox ?'.
Expected
- A correction-shaped error (
did you mean / argument-role naming) instead of the bare resource-not-found.
- Consistent positional order across
service subcommands, or named flags (--sandbox, --service) for both.
Environment
OpenShell 0.1.1, macOS (local driver). Noted during review alongside #3051 (accepted structured-errors epic) — this is a CLI ergonomics case for it.
Reproduction
The actual signature is
service delete <SANDBOX> [SERVICE], soweb-httpwas interpreted as a sandbox name and the error reports the wrong noun ('sandbox not found' is literally accurate about the argument but misleading about the mistake).Issues
service delete <service-name>because that's the resource being deleted.service expose <SANDBOX> <TARGET-PORT> [SERVICE]vsservice delete <SANDBOX> [SERVICE]— the optional name moves from third to second position across the same noun group.service exposeprints the sandbox-qualified endpoint (web/web-http); a delete error for a name that exists as a service could disambiguate with something like: 'no sandbox named ; did you mean delete service on sandbox ?'.Expected
did you mean/ argument-role naming) instead of the bare resource-not-found.servicesubcommands, or named flags (--sandbox,--service) for both.