### `wai.access.services`: caption quality anyone can recompute, audio description and sign language

- **The extension** ([access-services](extensions/access-services.md)) registers the record
  `wai.access.services`. Captions are timed-text's, unchanged; its records are JSON texts in
  the JCS form, each signed with Ed25519 under `wai:access` and named by its SHA-256.
- **Caption quality from the signed revisions.** A caption track's **latency** is each cue's
  first display on the room clock less the capture of its first word: a sources record places
  the words on a take, mapped to the room clock by the take's opening commitment (the take is
  checked to derive from a `record_start` to the commitment's author), or on the room clock as
  its signer states, and the class (`capture`, `stated`, `none`) says which. Its **stability**
  is the revisions after first display and the words they changed; its **accuracy**, the word
  errors of the first revision shown against a reference transcript or the reviewed final
  revision, by a prefix alignment that does not count the words a partial has not reached.
  Words fold ASCII case and edge punctuation, and the alignment walks back by one fixed rule,
  so substitutions, deletions and insertions are the same everywhere. A quality record states
  the figure and names its inputs by digest; a verifier recomputes it (`figure_mismatch`,
  `figure_inputs_mismatch`). §9 maps each figure onto 47 CFR 79.1(j) and (k)(2), the two UK
  regulator statements on live subtitling (2013, 2024) and EBU Tech 3370's authoring delay,
  and says what is not computed (severity grading, speed, placement).
- **Audio description.** A description record holds the script (each event's interval, what
  of the image it describes, its text), the ducking of the programme audio under each event,
  and the voicing, on a separate track or by the sink with a pinned model, the script and the
  voice each labelled human, machine or machine-reviewed. A voice must start within 35 ms
  early and 45 ms late of the end of the duck and end no later than 45 ms after the duck
  starts to rise, DAPT §5.5's bounds (`description_out_of_sync`). The record maps onto a DAPT
  document (W3C Candidate Recommendation Draft of 2026-06-26), written by hand, with the
  ducking as Mixing Instructions on each Script Event and the voice as an Audio Recording or
  Synthesized Audio. A claim reports how much of each description is spoken over captioned
  dialogue, a figure, not a refusal.
- **Sign language.** A signing record binds each object of an avatar pose stream, or of the
  video of a signer, to the final caption revisions it translates, by digest
  (`sign_revision_unknown`, `sign_revision_not_final`); a review signs off the translation.
  Its figures are each segment's delay behind the speech and, for video, whether it meets the
  resolution and frame rate EN 301 549 V4.1.1 clauses 6.5.2 and 6.5.3 state.
- **Completeness.** A claim declares a session's access tracks; a verifier checks each is
  present, finished (every cue resolved, every description voiced, every cue signed), in its
  language and within the tolerances the claim states, its reviews held and not rejected.
- **Reference and corpus.** The `access_services` module of `wai-rs` (feature
  `access_services`) and `live-conformance/access/`, written from fixed seeds by
  `wai_access_services_vectors`: a lesson with human and machine captions, a take, a
  reference, quality records, a voiced description, a motion-captured signer and a claim; a
  reviewed session with a sink-voiced description and a signer's video; a session with no
  sources; and a negative control for every reason of §10, among them a misstated latency, a
  broken revision chain, a signing bound to a superseded revision, descriptions spoken early
  and late, and a claim over a track the verifier does not hold. Its second implementation,
  `live-conformance/access_services_verify.py`, gives every case the same outcome and figures
  and every DAPT document the same bytes, and every mutated copy of the corpus fails.
- **timed-text** §1 now points audio description, which it leaves out of scope, to this
  extension.

