import type { CinemaSha256 } from './cinema-types.js'; export interface CinemaCompactIntake { projectSlug: string; logline: string; runtimeSeconds?: number; genre?: string; tone?: string; audience?: string; format?: string; dialoguePosture?: 'none' | 'sparse' | 'dialogue-led'; heroName?: string; boundaries?: string[]; budgetPosture?: 'exploration' | 'controlled' | 'premium'; } export interface CinemaCreativeAssumption { field: string; value: string | number; reason: string; } export interface CinemaCreativeContractArtifact { schemaVersion: 1; projectSlug: string; contractId: string; generatedAt: string; premise: string; runtimeSeconds: number; genre: string; tone: string; audience: string; format: string; dialoguePosture: 'none' | 'sparse' | 'dialogue-led'; boundaries: string[]; budgetPosture: 'exploration' | 'controlled' | 'premium'; assumptions: CinemaCreativeAssumption[]; contentHash: CinemaSha256; } export interface CinemaCharacterStoryProfile { characterId: string; name: string; objective: string; want: string; need: string; contradiction: string; movement: string; stillness: string; stressBehavior: string; currentArcState: string; } export interface CinemaAudienceRecognitionMilestone { milestoneId: string; characterId: string; fromLookId: string; toLookId: string; earnedByBeatId: string; rationale: string; } export interface CinemaStoryBeat { beatId: string; act: 'setup' | 'confrontation' | 'resolution'; purpose: string; change: string; characterIds: string[]; setupIds: string[]; payoffIds: string[]; } export interface CinemaStoryScene { sceneId: string; act: 'setup' | 'confrontation' | 'resolution'; beatIds: string[]; purpose: string; expectedChange: string; durationSeconds: number; } export interface CinemaStoryBibleArtifact { schemaVersion: 1; projectSlug: string; storyId: string; generatedAt: string; creativeContractHash: CinemaSha256; theme: string; dramaticQuestion: string; opposition: string; stakes: string; characters: CinemaCharacterStoryProfile[]; beats: CinemaStoryBeat[]; scenes: CinemaStoryScene[]; recognitionMilestones: CinemaAudienceRecognitionMilestone[]; ending: string; contentHash: CinemaSha256; } export interface CinemaStorySeed { theme?: string; dramaticQuestion?: string; opposition?: string; stakes?: string; hero?: Partial>; ending?: string; majorLookChange?: { fromLookId: string; toLookId: string; rationale: string }; } export interface CinemaStoryBlueprint { creativeContract: CinemaCreativeContractArtifact; storyBible: CinemaStoryBibleArtifact; } export interface CinemaStoryIssue { code: string; path: string; message: string; } export interface CinemaStoryValidation { ok: boolean; issues: CinemaStoryIssue[]; }