/** * Scene headcount lint — pure/deterministic, no I/O. * * Production-learned: a video model treats an unbounded plural as licence to * invent people. The phrase that broke a 37-shot film was * * "@A and @B, with four more women in silk sarees behind them, walk abreast" * * which has no identity, no count and no position for the "four more". The * renders came back with duplicated leads, invented cast, and figures walking * in from frame edges mid-clip — eight clips discarded. * * The standing render rules already appended "no duplicates or extra figures" * to every prompt and the model IGNORED it. Negative prohibitions do not bind; * a positive count does. What fixed it: * * "exactly two women are in frame, @A and @B ... the corridor beyond them is * empty. Medium, 35mm" * * — an exact count, the background described as empty rather than forbidden, * and a longer lens so there is no vacant frame left to populate. */ export type SceneHeadcountCode = 'unbounded-crowd' | 'missing-explicit-count' | 'wide-multi-subject'; export interface SceneHeadcountFinding { sceneIndex: number; code: SceneHeadcountCode; severity: 'error' | 'warning'; message: string; /** The matched text, so the operator can see exactly what tripped the rule. */ evidence?: string; } export interface SceneHeadcountResult { ok: boolean; errorCount: number; warningCount: number; findings: SceneHeadcountFinding[]; } export interface SceneHeadcountInput { sceneIndex: number; description: string; /** Storyboard cast field. Often absent — `--scene` authoring never sets it. */ characters?: string[]; /** Character names this scene references by @tag (caller resolves these). */ taggedCharacters?: string[]; } /** * Lint scenes for headcount hazards. Errors are unambiguous defects (an * unbounded plural); warnings are prompts that will probably survive but carry * the risk that produced the original failure. */ export declare function lintSceneHeadcount(scenes: SceneHeadcountInput[]): SceneHeadcountResult; //# sourceMappingURL=scene-headcount.d.ts.map