diff --git a/tests/runner-e2e/PRODUCT-JOURNEYS.md b/tests/runner-e2e/PRODUCT-JOURNEYS.md index 672f93331a2..2fccdd102bd 100644 --- a/tests/runner-e2e/PRODUCT-JOURNEYS.md +++ b/tests/runner-e2e/PRODUCT-JOURNEYS.md @@ -41,7 +41,10 @@ reusing successful onboarding reports `onboarding`. Preconfigured state is never counted as onboarding coverage. The scripted onboarding request supplies a self-contained child brief. The -parent must copy the full marked brief verbatim into `create_task.description`, +parent must first save its proposal through the existing native confirmation +tool and check the saved card receipt. The browser records the human decision; +the parent must not record its own approval or treat the opening scope as acceptance. +It must copy the full marked brief verbatim into `create_task.description`, including tool names, parameters, and the encoded input. It orders the child's work: create the files, publish `connection-proof.json` with that exact filename and workspace-relative content reference, save its Paperclip task document with diff --git a/tests/runner-e2e/product-journeys/onboarding-first-task.ts b/tests/runner-e2e/product-journeys/onboarding-first-task.ts index 6633a6a36e1..e1ecf63fb1e 100644 --- a/tests/runner-e2e/product-journeys/onboarding-first-task.ts +++ b/tests/runner-e2e/product-journeys/onboarding-first-task.ts @@ -188,6 +188,8 @@ export async function onboardingFirstTask(input: OnboardingFirstTaskInput): Prom ].join("\n"); await page.getByTestId("question-other-answer-composer").last().locator('[contenteditable="true"],textarea').first().fill([ `I have one task in mind. Propose exactly one child task named "${title}" and wait for my approval before creating it or doing its work.`, + 'Save that proposal with request_human_input using interactionKind "confirmation" (or "checkbox" bound to the saved plan revision when plan mode applies) and continuationPolicy "wake_assignee". Check that the tool returned a saved pending card. Correct rejected arguments from its feedback; a failed call is not a pending proposal.', + "Do not resolve, accept, or record approval yourself. This opening answer supplies scope, not approval. Wait for my actual accepted card decision before calling create_task; a rejection does not authorize the work.", "After approval, assign it to yourself and let its own Paperclip execution produce the result. After it finishes, verify its saved document and published attachment.", "In your final reply in this onboarding conversation, include actual Markdown links to the child task, its saved document, and connection-proof.json. Copy the published attachment's returned contentPath or downloadPath into the file link URL, including its actual attachment ID. A backticked filename, document key, or path is not a clickable link. Obtain the real references from the child's saved results; do not invent IDs or URLs. Then complete both tasks.", "When you create the child, copy the entire brief between BEGIN CHILD BRIEF and END CHILD BRIEF VERBATIM into create_task.description. Preserve every step, tool name, parameter instruction, and exact encoded input. Do not summarize or paraphrase it.",