The :U smiley has taken the place of :T over the years, and the only difference specified between them (where :U accepts Failures but :T does not) doesn't appear to make sense anymore. Now :U is spec'd to mean type objects, and :D means instances. The only potentially significant change for rakudo is the change from :T to :U as the default smiley for method new's invocant, but depending on existing implementation may already be how it works.
This commit removes quite a bit of cruft from the pre-S15 days, and additonally reformats the code blocks so that they stand out more in the file, and for longer function signatures, makes them less crowded. The only functional changes in this commit is the removal of the special exception for C<&tcuc> in the C<wordcase> method (since C<&tcuc> apparently doesn't exist), and a clarification for sprintf that the '%' directive can only appear as a literal '%%' (both bringing it in line with C's printf behavior and ensuring nonsense like '%1$+*v0.5%' isn't accepted). Ideally this synopsis would talk about the role(s) shared by the string types, instead of focusing on C<Str> as a model for other types. However the nature of these potential roles isn't clear enough yet to make that kind of change to this.
This matches behavior seen in implementation and relied upon in the wild. There are various examples of existing code making use of the fact every block has an implicit C<$_>, which it sets so it can use C<when> and C<default>. This means trying to identify a topicalizer in a clever way, or even complain in the absence of one, breaks a common and useful pattern (yes, I tried it!) Added some notes on the semantics of nested when/default, also bringing the design doc in line with existing and tested behavior.