The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

{
    package TestClass::First;
    use Moose;
    use MooseX::TrackDirty::Attributes;

    has foo => (

        traits  => [ TrackDirty ],
        is      => 'rw',
        isa     => 'Str',
        default => 'default',
    );

    # TODO check for extension in the same class (e.g. extending a role's att)
}
{
    package TestClass;
    use Moose;

    extends 'TestClass::First';

    has '+foo' => (

        traits  => [ 'String' ],
        handles => {

            foo_length => 'length',
            foo_append => 'append',
        },
    );
}

use Test::More;
use Test::Moose::More 0.005;

require 't/funcs.pm' unless eval { require funcs };

do_tests();

done_testing;

__END__

note q{attribute foo's metarole classes...};
validate_class do { TestClass->meta->application_to_class_class()} => (
    does => [ qw{
        MooseX::TrackDirty::Attributes::Trait::Role::Application::ToClass
    } ],
);