Repository navigation
Show actionable Apps manifest validation errors - #19
Merged
Merged
Conversation
jedwards27
approved these changes
Oct 14, 2026
jedwards27
left a comment
There was a problem hiding this comment.
🤖 Approved on Jude's behalf by their AI agent. Reviewed commit 1adf845; no blocking findings. The fixed-message allowlist matches the backend validator, repair guidance matches the advertised contract, and error classification/correlation and no-retry behavior are preserved.
Verification: all 341 workspace tests passed (including 68 Apps tests); formatting and diff checks passed.
Non-blocking merge coordination: #8 also changes control_plane_http_failure. When combining the changes, preserve its structured quota recovery fields alongside this PR's http_status and validation diagnostics, and retain both sets of regression tests.
nathan-thillairajah
added a commit
that referenced
this pull request
Oct 29, 2026
… errors `bl apps get` now reads the access policy too and prints one readable line about who can open the app, beside its link and the Share & manage link. `handoff` becomes a hidden alias for the same output, and `get --json` keeps its inspection fields with the handoff fields added. `visibility` and `community grant|revoke` print who can open the app afterwards unless `--json` is passed. Community names come from Kgoose when a local login is available, otherwise IDs are shown. Known Compose error codes get a CLI-written sentence and, when the server sends none, a next step. The server's error.message is still never printed, as in #19. Help text now says workspace and private, hides `access set` and its individual viewers, and fills in every sharing argument. Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nathan-thillairajah
added a commit
that referenced
this pull request
Oct 29, 2026
* BOT-2440: let handoff show the audience without a portal URL, and give dead-end errors a next step `bl apps handoff` now reads the app and its access policy even when no portal origin is configured, omits the Share & manage link (management_url is null), and says how to pass --management-base-url. An invalid origin still errors, and the portal is still never inferred from a workstation or app hostname. The proxy refusal for `bl apps community` and the "app has no active sharing lifecycle" failure now carry a next_action pointing the owner to Share & manage, with the portal link when BL_APPS_MANAGEMENT_BASE_URL is set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: only deep-link Share & manage when the workspace is known The portal opens an app's dialog only when the URL has both app and workspace, so an app-only link lands on the plain list. Without a workspace, point at /hosted-apps and name the app to choose. The missing-lifecycle error uses the workspace_id from the sharing response when it carries one; the proxy refusal makes no request, so it never has one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: drop the speculative workspace lookup from community errors The community grant read does not return a workspace_id, so the missing-lifecycle error could never build a deep link. Both community errors now use the workspace-less form and name the app to choose. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: give handoff and community errors a next step that works Review fixes for #40: - Treat a blank BL_APPS_MANAGEMENT_BASE_URL as unset, prefer the flag, and name the env var when its value is invalid. - Build the handoff next_action from whether the audience is verified and whether a Share & manage link exists, so it never offers a link it lacks. - Without a portal origin, point owners to Hosted Apps in the BuilderLab portal. - Compose answers the community grant read with 409 community_grant_conflict when the app has no lifecycle. Add a deploy-first next_action to that 409 and use the same wording for the 200-with-no-lifecycle guard. - Update the README handoff section. Co-authored-by: Helly R <755566517b9f4a67070220593bc7ef951f4b6f39175135818360f233c6a5e152@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * WIP: bl apps community list via Kgoose joined communities Prototype only; no tests yet. Verified against bb-public staging. Co-authored-by: Helly R <755566517b9f4a67070220593bc7ef951f4b6f39175135818360f233c6a5e152@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: make bl apps get say who can open an app, and explain known errors `bl apps get` now reads the access policy too and prints one readable line about who can open the app, beside its link and the Share & manage link. `handoff` becomes a hidden alias for the same output, and `get --json` keeps its inspection fields with the handoff fields added. `visibility` and `community grant|revoke` print who can open the app afterwards unless `--json` is passed. Community names come from Kgoose when a local login is available, otherwise IDs are shown. Known Compose error codes get a CLI-written sentence and, when the server sends none, a next step. The server's error.message is still never printed, as in #19. Help text now says workspace and private, hides `access set` and its individual viewers, and fills in every sharing argument. Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: keep the community name lookup in get short Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: address review on bl apps sharing output - community list errors use CLI-written text per status and code, never the Kgoose message or body, and a 200 that isn't a JSON object with a communities list is an error instead of an empty account - community_grant_conflict and community_grant_denied explain themselves - a bad BL_APPS_MANAGEMENT_BASE_URL drops only the link; a bad --management-base-url still fails before any request - the who-can-open count needs an owner to leave out, and the access-read and tier-resolution texts say what actually happened - tests for community list end to end, the session header, redaction and the no-community lookup short-circuit Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * BOT-2440: don't ask for a portal origin when only the app's workspace is missing When the portal is configured but the app comes back without workspace_id, the handoff now says the workspace is missing and points the owner to Share & manage by app name, instead of asking for --management-base-url or BL_APPS_MANAGEMENT_BASE_URL again. Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Helly R <755566517b9f4a67070220593bc7ef951f4b6f39175135818360f233c6a5e152@remote-agent-pilot.communities.buzz.xyz> Co-authored-by: Irving B <6c4c50b3b6dee89feaca78ea87eb5c8fde651d2d7b39d6da8c9354ce7a34e313@remote-agent-pilot.communities.buzz.xyz>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
An Apps deploy with a missing
ASSETSbinding returns a generic HTTP 400, leaving the caller without enough information to fix the artifact. The backend identifies the missing binding, but the CLI suppresses its message because that same field can contain internal errors.This recognizes the fixed missing-manifest and required-binding diagnostics and gives the caller enough guidance to repair the manifest and rebuild. Unknown manifest failures point to the selected control plane's contract without exposing arbitrary backend messages. The error code, HTTP status, and trace ID remain available for diagnosis.
Quota recovery remains in #8; both changes touch the shared error handler and need to retain each other's diagnostics. Blox customers receive this fix when the CLI image is rebuilt and updated.