This feels like a good change 
We need some way to refer to Box<dyn Foo> tho – personally, I’d call it a “boxed dynamic existential Foo” but “boxed dynamic Foo” works and is shorter.
On #[dyn_capable]
This also sounds like a great idea 
For reference, (which I’m sure you’re aware of), the current way to do:
#[dyn_capable]
trait Foo { ... }
is:
trait Foo { ... }
fn assert_object_safe_foo(_: &Foo) {}
But the current method has the drawback of not being in the documentation, which #[dyn_capable] could / would be.
A different way to do #[dyn_capable] would be via “ConstraintKinds” and auto meta traits:
#[lang_item = "dyn"]
auto meta trait dyn {}
trait Foo {}
// This will be inferred automatically, but we can explicitly state it:
meta impl dyn for Foo {}
// ^-- This will be shown in documentation, and we can lint as well.
// General assertion that a trait is dyn capable:
fn assert_dyn_capable<trait C: dyn>();
#[test]
fn foo_dyn_capable() {
assert_dyn_capable::<Foo>();
}
This however requires ConstraintKinds which we are far away from having. We can also desugar #[dyn_capable] into meta impl dyn for Foo {} at a later stage if need be, so the #[dyn_capable] proposal is forward compatible with this idea.