import { type GraphEvidenceEvent, type GraphEvidenceReport, type GraphExperimentManifest, type GraphRolloutDecision, type LegacyRetirementAssessment } from "../core/graphEvidence.js"; export type { GraphRolloutDecision } from "../core/graphEvidence.js"; export interface GraphReleaseArtifactDigests { rolloutReport: string; graphCoverage: string; cleanRollback: string; configMigration: string; } export interface GraphReleaseRecord { schemaVersion: 1; releaseVersion: string; releasedCompatibilityWindows: number; compatibilityWindowReleases: string[]; artifactDigests: GraphReleaseArtifactDigests; } export interface GraphRolloutDecisionArtifact { schemaVersion: 1; kind: "graph-rollout-decision"; releaseVersion: string; decision: GraphRolloutDecision; experimentManifest: GraphExperimentManifest; events: GraphEvidenceEvent[]; } export interface GraphCoverageSuiteResult { passed: number; failed: number; skipped: number; } export interface GraphCoverageArtifact { schemaVersion: 1; kind: "graph-coverage"; releaseVersion: string; graphVersion: string; suites: { fast: GraphCoverageSuiteResult; lifecycleSequential: GraphCoverageSuiteResult; lifecycleDag: GraphCoverageSuiteResult; recovery: GraphCoverageSuiteResult; parallelIsolation: GraphCoverageSuiteResult; }; } export interface GraphCleanRollbackArtifact { schemaVersion: 1; kind: "graph-clean-rollback"; releaseVersion: string; previousReleaseVersion: string; packageRollbackExitCode: 0; restoredEngine: "graph-shadow"; workingTreeCleanBefore: true; workingTreeCleanAfter: true; } export interface GraphConfigMigrationArtifact { schemaVersion: 1; kind: "graph-config-migration"; releaseVersion: string; sourceReleaseVersion: string; sourceSchemaVersion: number; targetSchemaVersion: number; forwardExitCode: 0; backwardExitCode: 0; beforeConfigDigest: string; afterConfigDigest: string; roundTripConfigDigest: string; rollbackEngine: "graph-shadow"; } export interface VerifyGraphReleaseRecordInput { releaseVersion: string; } export interface VerifiedGraphReleaseAssessment extends LegacyRetirementAssessment { releaseVersion: string; decision: GraphRolloutDecision; releasedCompatibilityWindows: number; /** Recomputed from the canonical manifest and event ledger; raw events are never returned. */ report: Readonly; artifactDigests: Readonly; } export type GraphReleaseEvidenceErrorCode = "invalid-user-store" | "invalid-release-record" | "invalid-release-artifact" | "artifact-digest-mismatch" | "rollout-report-ineligible" | "release-read-budget-exceeded"; export declare class GraphReleaseEvidenceError extends Error { readonly code: GraphReleaseEvidenceErrorCode; constructor(code: GraphReleaseEvidenceErrorCode); } export declare function resolveUserGraphReleaseRoot(): string; export declare function verifyGraphReleaseRecord(input: VerifyGraphReleaseRecordInput): VerifiedGraphReleaseAssessment; /** Canonical bytes used by the trusted release tooling and verified on read. */ export declare function encodeGraphReleaseArtifact(value: unknown): string; export declare function digestGraphReleaseArtifact(value: string | Uint8Array): string;