Content -> Live Functional Parity Checklist
Functional parity tracker for old ViewliftTools-v2 live flows against cms-v5.
This checklist tracks flow and behavior parity, not transport implementation details.
Old REST behavior is intentionally re-expressed through cms-v5 GraphQL-first service boundaries.
Baseline Sources
ViewliftTools-v2/src/components/Content/LiveStreams.jsxViewliftTools-v2/src/hooks/Content/useContentSettings.jsViewliftTools-v2/src/components/Content/Modals/LiveArchiveVersions.jsxViewliftTools-v2/src/components/Content/Modals/LowLatencyLive.jsxViewliftTools-v2/src/components/Content/ContentEditHeader.jsx
Status Legend
MATCH-> behavior implemented and reachable in activecms-v5pathPARTIAL-> behavior exists but with material gapsMISSING-> behavior not yet implementedINTENTIONAL_CHANGE-> approved UX/architecture modernization
Parity Matrix
| ID | Behavior | Status | Notes / Evidence |
|---|---|---|---|
| LS-001 | Live control surface shown on live detail | MATCH | src/modules/content/details/sections/live-stream/tabs/index.tsx |
| LS-002 | Primary/secondary input URL rendering + labels | MATCH | src/modules/content/details/sections/live-stream/tabs/stream/inputs/index.tsx |
| LS-003 | Stream ID visibility with input rows | MATCH | src/modules/content/details/sections/live-stream/tabs/stream/inputs/index.tsx |
| LS-004 | URL copy affordance per row | MATCH | src/modules/content/details/sections/live-stream/tabs/stream/inputs/index.tsx |
| LS-005 | Egress endpoint copy action | MATCH | src/modules/content/details/sections/live-stream/tabs/stream/inputs/index.tsx |
| LS-006 | Harmonic input Start/Stop per row | INTENTIONAL_CHANGE | per-row Start/Stop control removed from the stream tab; ContentLiveStreamService.updateInputState remains available but is no longer surfaced in the UI |
| LS-007 | Harmonic connect -> discover -> poll -> audio select -> update | MATCH | useLiveAudioGrooming + StreamTab orchestrator |
| LS-008 | Row-level connect/update failure recoverability UX | MATCH | Stream connect failures now converge to Retry Connect with stale discovery context reset and cross-row connect mutex; update failures retain Retry Update + toast coverage |
| LS-009 | Start live CTA wiring | MATCH | src/modules/content/details/sections/live-stream/tabs/index.tsx |
| LS-010 | Stop live CTA wiring | MATCH | src/modules/content/details/sections/live-stream/tabs/index.tsx |
| LS-011 | Publish-before-start gate | MATCH | start action blocked when workflow is not publish in control-surface actions |
| LS-012 | Scheduled/processing start-stop gating parity | MATCH | scheduled status now disables start CTA; processing status remains guarded |
| LS-013 | Workflow status/error surface in channel card | MATCH | uiFlags.liveWorkflowStatus/liveWorkflowMessage |
| LS-014 | CloudFront progress indicator | MATCH | uiFlags.cloudfrontProgress + control surface banner |
| LS-015 | Media alerts visibility on detail | MATCH | stream-monitoring tab |
| LS-016 | Media alerts auto-poll lifecycle | MATCH | detail orchestrator owns processing/status/media-alert poll lifecycle, including v2 terminal/stable status-poll stop rules (FINISHED, IDLE, RUNNING/Harmonic live, DELETED, FAILED) |
| LS-017 | Choose Archive modal visibility from live state | MATCH | LiveArchiveChooser wired through runtime flags |
| LS-018 | Archive Convert -> new VOD flow | MATCH | chooser convert now creates VOD and routes to new content |
| LS-019 | Archive Clip -> VOD flow | INTENTIONAL_CHANGE | deferred in this pass per explicit product decision; clip CTA remains non-destructive |
| LS-020 | Archive preview/download row actions | MATCH | chooser now routes preview/download through tokenization (tokenization.tokenizedUrl), supports multi-URL rows, filters tokenized playback paths, and uses in-app tokenized preview modal |
| LS-021 | Third-party live create submission | MATCH | third-party form + submit wiring restored with payload validation |
| LS-022 | Internal live create (AWS/Harmonic) | MATCH | useLiveCreate with provider-specific payload builders/services |
| LS-023 | GCP provider parity | INTENTIONAL_CHANGE | out of scope for this pass |
| LS-024 | Legacy split tab modules removed from active surface | MATCH | non-registry legacy split tab modules removed from codebase |
Priority Closure Order
- LS-019 (clip flow only if deferred decision is revisited)
Signoff Rule
Parity signoff requires:
- all P0 IDs above moved to
MATCH, and - no active user flow retaining
MISSINGfor operator-critical live actions.
Signoff Evidence (Current Pass)
- Unit/integration verification:
src/__tests__/lib/internal/LiveStreamRuntime/uiFlags.test.tssrc/__tests__/modules/content/details/sections/live-stream/tabs/index.test.tsxsrc/__tests__/modules/content/details/sections/live-stream/actions/archive-chooser.test.tsxsrc/__tests__/modules/content/details/sections/live-stream/tabs/stream-inputs/index.test.tsxsrc/__tests__/modules/content/details/sections/live-stream/tabs/stream/index.test.tsxsrc/__tests__/modules/content/details/sections/live-stream/tabs/audio-grooming/index.test.tsxsrc/__tests__/hooks/content/useLiveAudioGrooming.test.tssrc/__tests__/hooks/content/useLiveArchiveActions.test.tssrc/__tests__/adapters/content/liveArchiveUrls.adapter.test.tssrc/__tests__/services/content/TokenizationService.test.tssrc/__tests__/hooks/content/useLiveCreate.test.tssrc/__tests__/adapters/content/liveArchiveToVodPayload.adapter.test.ts
- E2E smoke entrypoint added:
cypress/e2e/content/smoke.cy.ts
- Residual risk:
- LS-019 is intentionally deferred for this pass by explicit decision