import { type DbExec } from "../../db/client.js"; import type { ResourceSuggestion, SuggestionDecision, SuggestionStatus, SuggestionOperation, ResourceSuggestionProposal } from "./types.js"; export declare function __resetSuggestionTablesForTests(): void; export declare const reviewSuggestionsStore: import("../../db/store-registry.js").Store; export declare function ensureSuggestionTables(client?: DbExec): Promise; export interface SuggestionCreationReceipt { suggestion: ResourceSuggestion; authorEmail: string | null; actorKind: ResourceSuggestion["actorKind"] | null; requestHash: string | null; receiptVersion: number; } export declare const SUGGESTION_RECEIPT_VERSION = 2; export declare function getSuggestionByCreationKey(client: DbExec, idempotencyKey: string): Promise; export declare function recordSuggestionCreation(client: DbExec, idempotencyKey: string, suggestion: ResourceSuggestion, authorEmail: string | null, actorKind: ResourceSuggestion["actorKind"], requestHash: string): Promise; export declare function deleteUnclaimedSuggestion(client: DbExec, suggestionId: string): Promise; export declare function insertSuggestion(input: Omit, client?: DbExec): Promise; export declare function getSuggestionAmendment(client: DbExec, key: string): Promise<{ suggestionId: string; request: string; suggestion: ResourceSuggestion | null; } | null>; export declare function amendSuggestion(client: DbExec, before: ResourceSuggestion, operations: SuggestionOperation[], summary: string, idempotencyKey: string, request: string, baseRevision?: string): Promise; /** * Moves a pending suggestion onto `baseRevision` with `operations` that make * the same change there, as when its resource was rewritten into an * equivalent form. It is recorded as an amendment, so the suggestion's * revision moves and anyone holding the old one refreshes before deciding. * Null when the suggestion was decided or changed since `before` was read. */ export declare function rebaseSuggestion(client: DbExec, before: ResourceSuggestion, input: { operations: SuggestionOperation[]; baseRevision: string; idempotencyKey: string; reason: string; }): Promise; export declare function getSuggestion(suggestionId: string, client?: DbExec): Promise; /** Loads several suggestions in two queries; missing ids come back as null. */ export declare function getSuggestions(suggestionIds: readonly string[], client?: DbExec): Promise<(ResourceSuggestion | null)[]>; export declare function listSuggestions(resourceType: string, resourceId: string, statuses?: readonly SuggestionStatus[], client?: DbExec): Promise; export interface SuggestionDecisionRecord { id: string; suggestionId: string; idempotencyKey: string; reviewer: string | null; decision: SuggestionDecision | "withdrawn" | "superseded"; observedBase: string; outcome: string; detail: string | null; createdAt: string; } export declare function recordDecision(client: DbExec, input: Omit): Promise<{ record: SuggestionDecisionRecord; duplicate: boolean; }>; export declare function getDecision(client: DbExec, idempotencyKey: string): Promise; export declare function updateSuggestionStatus(client: DbExec, suggestionId: string, status: SuggestionStatus, observedRevision?: number): Promise; export declare function getSuggestionProposal(client: DbExec, id: string): Promise; export declare function insertSuggestionProposal(client: DbExec, input: Omit): Promise; export declare function listProposalSuggestions(client: DbExec, proposalId: string): Promise; export declare function getProposalCreation(client: DbExec, key: string): Promise<{ proposalId: string; authorEmail: string | null; actorKind: string; requestHash: string; suggestionIds: string[]; } | null>; export declare function recordProposalCreation(client: DbExec, key: string, proposalId: string, authorEmail: string | null, actorKind: string, requestHash: string, suggestionIds: string[]): Promise; export declare function getProposalDecision(client: DbExec, key: string): Promise<{ proposalId: string; reviewer: string | null; decision: SuggestionDecision; request: string; suggestionIds: string[]; } | null>; export declare function recordProposalDecision(client: DbExec, key: string, proposalId: string, reviewer: string | null, decision: SuggestionDecision, request: string, suggestionIds: string[]): Promise;