import type { AnalysisReference, AnalysisReviewFinding, ReviewPlanRun, ReviewSensitivity, ReviewSensitivityGrid } from "@actuarial-ts/core"; import type { DiagnosticSuiteResult } from "./diagnosticSuiteTypes.js"; import type { ReviewSourcePath } from "./reviewSourceDecoding.js"; export const REVIEW_STUDY_COLLECTION_CONTRACT_VERSION = "actuarial-review-studies/1" as const; export const REVIEW_STUDY_COLLECTION_LIMITS = Object.freeze({ maximumAttachments: 16, maximumGraphRuns: 256, maximumDiagnosticModels: 128, maximumDiagnosticRows: 1000000, maximumInputCharacters: 80000000, maximumOutputCharacters: 100000000 }); export type RelatedStudySubject = { readonly kind: "declared-related"; readonly rationale: string }; export type ReviewStudyAttachment = { readonly id: string; readonly rationale: string } & ( | { readonly kind: "sensitivity"; readonly result: ReviewSensitivity; readonly binding: { readonly kind: "review-baseline" } | RelatedStudySubject } | { readonly kind: "sensitivity-grid"; readonly result: ReviewSensitivityGrid; readonly binding: { readonly kind: "review-baseline" } | RelatedStudySubject } | { readonly kind: "diagnostic-suite"; readonly result: DiagnosticSuiteResult; readonly binding: { readonly models: readonly { readonly subject: string; readonly target: { readonly kind: "review-model"; readonly node: string } | RelatedStudySubject }[]; /** Exact complete diagnostic input retained in an authored graph input. No inferred population equivalence. */ readonly datasets: readonly { readonly subject: string; readonly target: { readonly kind: "review-input"; readonly node: string; readonly path: ReviewSourcePath } | RelatedStudySubject }[]; } } ); export interface ReviewStudyCollectionRequest { readonly id: string; readonly version: string; readonly attachments: readonly ReviewStudyAttachment[]; readonly limits: { readonly [K in keyof typeof REVIEW_STUDY_COLLECTION_LIMITS]: number }; } export interface ReviewStudyBindingEvidence { readonly attachment: string; readonly subject: { readonly kind: "baseline" | "model" | "dataset"; readonly id: string }; readonly status: "exact-review-baseline" | "exact-review-model" | "exact-retained-input" | "declared-related"; readonly target: AnalysisReference | null; readonly node: string | null; readonly path: ReviewSourcePath | null; readonly qualification: string; } export interface ReviewStudyFinding { readonly attachment: string; /** Exact evidence path relative to that attachment's retained result. */ readonly path: readonly (string | number)[]; readonly code: string; readonly message: string; } export interface ReviewStudyCollection extends ReviewStudyCollectionRequest { readonly contractVersion: typeof REVIEW_STUDY_COLLECTION_CONTRACT_VERSION; readonly sdkVersion: string; /** Original saved review identity; cache history is retained, not recertified. */ readonly review: AnalysisReference; readonly bindings: readonly ReviewStudyBindingEvidence[]; readonly findings: readonly ReviewStudyFinding[]; readonly execution: { readonly graphRunCeiling: number; readonly diagnosticModels: number; readonly diagnosticRows: number }; readonly assurance: { readonly studies: "replayed-current-sdk"; readonly sourceAuthenticity: "not-verified"; readonly independence: "not-established"; readonly causality: "not-established"; readonly completeness: "caller-selected-studies-only"; readonly publication: "not-reported" }; readonly reference: AnalysisReference; } /** A saved run is supplied as data; execution must replay it to acquire live authority. */ export interface ReviewStudyExecutionRequest { readonly request: ReviewStudyCollectionRequest; readonly review: { readonly run: ReviewPlanRun; readonly limits: { readonly maximumInputCharacters: number } }; } export interface ReviewStudyReplayRequest { readonly collection: ReviewStudyCollection; readonly review: ReviewStudyExecutionRequest["review"]; } export interface ReviewStudyExecutionPreflight { readonly execution: ReviewStudyCollection["execution"]; readonly findings: readonly AnalysisReviewFinding[]; readonly assurance: "retained-structure-and-inputs-only"; readonly bindingBasis: "structurally-checked-saved-review"; }