feat: identity app surface — W1: remove nb__manage_app#273
Merged
Conversation
Rip out the conversational bundle install/uninstall/configure chat tool. It was non-functional today, and conversational workspace mutation deserves real design later (single tool, explicit workspace param, per-call admin auth) — so remove rather than redesign. The install lifecycle, CLI, catalog, and connector config UI are unaffected. - system-tools.ts: drop the manage_app tool def + the configureBundle / install/uninstallBundleFromWorkspaceViaCtx helpers and ManageBundleContext. Keep the exported resolveBundleServerName (still consumed by uninstall). gate/manageBundleCtx become reserved positional slots (_gate / _manageBundleCtx) so every call site's arity holds. - runtime.ts: drop the manageBundleCtx construction + call-site arg. - features.ts / privilege.ts: drop the manage_app feature-map entries and privilege rule. bundleManagement flag kept as a reserved operator knob. - bootstrap.md / skill-authoring.md: install + credential setup now happen in the Apps catalog / CLI, not chat. - CLI deprecation strings + stale comments repointed off manage_app. - Tests: delete the two manage_app-only integration files; repoint the privilege/audit/visibility tests to the surviving skills__create gate; assert manage_app is absent.
QA review caught that resolveBundleServerName (system-tools.ts) and uninstallBundleFromWorkspace (workspace-ops.ts) had exactly one caller — the uninstallBundleFromWorkspaceViaCtx helper this PR already removed — so both are dead production code after W1, not "consumed by the uninstall path" as the PR body wrongly claimed. The canonical uninstall is BundleLifecycleManager.uninstall(), which is self-contained: it resolves the server name via its instance map, runs the protected check, removes the source, clears workspace credentials, and unregisters placements/config/automations. It never touched either helper. - Delete both functions and their two unit tests (workspace-ops-uninstall, workspace-uninstall-credentials). Those tests only pinned dead code; the live behaviors are covered against lifecycle.uninstall() in lifecycle.test.ts (protected reject, credential file removal + sibling untouched, data-dir preservation, idempotent no-op). - installBundleInWorkspace stays — it's still live (connector install). - Drop the stale comments that referenced the deleted sibling and a non-existent "catalog/connector uninstall" caller.
mgoldsborough
added a commit
that referenced
this pull request
May 25, 2026
* feat(stage-2/identity-apps W1): remove nb__manage_app Rip out the conversational bundle install/uninstall/configure chat tool. It was non-functional today, and conversational workspace mutation deserves real design later (single tool, explicit workspace param, per-call admin auth) — so remove rather than redesign. The install lifecycle, CLI, catalog, and connector config UI are unaffected. - system-tools.ts: drop the manage_app tool def + the configureBundle / install/uninstallBundleFromWorkspaceViaCtx helpers and ManageBundleContext. Keep the exported resolveBundleServerName (still consumed by uninstall). gate/manageBundleCtx become reserved positional slots (_gate / _manageBundleCtx) so every call site's arity holds. - runtime.ts: drop the manageBundleCtx construction + call-site arg. - features.ts / privilege.ts: drop the manage_app feature-map entries and privilege rule. bundleManagement flag kept as a reserved operator knob. - bootstrap.md / skill-authoring.md: install + credential setup now happen in the Apps catalog / CLI, not chat. - CLI deprecation strings + stale comments repointed off manage_app. - Tests: delete the two manage_app-only integration files; repoint the privilege/audit/visibility tests to the surviving skills__create gate; assert manage_app is absent. * fix(W1): delete dead uninstall helpers orphaned by manage_app removal QA review caught that resolveBundleServerName (system-tools.ts) and uninstallBundleFromWorkspace (workspace-ops.ts) had exactly one caller — the uninstallBundleFromWorkspaceViaCtx helper this PR already removed — so both are dead production code after W1, not "consumed by the uninstall path" as the PR body wrongly claimed. The canonical uninstall is BundleLifecycleManager.uninstall(), which is self-contained: it resolves the server name via its instance map, runs the protected check, removes the source, clears workspace credentials, and unregisters placements/config/automations. It never touched either helper. - Delete both functions and their two unit tests (workspace-ops-uninstall, workspace-uninstall-credentials). Those tests only pinned dead code; the live behaviors are covered against lifecycle.uninstall() in lifecycle.test.ts (protected reject, credential file removal + sibling untouched, data-dir preservation, idempotent no-op). - installBundleInWorkspace stays — it's still live (connector install). - Drop the stale comments that referenced the deleted sibling and a non-existent "catalog/connector uninstall" caller. --------- Co-authored-by: Mathew Goldsborough <1759329+mgoldsborough@users.noreply.github.com>
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.
First slice of the identity app surface effort (stacked on #272 /
stage-2/main; retarget tomainif #272 merges first). This branch will accumulate the rest of the work — global tool dispatch (W3), identity host path + root/conversationsroute (A3/A4), and the Files/Automations migrations (Phases B/C). Design + sign-off live innimblebrain-ops/research/delegation-model/IDENTITY_APP_SURFACE.md.W1 — remove
nb__manage_appThe conversational bundle install/uninstall/configure chat tool is removed (signed off), not redesigned. It was non-functional today, and conversational workspace mutation deserves real design later (single tool, explicit
workspaceparam, per-call admin auth). The underlying install lifecycle,nbCLI, Apps catalog, and connector config UI are all unaffected.Changes
system-tools.ts— drop themanage_apptool def + theconfigureBundle/installBundleInWorkspaceViaCtx/uninstallBundleFromWorkspaceViaCtxhelpers +ManageBundleContext.gate/manageBundleCtxbecome reserved positional slots (_gate/_manageBundleCtx) so every call site's arity holds (the file's reserved-slot convention).runtime.ts— drop themanageBundleCtxconstruction + its call-site arg.features.ts/privilege.ts— drop themanage_appfeature-map entries and privilege rule. ThebundleManagementflag is kept as a reserved operator config knob for the bundle-management tool the design contemplates reintroducing.bootstrap.md/skill-authoring.md— install and credential setup now happen in the Apps catalog / CLI, not chat.startup.ts,workspace-ops.ts,connector-tools.ts,workspace-credentials.tsrepointed offmanage_app.Dead-code cleanup (addresses QA review)
Removing
manage_apporphaned two helpers whose only caller was the deleteduninstallBundleFromWorkspaceViaCtx:resolveBundleServerName(system-tools.ts) anduninstallBundleFromWorkspace(workspace-ops.ts) are both deleted — they had zero production callers after W1.BundleLifecycleManager.uninstall(), which is self-contained (resolves the server name via its instance map, runs the protected check, removes the source, clears workspace credentials, unregisters placements/config/automations). It never called either helper.installBundleInWorkspaceis kept — it's still live (connector install atconnector-tools.ts).Tests
manage_app-only integration files (configure-credentials,bundles-workspace-bundle-mgmt) and the two unit files that pinned the now-deleted helpers (workspace-ops-uninstall,workspace-uninstall-credentials).lifecycle.uninstall()inlifecycle.test.ts: protected reject, credential file removal + sibling untouched, data-dir preservation, idempotent no-op.skills__creategate; assertnb__manage_appis absent.Verification
verify:staticclean (format, lint, tsc, cycles, code-style, codegen).instructions-reworkfailures (a separatecompose.tsLayer-2-overlay bug), unchanged by this PR.Follow-ups (not in this PR)
schemas.nimblebrain.ai(products/nimblebrain/schemas) still describesbundleManagement/protectedin terms ofnb__manage_app. That schema is fetched intosrc/config/nimblebrain-config.schema.jsonon postinstall, so it can't be fixed here.forcePrompton the credential resolver no longer has a caller (it wasmanage_app configure's); kept as a generic capability.