From ec8a75bce310ad6728264e19e5e9fed93e380ae5 Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 16 Sep 2026 16:22:49 -0500 Subject: [PATCH] Keep question-tool routing visible before deferred discovery Retain one sentence routing questions to Paperclip while the detailed usage lives in the tool documentation. Account for the child completion wake in the continuation fixture turn estimate. Co-Authored-By: Paperclip --- .../native-execution-input.test.ts | 2 ++ .../native-runtime/native-execution-input.ts | 3 +++ tests/runner-e2e/README.md | 2 +- tests/runner-e2e/catalog.test.ts | 2 +- tests/runner-e2e/continuation-cases.ts | 16 +++++++++------- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/server/src/services/native-runtime/native-execution-input.test.ts b/server/src/services/native-runtime/native-execution-input.test.ts index b0dedfb8464..24079be1cd1 100644 --- a/server/src/services/native-runtime/native-execution-input.test.ts +++ b/server/src/services/native-runtime/native-execution-input.test.ts @@ -461,6 +461,8 @@ describe("native execution input external-chat framing", () => { runtimeContext: nativeRuntimeContextFixture(), }); expect(input.task.prompt).not.toContain("## Questions that need a user response"); + expect(input.task.prompt).toContain("Use Paperclip's request_human_input for user questions"); + expect(input.task.prompt).not.toContain("payload.questionSet"); }); }); diff --git a/server/src/services/native-runtime/native-execution-input.ts b/server/src/services/native-runtime/native-execution-input.ts index 427464764d6..5b0f2b1f494 100644 --- a/server/src/services/native-runtime/native-execution-input.ts +++ b/server/src/services/native-runtime/native-execution-input.ts @@ -156,6 +156,9 @@ export function buildNativeExecutionInput(input: { isPaperclipExternalChatQuestionResponseTurn(wakePayload); const taskPrompt = [ wakePrompt, + // Provider-local elicitation can wait without creating a Paperclip card. + // Keep routing visible before deferred tool discovery; usage belongs in the tool schema. + "Use Paperclip's request_human_input for user questions; provider-local question tools do not reach the Paperclip UI.", externalChatTurn && wake?.externalChatProvider === "github" ? NATIVE_GITHUB_ATTACHMENT_RECOVERY_GUIDANCE : "", diff --git a/tests/runner-e2e/README.md b/tests/runner-e2e/README.md index 5220159ff1b..f8de10418f4 100644 --- a/tests/runner-e2e/README.md +++ b/tests/runner-e2e/README.md @@ -161,7 +161,7 @@ Both suites save and restore experimental settings. Browser E2E always starts a throwaway instance; never point the authenticated suite at the running demo. Missing provider credentials fail paid preflight and are not passing coverage. -The default `--all` selection is 160 cells (137 local and 23 Daytona) and 340 +The default `--all` selection is 160 cells (137 local and 23 Daytona) and 344 expected paid agent turns. The explicit-only everyday suite adds 30 catalog cells and is excluded from `--all`. Follow-up steps remain ordered within their cell; all other cells are independent. Narrow selectors are strongly recommended while diff --git a/tests/runner-e2e/catalog.test.ts b/tests/runner-e2e/catalog.test.ts index 8e7102c08b4..adcc9e8c6d9 100644 --- a/tests/runner-e2e/catalog.test.ts +++ b/tests/runner-e2e/catalog.test.ts @@ -68,7 +68,7 @@ describe("runner E2E catalog", () => { (total, execution) => total + execution.task.expectedRunCount, 0, ), - ).toBe(340); + ).toBe(344); expect( runnerTasks.find((task) => task.id === "plan-revise-accept") ?.attemptTimeoutMs, diff --git a/tests/runner-e2e/continuation-cases.ts b/tests/runner-e2e/continuation-cases.ts index 8af9308f559..495a047a6bc 100644 --- a/tests/runner-e2e/continuation-cases.ts +++ b/tests/runner-e2e/continuation-cases.ts @@ -55,13 +55,15 @@ export const continuationTasks: readonly RunnerTaskFixture[] = groups: [], workMode: "standard", flow: "continuation", - expectedRunCount: [ - "clarification-not-approval", - "revision-preserves-approval", - "completed-action-resume", - ].includes(id) - ? 3 - : 2, + expectedRunCount: + id === "completed-action-resume" + ? 4 + : [ + "clarification-not-approval", + "revision-preserves-approval", + ].includes(id) + ? 3 + : 2, attemptTimeoutMs: { local: 10 * 60_000, daytona: 10 * 60_000 }, expectedTerminalState: { issue: "done", run: "succeeded" }, buildTitle: (nonce) => `Continuation ${id} ${nonce}`,