{"record":{"id":"d1159c6bba915a7f","repo":"babysor/MockingBird","slug":"no-valid-cues-parsed-from-srt","errorCode":null,"errorMessage":"No valid cues parsed from SRT.","messagePattern":"No valid cues parsed from SRT\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"skills/speak/scripts/render_timeline.py","lineNumber":87,"sourceCode":"    cues: List[Cue] = []\n    for block in blocks:\n        lines = [ln.rstrip() for ln in block.splitlines() if ln.strip()]\n        if len(lines) < 3:\n            continue\n        try:\n            idx = int(lines[0])\n        except ValueError:\n            continue\n        if \"-->\" not in lines[1]:\n            continue\n        start_raw, end_raw = [s.strip() for s in lines[1].split(\"-->\", 1)]\n        start_ms = parse_timestamp_ms(start_raw)\n        end_ms = parse_timestamp_ms(end_raw)\n        text = \"\\n\".join(lines[2:]).strip()\n        if text:\n            cues.append(Cue(index=idx, start_ms=start_ms, end_ms=end_ms, text=text))\n    if not cues:\n        raise ValueError(\"No valid cues parsed from SRT.\")\n    return cues\n\n\n# ── Voice map resolution ─────────────────────────────────────────────\n\n\ndef parse_segment_key(key: str) -> Tuple[int, int]:\n    key = key.strip()\n    if \"-\" in key:\n        left, right = key.split(\"-\", 1)\n        return int(left), int(right)\n    v = int(key)\n    return v, v\n\n\ndef resolve_segment_cfg(index: int, config: Dict[str, Any]) -> Dict[str, Any]:\n    merged = dict(config.get(\"default\", {}))\n    for key, seg_cfg in config.get(\"segments\", {}).items():","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/babysor/MockingBird/blob/28dc5e14f12d7c754612af2fde8e78a4b03f8616/skills/speak/scripts/render_timeline.py#L69-L105","documentation":"ValueError raised by parse_srt when no cue with non-empty text was successfully extracted from the file. Even if the file had blocks, all were skipped because their text lines were empty, so there is nothing to render.","triggerScenarios":"An SRT containing only blank text lines per cue, a file whose block regex never matched (wrong formatting/blank-line separators), or an effectively empty file that still read successfully.","commonSituations":"Placeholder SRT generated by a failed upstream transcription step, CRLF/blank-line issues preventing block detection, or pointing --srt at the wrong file.","solutions":["Inspect the SRT structure: numbered index, timestamp line, text line, blank separator per block","Verify the file is the intended subtitle and non-trivial","Regenerate the SRT from its source (transcription/translation tool)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"content = Path(srt).read_text(encoding='utf-8', errors='replace')\nassert content.count('-->') > 0, 'no cue ranges found in SRT'","typeGuard":null,"tryCatchPattern":"try:\n    cues = parse_srt(path)\nexcept ValueError:\n    sys.exit(f'{path} has no usable cues; check formatting')","preventionTips":["Spot-check SRT structure before rendering","Regenerate from source when in doubt","Verify upstream transcription produced output"],"tags":["srt","parsing","subtitle","empty-input"],"backgroundTag":"no-parsable-records","analyzedSha":"28dc5e14f12d7c754612af2fde8e78a4b03f8616","analyzedAt":"2026-08-27T02:26:53.589Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}