export interface PublicRevisionVerificationRequest { publicUrl: string; notionUrl?: string; canonicalTitle: string; expectedRevision: string; requiredText: string[]; forbiddenText: string[]; oldRevision?: string; cookiePolicy?: "omit"; expectedWorkspace?: string; } export interface PublicRevisionAssertionCounts { canonicalTitle: number; expectedRevision: number; requiredText: Record; forbiddenText: Record; oldRevision: number; } export interface PublicRevisionObservation { url: string; workspace?: string; renderedText: string; observedAt: string; contextId: string; extractionState: "extracted" | "missing" | "auth_redirect" | "navigation_failed"; initialCookieCount: number; requestCookieHeaderPresent: boolean; counts?: PublicRevisionAssertionCounts; } export type PublicRevisionVerificationStatus = "verified" | "public_verification_blocked" | "public_navigation_failed" | "public_auth_redirect" | "public_text_extraction_blocked" | "public_cookie_policy_violation" | "public_title_mismatch" | "public_revision_stale" | "public_revision_duplicate" | "public_required_text_missing" | "public_forbidden_text_present" | "public_old_revision_present" | "publisher_workspace_mismatch" | "public_reads_disagree"; export interface PublicRevisionVerification { ok: boolean; status: PublicRevisionVerificationStatus; observations: [PublicRevisionObservation, PublicRevisionObservation?]; reason?: string; } /** * The single neutral contract for cookie-free public proof. Publisher/browser * adapters implement this in Plan 02; lifecycle code never invents a second * public verification shape. */ export interface PublicRevisionVerifier { verify(request: PublicRevisionVerificationRequest): Promise; } /** * A newly published Notion page can briefly return one converged read and one * stale/intermediate read from separate public contexts. The lifecycle may * perform one fresh, read-only verification pass for that narrow condition. * Authentication, cookie, navigation, extraction, workspace, and forbidden- * content failures are never retryable here. */ export declare function isTransientPublicConvergenceMismatch(result: PublicRevisionVerification): boolean; export declare function countPublicRevisionAssertions(request: PublicRevisionVerificationRequest, renderedText: string): PublicRevisionAssertionCounts; /** * The one publication predicate for logged-out rendered revision truth. It is * deliberately independent of HTTP availability, publisher-authenticated * content, screenshots, and Notion's publication banner. */ export declare function evaluatePublicRevisionObservations(request: PublicRevisionVerificationRequest, input: PublicRevisionObservation[]): PublicRevisionVerification;