When "uplevel" is used to call a method in a different class, it reports that the only available methods are from the calling class, not the target class. In the following example, class A calls a method in class B, which uses "uplevel" to call a method in class A:

    if {[package vsatisfies [package require Tcl] 8.6]} {
        package require Itcl 4.0
    } else {
        package require Itcl
    }
    namespace import itcl::*

    class A {

        variable b

        constructor {} {
            set b [B #auto]
        }

        public method m1 {} {
            $b m3
        }

        public method m2 {} {
            puts m2
        }
    }

    class B {

        public method m3 {} {
            uplevel m2 ;# <--------- Fails in Itcl 4.0
        }
    }

    set a [A #auto]
    $a m1

When the above code is run in Tcl8.5.15/Itcl3.4, it correctly displays:

    m2

When run in Tcl8.6.1/Itcl4.0b7, it throws an error:

    bad option "m2": should be one of...
      b0 cget -option
      b0 configure ?-option? ?value -option value...?
      b0 isa className
      b0 m3

The list of available methods are from class B, not class A. "Uplevel" works correctly with TclOO 1.0.1.