Skip to content

bl apps: explain the app limit and say it counts every workspace - #45

Merged
nathan-thillairajah merged 7 commits into
mainfrom
eggy/apps-limit-guidance
Nov 3, 2026
Merged

nathan-thillairajah merged 7 commits into
mainfrom
eggy/apps-limit-guidance

Conversation

@nathan-thillairajah

@nathan-thillairajah nathan-thillairajah commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Background

When someone hits their app limit, bl printed only the error code and the server's generic next step, so it wasn't clear whether anything had broken or what to do (BOT-2573). Separately, bl apps delete --help and the README told users to "explicitly retry cleanup" when capacity stays held after a delete, but no command does that. The server retries it on its own.

What changes

  • On owner_site_limit_reached, bl says nothing was changed, existing apps keep working, and bl apps list --scope owned shows your apps and, when available, usage. This line prints even when the server sends its own next step, which the real control plane always does.
  • When the server sends no step, bl suggests deleting every environment of an unneeded app and checking usage again with --include-deleted before retrying.
  • bl apps delete --help and the README say the server retries quota cleanup by itself, and to ask the BuilderLab team if it stays pending, since some cases need an operator.

Testing

just ci passes. By hand, a locally built bl apps create against a locally run control plane from main (enforcement on, owner at the limit) printed:

POST /v1/agent/apps/book-club/reserve failed with 409 Conflict (owner_site_limit_reached)
You already have as many apps as your plan allows, so nothing was changed. Existing apps keep working. `bl apps list --scope owned` shows your apps and, when available, your usage.
next_action: Review your owned sites and delete one you no longer need, then retry.

The delete path with cleanup still pending wasn't exercised by hand.

Risk

Message, help and README text only. JSON error codes and fields are unchanged.

🤖 Generated with Claude Code

nathan-thillairajah and others added 3 commits November 3, 2026 16:54
When an account is at its app limit, the CLI now says plainly that nothing
changed and points to `bl apps list --scope owned --include-deleted` as the
next step, unless the server supplies its own next_action.

`bl apps delete --help` told agents to "explicitly retry cleanup" when
capacity stays held, but no client command does that; the server retries
on its own. The help now says so.

Co-authored-by: eggy <efcb1558faef42d4f7318ed532141edb57bcc52dbc8a92ae8c35637b8a5c3ff6@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: eggy <efcb1558faef42d4f7318ed532141edb57bcc52dbc8a92ae8c35637b8a5c3ff6@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The control plane always sends its own next_action for
owner_site_limit_reached, and the server's step wins over the CLI's, so
the note that the allowance counts every workspace never printed against
a real server. Move it into the explanation, which always prints.

Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nathan-thillairajah
nathan-thillairajah requested a review from a team as a code owner November 3, 2026 21:57
Suggest plain `bl apps list --scope owned` in the explanation, since the
owned listing already shows apps still being cleaned up and its quota
usage is the authoritative count. Say that every environment of an app
must be deleted to free its place, and drop the claim that no command
can force cleanup.

Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 One documentation inconsistency remains in the cleanup recovery guidance.

Comment thread src/bl/apps.rs
retired while artifacts may be retained. Capacity remains held when \
quota_cleanup_pending is true; explicitly retry cleanup and verify \
authoritative usage instead of subtracting a slot locally. \
quota_cleanup_pending is true; the server retries that cleanup on its \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 [P3] Keep the cleanup recovery instructions consistent. This help text now tells users that the server retries cleanup automatically, while README.md:206–211 still instructs them to explicitly retry cleanup until release. For quota_cleanup_pending: true, those describe different user actions. Update the README alongside this change to describe automatic retries and rechecking quota; consider directing users to support when cleanup remains pending, since reservation_mismatch requires operator intervention.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 Fixed in 4c67a51. The README now says the server retries cleanup on its own, so there's nothing to rerun: recheck usage with bl apps list --scope owned --include-deleted --json, and ask the BuilderLab team if cleanup stays pending, since some cases need an operator. The delete help says the same.

kalvinnchau
kalvinnchau previously approved these changes Nov 3, 2026

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 Approved. The previously noted P3 cleanup-documentation inconsistency remains nonblocking.

A user is in one workspace at a time, so "every workspace" read oddly.

Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Nathan Thillairajah <nthillairajah@squareup.com>
nathan-thillairajah and others added 2 commits November 3, 2026 18:17
Apps left in a previous workspace can't be acted on until they move with
their owner, so the limit text no longer mentions them. The README now
says the server retries quota cleanup on its own and to ask the
BuilderLab team if it stays pending, matching the delete help.

Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Nathan Thillairajah <nthillairajah@squareup.com>
The fallback step now uses --include-deleted, so a deleted app whose
cleanup is pending stays visible. Usage is described as shown when
available, and the delete help wraps like the lines around it.

Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Nathan Thillairajah <nthillairajah@squareup.com>
@nathan-thillairajah
nathan-thillairajah marked this pull request as ready for review November 3, 2026 23:21
@nathan-thillairajah
nathan-thillairajah merged commit 68c64e4 into main Nov 3, 2026
4 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.

2 participants