Repository navigation
Description
Current main status — 2026-08-16
GitHub main at 88b81fb contains delivered local XMLTV functionality across fd1e556, e7c1168, 519828e, 6fa6797, and 88b81fb: local .xml, gzip, and single-entry ZIP ingestion; streaming validation with DTD/external-entity protections and bounded decompressed input; Programme and evidence/provenance records; deterministic merge; deterministic XMLTV export; and Build-Lineup integration with fail-closed publication.
Recent comments that describe source catalogs, preflight or web surfaces, source-metadata reconciliation, SQLite/cache, or 884/884 validation refer to dirty or disposable worktree state and are not implementation evidence for main. Historical comments remain unchanged for auditability; this section is the authoritative mainline status.
Remaining #40 ownership is the broader EPG parent scope: canonical station identity and channel/guide binding; coverage and fit analysis; source quality, freshness, and conflict reporting; provider/catalog and guide-adapter concerns; scheduling/refresh; mirrors and rights; and broader downstream EPG behavior.
#89 owns XMLTV remote acquisition/transport/cache work. #88 owns provider M3U live fetch and remains separate.
Mission
Build a provider-neutral EPG Acquisition and Merge pipeline for traditional linear channels that can fetch, validate, normalize, compare, and deterministically merge multiple XMLTV/guide lineups while preserving station identity, provenance, freshness, and user policy.
Gracenote2XML is a useful research reference for scheduled guide acquisition, account/lineup configuration, multiple-lineup merging, timespan/timezone controls, station/callsign ordering, and client-specific XMLTV output options. ChannelForge must implement a lawful, source-neutral architecture and must not require that container, Gracenote, Zap2it, or any single upstream service.
Acquire guides safely, preserve identity, merge with evidence, and never hide conflicts behind one convenient XML file.
Product outcomes
A user should be able to:
- Add one or more XMLTV files, URLs, or supported guide-provider connections.
- Test access and preview lineup/station coverage before saving.
- Schedule safe refreshes with source-aware intervals and bounded retries.
- See freshness, completeness, overlap, conflicts, and unmapped stations.
- Merge sources deterministically according to explicit policies.
- Preserve stable station identity across lineup renames, number changes, and source refreshes.
- Publish validated, atomic XMLTV output suitable for supported downstream clients.
- See an explicit per-source outcome (Fetched, CacheHit, Stale, Failed, or NeedsReview) when an upstream source fails or returns stale data, rather than a silently substituted 'good enough' result.
Guide catalog and fit analysis
Provide a catalog layer for discovering user-authorized public, private, and local guide feeds without confusing catalog metadata with guide truth.
Catalog entries may be organized by:
- country, continent, market, postal/lineup context, language, or theme
- standard station-ID/callsign edition
- IPTV-friendly channel-name-plus-country ID edition
- individual market, country, continent, or combined/full guide
- look-back/look-ahead horizon such as 3, 7, or 14 days
- XML/XMLTV and supported compressed variants
- generation method/source family
- mirror or alternate delivery endpoint
Each entry should expose a machine-readable manifest where available or derived safely:
- stable catalog/source ID
- display name and geographic/market coverage
- channel count and identifier scheme
- sample or complete channel manifest without downloading all programme data when possible
- programme coverage start/end
- generated/updated time, content length, hash, and compression
- source family and mirror relationship
- intended-use, licensing, redistribution, and attribution terms
- expected refresh cadence
- availability/health history
- schema/parser warnings
- supported compatibility profiles
Fit analyzer
Compare catalog manifests against the user's canonical lineup before subscription:
- exact canonical-station coverage
- exact and candidate
tvg-id/station-ID coverage - callsign/name candidates requiring review
- missing lineup channels
- extra guide channels
- market/regional conflicts
- duplicated coverage across selected guides
- estimated programme window and download/storage cost
- rights or intended-use incompatibility
Recommend the smallest suitable guide or combination that meets the user's coverage and horizon needs. A country or market guide should normally be preferred over a continent/full guide when coverage is equivalent, reducing downloads, parsing, storage, and conflict surface.
Never silently switch identifier schemes. Standard station-ID/callsign and IPTV-friendly channelname.countrycode editions must be represented as explicit compatibility choices with a preview of expected mapping changes.
Mirrors and resilience
- model mirrors as alternate delivery endpoints for one logical source
- fail over between mirrors only when terms and content identity permit
- verify content/hash/generation metadata before treating mirrors as equivalent
- do not count agreement between mirrors of the same generated guide as independent evidence
- avoid duplicate downloads and duplicate programme evidence
- preserve the last-known-good endpoint/content during outages
- show mirror divergence as a source-integrity warning
Catalog UX
- search and filter guides by geography, market, language, theme, horizon, format, identifier scheme, rights, and health
- preview channels before adding a guide
- show predicted lineup coverage and unresolved mappings
- compare candidate guides side by side
- copy or save a source definition without exposing credentials
- warn before selecting oversized full guides or incompatible intended-use terms
- keep user/private catalog entries local unless explicitly exported
Source types
Support a common EpgSource boundary for:
- local XMLTV files
- remote XMLTV URLs
- compressed XMLTV variants
- generated XMLTV outputs
- authenticated guide-provider adapters where lawful and maintainable
- multiple lineups/accounts from the same provider
- supplemental sources that contribute only selected stations or programme fields
Every adapter must declare capabilities such as:
- lineup discovery
- station discovery
- programme window limits
- incremental fetch support
- authentication method
- timezone semantics
- source-provided identifiers
- image/metadata fields
- rate-limit and refresh guidance
- terms/licensing notes requiring user acknowledgment where applicable
Normal XMLTV ingestion must not require any provider adapter.
Provider interface
Define a contract equivalent to:
EpgSourceProvider
id
capabilities()
validateConfiguration()
testConnection()
discoverLineups() # optional
discoverStations(lineup) # optional
fetch(window, cursor, conditionalHeaders)
checkpoint()
health()
Requirements:
- bounded time windows and response sizes
- conditional requests where supported
- pagination/incremental cursors where supported
- explicit timezone and locale behavior
- idempotent replay
- structured authentication, authorization, rate-limit, malformed-data, and transient errors
- cancellation, timeouts, backoff, and jitter
- adapter/source version in provenance
- no provider-specific types beyond the adapter boundary
Canonical station identity
Normalize guide channels into stable station candidates using evidence such as:
- source station ID
- Gracenote/TMS or other authoritative IDs when lawfully supplied
- XMLTV channel ID
- callsign
- affiliate/network
- channel number and subchannel
- country, market, postal/lineup context
- language
- normalized display names
- historical identity and user-approved mappings
Rules:
- keep external IDs namespaced by authority/source
- never assume equal numeric IDs from different authorities are equivalent
- callsign/name matching is supporting evidence, not proof across markets
- lineup channel-number changes should not create a new station when stronger identity evidence agrees
- ambiguous station merges require review
- preserve aliases and identifier history with provenance
- allow split, merge, pin, and rollback
This complements the channel identity and Match Inspector work in #25 and #27.
Programme normalization
Preserve and normalize, where available:
- title, subtitle, description
- start/stop timestamps and original timezone/offset evidence
- categories/genres
- episode numbering systems
- new/live/premiere/finale/rerun flags
- ratings and advisories
- credits
- language
- icon/artwork references
- source programme/series IDs
- station identity
- source fetch time and provenance
Do not invent missing programme facts. Output transformations such as appending markers to titles must be optional presentation policies, never modifications to canonical facts.
Multi-lineup merge
Merge station and programme data using explicit, deterministic policies.
Station merge
- detect exact authoritative-ID agreement
- preserve lineup-specific numbers and aliases
- identify duplicate, overlapping, and conflicting station candidates
- allow source/field priority by station, market, or lineup
- retain all contributing sources and reason codes
Programme merge
- identify candidate duplicates by canonical station, time interval, IDs, and normalized programme identity
- distinguish true duplicates from adjacent episodes, overruns, regional variants, and schedule corrections
- resolve field differences by explicit priority, freshness, completeness, and trust policy
- retain contradictory evidence
- avoid counting mirrored copies as independent corroboration
- allow supplemental sources to fill missing fields without replacing stronger canonical values
- never silently discard a conflict that could materially change what the guide shows
Source quality and coverage
Track per source/lineup:
- last attempt and success
- data generation time when available
- coverage start/end
- station count
- programme count
- empty/invalid station rate
- gaps and overlaps
- timestamp validity
- identifier stability
- schema/parse warnings
- agreement and contradiction with other sources
- historical freshness and correctness evidence
- credential/rate-limit/availability state
Present quality as explainable dimensions rather than one opaque score. Source popularity or repetition does not prove correctness.
Refresh scheduling
- choose safe defaults from source guidance, cache headers, and coverage window
- support configurable look-back and look-ahead windows
- refresh before coverage expires
- use conditional fetches and content hashes
- add bounded jitter and exponential backoff
- avoid synchronized refreshes across lineups
- respect provider limits and account/lineup constraints
- on authentication, network, parsing, or merge failure, resolve the source to Failed or NeedsReview; retain the prior validated evidence record for inspection/rollback, but never republish it as current successful output
- validate complete candidate output before replacing active state
- support manual refresh, cancellation, progress, partial success, and degraded mode
- do not require the GUI to remain open
Related unattended operation: #35.
XMLTV validation and security
Treat every guide as hostile input:
- streaming parse for large documents
- prohibit external entity expansion and unsafe DTD/network resolution
- bound nesting, text/attribute sizes, channel/programme counts, decompression ratio, total bytes, and parse duration
- validate timestamp syntax/ranges and reject pathological intervals
- sanitize URLs and image references
- validate gzip/zip content and prevent archive traversal
- reject unsupported content types safely
- redact credentials, signed URLs, cookies, headers, and source paths from logs/diagnostics
- store credentials only in the existing secret mechanism
- apply SSRF and outbound-host policy to remote sources/adapters
- use atomic staging and publication
- preserve a sanitized validation report and source hash, not secrets or unnecessary raw account responses
Rights and provider policy
- document the source, access method, refresh limits, and intended-use constraints
- require the user to supply and authorize their own credentials where needed
- do not bypass paywalls, authentication controls, rate limits, CAPTCHAs, or technical restrictions
- do not ship shared credentials
- do not imply that guide data, station metadata, or artwork may be redistributed merely because it is technically retrievable
- keep proprietary provider adapters optional and independently disableable
- allow lawful user-supplied XMLTV to remain the universal path
- provide deletion/export controls for cached provider data and credentials
Source stewardship and retirement
Guide catalogs and endpoints can outlive, lose, or change maintainers. ChannelForge must model that as an operational and trust-boundary event, not as permission to take over or redistribute the source.
- Record publicly documented project stewardship, repository/archive state, endpoint identity, source family, licensing/intended-use evidence, attribution, expected cadence, last success, and last verified content hash.
- Never store private biographical or social-media details about maintainers.
- Treat a maintainer's absence or death as neither proof that a service is abandoned nor a change to copyright, license, attribution, personal-use, or redistribution terms.
- Distinguish an outage from a stale source, deliberate retirement, archive, successor-operated continuation, unexpected ownership transfer, and suspected compromise.
- Revalidate redirects, domains, certificates, signing keys, repository/package ownership, content structure, and terms before trusting a successor endpoint.
- Do not automatically grant a new owner the prior source's trust score or treat a renamed/rehosted feed as identical without verifiable provenance and content identity.
- Pin optional generators and containers to reviewed versions or immutable digests; do not make a mutable image tag or personal account part of normal operation.
- Provide disable, replace, export, and migration workflows while preserving canonical station mappings and rights-permitted last-known-good data.
- Recommend alternate sources based on coverage, rights compatibility, health, and identifier fit; never silently substitute a source with materially different terms.
- Cross-link lifecycle detection, degraded operation, and notification behavior to Autonomous Operations — scheduled refresh, multi-guide learning, source drift detection, and zero-touch maintenance #35.
Output compatibility profiles
Keep one canonical internal representation and apply explicit output profiles only at serialization time.
Profiles may control:
- channel ordering by number, callsign, display name, or station ID
- display-name ordering/selection
- episode-number element ordering
- optional live/new markers
- timezone/offset serialization
- icon handling
- past/future programme window
- deterministic channel/programme ordering
- compression and filename
Requirements:
- defaults follow XMLTV conventions
- profiles are named, versioned, previewable, and testable
- transformations are visible in the build report
- no client-specific behavior contaminates canonical storage
- identical canonical data and profile version produce byte-stable output where practical
GUI
Provide a guided workflow:
- Choose source type.
- Enter location/credentials using secret-safe controls.
- Test connection.
- Discover/select lineups or validate the XMLTV source.
- Preview stations, coverage, timezone, freshness, and warnings.
- Choose a recommended refresh/window policy.
- Review overlaps and merge policy.
- Save and run an initial staged import.
Default health view:
- source status and coverage horizon
- last/next refresh
- stations/programmes imported
- gaps, conflicts, and unmapped stations
- per-source outcome state (Fetched/CacheHit/Stale/Failed/NeedsReview)
- items needing review
Advanced mode may expose field priorities, window controls, serialization profiles, and adapter diagnostics.
Non-goals
- Making Gracenote, Zap2it, Gracenote2XML, or any proprietary guide service mandatory.
- Shipping or sharing upstream-service credentials.
- Circumventing provider access controls or terms.
- Replacing a commercial guide-data license.
- Treating source-specific station IDs as globally universal.
- Flattening conflicting sources without provenance.
- Editing canonical titles merely to satisfy a client display preference.
- Loading untrusted XML with external entities or unbounded decompression.
- Making guide acquisition dependent on Docker.
- Combining sports schedule providers with linear EPG adapters behind one misleading interface; they may share canonical evidence models while retaining distinct source contracts.
Phased delivery
Phase 0 - contracts, XMLTV profile, and threat model
- Define
EpgSourceProvider, source capabilities, provenance, error taxonomy, and source lifecycle/trust states. - Define the canonical station/programme model and supported XMLTV subset/extensions.
- Threat-model XML, compressed input, remote fetches, credentials, and proprietary providers.
- Create sanitized multi-lineup fixtures with conflicts, gaps, malformed data, and timezone cases.
Phase 1 - universal XMLTV ingestion
- Add local/remote/compressed XMLTV sources.
- Implement streaming validation, structural inventory, content hashing, and staged import.
- Add source health, coverage, last-known-good, atomic replacement, and deterministic serialization.
Phase 2 - identity and merging
- Add canonical station resolution with external-ID namespaces and review.
- Implement deterministic station/programme merge policies with conflict preservation.
- Add source quality dimensions, overlap/gap analysis, and field-level provenance.
Phase 3 - scheduling and compatibility
- Add unattended refresh, conditional fetching, coverage-aware scheduling, backoff, and degraded mode.
- Add source retirement/replacement, ownership-change validation, and migration workflows aligned with Autonomous Operations — scheduled refresh, multi-guide learning, source drift detection, and zero-touch maintenance #35.
- Add named output compatibility profiles and preview.
- Add GUI setup, health, merge-review, and serialization-report workflows.
Phase 4 - optional provider adapters
- Define adapter eligibility based on lawful access, stability, documentation, and testability.
- Add selected adapters independently behind the provider contract.
- Add capability/version matrices, credential deletion, rate-limit tests, and offline fixtures.
- Ensure removal of every proprietary adapter leaves universal XMLTV ingestion fully functional.
Acceptance criteria
- Local, remote, and compressed XMLTV sources ingest without a proprietary provider account.
- Catalog entries expose geography, horizon, format, identifier scheme, freshness, source family/mirrors, and rights metadata.
- Users can preview a guide's channel manifest and predicted lineup coverage before downloading full programme data when the source permits.
- Fit analysis recommends the smallest adequate guide set and explains missing, extra, conflicting, and duplicated coverage.
- Standard and IPTV-friendly identifier editions remain explicit compatibility choices and never switch silently.
- Mirrors provide delivery resilience without being counted as independent corroborating sources.
- Multiple lineups merge deterministically while preserving field-level provenance and conflicts.
- External station IDs remain authority-namespaced and ambiguous merges require review.
- Renumbering or display-name changes do not break stable station identity when stronger evidence agrees.
- Programme duplicates, corrections, regional variants, gaps, and overlaps have deterministic tested behavior.
- Source health exposes coverage, freshness, validity, gaps, conflicts, and last-known-good state.
- Refresh scheduling respects coverage, conditional requests, rate limits, backoff, cancellation, and provider-safe defaults.
- Failed refreshes or merges never replace validated active guide state.
- XML parsing disables external entities and enforces size, depth, count, duration, and decompression limits.
- Credentials and sensitive URLs are absent from tracked configuration, logs, fixtures, reports, and diagnostics.
- Output profiles are explicit serialization policies and do not mutate canonical facts.
- Identical canonical data and profile version serialize deterministically.
- Proprietary adapters are optional, removable, and covered by sanitized/offline contract fixtures.
- Documentation states access requirements, refresh guidance, retention/deletion behavior, and rights limitations.
- Normal ChannelForge operation remains possible with only user-supplied XMLTV files.
- Stale, archived, retired, successor-operated, ownership-changed, and integrity-suspect sources have distinct tested behavior.
- A changed domain, repository owner, package publisher, signing key, or redirect cannot silently inherit prior trust.
- Source replacement preserves canonical mappings and valid provenance while retaining all applicable rights and attribution restrictions.
Dependencies and cross-links
- Channel Intelligence boundaries, identifiers, and interoperability: Define Channel Intelligence Engine architecture and interoperability roadmap #27
- Explainable matching and evidence inspection: Build Alias Tester and explainable Match Inspector #25
- Event/sports schedules and canonical event model: Event Intelligence Engine — automatic live-event discovery, schedule verification, and learned EPG generation #28-Automatic event discovery — classify channels, resolve identities, and match verified schedules #30
- Event EPG generation and publication: Event EPG delivery — generate, refresh, explain, and publish live-event lineups #32
- Autonomous refresh, multi-guide comparison, drift, last-known-good, and degraded mode: Autonomous Operations — scheduled refresh, multi-guide learning, source drift detection, and zero-touch maintenance #35
- Staged inventory, canonical storage, provenance, and indexed guide queries: High-Performance Data Store — fast identity, guide, event, provenance, and incremental-build indexing #36
- Stream health and provider-incident patterns: Stream Health Evidence — bounded probes, incident detection, and stable fallback ordering #39
- GUI-first path and safe configuration standards: Define the GUI-first product path #10, Secure local configuration workflow for Build-Lineup.ps1 (no editing tracked provider files) #20, Simplicity Standard — mandatory UX, documentation, configuration, and code clarity gate #33
Research references
- Gracenote2XML - scheduled guide retrieval, multiple account/lineup support, XMLTV merging, configurable coverage windows, timezone/output controls, station/callsign ordering, and downstream compatibility switches.
- epg.guru / epg.fyi - browsable country, continent, combined, themed, legacy, and individual-market guides; standard and IPTV-friendly identifier editions; multiple guide horizons; compressed downloads; channel previews; and explicit personal-use restrictions.
- epg.jesmann.com - earlier/catalog-related EPG service supplied by the same maintainer; retain as historical research context and verify any current source metadata before relying on it.
These are research references only, not dependencies or bundled guide sources. As observed, epg.guru and epg.fyi present the same EPG Hub content and should be modeled as related endpoints/mirrors rather than independent evidence. Their published personal-use restriction must be preserved and surfaced; ChannelForge must not include those guides in a commercial distribution or redistribute them without explicit permission.
Definition of done
ChannelForge can safely acquire, validate, normalize, compare, and merge multiple linear EPG sources into deterministic XMLTV output with stable station identity, complete provenance, coverage-aware refresh, last-known-good protection, and explicit client compatibility-without requiring a proprietary guide service or weakening provider access and rights boundaries.
ChannelForge product premise and scope guardrail
ChannelForge exists to make the user's existing content and services easier to discover and use.
Required product test
Before implementation, this issue must answer yes to the following question:
Does this reduce the effort required to find, understand, choose, or open content from services the user already has?
If the answer is no, unclear, or depends on building a parallel provider product, stop and re-scope the issue.
Scope rules
- Aggregate content and capabilities across providers into a clearer discovery experience.
- Use, link to, or delegate to provider-owned systems wherever available; do not recreate provider products.
- Keep providers as the systems of record for content, playback, recordings, schedules, entitlements, accounts, billing, storage, permissions, and service-specific state.
- Limit ChannelForge-owned behavior to what makes aggregation easier: permitted ingestion, normalization, identity matching, source comparison, presentation, routing, explainability, and safe configuration.
- Preserve provider attribution, access controls, terms, content rights, capability differences, and failure boundaries.
- Prefer the smallest integration that removes meaningful user effort. A deep link is better than a new subsystem when it solves the user's problem.
- Do not add setup, decisions, dashboards, automation, or maintenance burden unless the issue removes more complexity than it introduces.
- Default to a simple path for beginners; expose advanced controls only when they provide real value.
Definition-of-done addition
This issue is not complete until evidence shows that it makes a real user task easier without duplicating a provider capability or creating a second system of record.
Integrate before rebuild. Aggregate without taking ownership. Make things easier.
Current implementation status — 2026-08-16
Status: local XMLTV ingestion, deterministic merge/export, and Build-Lineup publication are implemented on GitHub main; broader EPG identity, catalog, freshness, scheduling, and remote transport work remains open.
Implemented on GitHub main at 88b81fb:
- local
.xml, gzip, and single-entry ZIP XMLTV ingestion - XmlReader streaming parsing with DTD/external-entity protections and bounded decompressed input
- Programme and evidence/provenance records
- deterministic source-aware merge and XMLTV export
- Build-Lineup local XMLTV integration with fail-closed publication
Not implemented on main and remaining under this epic:
- canonical station identity/binding and coverage/fit analysis
- source quality, freshness, conflict, and broader EPG behavior
- provider/catalog/guide-adapter concerns, mirrors, and rights
- scheduling/refresh
- downstream compatibility and broader output behavior
- remote XMLTV transport and disposable fetch cache (tracked under XMLTV EPG fetch/parse/cache — streaming parser and disposable fetch cache #89)
Claims in earlier comments about source catalogs, preflight or web surfaces, source-metadata reconciliation, SQLite/cache, or 884/884 validation were produced from dirty or disposable worktrees and are not evidence of mainline implementation.
Activity
Jumpstile commentedon Jul 19, 2026
Tvheadend research note
Tvheadend reinforces these EPG requirements:
ChannelForge should preserve source provenance and expose search through #43 without adopting Tvheadend's in-memory/server architecture.
References: https://docs.tvheadend.org/documentation/configuration/electronic-program-guide and https://docs.tvheadend.org/documentation/development/json-api/api-description/epg
Jumpstile commentedon Jul 19, 2026
Ecosystem research — IPTVnator
IPTVnator v0.22 reinforces: EPG sources scoped per playlist/profile; transparent decoding of compressed XMLTV; explicit source trust; private-network redirect protection during probes; and clear errors when an EPG/catch-up reference cannot resolve. ChannelForge should apply these controls to guide acquisition while keeping playback/catch-up out of scope.
Reference: https://github.com/4gray/iptvnator/releases/tag/v0.22.0
Jumpstile commentedon Jul 19, 2026
Security regression requirements from Dispatcharr v0.28.0
EPG file upload/import must require the appropriate administrative capability and validate the resolved destination beneath the dedicated upload root. Test traversal, absolute paths, encoded separators, Unicode normalization, collisions, symlink/reparse escapes, archive paths, oversized names, and empty filenames. The client-supplied filename is metadata, never an authoritative filesystem path.
Reference: https://github.com/Dispatcharr/Dispatcharr/releases/tag/v0.28.0
Jumpstile commentedon Jul 19, 2026
Dispatcharr v0.28.0 correctness cases
Add regression fixtures for XZ in addition to gzip/zip; database/server timezone differing from configured guide timezone; concurrent full refresh and per-channel parsing; failed per-channel parse preserving prior programmes; progress denominators changing as discovery grows; and cold output rebuilds not blocking unrelated reads. Guide replacement must occur only after the complete candidate result validates.
Reference: https://github.com/Dispatcharr/Dispatcharr/releases/tag/v0.28.0
100 remaining items
Jumpstile commentedon Oct 6, 2026
TVHeadend XMLTV programme-year export — 2026-10-06
<date>containing the four-digitcopyright_yearwhen that value is greater than zero. Missing/nonpositive years remain absent.Jumpstile commentedon Oct 8, 2026
Guide acquisition and metadata integrity — 2026-10-08
Observed UTC: 2026-10-08 13:01. Project/destination: Jumpstile/ChannelForge #40, related #35/#27/#31/#46. Status: NEW; exact mc2xml, ziggogo and PR searches plus current canonical comments found no prior records. These are source/tool evidence, not observed changes to the user's own lineup.
Schedules Direct — October 7 mc2xml notice
The official Schedules Direct homepage now has an October 7, 2026 notice reporting multiple mc2xml problems. SD says mc2xml has never been a supported application and recommends XMLTV Project grabbers: tv_grab_na_dd (legacy DataDirect, US/Canada), tv_grab_zz_sdjson or tv_grab_zz_sdjson_sqlite. No affected mc2xml version or root cause is specified.
Channel/evidence: provider service notice, not a software release. Impact: missing/stale guide acquisition can be a client/grabber failure rather than channel deletion or callsign drift. Preserve last-known-good mappings and flag source freshness. Evaluate supported acquisition paths only under the relevant provider terms and permissions; no automatic migration, new subscription or credential change. Confidence: high for the provider warning; actual user exposure unknown. Existing Jellyfin/older-client warnings remain separate; this notice does not prove they were fixed.
iptv-org/epg — metadata quality changes on master
Channel: development/master commits; no new stable XMLTV Project release is implied. XMLTV/xmltv remains stable v1.4.0 and has no commits in the inspected September 24–October 8 window.
Affected mappings / why: programme/episode evidence and field-level guide completeness. Missing descriptions or implausible episode numbers must not become false canonical episode identities, global aliases, or channel removals.
Recommendation: preserve raw source provenance and mark rejected values explicitly; apply source-specific plausibility checks without assuming these bounds universally. Distinguish transport failure, missing enrichment, valid empty coverage and absent channels. Add fixtures for partial detail failure, legitimate large episode numbers and source-ID leakage.
Classification/priority/scope: Study / compatibility impact / review-needed; medium guide-integrity priority, high false-identity regression value. Confidence high for provider notice and inspected code; runtime applicability unverified. No source access, guide publication, installation or accepted-state changes were performed.
Jumpstile commentedon Oct 20, 2026
Ecosystem evidence — 2026-10-20: m3u-editor guide-preservation regressions
Observed 12:51 UTC. NEW, not found in exact v0.13.5/SHA searches or the 14-day canonical reconciliation. Stable v0.13.5 was published October 19 at 16:29:38 UTC; its experimental companion is not the stable boundary.
First-party implementation evidence:
Adopt regression scenarios / Study implementation, medium priority, source acquisition and guide-binding integrity (#175; related completed fetch slice #89). A failed refresh must not be interpreted as channel removal or erase accepted mappings. Keep prior evidence explicitly stale/failed, not silently current or publishable. Important non-adoption boundary: upstream permits a partially parsed initial guide and treats an explicit item limit as completion; neither behavior relaxes ChannelForge's fail-closed publication contract.
Confidence high in published release and inspected source/tests; tests were not executed here and no ChannelForge defect is claimed. No provider lineup, identity, installation or accepted-state change. Existing taxonomy and milestone retained.
Jumpstile commentedon Oct 22, 2026
Guide acquisition delta — 2026-10-22
Observed 12:48 UTC. First-party m3ue/m3u-editor development source after stable v0.13.5; no runtime test or stable inclusion claimed. NEW after current #40/#35 comments and 14-day reconciliation; extends #35 comment 6316134857 and #40 comment 6291273170.
Why/recommendation: failed acquisition must not erase channel bindings or become removal evidence. Adopt regression scenarios / Study implementation: explicitly separate rolling login windows from daily image limits, record retry reason, preserve last-known-good with stale/error status, and validate completed data before replacement. No assumption that a progress value of 100 proves success.
Priority medium; scope #40 acquisition and #35 recovery, not a demonstrated ChannelForge defect or release blocker. Confidence high inspected source, provider/runtime applicability unverified. Existing taxonomy/milestone retained. No install, credentials, provider or accepted-state changes.
Jumpstile commentedon Oct 22, 2026
Community guide-source discovery — 2026-10-22
Observed 12:51 UTC. iptv-org/epg merged PR #3281 at 00:30 UTC, adding two epg.kanya.io worker listings for US and Kenya:
iptv-org/epg#3281
iptv-org/epg@46da07d
Contributor claims 1,401 US and 157 Kenya channels, XML/GZIP output, daily 06:30 UTC refresh, with US inputs from TV Guide/Pluto/Plex/Xumo and Kenya from epgshare01. Those are community discovery assertions, not independent availability, rights, freshness or provider-carriage verification. The inspected merge adds worker references, not channel identities or a new official upstream API.
Recommendation keep as review-only source-catalog candidates. Before any adoption verify schema, freshness, rights, completeness, rate limits and identity provenance; correlated mirrors must not count as independent corroboration. No access to worker payloads, subscription, installation or ingestion was performed.
Classification Study / review-needed suggestion; low source-discovery priority, scope #40/#35, no release impact. Confidence high in merged registry delta, low in unverified coverage/service assertions. Status NEW after exact-host search and canonical #40/14-day review. Existing taxonomy/milestone retained.
Jumpstile commentedon Oct 23, 2026
Guide release promotion and identity/time-boundary regressions — 2026-10-23
Observed 12:55 UTC. First-party release/source evidence; no runtime certification. CHANGED plus NEW after last-14-day canonical reconciliation and exact-version/SHA searches.
Release boundary: m3u-editor v0.13.6 stable, published Oct22 15:59:30 UTC, now includes the Schedules Direct permanent/transient authentication, rolling-window, token-expiry, failed-batch and prior-guide preservation fixes previously recorded as development-only in #35 comment 6316134857 and #40 comment 6341148268. It also includes the category-move fix in #27 comment 6341158385. This is a stable promotion, not a second discovery or proof of installed recovery. The separately published v0.13.6-exp is experimental.
New development AFTER that release:
Why/recommendation: Adopt regression scenarios / Study implementation for source-scoped merged bindings, valid zero IDs, partial-precision times, midnight/offset/alternate-provider boundaries, multi-cache invalidation and mutable-result pagination. Verify persisted mapping and generated output, not only an "Applied" notification. Do not infer provider removal from missing cached programmes or an unresolved filter. Upstream tests are present, not executed here; date-parser coverage is not claimed to implement every XMLTV date form.
Classification Compatibility impact / Study; medium acquisition/mapping priority, high identity-integrity fixture value. Scope #40, related #175/#27/#31/#35/#59; no demonstrated ChannelForge defect or release blocker. Confidence high inspected source/release facts; actual provider/runtime applicability unknown. Existing taxonomy/milestone retained. No install, credentials, accepted-state or provider change.
Jumpstile commentedon Oct 23, 2026
Community guide adapters: duplicate airings, empty guides and wrong-day data — 2026-10-23
Observed 13:00 UTC. iptv-org/epg default-branch merges today, community-maintained adapter/source evidence, NOT provider-confirmed carriage, complete-guide certification or access/rights approval. NEW after canonical 14-day review and exact PR/source checks.
Recommendation Adopt regression scenarios / Study implementation: stable event-plus-source identity across segments/midnight, repeated airings and deterministic processing order, explicit partial/failed acquisition state, cursor type/time validation, day-column changes and non-playable/future links. Preserve last-known-good guide and distinguish deduplication/off-air filtering from lifecycle removal. Do not treat scraper accessibility or a merge as licensing permission.
Confidence high inspected source diffs; provider behavior, rights, deployed output and runtime unverified. Upstream tests present, not executed here. Classification Study / review-needed suggestion; medium guide-integrity fixture value, low integration priority absent relevant sources. Scope #40/#35/#38/#191; no ChannelForge release blocker, installation, ingestion or accepted-state change. Existing taxonomy/milestone retained.
Jumpstile commentedon Nov 4, 2026
m3u-editor 0.14.0: guide-output consistency and bounded refresh, 2026-11-04
Observed 13:24 UTC. Stable v0.14.0, published November 2, is distinct from the separately published dev/experimental tags. NEW after canonical #35/#40/#121 reconciliation and exact-version/SHA search. First-party release and inspected source; tests were inspected, not run.
Recommendation: Adopt regression scenarios / Study implementation for persisted mapping versus every generated output, migration destination readback, dry-run no-op, DST boundaries, feature-off network silence, stale artwork fallback and reset during queued/in-flight work. Preserve accepted state and source-scoped ownership. Related #27/#35/#121.
Classification Compatibility impact / Study; medium acquisition priority, high preservation fixture value. Confidence high source facts; deployed/provider behavior unverified. No demonstrated ChannelForge defect, new dependency or release blocker. Existing labels/milestone retained. No migration, login, installation or user-state change.
Jumpstile commentedon Nov 4, 2026
Community guide adapter: highlights must not advance the schedule day, 2026-11-04
Observed 13:28 UTC. NEW after recent #40 reconciliation and exact PR/source search. iptv-org/epg PR #3307 merged October 29; inspected source c9dd2bc1, October 24.
The mon-programme-tv.be adapter previously selected every programme-shaped box, including a top-of-page evening highlights block before the full-day grid. Repeated late-night highlights could advance inferred day rollover before the morning schedule. The selector now limits parsing to the full-day sublists; a fixture checks morning, evening and after-midnight entries without duplicated highlights.
Recommendation: Adopt presentation-order and duplicate-summary fixtures alongside October 23's wrong-day-column evidence. HTML display ordering and promotional highlights are not programme-time authority. Validate source date/timezone and chronological bounds, preserve prior valid data on parser uncertainty, and distinguish filtered decorations from cancelled events.
Classification Study / compatibility regression; medium guide-integrity fixture value, low adapter priority absent a relevant source. Community-maintained source change, not broadcaster confirmation, complete-guide certification or access/rights permission. Confidence high inspected patch; tests present but not executed; source runtime/rights unverified. Related #35/#38. No ingestion, installation or accepted-state change; metadata retained.
docs: Phase 1 design note for EPG acquisition and merge (#40) (#221)
feat: report channels that have a guide but no programmes (#40) (#222)
feat: warn when the guide ends within 48 hours of the build (#40) (#223)
feat: name the guide source that failed to import or conflicted (#40) (…
Jumpstile commentedon Nov 14, 2026
Phase 1 progress for this issue, all merged to main:
All three code changes are report-only: no channel is dropped, the build behavior and the published playlist and guide bytes are unchanged, and the frozen contracts (guide-id v1.0, raw digest projections, M3U byte format) are untouched. CI passed on each PR.
Not done: PR 4 of the note (Build-My-Lineup reading several guide files) is skipped until a second guide file exists. Not verified: a real Build-Lineup run on the trial files with these reports. Leaving this issue open until that run is done.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NzHAckAcs78Lu3rv8Gqgrf
fix: use American spelling in the #40 report text, tests and design n…