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:
Caption tracks need to be produced for platform-owned videos (lesson/playground/geography).
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).
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.
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
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.
Verified 2026-08-07 against spikersoft-angular@8e5a4048 and spikersoft-backend@98102023. git grep '<track' over the whole Angular
repo returns zero hits — 0 of 8 done. The element list drifted slightly: asset-approval no longer exists
(directory removed) and a new captionless video appeared at blog-photo-details.component.html:126, so the count
is still 8. Live: no caption assets served by learn.spikersoft.com.
Split because the blog pair genuinely cannot be closed by template edits — user-uploaded video has no caption
source until the backend provides an upload or auto-transcription path. The platform-owned learner-facing videos
can proceed independently in Angular right now.
Status: not started, both halves.
Note on the parent: the body says this was split out of a11y epic #732 so that epic could close; #732 is not in the
active epic set, so no epic parent is recorded.
Closing here. Work now lives in the repos that hold the fixes, so fixes #N in a PR will auto-close them on merge. The umbrella tracker keeps cross-repo epics only.
— Opus 5 Agent
Migrated as part of the umbrella-tracker breakup.
This ticket needed changes in more than one repo, so it became one issue per repo:
- Angular: **spikerj/spikersoft-angular#683**
- Backend: **spikerj/spikersoft-backend#571**
Verified 2026-08-07 against `spikersoft-angular@8e5a4048` and `spikersoft-backend@98102023`. `git grep '<track'` over the whole Angular
repo returns **zero hits** — 0 of 8 done. The element list drifted slightly: `asset-approval` no longer exists
(directory removed) and a new captionless video appeared at `blog-photo-details.component.html:126`, so the count
is still 8. Live: no caption assets served by `learn.spikersoft.com`.
Split because the blog pair genuinely cannot be closed by template edits — user-uploaded video has no caption
source until the backend provides an upload or auto-transcription path. The platform-owned learner-facing videos
can proceed independently in Angular right now.
Status: not started, both halves.
Note on the parent: the body says this was split out of a11y epic #732 so that epic could close; #732 is not in the
active epic set, so no epic parent is recorded.
Closing here. Work now lives in the repos that hold the fixes, so `fixes #N` in a PR will auto-close them on merge. The umbrella tracker keeps cross-repo epics only.
— Opus 5 Agent
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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:
Split from epic #732 (whose Sonar backlog is otherwise fully dispositioned) so the epic can close.
Audited at file level against
origin/master— NOT DONE. 0 of 8.git grep -n "<track" origin/masteracross 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:14and:52projects/spikersoft/src/app/_components/admin/lesson-video-moderation/lesson-video-moderation.component.html:45projects/spikersoft/src/app/_components/learning/geography-explorer/country-detail/country-detail.component.html:76libraries/features/blog/src/lib/components/blog-create/blog-create.html:173libraries/features/blog/src/lib/components/blog-entry/blog-entry-component.html:228libraries/features/blog/src/lib/components/confirm-delete/confirm-delete.component.html:13projects/spikersoft/src/app/_components/asset-approval/asset-approval.component.html:10Exactly 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 twoplayground-videos-paneelements,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-createandblog-entryrender 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.
Migrated as part of the umbrella-tracker breakup.
This ticket needed changes in more than one repo, so it became one issue per repo:
Verified 2026-08-07 against
spikersoft-angular@8e5a4048andspikersoft-backend@98102023.git grep '<track'over the whole Angularrepo returns zero hits — 0 of 8 done. The element list drifted slightly:
asset-approvalno longer exists(directory removed) and a new captionless video appeared at
blog-photo-details.component.html:126, so the countis still 8. Live: no caption assets served by
learn.spikersoft.com.Split because the blog pair genuinely cannot be closed by template edits — user-uploaded video has no caption
source until the backend provides an upload or auto-transcription path. The platform-owned learner-facing videos
can proceed independently in Angular right now.
Status: not started, both halves.
Note on the parent: the body says this was split out of a11y epic #732 so that epic could close; #732 is not in the
active epic set, so no epic parent is recorded.
Closing here. Work now lives in the repos that hold the fixes, so
fixes #Nin a PR will auto-close them on merge. The umbrella tracker keeps cross-repo epics only.— Opus 5 Agent