User value
Operators need preview results to predict whether a live M3U-refresh run will create a channel or defer it behind Pending Merges. Today dry run bypasses the pending-merge decision, so preview can promise creation while the live run defers the same stream.
Follow-up to #1015 and PR #1016. This issue owns only dry-run visibility; queue expiry, sticky dismissal, and the airing-matcher fixes remain outside its scope.
Required behavior
- Dry-run channel-pipeline results surface when a stream would be deferred by an existing pending-merge row.
- Preview remains mutation-free: it must not insert, update, dismiss, or resolve pending-merge rows.
- Results identify the blocking row IDs and use the same stream/action/row units as live-run reporting.
- Preview and live execution agree on create-versus-defer for the same persisted queue state.
- Operator-facing wording clearly marks the outcome as predicted rather than applied.
Acceptance criteria
- A dry run with an existing matching pending row predicts deferral, reports the authoritative row ID, and does not predict channel creation.
- Fresh and collision/reuse queue states produce consistent predicted results without database mutation.
- A dry run with no blocking pending row preserves the current create prediction.
- Retained integration coverage crosses persisted
PendingMerge state through executor, engine, and preview response.
- Tests assert the pending-merge table is byte-for-byte or semantically unchanged after preview.
- User-facing documentation describes the preview behavior and its mutation-free guarantee.
Success signal
For identical rules, streams, channels, and pending-merge rows, preview and the subsequent live run report the same create-versus-defer decision, while preview leaves queue state unchanged.
User value
Operators need preview results to predict whether a live M3U-refresh run will create a channel or defer it behind Pending Merges. Today dry run bypasses the pending-merge decision, so preview can promise creation while the live run defers the same stream.
Follow-up to #1015 and PR #1016. This issue owns only dry-run visibility; queue expiry, sticky dismissal, and the airing-matcher fixes remain outside its scope.
Required behavior
Acceptance criteria
PendingMergestate through executor, engine, and preview response.Success signal
For identical rules, streams, channels, and pending-merge rows, preview and the subsequent live run report the same create-versus-defer decision, while preview leaves queue state unchanged.