Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
232 commits
Select commit Hold shift + click to select a range
cebf5ec
feat: consolidate native reader labs and Brain v4
niakw Aug 19, 2026
226db12
feat: persist automatic native reader bug backlog
niakw Aug 19, 2026
d3efffd
test: lock automatic native reader backlog lifecycle
niakw Aug 19, 2026
18b1790
feat: sync automatic reader backlog from Android and Desktop
niakw Aug 19, 2026
9a9c329
test: gate automatic native reader backlog
niakw Aug 19, 2026
57ef515
test: enforce native reader backlog workflow topology
niakw Aug 19, 2026
1abd174
fix: persist reader backlog inside Brain memory
niakw Aug 19, 2026
3bc143f
fix: recover backlog across repair-memory rebuilds
niakw Aug 19, 2026
189713f
fix: keep reader backlog in the single Brain state
niakw Aug 19, 2026
e49bf3a
test: cover embedded reader backlog persistence
niakw Aug 19, 2026
4ff6fdb
test: preserve reader backlog across daily Brain cycles
niakw Aug 19, 2026
33869f6
test: include automatic reader backlog in repository suite
niakw Aug 19, 2026
b00dc5a
fix: make Desktop all-provider suite Bash 3.2 safe
niakw Aug 19, 2026
591750a
test: align repository regex source and Bash 3.2 Desktop contract
niakw Aug 19, 2026
55037f5
ci: reuse native launch profiles across route fixtures
niakw Aug 19, 2026
fef5170
test: lock native profile reuse topology
niakw Aug 19, 2026
f58aa5d
ci: execute Android reader routes in one boot
niakw Aug 19, 2026
a5f08ae
ci: trigger native reader rerun after profile fix
niakw Aug 19, 2026
20c684e
ci: rerun native reader proof on fixed single-boot suites
niakw Aug 19, 2026
b35d6e2
ci: bound PR native reader provider and stream scope
niakw Aug 19, 2026
3a5feb7
ci: use bounded fixture providers for PR desktop reader
niakw Aug 19, 2026
6d581cb
ci: cap PR desktop reader stream and playback budgets
niakw Aug 19, 2026
0602658
test: assert reader learning behavior instead of prose
niakw Aug 19, 2026
81c0505
test: align native evidence contract with bounded PR proof
niakw Aug 19, 2026
9b4ed2b
test: separate deep desktop codegen from PR budget mode
niakw Aug 19, 2026
e734c99
fix(native): make frontend capture executable-independent and termina…
niakw Aug 19, 2026
097004e
fix: accept canonical native HTTP terminal frontend evidence
niakw Aug 19, 2026
2245304
fix: canonicalize desktop HTTP terminal evidence
niakw Aug 20, 2026
8ae0679
test: require canonical desktop HTTP terminal phases
niakw Aug 20, 2026
0a5ff15
test: lock canonical HTTP terminal evidence contract
niakw Aug 20, 2026
a241b72
fix: repair HLS and resolve indirect player pages globally
niakw Aug 20, 2026
b855366
test: cover generic HLS and indirect player repair
niakw Aug 20, 2026
5764d80
fix: make repository terminal migration explicit
niakw Aug 20, 2026
f344b9e
test: expose VF recovery fetch trace on failure
niakw Aug 20, 2026
3d67d2c
fix: materialize Brain provider patches before native staging
niakw Aug 20, 2026
bfa8280
fix: install materializer dependencies in native labs
niakw Aug 20, 2026
dd89e32
test: trace Coflix wrapper layer outputs
niakw Aug 20, 2026
b95654a
test: capture VF recovery fetch call stacks
niakw Aug 20, 2026
bacc292
fix: normalize HLS proof in target-media resolver
niakw Aug 20, 2026
529d9de
test: cover target-media HLS normalization fallback
niakw Aug 20, 2026
a9654f9
test: isolate provider globals in VF recovery harness
niakw Aug 20, 2026
6b735de
ci: bound native Desktop PR runtime
niakw Aug 20, 2026
080ef7c
ci: bound native Android PR runtime
niakw Aug 20, 2026
dad1ee8
test: lock bounded native PR runtime
niakw Aug 20, 2026
af4e07c
test: run native PR timeout contract
niakw Aug 20, 2026
214d411
fix: relocate terminal sanitizer after target-media rewrap
niakw Aug 20, 2026
c1aba43
test: lock sanitizer terminal wrapper order
niakw Aug 20, 2026
88e4b17
test: audit full ON OFF provider portfolio
niakw Aug 20, 2026
1db819b
test: run full provider portfolio audit
niakw Aug 20, 2026
603714b
fix: keep sanitizer probe alias local
niakw Aug 20, 2026
f990984
test: reproduce sanitizer probe alias collision
niakw Aug 20, 2026
0df9a01
fix(native): add test-only Android lab transport configurator
niakw Aug 20, 2026
5f60566
fix(native): apply local candidate transport to Mobile test APK
niakw Aug 20, 2026
4ae8b30
fix(native): enable local candidate transport for TV test APK
niakw Aug 20, 2026
865e073
fix(native): enforce local candidate transport in Mobile suite
niakw Aug 20, 2026
0f112f3
test(native): cover shared Android lab transport contract
niakw Aug 20, 2026
2e23f7b
fix(native): bypass runner proxies for local repository readiness
niakw Aug 20, 2026
e182ac7
test(native): prove local repository readiness ignores proxies
niakw Aug 20, 2026
daaa836
fix(native): bypass macOS CI local-network privacy for readiness
niakw Aug 20, 2026
077d571
fix(native): run macOS local-candidate reader with CI loopback privilege
niakw Aug 20, 2026
a67f3c9
fix(native): fail corpus closed on zero execution or playback proof
niakw Aug 20, 2026
a0623c2
fix(brain): count error terminals and native playback proof
niakw Aug 20, 2026
e42c5df
fix(ci): bind desktop native repository to loopback
niakw Aug 20, 2026
57ff679
fix(brain): require real provider execution for complete evidence
niakw Aug 20, 2026
3b5e690
test(brain): reject zero-execution native evidence
niakw Aug 20, 2026
9abe0f8
test(ci): enforce native evidence execution floor
niakw Aug 20, 2026
3563fdb
fix(brain): accept terminal load failures as execution proof
niakw Aug 20, 2026
0ac3ae6
test(tv): retain connected-test gradle failure evidence
niakw Aug 20, 2026
1d84c49
fix(desktop): keep repository frontend phases cache-safe
niakw Aug 20, 2026
7f3ec0d
fix(android): probe two returned streams in PR reader acceptance
niakw Aug 20, 2026
2d6d017
test(native): align desktop evidence codegen with real HTTP proof
niakw Aug 20, 2026
eb518e1
fix(ci): keep Android frontend evidence in realtime
niakw Aug 20, 2026
628d07a
fix(ci): type native request contract map explicitly
niakw Aug 20, 2026
3976f12
fix(ci): preserve native fixture canary order
niakw Aug 20, 2026
46ab8b1
test(ci): pin representative native reader canaries
niakw Aug 20, 2026
4121781
fix(ci): expose sanitized desktop plugin runtime failures
niakw Aug 20, 2026
ba5c2e5
fix(ci): make Android frontend checkpoints realtime
niakw Aug 20, 2026
d19a24a
fix(ci): remove duplicate Android HTTP screenshots
niakw Aug 20, 2026
bac28f2
fix(ci): make optional desktop plugin-error diagnostics fail-safe
niakw Aug 20, 2026
e521f76
test(ci): align reader fixture canary order
niakw Aug 20, 2026
a1da83a
fix(brain): make HLS recovery timer-safe across native runtimes
niakw Aug 20, 2026
0a5ec31
fix(lab): make Android route contract compiler-safe and launch target…
niakw Aug 20, 2026
cfc61ea
fix(lab): preserve canonical anime route contract with explicit lambd…
niakw Aug 20, 2026
e879637
fix(lab): keep desktop evidence marker stable under typed route maps
niakw Aug 20, 2026
42fe90c
test(core): lock timer-safe global HLS wrapper revision
niakw Aug 20, 2026
6c6fba3
fix(labs): make native route contract compile and launch real mobile app
niakw Aug 20, 2026
5db8d04
fix(labs): install official mobile app before device reader
niakw Aug 20, 2026
d713fa4
fix(labs): open macOS native player JVM modules before Gradle starts
niakw Aug 20, 2026
a8dd250
test(labs): lock native reader runtime bootstrap contracts
niakw Aug 20, 2026
530f044
test(labs): run native reader bootstrap regression gate
niakw Aug 20, 2026
93bdbd9
fix(lab): unify PR reader coverage contract
niakw Aug 20, 2026
eb5a5da
test(lab): lock PR reader floor vs deep exhaustive gate
niakw Aug 20, 2026
44a2ff4
test(lab): isolate deep and PR coverage environments
niakw Aug 20, 2026
61a67f3
fix(native): harden generated Kotlin generic types
niakw Aug 20, 2026
c598950
test(native): prevent generated generic inference regressions
niakw Aug 20, 2026
841d069
test(native): require typed generated empty collections
niakw Aug 20, 2026
ada4e02
fix(core): preserve playback headers and signed urls
niakw Aug 20, 2026
9fb82ee
test(core): lock playback header and signed url contract
niakw Aug 20, 2026
43fe685
fix(core): validate full HLS playback chain and fallback
niakw Aug 20, 2026
5ee7506
test(core): prove HLS segments keys headers and ranking
niakw Aug 20, 2026
f717c0c
fix(core): expose ranked playable fallback order
niakw Aug 20, 2026
3128833
fix(native-lab): preserve exact Android playback contract
niakw Aug 20, 2026
7457fc6
fix(native-lab): preserve exact Desktop playback contract
niakw Aug 20, 2026
571650e
test(native-lab): forbid playback header mutation
niakw Aug 20, 2026
f92cd80
test(native-lab): lock typed codegen and two-stream purity
niakw Aug 20, 2026
9b718cf
ci: gate playback core and observational lab purity
niakw Aug 20, 2026
5f75c7b
test(native-lab): enforce observational purity retroactively
niakw Aug 20, 2026
5137a64
test(native-lab): align contract with two-stream PR proof
niakw Aug 20, 2026
8761af1
lab: forbid Android transport relaxation in human UX runs
niakw Aug 20, 2026
d9f8aa7
test: require production Android network policy in native UX lab
niakw Aug 20, 2026
73926b6
lab: keep mobile test hardening network-neutral
niakw Aug 20, 2026
709fd27
lab: remove privileged repository staging fallback
niakw Aug 20, 2026
dbb6c2b
lab: forbid privileged Desktop reader execution
niakw Aug 20, 2026
02a52c8
lab: drive NuvioDesktop production player surface
niakw Aug 20, 2026
8459f06
lab: use production Nuvio Android player paths
niakw Aug 20, 2026
8e81a0c
test: require production Android player entry paths
niakw Aug 20, 2026
66881f9
test: lock native labs to real user playback conditions
niakw Aug 20, 2026
012d703
test: align native codegen with production player UX paths
niakw Aug 20, 2026
c0527b1
test: make native evidence contract human-UX strict
niakw Aug 20, 2026
4869859
brain: never mutate providers from single-client playback failures
niakw Aug 20, 2026
b9316d4
test: keep OS-specific native failures compatibility-only
niakw Aug 20, 2026
4759729
ci: make OS-specific desktop playback failures observational
niakw Aug 20, 2026
91151ed
lab: keep TV player failures observational by default
niakw Aug 20, 2026
f547243
lab: keep Mobile player failures observational by default
niakw Aug 20, 2026
56871ba
lab: keep Desktop player failures observational by default
niakw Aug 20, 2026
f1493eb
core: centralize stream metadata presentation
niakw Aug 21, 2026
a0d34f3
core: preserve stream metadata facts
niakw Aug 21, 2026
575c884
purstream: expose stream facts and leave presentation to Core
niakw Aug 21, 2026
277030f
core: render stream metadata from provider and TMDB facts
niakw Aug 21, 2026
41d123d
test: lock Core stream metadata presentation
niakw Aug 21, 2026
4d2bf3c
automation: add weekly upstream provider discovery
niakw Aug 21, 2026
46c219c
ci: add weekly provider upstream watch
niakw Aug 21, 2026
7c7217e
test: cover upstream provider discovery
niakw Aug 21, 2026
e720111
core: keep stream source badges evidence-only
niakw Aug 21, 2026
fca6a14
test: require evidence-only source badges
niakw Aug 21, 2026
bb56bd2
ci: keep upstream watch outside PR validation topology
niakw Aug 21, 2026
20feef7
brain: scope native reader memory to exact Nuvio runtime
niakw Aug 21, 2026
5607b51
brain: carry exact Nuvio runtime through reader comparison
niakw Aug 21, 2026
cf84ca4
test: prevent Brain memory reuse across Nuvio runtime drift
niakw Aug 21, 2026
8ba9eb1
labs: resolve latest official Nuvio heads with audit context
niakw Aug 21, 2026
c175fd4
labs: run Android readers on latest official Nuvio heads
niakw Aug 21, 2026
2d406bb
labs: run Desktop readers on latest official Nuvio head
niakw Aug 21, 2026
a4ba7e8
brain: persist reader learning per exact client runtime
niakw Aug 21, 2026
79f3de4
labs: restore two-stream PR reader floor
niakw Aug 21, 2026
226f9a3
test: fail closed on unresolved Nuvio lab HEADs
niakw Aug 21, 2026
515a752
ci: cover stream presentation and runtime-scoped Labs contracts
niakw Aug 21, 2026
ef674d8
test: align native architecture guard with current Labs runtime policy
niakw Aug 21, 2026
0f02db6
test: exercise negative reader memory after cross-client confirmation
niakw Aug 21, 2026
3f9bb5f
test: assert negative memory after eligibility without internal row s…
niakw Aug 21, 2026
4ec902a
test: require production Nuvio players instead of parallel ExoPlayer lab
niakw Aug 21, 2026
fd7de8f
core: add shared non-blocking TMDB metadata resolver
niakw Aug 21, 2026
807bfa7
test: cover shared TMDB Core metadata enrichment
niakw Aug 21, 2026
e36ddba
purstream: use shared TMDB metadata in Core presentation
niakw Aug 21, 2026
01b5445
test: align Desktop bootstrap with ordinary JVM policy
niakw Aug 21, 2026
ecf6477
core: materialize shared stream presentation in provider bundles
niakw Aug 21, 2026
4d2e74a
core: retain media safety implementation behind presentation hook
niakw Aug 21, 2026
35508fc
core: make shared presentation the final provider output layer
niakw Aug 21, 2026
1ffb7e7
purstream: expose factual stream metadata before Core presentation
niakw Aug 21, 2026
d7ba2f4
purstream: retain TV identity implementation behind fact adapter
niakw Aug 21, 2026
1760455
purstream: feed explicit facts into identity and shared Core display
niakw Aug 21, 2026
8662f74
core: normalize legacy provider labels into shared display
niakw Aug 21, 2026
9b4b342
test: prove Purstream facts and shared bundle presentation
niakw Aug 21, 2026
8c7de07
test: gate published shared stream presentation
niakw Aug 21, 2026
231877c
test: assert ordinary Desktop privilege at runtime source
niakw Aug 21, 2026
54380a8
test: align exhaustive acceptance with production player and two-stre…
niakw Aug 21, 2026
5b455ff
labs: scope and parallelize official client drift checks
niakw Aug 21, 2026
fb7f302
test: cover targeted parallel Nuvio drift checker contract
niakw Aug 21, 2026
2858a46
test: require shared presentation on every discovery bundle
niakw Aug 21, 2026
398ea19
core: make composed safety and presentation hook byte-idempotent
niakw Aug 21, 2026
898394c
test: lock global provider wrappers to byte-idempotent order
niakw Aug 21, 2026
c4e3128
test: follow composed Purstream identity implementation
niakw Aug 21, 2026
d25d235
fix: make NuvioTV lab bootstrap version agnostic
niakw Aug 21, 2026
dc76c0e
refactor: share version-agnostic TV lab bootstrap
niakw Aug 21, 2026
0e6d4ac
fix: avoid orphaned presentation metadata requests
niakw Aug 21, 2026
e18fbf8
test: guard empty-stream metadata lifecycle
niakw Aug 21, 2026
38285ad
fix: keep TV lab Hilt imports single-owned
niakw Aug 21, 2026
950fe96
test: keep TV Hilt imports single-owned
niakw Aug 21, 2026
93ade18
fix: run Desktop player inside Nuvio production theme
niakw Aug 21, 2026
601d74f
test: preserve Desktop production theme context
niakw Aug 21, 2026
90525aa
test: match generated Desktop exception template
niakw Aug 21, 2026
ce9a8e6
fix: dedupe shared TV lab imports
niakw Aug 21, 2026
73885e0
fix: classify native runtime failures outside providers
niakw Aug 21, 2026
10e8c16
fix: gate Brain learning and prebuild Android labs
niakw Aug 21, 2026
fc21ae9
fix: await native TMDB fetch terminals
niakw Aug 21, 2026
8bc8c0e
fix: prebuild Android reader before emulator boot
niakw Aug 21, 2026
559f3aa
fix: make Android prebuild self-contained
niakw Aug 21, 2026
5d34076
test: require cross-client Brain learning policy
niakw Aug 21, 2026
dc03f81
test: keep single-client reader failures non-learning
niakw Aug 21, 2026
279c179
Stop mutating Nuvio in native reader lab
niakw Aug 21, 2026
f589546
Enforce non-mutating Nuvio human UX lab
niakw Aug 21, 2026
80283c9
Add test-only Nuvio client bootstrap
niakw Aug 21, 2026
df311ad
Fail closed on Nuvio runtime mutations in native labs
niakw Aug 21, 2026
3d677c7
Use shared TV test bootstrap
niakw Aug 21, 2026
db38b3f
Use test-only bootstrap for reader acceptance
niakw Aug 21, 2026
2ae46c0
Audit official Nuvio checkout after test staging
niakw Aug 21, 2026
042627d
Lock native labs to test-only Nuvio mutations
niakw Aug 21, 2026
c102dd6
Lock native human UX lab boundaries
niakw Aug 21, 2026
c1b6928
Lock native reader labs to human UX boundaries
niakw Aug 21, 2026
c23c8a3
Make human UX policy the fail-closed source of truth
niakw Aug 21, 2026
4603430
Bind native checkout audit to locked policy
niakw Aug 21, 2026
60bf963
Gate the locked human UX policy itself
niakw Aug 21, 2026
443055f
Disable production Nuvio client instrumentation
niakw Aug 21, 2026
a7afa86
Disable repository runtime interception in native labs
niakw Aug 21, 2026
89902c4
Disable NuvioDesktop runtime instrumentation
niakw Aug 21, 2026
f179302
Keep one canonical native human UX policy
niakw Aug 21, 2026
f8d9d36
Test that Nuvio runtime instrumenters stay disabled
niakw Aug 21, 2026
29863c3
Audit checkout from disabled client instrumenter
niakw Aug 21, 2026
a693103
Lock harness edits and distinguish UX proof from probes
niakw Aug 21, 2026
8fddeb6
Audit checkout from disabled repository instrumenter
niakw Aug 21, 2026
d26c503
Enforce locked human UX harness policy
niakw Aug 21, 2026
43e18da
Audit checkout from disabled desktop instrumenter
niakw Aug 21, 2026
6d44508
Run human UX harness lock in canonical gate
niakw Aug 21, 2026
6a1c174
Align native evidence contract with non-mutating policy
niakw Aug 21, 2026
9a9ed7f
Update stale bootstrap test for locked UX policy
niakw Aug 21, 2026
7912065
Fix bootstrap test direct shared imports
niakw Aug 21, 2026
dcd6ba0
Persist native lab profiles and blocker memory
niakw Aug 21, 2026
796b50d
Require persistent profiles before native lab changes
niakw Aug 21, 2026
01f117c
Lock persisted native profiles and blocker memory
niakw Aug 21, 2026
a3acb77
labs: unblock real Mobile device-test packaging
niakw Aug 21, 2026
754d29c
ci: gate smoke labs on reaching production player
niakw Aug 21, 2026
6f5f83b
labs: make Desktop smoke block only before player reach
niakw Aug 21, 2026
0580e6f
labs: make TV smoke block only before player reach
niakw Aug 21, 2026
ce35d78
labs: make Mobile smoke block only before player reach
niakw Aug 21, 2026
7e22b61
labs: keep Brain diagnostic in smoke without blocking reader reach
niakw Aug 21, 2026
1d54447
test: lock nonblocking smoke without weakening Brain learning
niakw Aug 21, 2026
a530c83
labs: accept structured repository proof without passive HTTP markers
niakw Aug 21, 2026
70f3a3a
labs: widen TV smoke and preserve nonblocking diagnostics
niakw Aug 21, 2026
ac931d9
labs: widen Mobile smoke and preserve nonblocking diagnostics
niakw Aug 21, 2026
bd62eb4
labs: widen Desktop smoke and preserve nonblocking diagnostics
niakw Aug 21, 2026
ed0a481
labs: gate Desktop smoke only on production player reach
niakw Aug 21, 2026
b130c2c
labs: persist Mobile device-test packaging exception
niakw Aug 21, 2026
835c4e0
test: lock device-test packaging exception to instrumentation only
niakw Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 32 additions & 77 deletions .github/triggers/nuvio-client-lab.json
Original file line number Diff line number Diff line change
@@ -1,104 +1,51 @@
{
"fixtures": [
{
"slug": "interstellar",
"providers": [
"4khdhubnew", "CASTLE", "GOATED", "HDGHARTV", "HINDMOVIEZ", "kisskh", "MOVIEBLAST", "MOVIEBOX", "MOVIX", "playimdb", "VIDLOVE", "ANIME-SAMA", "PURSTREAM", "FLEMMIX", "PAPADUSTREAM", "frenchstream", "streamzo", "MUGIWARASTREAM", "VOIRANIME", "toflix", "sekai", "ANIMESAMA-CO", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "FRENCH-MANGA", "NAKIOS", "VOIRANIME-RIP", "VOSTFREE", "WOOKAFR", "movieshunt", "cineby", "videasy", "VIXSRC", "1SHOWS", "allanime", "vidsrc"
],
"slug": "sinners-2025",
"providers": ["cineby", "movieshunt", "videasy", "VIXSRC", "MOVIESDRIVE", "MOVIESMOD", "4khdhub"],
"fixture": {
"tmdbId": "157336",
"tmdbId": "1233413",
"mediaType": "movie",
"title": "Interstellar",
"year": 2014,
"title": "Sinners",
"year": 2025,
"category": "movie",
"expectedDurationMinutes": 169
"expectedDurationMinutes": 137,
"aliases": ["Sinners"]
}
},
{
"slug": "interstellar",
"providers": ["cineby", "videasy", "VIXSRC", "HINDMOVIEZ", "4khdhub", "CASTLE", "GOATED", "HDGHARTV", "kisskh", "MOVIEBLAST", "MOVIEBOX", "MOVIX", "playimdb", "VIDLOVE", "ANIME-SAMA", "PURSTREAM", "FLEMMIX", "PAPADUSTREAM", "frenchstream", "streamzo", "MUGIWARASTREAM", "VOIRANIME", "toflix", "sekai", "ANIMESAMA-CO", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "FRENCH-MANGA", "NAKIOS", "VOIRANIME-RIP", "VOSTFREE", "WOOKAFR", "movieshunt", "1SHOWS", "allanime", "vidsrc"],
"fixture": {"tmdbId": "157336", "mediaType": "movie", "title": "Interstellar", "year": 2014, "category": "movie", "expectedDurationMinutes": 169}
},
{
"slug": "mon-ninja-et-moi-3",
"providers": [
"CASTLE", "MOVIEBOX", "streamzo", "videasy", "VIDLOVE", "VIXSRC", "ANIME-SAMA", "PURSTREAM", "GOATED", "FLEMMIX", "PAPADUSTREAM", "frenchstream", "MUGIWARASTREAM", "VOIRANIME", "toflix", "sekai", "ANIMESAMA-CO", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "FRENCH-MANGA", "MOVIX", "NAKIOS", "VOIRANIME-RIP", "VOSTFREE", "WOOKAFR", "movieshunt", "HINDMOVIEZ", "cineby", "HDGHARTV", "playimdb", "MOVIEBLAST", "4khdhubnew", "1SHOWS", "allanime", "vidsrc", "kisskh"
],
"fixture": {
"tmdbId": "1215638",
"mediaType": "movie",
"title": "Mon ninja et moi 3",
"year": 2025,
"category": "movie",
"expectedDurationMinutes": 88,
"aliases": ["Mon ninja et moi 3", "Checkered Ninja 3", "Ternet Ninja 3"],
"forbiddenAliases": ["Enola Holmes 2"]
}
"providers": ["cineby", "videasy", "VIXSRC", "HINDMOVIEZ", "CASTLE", "MOVIEBOX", "streamzo", "VIDLOVE", "ANIME-SAMA", "PURSTREAM", "GOATED", "FLEMMIX", "PAPADUSTREAM", "frenchstream", "MUGIWARASTREAM", "VOIRANIME", "toflix", "sekai", "ANIMESAMA-CO", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "FRENCH-MANGA", "MOVIX", "NAKIOS", "VOIRANIME-RIP", "VOSTFREE", "WOOKAFR", "movieshunt", "HDGHARTV", "playimdb", "MOVIEBLAST", "4khdhub", "1SHOWS", "allanime", "vidsrc", "kisskh"],
"fixture": {"tmdbId": "1215638", "mediaType": "movie", "title": "Mon ninja et moi 3", "year": 2025, "category": "movie", "expectedDurationMinutes": 88, "aliases": ["Mon ninja et moi 3", "Checkered Ninja 3", "Ternet Ninja 3"], "forbiddenAliases": ["Enola Holmes 2"]}
},
{
"slug": "breaking-bad-s01e01",
"providers": [
"1SHOWS", "CASTLE", "GOATED", "HINDMOVIEZ", "kisskh", "MOVIX", "PAPADUSTREAM", "persianstremio", "streamzo", "videasy", "VIDLOVE", "VIXSRC", "PURSTREAM", "FLEMMIX", "frenchstream", "toflix", "COFLIX", "DULOURD", "NAKIOS", "WOOKAFR", "DESIFLIX", "cineby", "HDGHARTV", "playimdb", "4khdhubnew", "vidsrc"
],
"fixture": {
"tmdbId": "1396",
"mediaType": "tv",
"title": "Breaking Bad",
"year": 2008,
"season": 1,
"episode": 1,
"category": "tv",
"expectedDurationMinutes": 58
}
"providers": ["HINDMOVIEZ", "cineby", "videasy", "VIXSRC", "1SHOWS", "CASTLE", "GOATED", "kisskh", "MOVIX", "PAPADUSTREAM", "persianstremio", "streamzo", "VIDLOVE", "PURSTREAM", "FLEMMIX", "frenchstream", "toflix", "COFLIX", "DULOURD", "NAKIOS", "WOOKAFR", "DESIFLIX", "HDGHARTV", "playimdb", "4khdhub", "vidsrc"],
"fixture": {"tmdbId": "1396", "mediaType": "tv", "title": "Breaking Bad", "year": 2008, "season": 1, "episode": 1, "category": "tv", "expectedDurationMinutes": 58}
},
{
"slug": "revenant-s01e01",
"providers": [
"CASTLE", "cineby", "DVDPLAY", "GOATED", "HINDMOVIEZ", "kisskh", "MOVIEBOX", "PAPADUSTREAM", "playimdb", "streamzo", "VIXSRC", "PURSTREAM", "FLEMMIX", "frenchstream", "toflix", "COFLIX", "DULOURD", "MOVIX", "NAKIOS", "WOOKAFR", "DESIFLIX", "videasy", "HDGHARTV", "4khdhubnew", "1SHOWS", "vidsrc", "VIDLOVE"
],
"fixture": {
"tmdbId": "210702",
"mediaType": "tv",
"title": "Revenant",
"year": 2023,
"season": 1,
"episode": 1,
"category": "tv",
"expectedDurationMinutes": 77,
"aliases": ["Revenant", "The Devil", "악귀"]
}
"providers": ["cineby", "videasy", "VIXSRC", "HINDMOVIEZ", "CASTLE", "DVDPLAY", "GOATED", "kisskh", "MOVIEBOX", "PAPADUSTREAM", "playimdb", "streamzo", "PURSTREAM", "FLEMMIX", "frenchstream", "toflix", "COFLIX", "DULOURD", "MOVIX", "NAKIOS", "WOOKAFR", "DESIFLIX", "HDGHARTV", "4khdhub", "1SHOWS", "vidsrc", "VIDLOVE"],
"fixture": {"tmdbId": "210702", "mediaType": "tv", "title": "Revenant", "year": 2023, "season": 1, "episode": 1, "category": "tv", "expectedDurationMinutes": 77, "aliases": ["Revenant", "The Devil", "악귀"]}
},
{
"slug": "jujutsu-kaisen-s01e01",
"providers": [
"anikototv", "ANIME-SAMA", "ANIMESAMA-CO", "ANIMEVOSTFR", "hianime", "MOVIX", "MUGIWARASTREAM", "PAPADUSTREAM", "VOIRANIME-RIP", "PURSTREAM", "frenchstream", "streamzo", "VOIRANIME", "toflix", "sekai", "ANIMESULTRA", "ANIMOFLIX", "COFLIX", "DULOURD", "FRENCH-MANGA", "NAKIOS", "VOSTFREE"
],
"fixture": {
"tmdbId": "95479",
"mediaType": "tv",
"title": "Jujutsu Kaisen",
"year": 2020,
"season": 1,
"episode": 1,
"category": "anime",
"expectedDurationMinutes": 24
}
"providers": ["hianime", "anikototv", "ANIME-SAMA", "MOVIX", "ANIMESAMA-CO", "ANIMEVOSTFR", "MUGIWARASTREAM", "PAPADUSTREAM", "VOIRANIME-RIP", "PURSTREAM", "frenchstream", "streamzo", "VOIRANIME", "toflix", "sekai", "ANIMESULTRA", "ANIMOFLIX", "COFLIX", "DULOURD", "FRENCH-MANGA", "NAKIOS", "VOSTFREE"],
"fixture": {"tmdbId": "95479", "mediaType": "tv", "title": "Jujutsu Kaisen", "year": 2020, "season": 1, "episode": 1, "category": "anime", "expectedDurationMinutes": 24}
},
{
"slug": "mushoku-tensei-s01e01",
"providers": [
"anikototv", "ANIME-SAMA", "ANIMESALT", "ANIMESAMA-CO", "hianime", "MOVIX", "MUGIWARASTREAM", "PAPADUSTREAM", "VOIRANIME-RIP", "PURSTREAM", "frenchstream", "streamzo", "VOIRANIME", "toflix", "sekai", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "DULOURD", "FRENCH-MANGA", "NAKIOS", "VOSTFREE"
],
"fixture": {
"tmdbId": "94664",
"mediaType": "tv",
"title": "Mushoku Tensei: Jobless Reincarnation",
"year": 2021,
"season": 1,
"episode": 1,
"category": "anime",
"expectedDurationMinutes": 24,
"aliases": ["Mushoku Tensei", "Mushoku Tensei: Jobless Reincarnation"]
}
"providers": ["hianime", "anikototv", "ANIME-SAMA", "MOVIX", "ANIMESALT", "ANIMESAMA-CO", "MUGIWARASTREAM", "PAPADUSTREAM", "VOIRANIME-RIP", "PURSTREAM", "frenchstream", "streamzo", "VOIRANIME", "toflix", "sekai", "ANIMESULTRA", "ANIMEVOSTFR", "ANIMOFLIX", "COFLIX", "DULOURD", "FRENCH-MANGA", "NAKIOS", "VOSTFREE"],
"fixture": {"tmdbId": "94664", "mediaType": "tv", "title": "Mushoku Tensei: Jobless Reincarnation", "year": 2021, "season": 1, "episode": 1, "category": "anime", "expectedDurationMinutes": 24, "aliases": ["Mushoku Tensei", "Mushoku Tensei: Jobless Reincarnation"]}
}
],
"clients": ["tv", "desktop", "mobile"],
"run_revision": "real-coverage-diagnostic-v11-reactivation-proof",
"run_revision": "native-reader-diagnostics-v14-all-providers-including-inactive",
"policy": {
"target_total": 10,
"minimum_vf": 3,
Expand All @@ -115,5 +62,13 @@
"provider_timeout_ms": 70000,
"retry_provider_timeouts": true,
"retry_provider_timeout_ms": 70000,
"playback_timeout_ms": 18000
"playback_timeout_ms": 18000,
"native_reader_acceptance": {
"provider_scope": "all",
"include_disabled": true,
"stream_scope": "all",
"primary_fixture": "sinners-2025",
"regression_fixtures": ["interstellar", "mon-ninja-et-moi-3", "breaking-bad-s01e01", "revenant-s01e01", "jujutsu-kaisen-s01e01", "mushoku-tensei-s01e01"],
"publication_requires_fresh_reader_proof": true
}
}
25 changes: 8 additions & 17 deletions .github/workflows/brain-learning-lab.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ jobs:
timeout-minutes: 55
permissions:
contents: read
actions: read
steps:
- name: Checkout trusted production baseline with history
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
Expand Down Expand Up @@ -69,20 +68,6 @@ jobs:
fi
node -e "const x=require('./brain-learning-input/previous.json'); if(x.productionWritesAllowed===true||x.publicationAllowed===true) process.exit(1)"

- name: Import latest official native-client feedback when available
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
set -euo pipefail
mkdir -p brain-learning-input/native
RUN_ID="$(gh run list --workflow native-corpus-device-lab.yml --branch main --limit 20 --json databaseId,status --jq '[.[] | select(.status=="completed")][0].databaseId // empty' || true)"
if [ -n "$RUN_ID" ]; then
gh run download "$RUN_ID" --name "native-corpus-engine-summary-$RUN_ID" --dir brain-learning-input/native || true
fi
[ -f brain-learning-input/native/native-corpus-summary.json ] || printf '{}\n' > brain-learning-input/native/native-corpus-summary.json
[ -f brain-learning-input/native/provider-portfolio.json ] || printf '{}\n' > brain-learning-input/native/provider-portfolio.json

- name: Materialize historical 5.20.63 audit anchor from Git history
shell: bash
run: |
Expand Down Expand Up @@ -149,14 +134,20 @@ jobs:
--repair-report brain-sandbox/health-output/repair-report.json \
--historical-training brain-sandbox/historical-training.json \
--previous-state brain-learning-input/previous.json \
--native-summary brain-learning-input/native/native-corpus-summary.json \
--provider-portfolio brain-learning-input/native/provider-portfolio.json \
--overrides provider-overrides.json
node engine_v2/tests/repair-brain.test.mjs
node engine_v2/tests/recipe-memory.test.mjs
node engine_v2/tests/learning-lab-memory.test.mjs
python -m py_compile scripts/run_brain_learning_sandbox.py scripts/build_brain_repair_proposal.py
node -e "const x=require('./brain-learning-output/latest.json'); if(x.productionWritesAllowed!==false||x.publicationAllowed!==false||x.sandboxExecutedProviders!==true) process.exit(1)"
node - <<'NODE'
const fs=require('fs');
const previous=JSON.parse(fs.readFileSync('brain-learning-input/previous.json','utf8'));
const next=JSON.parse(fs.readFileSync('brain-learning-output/latest.json','utf8'));
if (previous.nativeReaderRepairMemory && JSON.stringify(next.nativeReaderRepairMemory)!==JSON.stringify(previous.nativeReaderRepairMemory)) {
throw new Error('native reader repair memory was not preserved across Brain sandbox learning');
}
NODE
if grep -Eiq 'https?://|authorization[=:]|cookie[=:]|token[=:]' brain-learning-output/latest.json; then
echo 'persistent Brain state contains forbidden raw endpoint/credential material' >&2
exit 1
Expand Down
133 changes: 133 additions & 0 deletions .github/workflows/canonical-media-types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
name: Canonical media type, playback core and native evidence gate

on:
pull_request:
branches: [main]
paths:
- "provider_catalog.json"
- "manifest.json"
- "vf/manifest.json"
- "package.json"
- "package-lock.json"
- ".github/triggers/nuvio-client-lab.json"
- "automation/native-human-ux-policy.json"
- "engine_v2/src/**"
- "engine_v2/tests/**"
- "engine_v2/scripts/diagnose-native-reader.mjs"
- "engine_v2/scripts/diagnose-native-media-capabilities.mjs"
- "engine_v2/scripts/learning-lab.mjs"
- "engine_v2/scripts/watch-upstream-providers.mjs"
- "scripts/check_nuvio_client_upstreams.py"
- "scripts/resolve_nuvio_lab_heads.py"
- "scripts/scope_native_reader_learning_runtime.py"
- "scripts/prepare_native_corpus_validation.py"
- "scripts/native_player_diagnostics_codegen.py"
- "scripts/augment_native_corpus_request_contract.py"
- "scripts/augment_native_provider_loading.py"
- "scripts/prepare_native_candidate_repository.py"
- "scripts/resolve_native_repository.sh"
- "scripts/native_evidence_completeness.cjs"
- "scripts/analyze_native_corpus_collection.cjs"
- "scripts/analyze_native_corpus_results.cjs"
- "scripts/analyze_native_media_type_capabilities.cjs"
- "scripts/gate_native_reader_result.cjs"
- "scripts/gate_native_reader_coverage.cjs"
- "scripts/instrument_native_client_evidence.py"
- "scripts/instrument_native_repository_http_evidence.py"
- "scripts/instrument_native_desktop_evidence.py"
- "scripts/capture_native_device_frontend.sh"
- "scripts/watch_native_device_frontend.sh"
- "scripts/augment_native_desktop_player.py"
- "scripts/complete_native_desktop_frontend_phases.py"
- "scripts/run_native_corpus_tv_suite.sh"
- "scripts/run_native_corpus_mobile_suite.sh"
- "scripts/run_native_corpus_desktop_suite.sh"
- "scripts/merge_native_reader_repair_learning.py"
- "scripts/merge_native_reader_backlog.py"
- ".github/workflows/native-android-route-reader.yml"
- ".github/workflows/native-desktop-reader-acceptance.yml"
- ".github/workflows/native-reader-learning-sync.yml"
- ".github/workflows/brain-learning-lab.yml"
- "tests/canonical_media_types_test.py"
- "tests/native_evidence_contract_test.py"
- "tests/native_evidence_completeness_test.cjs"
- "tests/native_evidence_codegen_pipeline_test.py"
- "tests/native_player_diagnostics_codegen_test.py"
- "tests/native_lab_observational_purity_test.py"
- "tests/native_human_ux_policy_lock_test.py"
- "tests/native_repository_cache_contract_test.py"
- "tests/native_repository_http_instrumentation_test.py"
- "tests/native_media_type_capability_test.py"
- "tests/native_reader_learning_memory_test.py"
- "tests/native_reader_runtime_scope_test.py"
- "tests/nuvio_lab_head_resolver_test.py"
- "tests/native_reader_backlog_test.py"
- ".github/workflows/canonical-media-types.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: canonical-media-types-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
canonical-media-types:
runs-on: ubuntu-latest
timeout-minutes: 18
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with: {persist-credentials: false}
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020
with: {node-version: "24", package-manager-cache: false}
- name: Install exact dependency tree
run: npm ci --ignore-scripts --no-audit --no-fund
- name: Audit non-optional production dependencies
run: npm audit --audit-level=high --omit=optional
- name: Verify upgraded runtime imports
run: node -e "require('axios'); require('cheerio'); console.log('dependency imports ok')"
- name: Validate canonical catalog and manifest projections
run: python3 tests/canonical_media_types_test.py
- name: Validate canonical stream contract
run: node engine_v2/tests/contracts.test.mjs
- name: Validate shared stream presentation and TMDB fallback
run: node engine_v2/tests/stream-presentation.test.mjs
- name: Validate weekly upstream provider comparator
run: node engine_v2/tests/upstream-provider-watch.test.mjs
- name: Validate deep HLS playback chain and ranking
run: node engine_v2/tests/media-validator.test.mjs
- name: Validate resolver Core
run: node engine_v2/tests/resolver-core.test.mjs
- name: Validate Brain v4 reader causality
run: node engine_v2/tests/native-reader-brain-v4.test.mjs
- name: Validate exact official Nuvio Lab HEAD resolver
run: python3 tests/nuvio_lab_head_resolver_test.py
- name: Validate full native evidence architecture
run: python3 tests/native_evidence_contract_test.py
- name: Validate native evidence execution floor
run: node tests/native_evidence_completeness_test.cjs
- name: Validate native reader codegen purity
run: python3 tests/native_player_diagnostics_codegen_test.py
- name: Execute native evidence Kotlin codegen pipeline
run: python3 tests/native_evidence_codegen_pipeline_test.py
- name: Audit observational purity of native labs
run: python3 tests/native_lab_observational_purity_test.py
- name: Enforce locked human UX harness policy
run: python3 tests/native_human_ux_policy_lock_test.py
- name: Validate repository HTTP instrumentation contracts
run: python3 tests/native_repository_http_instrumentation_test.py
- name: Validate persistent native repository cache safety
run: python3 tests/native_repository_cache_contract_test.py
- name: Validate repository and reader Brain diagnosis
run: node engine_v2/tests/native-reader-diagnosis.test.mjs
- name: Validate native reader repair-memory merge
run: python3 tests/native_reader_learning_memory_test.py
- name: Validate reader memory isolation across Nuvio runtime drift
run: python3 tests/native_reader_runtime_scope_test.py
- name: Validate automatic native reader bug backlog
run: python3 tests/native_reader_backlog_test.py
- name: Validate Brain cross-day reader-memory preservation
run: node engine_v2/tests/learning-lab-memory.test.mjs
- name: Validate non-blocking tv/anime capability learning
run: python3 tests/native_media_type_capability_test.py
Loading
Loading