Its because of the "circular" reference, ie, you have a two paths from t3 back to t1. Because of this we stop the truncate because there is now a non-deterministic path through the tables.
eg
SQL> create table t1(x number primary key)
2 partition by hash(x)
3 ( partition p1 );
Table created.
SQL>
SQL> create table t2(x number primary key, y number not null,
2 constraint t2_fk foreign key(y)
3 references t1
4 on delete cascade)
5 partition by reference(t2_fk);
Table created.
SQL>
SQL> create table t3(x number primary key, y number not null, z number not null,
2 constraint t3_fk1 foreign key(y)
3 references t2
4 on delete cascade
5 --,
6 --constraint t3_fk2 foreign key(z)
7 --references t1
8 --on delete cascade
9 )
10 partition by reference(t3_fk1);
Table created.
SQL>
SQL> insert into t1 values(1);
1 row created.
SQL> insert into t2 values(1,1);
1 row created.
SQL> insert into t3 values(1,1,1);
1 row created.
SQL> commit;
Commit complete.
SQL>
SQL> alter table t1 truncate partition p1 CASCADE;
Table truncated.
SQL> alter table t2 truncate partition p1 CASCADE;
Table truncated.
SQL>
SQL>