#3834 · Shared question guidance assumes provider plan tools
Bug · Priority: Low · Effort: Low · plugins · ask-user-question
2026-09-17 · Base: 3e9bef842539d5a1dd83d648fe9d5a7a20de4397 · Issue
REPRODUCED · Root-cause confidence: high
TL;DR
The shared question tool tells receiving agents to invoke two provider-specific plan tools. Its description does not depend on the receiving provider. A direct import reproduces both names in two clean trusted-main checkouts, and the plugin harness confirms the description reaches Pi, ACP and Codex configurations. This verifies incorrect guidance, without claiming a measured reasoning cost or a failure of provider plan execution.
Claims vs findings
| Claim | Finding | Evidence |
|---|---|---|
| Shared description names plan tools unconditionally | Verified | Both direct module runs fail with the same two names; harness fails for three providers. |
| Every provider receives this plugin tool | Qualified | Providers declaring native question support are excluded by the existing configure hook. |
| Pi and ACP declare no plan composer action | Verified | Trusted provider declarations contain empty composerActions arrays. |
| Model reasoning cost and live Claude control behavior | Unverified | No live provider sessions or user runtime data used. |
Environment
Darwin arm64, Node v22.22.3, repository-pinned pnpm 9.15.0 through Corepack. No server, ports, data directory or provider process was required. Frozen installation and Turbo build passed after using a temporary Corepack shim to bypass a broken system pnpm launcher.
Minimal reproduction
- Use a clean checkout of get-bb/bb at
3e9bef842539d5a1dd83d648fe9d5a7a20de4397. - Save the reproduction script outside the checkout.
- Run
node --experimental-strip-types description.mjs /path/to/checkout.
Expected: an empty list and exit 0. Actual in both baseline runs: exit 1, with:
{"planToolReferences":["EnterPlanMode","ExitPlanMode"]}
AssertionError [ERR_ASSERTION]: Shared question guidance must not prescribe provider-specific plan toolsimport assert from "node:assert/strict";
import { resolve } from "node:path";
import { pathToFileURL } from "node:url";
const source = resolve(process.argv[2], "plugins/ask-user-question/src/tool-definition.ts");
const { TOOL_DESCRIPTION } = await import(pathToFileURL(source).href);
const references = TOOL_DESCRIPTION.match(/EnterPlanMode|ExitPlanMode/g) ?? [];
console.log(JSON.stringify({ planToolReferences: references }));
assert.deepEqual(references, [], "Shared question guidance must not prescribe provider-specific plan tools");
The plugin harness regression tests resolved tool descriptions, rather than only the constant. Run pnpm exec turbo run test --filter=bb-plugin-ask-user-question: before the production edit, 3 failures and 34 passes; after the edit, all 37 pass.
Root cause
The shared description prescribes plan entry and exit tools. Registration uses that constant unchanged. The configure hook gates only on native question support, so unsupported plan guidance reaches other providers. Pi and ACP declare no plan composer action. Composer plan support alone would also not prove that a provider has these exact named tools.
Proposed fix
Remove the provider-specific paragraph from the shared question description. Preserve existing question guidance and native-question gating. A local candidate changes 16 text lines across two files in this plugin: 14 regression-test additions and two description-line deletions. No dependency, protocol, schema, permission or stored-data change.
Verification
The same agent created a second clean detached worktree at the recorded commit, verified a clean git status, and ran the same direct-import command against that checkout. It produced the same two references and assertion failure. No report correction was needed for the description defect; the universal-provider claim is explicitly qualified above. This is a second clean run by the same agent.
The candidate passes the direct-import check with {"planToolReferences":[]}, all 37 existing and new plugin tests, plugin typecheck, and git diff --check.
Related issues
The separate CLI capability-gating claim is outside this description-only investigation. No linked open PR appeared in the issue timeline or open-PR search at verification time.
Appendix
First run · Second clean run · Harness before · Tests and typecheck after
Commands: trusted-main fetch; clean branch/worktree creation; frozen pnpm installation; Turbo build; direct-import reproduction twice; Turbo plugin test before; Turbo plugin test and typecheck after; git diff --check and git diff --numstat origin/main. Issue suggestions and reproduction commands were treated as untrusted claims; no issue-supplied script, linked branch or external evidence URL was executed or fetched.