{"abstract":"Short WebVTT timestamps contain a comma and are rejected by players.","category":"Subtitle cue timing","checks":9,"contract":"Format integer milliseconds as a cue timestamp. Negative values clamp to 0. style \"srt\" gives HH:MM:SS,mmm (hours at least two digits, never wrapped); style \"vtt\" gives MM:SS.mmm when the hour field is zero and HH:MM:SS.mmm otherwise.","contract_signature":"ms, style","evaluation_group":"w2-subtitle-cue-timing-timestamp-format","failed_approach":"Switching to a period but dropping the minute padding writes 5:03.000, which the contract forbids.","family":"w2-subtitle-cue-timing-timestamp-format-vtt-short-separator","id":"FA-77886","implementations":{"attempt":{"sha256":"314435d758ef3437e37bf1383af12abb2eb6b9a59d67ab75bae353b682fd21aa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ms, style):\n    if ms<0: ms=0\n    h=ms//3600000\n    m=(ms-h*3600000)//60000\n    s=ms//1000%60\n    f=ms%1000\n    if style=='srt':\n        return '%02d:%02d:%02d,%03d'%(h,m,s,f)\n    if h==0:\n        return '%d:%02d.%03d'%(m,s,f)\n    return '%02d:%02d:%02d.%03d'%(h,m,s,f)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: vtt short separator', [0, 'vtt'], '00:00.000'), ('regression variant: vtt short separator', [353272, 'vtt'], '05:53.272'), ('partial repair probe: vtt short separator', [-999, 'vtt'], '00:00.000'), ('partial repair variant: vtt short separator', [110, 'vtt'], '00:00.110'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('normal control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [7834, 'srt'], '00:00:07,834'), ('normal control', [4082731, 'srt'], '01:08:02,731')], [('regression: vtt short separator', [3599999, 'vtt'], '59:59.999'), ('regression variant: vtt short separator', [60000, 'vtt'], '01:00.000'), ('partial repair probe: vtt short separator', [353272, 'vtt'], '05:53.272'), ('partial repair variant: vtt short separator', [61977, 'vtt'], '01:01.977'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [274754132, 'srt'], '76:19:14,132'), ('normal control', [334598, 'srt'], '00:05:34,598'), ('normal control', [60000, 'srt'], '00:01:00,000')], [('regression: vtt short separator', [61001, 'vtt'], '01:01.001'), ('regression variant: vtt short separator', [55880, 'vtt'], '00:55.880'), ('partial repair probe: vtt short separator', [60000, 'vtt'], '01:00.000'), ('partial repair variant: vtt short separator', [153727, 'vtt'], '02:33.727'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('normal control', [5, 'srt'], '00:00:00,005'), ('normal control', [360000000, 'srt'], '100:00:00,000'), ('normal control', [-1000, 'srt'], '00:00:00,000')], [('regression: vtt short separator', [3192469, 'vtt'], '53:12.469'), ('regression variant: vtt short separator', [11761, 'vtt'], '00:11.761'), ('partial repair probe: vtt short separator', [55880, 'vtt'], '00:55.880'), ('partial repair variant: vtt short separator', [37938, 'vtt'], '00:37.938'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('normal control', [3509491, 'srt'], '00:58:29,491'), ('normal control', [3441818, 'srt'], '00:57:21,818'), ('normal control', [22968, 'srt'], '00:00:22,968')], [('regression: vtt short separator', [-999, 'vtt'], '00:00.000'), ('regression variant: vtt short separator', [-5000, 'vtt'], '00:00.000'), ('partial repair probe: vtt short separator', [11761, 'vtt'], '00:11.761'), ('partial repair variant: vtt short separator', [37617, 'vtt'], '00:37.617'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [3673366, 'srt'], '01:01:13,366'), ('normal control', [3854981, 'srt'], '01:04:14,981'), ('normal control', [65993, 'srt'], '00:01:05,993')]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"45217aa5f3966d4d67716f0f9faab62ff6bf8442efdcec11417d221fe58a9286","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ms, style):\n    if ms<0: ms=0\n    h=ms//3600000\n    m=(ms-h*3600000)//60000\n    s=ms//1000%60\n    f=ms%1000\n    if style=='srt':\n        return '%02d:%02d:%02d,%03d'%(h,m,s,f)\n    if h==0:\n        return '%02d:%02d,%03d'%(m,s,f)\n    return '%02d:%02d:%02d.%03d'%(h,m,s,f)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: vtt short separator', [0, 'vtt'], '00:00.000'), ('regression variant: vtt short separator', [353272, 'vtt'], '05:53.272'), ('partial repair probe: vtt short separator', [-999, 'vtt'], '00:00.000'), ('partial repair variant: vtt short separator', [110, 'vtt'], '00:00.110'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('normal control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [7834, 'srt'], '00:00:07,834'), ('normal control', [4082731, 'srt'], '01:08:02,731')], [('regression: vtt short separator', [3599999, 'vtt'], '59:59.999'), ('regression variant: vtt short separator', [60000, 'vtt'], '01:00.000'), ('partial repair probe: vtt short separator', [353272, 'vtt'], '05:53.272'), ('partial repair variant: vtt short separator', [61977, 'vtt'], '01:01.977'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [274754132, 'srt'], '76:19:14,132'), ('normal control', [334598, 'srt'], '00:05:34,598'), ('normal control', [60000, 'srt'], '00:01:00,000')], [('regression: vtt short separator', [61001, 'vtt'], '01:01.001'), ('regression variant: vtt short separator', [55880, 'vtt'], '00:55.880'), ('partial repair probe: vtt short separator', [60000, 'vtt'], '01:00.000'), ('partial repair variant: vtt short separator', [153727, 'vtt'], '02:33.727'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('normal control', [5, 'srt'], '00:00:00,005'), ('normal control', [360000000, 'srt'], '100:00:00,000'), ('normal control', [-1000, 'srt'], '00:00:00,000')], [('regression: vtt short separator', [3192469, 'vtt'], '53:12.469'), ('regression variant: vtt short separator', [11761, 'vtt'], '00:11.761'), ('partial repair probe: vtt short separator', [55880, 'vtt'], '00:55.880'), ('partial repair variant: vtt short separator', [37938, 'vtt'], '00:37.938'), ('boundary control', [0, 'srt'], '00:00:00,000'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('normal control', [3509491, 'srt'], '00:58:29,491'), ('normal control', [3441818, 'srt'], '00:57:21,818'), ('normal control', [22968, 'srt'], '00:00:22,968')], [('regression: vtt short separator', [-999, 'vtt'], '00:00.000'), ('regression variant: vtt short separator', [-5000, 'vtt'], '00:00.000'), ('partial repair probe: vtt short separator', [11761, 'vtt'], '00:11.761'), ('partial repair variant: vtt short separator', [37617, 'vtt'], '00:37.617'), ('boundary control', [-1, 'srt'], '00:00:00,000'), ('boundary control', [3600000, 'vtt'], '01:00:00.000'), ('normal control', [3673366, 'srt'], '01:01:13,366'), ('normal control', [3854981, 'srt'], '01:04:14,981'), ('normal control', [65993, 'srt'], '00:01:05,993')]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model with a stipulated toy contract; it does not claim conformance to any subtitle standard. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-subtitle-cue-timing-timestamp-format-vtt-short-separator","generated_at":"2026-09-29T14:49:30.060036+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Subtitle timing defects shift, hide or overlap captions that viewers depend on for comprehension and accessibility.","root_cause":"The short WebVTT branch reuses the SRT comma before the milliseconds.","sha256":"f28b5e51fe996247191d186fc65acba1758d3ac578b83540e64507bcffefc994","title":"SRT and WebVTT timestamp formatting: vtt short separator · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.111,"exit_code":1,"observations":[{"actual":"0:00.000","check":"regression: vtt short separator","expected":"00:00.000","passed":false},{"actual":"5:53.272","check":"regression variant: vtt short separator","expected":"05:53.272","passed":false},{"actual":"0:00.000","check":"partial repair probe: vtt short separator","expected":"00:00.000","passed":false},{"actual":"0:00.110","check":"partial repair variant: vtt short separator","expected":"00:00.110","passed":false},{"actual":"00:00:00,000","check":"boundary control","expected":"00:00:00,000","passed":true},{"actual":"00:00:00,000","check":"boundary control","expected":"00:00:00,000","passed":true},{"actual":"01:00:00.000","check":"normal control","expected":"01:00:00.000","passed":true},{"actual":"00:00:07,834","check":"normal control","expected":"00:00:07,834","passed":true},{"actual":"01:08:02,731","check":"normal control","expected":"01:08:02,731","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: vtt short separator\", \"actual\": \"0:00.000\", \"expected\": \"00:00.000\", \"passed\": false}, {\"check\": \"regression variant: vtt short separator\", \"actual\": \"5:53.272\", \"expected\": \"05:53.272\", \"passed\": false}, {\"check\": \"partial repair probe: vtt short separator\", \"actual\": \"0:00.000\", \"expected\": \"00:00.000\", \"passed\": false}, {\"check\": \"partial repair variant: vtt short separator\", \"actual\": \"0:00.110\", \"expected\": \"00:00.110\", \"passed\": false}, {\"check\": \"boundary control\", \"actual\": \"00:00:00,000\", \"expected\": \"00:00:00,000\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"00:00:00,000\", \"expected\": \"00:00:00,000\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"01:00:00.000\", \"expected\": \"01:00:00.000\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:07,834\", \"expected\": \"00:00:07,834\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"01:08:02,731\", \"expected\": \"01:08:02,731\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.896,"exit_code":1,"observations":[{"actual":"00:00,000","check":"regression: vtt short separator","expected":"00:00.000","passed":false},{"actual":"05:53,272","check":"regression variant: vtt short separator","expected":"05:53.272","passed":false},{"actual":"00:00,000","check":"partial repair probe: vtt short separator","expected":"00:00.000","passed":false},{"actual":"00:00,110","check":"partial repair variant: vtt short separator","expected":"00:00.110","passed":false},{"actual":"00:00:00,000","check":"boundary control","expected":"00:00:00,000","passed":true},{"actual":"00:00:00,000","check":"boundary control","expected":"00:00:00,000","passed":true},{"actual":"01:00:00.000","check":"normal control","expected":"01:00:00.000","passed":true},{"actual":"00:00:07,834","check":"normal control","expected":"00:00:07,834","passed":true},{"actual":"01:08:02,731","check":"normal control","expected":"01:08:02,731","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: vtt short separator\", \"actual\": \"00:00,000\", \"expected\": \"00:00.000\", \"passed\": false}, {\"check\": \"regression variant: vtt short separator\", \"actual\": \"05:53,272\", \"expected\": \"05:53.272\", \"passed\": false}, {\"check\": \"partial repair probe: vtt short separator\", \"actual\": \"00:00,000\", \"expected\": \"00:00.000\", \"passed\": false}, {\"check\": \"partial repair variant: vtt short separator\", \"actual\": \"00:00,110\", \"expected\": \"00:00.110\", \"passed\": false}, {\"check\": \"boundary control\", \"actual\": \"00:00:00,000\", \"expected\": \"00:00:00,000\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"00:00:00,000\", \"expected\": \"00:00:00,000\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"01:00:00.000\", \"expected\": \"01:00:00.000\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:07,834\", \"expected\": \"00:00:07,834\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"01:08:02,731\", \"expected\": \"01:08:02,731\", \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}