NiakVIO maintains, reconstructs and validates Nuvio providers. Contributions are welcome when they preserve the current Provider v3 ownership model and the reliability of published manifests.
A change must not:
- introduce credentials, cookies, private tokens or personal data ;
- include copyrighted media files ;
- weaken security/network guards ;
- create a second publication pipeline or canonical manifest ;
- hand-edit generated provider bundles as durable source ;
- seed reconstruction from published/upstream Provider JS ;
- activate/disable/quarantine providers from weak evidence ;
- patch a Nuvio client inside a Lab merely to obtain a green result.
Durable provider code is reconstructed from:
ProviderBase v3 + structured DATA/static knowledge + owned PROVIDER.* / CORE.* Lego
The canonical ProviderBase marker is NIAKVIO_PROVIDER_BASE_OWNED_V3.
Managed changes use STARTFIX/CLOSEFIX and FIXDATA where required. providers/*.js is generated/content-addressed runtime output, not a source file to maintain manually.
Full reconstruction uses .github/workflows/provider-v3-reconstruct-all.yml on a non-main branch and must pass reverse byte-identical reconstruction.
Do not confuse semantic capability and launch transport.
canonicalSupportedTypes= real catalogue capability ;supportedTypes= Nuvio launch compatibility.
An anime-only provider may require:
canonicalSupportedTypes = [anime]
supportedTypes = [anime, tv, movie]
tv and movie are transport compatibility for episodic anime and anime films. They do not authorize ordinary non-anime movie/TV content.
Canonical route DATA belongs to:
provider.model.routeData
When fixing or onboarding a provider, preserve when known:
- request role ;
- GET/POST/etc. ;
- body encoding and field names ;
Referer/Originrequirements ;- response type ;
- dynamic placeholders ;
- title/TMDB/IMDb/season/episode identity dependencies ;
- provenance and confidence.
Do not turn filenames, assets, HTML attributes, admin routes or unrelated endpoints into executable provider routes.
A hub is a discovery signal for the current service address. It does not replace the provider business protocol.
A provider change should preserve:
- capability gate before provider network work ;
- TMDB calls only when required by the plan ;
- correct movie/tv/anime identity ;
- correct season/episode ;
- fail-closed empty result rather than wrong media ;
- stream-level failures scoped to the stream, not automatic provider-wide disablement.
A successful HTTP response alone is not a functional provider proof.
Minimum repository setup:
npm ci --ignore-scripts --no-audit --no-fund
npm test
node engine_v2/tests/provider-catalog.test.mjsAdd targeted regression coverage for the root cause when practical.
Provider/runtime changes should validate, when relevant:
- title/identity ;
- media type ;
- season/episode ;
- route/API method/body/headers ;
- player/embed extraction ;
- final media shape ;
- language/quality metadata ;
- rejection of false positives.
Mocked fixtures alone are not enough to claim current live provider health.
There are exactly five first-class targets:
- TV Android ;
- Mobile Android ;
- Mobile iOS ;
- Desktop macOS ;
- Desktop Windows.
Platform evidence is independent.
Native Labs are observational. Test-only plumbing may expose the official path, but a Lab contribution must not modify Nuvio production behavior or work around an upstream compile/build/dependency/packaging/runtime/player bug to make the run green.
If NuvioTV/NuvioMobile/NuvioDesktop itself fails, preserve that as external evidence and fix NiakVIO only when the cause is demonstrably NiakVIO-owned.
.github/workflows/sync.yml is CORE - Verify & Publish.
Quick and Deep verify/observe. They do not repair or reconstruct provider code.
Do not add provider mutation, adaptive repair or reconstruction back into Quick/Deep.
brain-learning-lab.yml is the sandbox for bounded NiakVIO repair experiments. Learning output is reviewable proposal material, not direct publication authority.
Disabled providers remain eligible for diagnosis; disabled does not mean forgotten.
domain-refresh.yml is the only routine provider CONFIG maintenance exception:
- validated official hub/address ;
official_siteonly ;- no API/route/Core change ;
- provider structure unchanged outside CONFIG ;
- content-addressed outputs/hashes refreshed consistently.
Do not manually broaden Domain Refresh to generic repair.
Terser is forbidden.
scripts/provider_v3_minimizer.py must preserve provider envelopes, managed markers, Core boundary, execution order, literals and ASI-sensitive newlines. Do not add identifier renaming, expression reordering, literal folding or generic text replacement.
Do not contribute code that:
- executes downloaded remote code as trusted source ;
- bypasses SSRF/network guards ;
- disables domain validation ;
- exposes credentials ;
- weakens worker/resource limits ;
- accepts arbitrary unsafe protocols ;
- uses generic regex HTML stripping where the security contract forbids it ;
- disables CodeQL/tests to hide a finding.
Generated/upstream snapshots remain untrusted even when a static-analysis finding is classified as vendored/generated.
Keep PRs focused and include:
- root cause ;
- affected providers/components ;
- files changed ;
- tests executed ;
- live/native evidence when applicable ;
- known limitations.
Do not mix unrelated provider-specific patches unless one shared Core/architecture root cause explains them.
A useful broken-provider report includes:
- provider ID/name ;
- manifest ;
- client/device ;
- movie/tv/anime ;
- title/year ;
- season/episode when relevant ;
- observed result/error ;
- approximate test date/time ;
- sanitized logs.
Never publish cookies, tokens or private information.
Domains, APIs and players change. Avoid statements like “permanently fixed”. State what was tested and on which client/device/date.
A missing proof is not a success, but it is not automatically proof of death either.