[Content][Feature] Video captions: 8 media elements lack subtitle/description tracks (S4084, split from a11y epic #732) #777

Open
opened 2026-07-21 19:52:26 +00:00 by spikerj · 1 comment
Owner

The last substantive a11y-tagged findings (Web:S4084 ×8): playground-videos-pane ×2, lesson-video-moderation, country-detail, blog-create, blog-entry, confirm-delete, asset-approval. Videos have no subtitle/description files.

This is CONTENT + FEATURE work, not code cleanup:

  1. Caption tracks need to be produced for platform-owned videos (lesson/playground/geography).
  2. User-uploaded videos (blog) need a caption-upload path (or auto-transcription — the swarm has GPU capacity; whisper-class model as an EventHandler worker would fit the existing pipeline architecture).
  3. The

Split from epic #732 (whose Sonar backlog is otherwise fully dispositioned) so the epic can close.

The last substantive a11y-tagged findings (Web:S4084 ×8): playground-videos-pane ×2, lesson-video-moderation, country-detail, blog-create, blog-entry, confirm-delete, asset-approval. Videos have no <track> subtitle/description files. This is CONTENT + FEATURE work, not code cleanup: 1. Caption tracks need to be produced for platform-owned videos (lesson/playground/geography). 2. User-uploaded videos (blog) need a caption-upload path (or auto-transcription — the swarm has GPU capacity; whisper-class model as an EventHandler worker would fit the existing pipeline architecture). 3. The <video> templates then get <track kind="captions"> wiring. Split from epic #732 (whose Sonar backlog is otherwise fully dispositioned) so the epic can close.
Author
Owner

Audited at file level against origin/masterNOT DONE. 0 of 8.

git grep -n "<track" origin/master across the entire spikersoft-angular repo returns zero hits — not just in templates, in any file type. All eight media elements from the ticket are still present and track-less:

  • libraries/platform/clang-runtime/src/lib/playground-videos-pane.component.html:14 and :52
  • projects/spikersoft/src/app/_components/admin/lesson-video-moderation/lesson-video-moderation.component.html:45
  • projects/spikersoft/src/app/_components/learning/geography-explorer/country-detail/country-detail.component.html:76
  • libraries/features/blog/src/lib/components/blog-create/blog-create.html:173
  • libraries/features/blog/src/lib/components/blog-entry/blog-entry-component.html:228
  • libraries/features/blog/src/lib/components/confirm-delete/confirm-delete.component.html:13
  • projects/spikersoft/src/app/_components/asset-approval/asset-approval.component.html:10

Exactly the ticket's list, unchanged.

Remaining: all three phases — caption production, the blog caption-upload / auto-transcription path, and the <track> wiring itself.

Two observations that might help scope this:

The eight aren't equivalent, and splitting them would unblock most of the value. Three (lesson-video-moderation, asset-approval, confirm-delete) are staff/admin-only preview surfaces — they show uploaded media to a moderator, not to learners. Those arguably need a <track kind="descriptions"> or an explicit exemption rationale rather than authored captions. The learner-facing ones — the two playground-videos-pane elements, country-detail, and the two blog surfaces — are where captions actually matter for the students this platform serves.

The blog pair needs the upload path first. blog-create and blog-entry render user-supplied media, so there's nothing to caption until authors can supply a caption file (or auto-transcription exists). That's the phase-2 dependency, and it means those two can't be closed by template edits alone.

So a reasonable first slice is the four platform-owned learner-facing elements, where the video content is ours and captions can simply be authored.

Audited at file level against `origin/master` — **NOT DONE. 0 of 8.** `git grep -n "<track" origin/master` across the **entire** spikersoft-angular repo returns **zero hits** — not just in templates, in any file type. All eight media elements from the ticket are still present and track-less: - `libraries/platform/clang-runtime/src/lib/playground-videos-pane.component.html:14` and `:52` - `projects/spikersoft/src/app/_components/admin/lesson-video-moderation/lesson-video-moderation.component.html:45` - `projects/spikersoft/src/app/_components/learning/geography-explorer/country-detail/country-detail.component.html:76` - `libraries/features/blog/src/lib/components/blog-create/blog-create.html:173` - `libraries/features/blog/src/lib/components/blog-entry/blog-entry-component.html:228` - `libraries/features/blog/src/lib/components/confirm-delete/confirm-delete.component.html:13` - `projects/spikersoft/src/app/_components/asset-approval/asset-approval.component.html:10` Exactly the ticket's list, unchanged. **Remaining:** all three phases — caption production, the blog caption-upload / auto-transcription path, and the `<track>` wiring itself. Two observations that might help scope this: **The eight aren't equivalent, and splitting them would unblock most of the value.** Three (`lesson-video-moderation`, `asset-approval`, `confirm-delete`) are **staff/admin-only preview surfaces** — they show uploaded media to a moderator, not to learners. Those arguably need a `<track kind="descriptions">` or an explicit exemption rationale rather than authored captions. The learner-facing ones — the two `playground-videos-pane` elements, `country-detail`, and the two blog surfaces — are where captions actually matter for the students this platform serves. **The blog pair needs the upload path first.** `blog-create` and `blog-entry` render user-supplied media, so there's nothing to caption until authors can supply a caption file (or auto-transcription exists). That's the phase-2 dependency, and it means those two can't be closed by template edits alone. So a reasonable first slice is the four platform-owned learner-facing elements, where the video content is ours and captions can simply be authored.
Sign in to join this conversation.