lib/catissue/migration/migrator.rb
def class_for_name(name)
      begin
        klass = super
        # the 1.1.2 hack described in the rubydoc
        if klass < Annotation::Proxy then
          if klass.name.demodulize == @target_class.hook.name.demodulize then
             klass = @target_class.hook
          else
            raise Jinx::MigrationError.new("Migration configuration class #{name} resolves to the unsupported hidden caTissue 1.1.2 annotation proxy class #{klass}")
          end
        end
        klass
      rescue NameError
        if @target_class < Annotatable then
          @target_class.annotation_class_for_name(name) || raise
        else
          raise
        end
      end
    end
def class_for_name(name)
      begin
        klass = super
        # the 1.1.2 hack described in the rubydoc
        if klass < Annotation::Proxy then
          if klass.name.demodulize == @target_class.hook.name.demodulize then
             klass = @target_class.hook
          else
            raise Jinx::MigrationError.new("Migration configuration class #{name} resolves to the unsupported hidden caTissue 1.1.2 annotation proxy class #{klass}")
          end
        end
        klass
      rescue NameError
        if @target_class < Annotatable then
          @target_class.annotation_class_for_name(name) || raise
        else
          raise
        end
      end
    end
@quirk caTissue In caTissue 1.1.2, the  annotation proxy class and hook class have the same demodulized
   name. This confutes the caRuby migration configuration since the name resolves to the proxy in the
   context of an annotation migration target. The proxy class is caTissue DE cruft that should not be
   exposed to the user. Thus, the class name should resolve to the hook class instead. Work around this
   by a special 1.1.2 hack.

 @param [String] the class name to resolve in the context of this migrator
 @return [Class] the corresponding class
 @raise [NameError] if the name cannot be resolved