import type { CinemaSha256 } from './cinema-types.js'; export type CinemaContinuityDimension = 'wardrobe' | 'hair' | 'makeup' | 'damage' | 'injury' | 'propHand' | 'mechanism' | 'geography' | 'gaze' | 'time' | 'light' | 'emotion'; export type CinemaContinuityStateValues = Record; export interface CinemaSubjectContinuityState { subjectId: string; values: CinemaContinuityStateValues; } export interface CinemaContinuityChange { subjectId: string; dimension: CinemaContinuityDimension; from: string; to: string; beatId: string; reason: string; } export interface CinemaShotContinuityRecord { shotId: string; sceneMapId: string; cameraSideId: string; carriesFromShotId: string | null; subjects: CinemaSubjectContinuityState[]; intentionalChanges: CinemaContinuityChange[]; } export interface CinemaContinuityLedgerArtifact { schemaVersion: 1; projectSlug: string; ledgerId: string; generatedAt: string; records: CinemaShotContinuityRecord[]; contentHash: CinemaSha256; } export interface CinemaGeographyMapArtifact { schemaVersion: 1; projectSlug: string; sceneMapId: string; generatedAt: string; landmarks: Array<{ landmarkId: string; x: number; y: number; z: number }>; axis: { fromLandmarkId: string; toLandmarkId: string }; cameraSides: Array<{ sideId: string; screenDirection: 'left-to-right' | 'right-to-left' | 'neutral'; lightDirection: string; allowedLandmarkIds: string[] }>; movementPaths: Array<{ pathId: string; fromLandmarkId: string; toLandmarkId: string; direction: string }>; contentHash: CinemaSha256; } export interface CinemaCoverageArtifact { schemaVersion: 1; projectSlug: string; coverageId: string; generatedAt: string; requirements: Array<{ requirementId: string; beatId: string; kind: 'master' | 'action' | 'reaction' | 'insert' | 'reverse'; purpose: string }>; shotAssignments: Array<{ shotId: string; requirementIds: string[]; editorialPurpose: string }>; reversePairs: Array<{ firstShotId: string; reverseShotId: string; axisCompliant: boolean }>; contentHash: CinemaSha256; } export interface CinemaTimedCue { cueId: string; startSeconds: number; endSeconds: number; description: string; } export interface CinemaTimedAudioShot { shotId: string; durationSeconds: number; dialogue: Array; music: CinemaTimedCue[]; sfx: CinemaTimedCue[]; ambience: CinemaTimedCue[]; intentionalSilence: boolean; } export interface CinemaTimedAudioContractArtifact { schemaVersion: 1; projectSlug: string; audioContractId: string; generatedAt: string; shots: CinemaTimedAudioShot[]; contentHash: CinemaSha256; } export interface CinemaProductionContractIssue { code: string; path: string; message: string; } export interface CinemaProductionContractValidation { ok: boolean; issues: CinemaProductionContractIssue[]; }