FastTool

Reproducible lab · Synthetic subtitle evidence

Subtitle timing and accessibility boundary benchmark

Exercise the real local SRT/WebVTT engine across safe, blocking, uncertain, malformed and adversarial inputs. The benchmark measures deterministic parser decisions and byte integrity—not language quality, media synchronization or platform acceptance.

Worked synthetic evidenceEvery input is generated and checked in. Results are not customer outcomes, production usage, rankings, independent human certification or a claim that any fixture is an accessible finished caption track.

Engine, sources and results reviewed 2026-08-09. This lab contains no advertising.

26 / 26unit gates passed
70 / 70adversarial expectations matched
445 / 445browser assertions passed
20 / 20independent attacks passed
0false PASS observations
0release blockers

Method

  1. Hash exact core, renderer and synthetic fixture source bytes.
  2. Compute the engine manifest from the core and renderer hashes; abort artifact generation if that identity is absent.
  3. Run the three named fixtures and 70 adversarial cases through the same bounded engine used by the browser.
  4. Generate same-format output, conditional conversion, CSV, JSON, SVG, Markdown and Receipt v1 at a fixed clock.
  5. Repeat artifact generation three times and compare filename, body bytes and SHA-256.
  6. Exercise Chromium and WebKit at desktop, 390 px and 320 px in EN/TR and light/dark: 24 tool cases, 445 assertions.
  7. Mutate one artifact byte and one receipt-core field, then prove the original declared hash no longer matches.

Expected versus observed

ScenarioExpectedObservedEvidence boundary
Supported 3-cue SRT, declared 8 sPASSPASS · 7 artifactsReceipt core 1204f9ff64aac95dc5359d7c7c64259b7b6390ce20cb67105a4f64a81a236b05
Overlap plus cue beyond declared mediaBLOCKBLOCK · 7 artifactsEvery output is review-only; receipt core 9ac24f4089fcf8c24b46b708c6db8b187fdc7168fd87542b8a18e2a55a5267a0
WebVTT STYLE, REGION, settings and dense textINDETERMINATEINDETERMINATE · 6 artifactsUnsupported rendering surfaces remain explicit; receipt core 360825c4bd5085bc7033f99d0f111e0ba424d8024d15eb68f610e3a5f71038d5
Missing media durationINDETERMINATEINDETERMINATEThe engine cannot prove the out-of-media boundary.
WebVTT non-breaking-space timing separatorRejectRejectedinvalid_timing_line; no artifact published.
10,001 cues or input over 5 MiBRejectRejectedBounded input fails closed before delivery output.
WebVTT cue IDs converted to SRTNo lossy conversionConversion withheldSame-format VTT evidence remains available.
Formula and script-shaped cue textInert evidencePASSCSV is formula-neutralized, HTML is inserted as text, and SVG omits raw cue text.

Tamper experiment: integrity fails visibly

Original fixture receipt

Declared receipt-core SHA-256

1204f9ff64aac95dc5359d7c7c64259b7b6390ce20cb67105a4f64a81a236b05

Declared normalized SRT SHA-256

b6a82ed5491773946c10d62df8de6c99016b4b9e6f4cb81ec369f61bb8dc847b

One-field / one-byte mutation

Changing result_summary.cue_count from 3 to 4 recomputes the receipt core as:

322afec69b36dbbed29e648a55dc239070eb0666e41ddeb20d04e977afca87dd

Flipping one byte in the SRT recomputes it as:

d05db1fcecd691c2ce7cad4c240b0add006048fc8b505b8e51d3601938c67ae9

Observed: both mismatches are BLOCK conditions.

This detects integrity drift only. A matching receipt does not establish authorship, source authenticity, factual correctness or accessibility.

Coverage and deliberate uncertainty

Syntax and timing

SRT/WebVTT structure, timestamp grammar, start/end order, source order, overlap, media boundary, gaps and bounded inline timestamps are checked.

Review heuristics

Duration, estimated characters per second, line count and line length are deterministic profile signals. Crossing one requires review; it is not automatically an accessibility failure.

Unsupported surfaces

WebVTT STYLE, REGION, cue settings, markup and identifiers are inventoried. Where faithful rendering or conversion is not proven, the engine returns uncertainty or withholds conversion.

Not measured

Audio accuracy, shot changes, frame-level sync, translation, meaningful non-speech audio, speaker correctness, player rendering, safe area and real-user comprehension.

Exact source and report manifest

Reproduce

shasum -a 256 app/tools/subtitle-qa-studio/index.html \
  app/js/renderers/subtitle-qa-core-20260809.js \
  app/js/renderers/subtitle-qa-20260809.js \
  app/fixtures/subtitle-qa-v1/fixtures.mjs
node scripts/subtitle_qa_unit_20260809.mjs
node scripts/subtitle_qa_browser_20260809.mjs
node scripts/subtitle_qa_independent_redteam_20260809.mjs
node scripts/subtitle_cluster_gate_20260809.mjs

Run from the repository root with Node.js, Chrome/Chromium and Playwright WebKit available. A source change must update its evidence; copying old hashes into new content is a failing provenance condition.

Sources, privacy, limits and correction

Fixtures are synthetic; no user subtitle data is collected by this lab. The linked workbench processes supported bytes locally. Normal static assets and consented analytics may use the network, but user subtitle text, filenames and hashes are excluded from analytics.

Supported input and claim boundaries are detailed in the paired workflow guide. Verify packets with the Receipt Verifier. Report a reproducible defect to corrections@fasttool.app with the scenario, source hash and observed output.