Background
apps/manager coverage still reads local job state instead of the Strapi CMS data that has now been imported from the old media API. As a result, /dashboard/coverage shows fake collections derived from job status rather than canonical collections/videos from CMS, and the coverage flow cannot queue work for existing imported assets.
Expected outcome
/dashboard/coverage reads canonical coverage data from Strapi CMS, renders collections using the existing Video.label + childGatewayIds model, loads language geo data from CMS, and can queue jobs for existing imported videos without changing /dashboard/jobs into a content browser.
Acceptance criteria
Possible solution(s)
- Replace the coverage page's
listJobs() dependency with typed CMS GraphQL queries through @forge/graphql.
- Restore the missing coverage domain modules from the original VideoForge app as a starting point, but map them to CMS-backed reads.
- Extend
POST /api/jobs to accept existing-asset payloads inferred from request shape while keeping the current URL-ingest flow.
References
- docs/plans/2026-03-24-001-feat-manager-coverage-rewire-after-cms-import-plan.md
- apps/manager/src/app/dashboard/coverage/page.tsx
- apps/manager/src/features/coverage/coverage-report-client.tsx
- apps/manager/src/app/api/jobs/route.ts
- videoforge/src/features/coverage/types.ts
Background
apps/managercoverage still reads local job state instead of the Strapi CMS data that has now been imported from the old media API. As a result,/dashboard/coverageshows fake collections derived from job status rather than canonical collections/videos from CMS, and the coverage flow cannot queue work for existing imported assets.Expected outcome
/dashboard/coveragereads canonical coverage data from Strapi CMS, renders collections using the existingVideo.label + childGatewayIdsmodel, loads language geo data from CMS, and can queue jobs for existing imported videos without changing/dashboard/jobsinto a content browser.Acceptance criteria
/dashboard/coveragerenders collections from CMS even when there are no local jobs.GET /api/languagesserves the geo payload expected by the language selector from CMS data.muxAssetId./dashboard/jobsremains a queue/workflow view rather than a content browser.Possible solution(s)
listJobs()dependency with typed CMS GraphQL queries through@forge/graphql.POST /api/jobsto accept existing-asset payloads inferred from request shape while keeping the current URL-ingest flow.References