diff --git a/tests/runner-e2e/chat-catalog-domains/runtime-email.ts b/tests/runner-e2e/chat-catalog-domains/runtime-email.ts index 0dc28919e44..d80713a87b0 100644 --- a/tests/runner-e2e/chat-catalog-domains/runtime-email.ts +++ b/tests/runner-e2e/chat-catalog-domains/runtime-email.ts @@ -97,7 +97,7 @@ export async function cleanupOwnedEmailConnection(ctx: ChatCatalogContext) { export const runtimeEmailRecoveryCases = [runtimeDefinition("recovery.unknown-email-outcome", async ctx => { try { return await setupUnknownEmail(ctx); } catch (error) { await cleanupOwnedEmailConnection(ctx); throw error; } }, gradeUnknownEmail, { authentication: "human-session", setupHumanMessageCount: 1, expectedHumanMessageCount: 3, expectedRunCount: 3, turnTimeoutMs: 120000, attemptTimeoutMs: 900000, externalInput: { provider: requirement.provider, fields: requirement.fields }, - coverageGaps: ["Finite selected test-server lost-response hook is authored area-locally but not yet wired into server-entry; integration waits for coordinator's immutable initial batch handoff."], + coverageGaps: [], setupPolicy: { readiness: "preserve-scenario", invariantCheckIds: ["real-original-email-uncertain-with-no-public-provider-receipt"] }, sourceFiles: ["chat-catalog-domains/runtime-email.ts", "chat-catalog-domains/runtime-email-fault.ts", "chat-catalog-domains/runtime-email-private.ts", "chat-catalog-domains/runtime-email-private-worker.ts", "../../server/src/services/email-channels.ts", "../../server/src/services/agentmail-api.ts", "../../server/src/services/connectors/agentmail.ts", "server-entry.ts", "chat-scenarios/recovery.yaml"], async verifySetup(ctx, s) { const delivery = await ctx.input.api.get(`/api/companies/${ctx.input.fixtures.company.id}/email/deliveries/${s.publicationId}`), root = process.env.PAPERCLIP_RUNNER_E2E_TEMP_ROOT!; const status = await readOwnedEmailFault(root, "status.json"), request = s.faultRequest as EmailFaultRequest; const c = checks(); c.add("real-original-email-uncertain-with-no-public-provider-receipt", delivery.outcome === "uncertain" && delivery.providerMessageId === null && status.realSendsForwarded === 1 && status.nonce === request.nonce && !status.released && !status.expired && s.setupSendBound === true, "One actual accepted original send persists as uncertain without a reliable public receipt; exact declared outage remains active before unchanged canonical query."); return c.result(); }, diff --git a/tests/runner-e2e/server-entry.ts b/tests/runner-e2e/server-entry.ts index 46c68c88bce..806d3d49fc6 100644 --- a/tests/runner-e2e/server-entry.ts +++ b/tests/runner-e2e/server-entry.ts @@ -4,8 +4,10 @@ import { ServerResponse } from "node:http"; import { PaperclipRunnerToolAuthority } from "../../server/src/services/native-runtime/paperclip-runner-tool-authority.js"; import { canonicalDocumentIssueId, contextCommentGateSelected, holdCommittedDocumentResponse, isArmed } from "./context-comment-gate.js"; import { holdInteractionResponse } from "./interaction-response-gate.js"; +import { installOwnedEmailResponseLoss } from "./chat-catalog-domains/runtime-email-fault.js"; const ids: string[] = JSON.parse(process.env.PAPERCLIP_RUNNER_E2E_EXECUTION_IDS ?? "[]"); +await installOwnedEmailResponseLoss({ executionIds: ids, attemptId: process.env.PAPERCLIP_E2E_ACCOUNTING_ATTEMPT_ID ?? "", temporaryRoot: process.env.PAPERCLIP_RUNNER_E2E_TEMP_ROOT ?? "" }); const contextCommentGate = contextCommentGateSelected(ids); const completionBusyGate = ids.some(id => id.startsWith("completion-updates.") && id.endsWith(".handoff-completion-busy")); if (ids.some((id) => id.endsWith(".accept-while-running"))) {