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

EXTERNALIZE CORE ATTRIBUTES

Right now you can't initialize a Zilla without a few attributes like name, author, etc. These should be autodetectable, meaning they should be able to wait until plugin initialization is complete -- or at least underway. (...but probably until it's complete. It should be possible, for example, to defer decision on name and version until FileGather-ing is done.)

STRATEGY?

I think what I want is some simple attribute traits:

has name => (
  ...
  traits => [ qw(WORM Demanded) ],
);

WORM is what it sounds like. Once set, the value cannot be changed. The writer throws if the predicate returns true.

Demanded means that the accessor is fatal if the predicate is false.

Together, it means you must initialize the value before reading it, and you must not try to change it once initialized.