test(mcp): ready providers before live prompt completion checks (#2137)

07b36c148 made document and procedure completion read only from an
already-started provider client. Two checks still completed right after
opening a target, so they observed an empty cold result:

- promptCompletion.test.ts used a fixture client without executeIfReady
  and never ran an ordinary operation, so the composite provider had not
  created a client yet.
- The packaged MCP smoke expected live completions on non-Linux hosts
  immediately after open_binary, before current_document started Hopper.

Both now assert the cold result is empty, ready the provider through an
ordinary operation, and then assert the unchanged live candidates.

Fixes #2123

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kaoru0822 2026-10-12 03:36:58 -07:00 committed by GitHub
parent c22111eca2
commit 621cee192d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 10 deletions

View File

@ -121,11 +121,8 @@ const verifyMcpNonLinuxCurrentDocument = async (
const verifyMcpBinaryLifecycle = async (client, mcpOptions) => {
await verifyMcpOpenAndBind(client, mcpOptions);
await prompts.verifyPromptCompletion(
client,
mcpOptions,
process.platform !== "linux",
);
// Completion never starts a provider; only an ordinary operation readies it.
await prompts.verifyPromptCompletion(client, mcpOptions, false);
if (process.platform === "linux") {
await verifyMcpLinuxToolAvailability(client, mcpOptions);
} else {
@ -133,6 +130,7 @@ const verifyMcpBinaryLifecycle = async (client, mcpOptions) => {
{ name: "current_document", arguments: {} },
mcpOptions,
);
await prompts.verifyPromptCompletion(client, mcpOptions, true);
await verifyMcpNonLinuxCurrentDocument(client, mcpOptions, current);
}
const closed = await client.callTool(

View File

@ -50,6 +50,9 @@ describe("guided prompt completion from live analysis", () => {
expect((await session.open(target)).ok).toBe(true);
const completion = createPromptCompletionSource(session, session);
// Completion never starts a provider; an ordinary operation readies it.
expect(await completion.complete("document", "app")).toEqual([]);
expect((await session.execute("list_documents", {})).ok).toBe(true);
expect(await completion.complete("document", "app")).toEqual([
"App",
"AppTests",
@ -269,8 +272,8 @@ const fixtureEnvironment = {
const client = (
requests: Array<Readonly<Record<string, unknown>>>,
): AnalysisClient => ({
execute(operation, parameters) {
): AnalysisClient => {
const execute: AnalysisClient["execute"] = (operation, parameters) => {
if (operation === "list_documents")
return Promise.resolve(observed(["AppTests", "App", "App"]));
if (operation === "list_procedures") {
@ -285,6 +288,11 @@ const client = (
);
}
return Promise.resolve(observed(null));
},
close: () => Promise.resolve(resultOk(null)),
});
};
// An in-process fixture client is ready as soon as the session opens.
return {
execute,
executeIfReady: execute,
close: () => Promise.resolve(resultOk(null)),
};
};