{"record":{"id":"609bc2e885e2d218","repo":"affaan-m/ECC","slug":"pack-genre-has-no-stills-run-mint-py-first","errorCode":null,"errorMessage":"pack '{genre}' has no stills - run mint.py first","messagePattern":"pack '(.+?)' has no stills - run mint\\.py first","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/apply.py","lineNumber":317,"sourceCode":"    tier: str | None = None,\n) -> dict:\n    if fps is not None and (not math.isfinite(fps) or fps <= 0):\n        raise ValueError(\"fps must be finite and positive\")\n    # Fail before uploads/generation, and keep every run's paid originals.\n    from forge import validate_output\n    out_path = Path(out) if out else Path(\"out\") / f\"{genre}_roughcut.mp4\"\n    validate_output(out_path)\n    takes_dir = out_path.parent / f\"{out_path.stem}_takes\"\n    manifest_path = out_path.with_suffix(\".generation.json\")\n    for destination in (takes_dir, manifest_path):\n        if destination.exists() or destination.is_symlink():\n            raise FileExistsError(f\"output already exists; choose a new --out: {destination}\")\n    if tier:\n        falapi.use_tier(\"reference_to_video\", tier)\n    sp = pack_mod.load(genre, root=root)\n    stills = sp.stills()\n    if not stills:\n        raise SystemExit(f\"pack '{genre}' has no stills - run mint.py first\")\n\n    spec = sp.read_json(sp.spec_path)\n    if not spec:\n        print(\n            f\"  !! no spec.json in pack; prompts will rely on --style-steer alone.\\n\"\n            f\"     run: python distill.py --genre {genre}\",\n            file=sys.stderr,\n        )\n\n    grade = grade_mod.load_stats(sp.grade_path) if sp.grade_path.exists() else None\n    cad = cad_mod.load(sp.cadence_path) if sp.cadence_path.exists() else cad_mod.Cadence()\n\n    # Plan TAKES, not shots.\n    #\n    # One generation per shot is the obvious reading of \"match the reference's\n    # cadence\" and it is economically absurd here: this pack averages 0.78s per\n    # shot while the endpoint refuses anything under 4s, so a 10s piece becomes\n    # twelve calls, 48 generated seconds for 10 used (21% efficiency), and","sourceCodeStart":299,"sourceCodeEnd":335,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/apply.py#L299-L335","documentation":"Precondition guard in apply: the pack directory for the requested genre contains no still images, meaning mint.py was never run for that genre; apply aborts before any paid generation to avoid producing a roughcut with no frames.","triggerScenarios":"Thrown at skills/taste-application/scripts/apply.py:317 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run mint.py for the genre first to produce stills","Check --root points at the stylepacks directory that actually contains the pack"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}